r300: DRM version: 2.10.0, Name: ATI RV350, ID: 0x4152, GB: 1, Z: 1 r300: GART size: 253 MB, VRAM size: 128 MB r300: AA compression RAM: YES, Z compression RAM: YES, HiZ RAM: NO 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 '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 'register rename' # 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]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0]; 2: 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 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0]; 2: 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=0************************************* 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], 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 '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 'register rename' # 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=1************************************* 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, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: MUL OUT[0], TEMP[0], IN[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[1].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=2************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.w t0.w 0.0 op: 40040509 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 '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 'register rename' # 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=3************************************* 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 FLT32 { 0.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].0000; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].0000; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].0000; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0000; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].0000; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0000; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0000; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0000; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0000; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0000; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0], none.0000; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0], none.0000; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0], none.0000; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV_SAT output[0], none.0000; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.0, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.0, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.0, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.0, src0.1, src0.0 pc=4************************************* 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: 40050a94 w: 0.0 1.0 0.0 op: 40040890 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[2], PERSPECTIVE DCL IN[2], GENERIC[4], PERSPECTIVE DCL IN[3], GENERIC[5], PERSPECTIVE DCL IN[4], GENERIC[6], PERSPECTIVE DCL IN[5], GENERIC[7], 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[3..5] DCL TEMP[0..11] IMM FLT32 { 0.0010, 0.0000, 1.0000, 0.1000} IMM FLT32 { 2.0000, -1.0000, 8.0000, 0.0000} 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: SUB TEMP[1].w, TEMP[0].wwww, IMM[0].xxxx 2: KIL TEMP[1].wwww 3: TEX TEMP[2], IN[2], SAMP[1], 2D 4: MOV TEMP[2].x, TEMP[2].wwww 5: MAD TEMP[2].xy, TEMP[2], IMM[1].xxxx, IMM[1].yyyy 6: MOV TEMP[2].z, IMM[0].yyyy 7: DP3 TEMP[3].x, TEMP[2], TEMP[2] 8: ADD TEMP[3].x, IMM[0].zzzz, -TEMP[3].xxxx 9: RSQ TEMP[3].x, TEMP[3].xxxx 10: RCP TEMP[2].z, TEMP[3].xxxx 11: DP3 TEMP[4].x, IN[3], TEMP[2] 12: DP3 TEMP[4].y, IN[4], TEMP[2] 13: DP3 TEMP[4].z, IN[5], TEMP[2] 14: TEX TEMP[5], TEMP[4], SAMP[2], CUBE 15: MUL TEMP[5], TEMP[5], CONST[3] 16: MUL TEMP[5], TEMP[5], IMM[1].xxxx 17: MUL TEMP[6], TEMP[0], CONST[4] 18: MUL TEMP[6], TEMP[5], TEMP[6] 19: DP3 TEMP[3], IN[1], TEMP[4] 20: ADD TEMP[3], TEMP[3], TEMP[3] 21: MAD TEMP[7], TEMP[4], TEMP[3].xxxx, -IN[1] 22: TEX TEMP[8], TEMP[7], SAMP[3], CUBE 23: TEX TEMP[9], IN[2], SAMP[4], 2D 24: ADD TEMP[1], TEMP[9], TEMP[9] 25: MAD TEMP[6], TEMP[1], TEMP[8], TEMP[6] 26: MUL TEMP[3], TEMP[6], IN[0] 27: MOV OUT[0].w, TEMP[0].wwww 28: DP3 TEMP[1], IN[1], TEMP[4] 29: ADD TEMP[1], IMM[0].zzzz, -TEMP[1] 30: MUL TEMP[1], TEMP[1], TEMP[1] 31: MUL TEMP[1], TEMP[1], TEMP[1] 32: MUL TEMP[1], TEMP[1], CONST[5] 33: MUL TEMP[10], TEMP[1], TEMP[5] 34: MAD TEMP[10], TEMP[1], IMM[0].wwww, TEMP[10] 35: TEX TEMP[11], IN[2], SAMP[5], 2D 36: MUL_SAT TEMP[5], TEMP[5], IMM[1].zzzz 37: MAD TEMP[1], TEMP[11], -TEMP[5].xxxx, TEMP[11] 38: MAX TEMP[1], TEMP[1], IMM[0].yyyy 39: ADD TEMP[10], TEMP[1], TEMP[10] 40: ADD OUT[0].xyz, TEMP[3], TEMP[10] 41: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: KIL temp[1].wwww; 3: TEX temp[2], input[2], 2D[1]; 4: MOV temp[2].x, temp[2].wwww; 5: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 6: MOV temp[2].z, const[6].yyyy; 7: DP3 temp[3].x, temp[2], temp[2]; 8: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 9: RSQ temp[3].x, temp[3].xxxx; 10: RCP temp[2].z, temp[3].xxxx; 11: DP3 temp[4].x, input[3], temp[2]; 12: DP3 temp[4].y, input[4], temp[2]; 13: DP3 temp[4].z, input[5], temp[2]; 14: TEX temp[5], temp[4], CUBE[2]; 15: MUL temp[5], temp[5], const[3]; 16: MUL temp[5], temp[5], const[7].xxxx; 17: MUL temp[6], temp[0], const[4]; 18: MUL temp[6], temp[5], temp[6]; 19: DP3 temp[3], input[1], temp[4]; 20: ADD temp[3], temp[3], temp[3]; 21: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 22: TEX temp[8], temp[7], CUBE[3]; 23: TEX temp[9], input[2], 2D[4]; 24: ADD temp[1], temp[9], temp[9]; 25: MAD temp[6], temp[1], temp[8], temp[6]; 26: MUL temp[3], temp[6], input[0]; 27: MOV output[0].w, temp[0].wwww; 28: DP3 temp[1], input[1], temp[4]; 29: ADD temp[1], const[6].zzzz, -temp[1]; 30: MUL temp[1], temp[1], temp[1]; 31: MUL temp[1], temp[1], temp[1]; 32: MUL temp[1], temp[1], const[5]; 33: MUL temp[10], temp[1], temp[5]; 34: MAD temp[10], temp[1], const[6].wwww, temp[10]; 35: TEX temp[11], input[2], 2D[5]; 36: MUL_SAT temp[5], temp[5], const[7].zzzz; 37: MAD temp[1], temp[11], -temp[5].xxxx, temp[11]; 38: MAX temp[1], temp[1], const[6].yyyy; 39: ADD temp[10], temp[1], temp[10]; 40: ADD output[0].xyz, temp[3], temp[10]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: KIL temp[1].wwww; 3: TEX temp[2], input[2], 2D[1]; 4: MOV temp[2].x, temp[2].wwww; 5: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 6: MOV temp[2].z, const[6].yyyy; 7: DP3 temp[3].x, temp[2], temp[2]; 8: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 9: RSQ temp[3].x, temp[3].xxxx; 10: RCP temp[2].z, temp[3].xxxx; 11: DP3 temp[4].x, input[3], temp[2]; 12: DP3 temp[4].y, input[4], temp[2]; 13: DP3 temp[4].z, input[5], temp[2]; 14: TEX temp[5], temp[4], CUBE[2]; 15: MUL temp[5], temp[5], const[3]; 16: MUL temp[5], temp[5], const[7].xxxx; 17: MUL temp[6], temp[0], const[4]; 18: MUL temp[6], temp[5], temp[6]; 19: DP3 temp[3], input[1], temp[4]; 20: ADD temp[3], temp[3], temp[3]; 21: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 22: TEX temp[8], temp[7], CUBE[3]; 23: TEX temp[9], input[2], 2D[4]; 24: ADD temp[1], temp[9], temp[9]; 25: MAD temp[6], temp[1], temp[8], temp[6]; 26: MUL temp[3], temp[6], input[0]; 27: MOV output[0].w, temp[0].wwww; 28: DP3 temp[1], input[1], temp[4]; 29: ADD temp[1], const[6].zzzz, -temp[1]; 30: MUL temp[1], temp[1], temp[1]; 31: MUL temp[1], temp[1], temp[1]; 32: MUL temp[1], temp[1], const[5]; 33: MUL temp[10], temp[1], temp[5]; 34: MAD temp[10], temp[1], const[6].wwww, temp[10]; 35: TEX temp[11], input[2], 2D[5]; 36: MUL_SAT temp[5], temp[5], const[7].zzzz; 37: MAD temp[1], temp[11], -temp[5].xxxx, temp[11]; 38: MAX temp[1], temp[1], const[6].yyyy; 39: ADD temp[10], temp[1], temp[10]; 40: ADD output[0].xyz, temp[3], temp[10]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: KIL temp[1].wwww; 3: TEX temp[2], input[2], 2D[1]; 4: MOV temp[2].x, temp[2].wwww; 5: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 6: MOV temp[2].z, const[6].yyyy; 7: DP3 temp[3].x, temp[2], temp[2]; 8: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 9: RSQ temp[3].x, temp[3].xxxx; 10: RCP temp[2].z, temp[3].xxxx; 11: DP3 temp[4].x, input[3], temp[2]; 12: DP3 temp[4].y, input[4], temp[2]; 13: DP3 temp[4].z, input[5], temp[2]; 14: TEX temp[5], temp[4], CUBE[2]; 15: MUL temp[5], temp[5], const[3]; 16: MUL temp[5], temp[5], const[7].xxxx; 17: MUL temp[6], temp[0], const[4]; 18: MUL temp[6], temp[5], temp[6]; 19: DP3 temp[3], input[1], temp[4]; 20: ADD temp[3], temp[3], temp[3]; 21: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 22: TEX temp[8], temp[7], CUBE[3]; 23: TEX temp[9], input[2], 2D[4]; 24: ADD temp[1], temp[9], temp[9]; 25: MAD temp[6], temp[1], temp[8], temp[6]; 26: MUL temp[3], temp[6], input[0]; 27: MOV output[0].w, temp[0].wwww; 28: DP3 temp[1], input[1], temp[4]; 29: ADD temp[1], const[6].zzzz, -temp[1]; 30: MUL temp[1], temp[1], temp[1]; 31: MUL temp[1], temp[1], temp[1]; 32: MUL temp[1], temp[1], const[5]; 33: MUL temp[10], temp[1], temp[5]; 34: MAD temp[10], temp[1], const[6].wwww, temp[10]; 35: TEX temp[11], input[2], 2D[5]; 36: MUL_SAT temp[5], temp[5], const[7].zzzz; 37: MAD temp[1], temp[11], -temp[5].xxxx, temp[11]; 38: MAX temp[1], temp[1], const[6].yyyy; 39: ADD temp[10], temp[1], temp[10]; 40: ADD output[0].xyz, temp[3], temp[10]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: KIL temp[1].wwww; 3: TEX temp[2], input[2], 2D[1]; 4: MOV temp[2].x, temp[2].wwww; 5: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 6: MOV temp[2].z, const[6].yyyy; 7: DP3 temp[3].x, temp[2], temp[2]; 8: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 9: RSQ temp[3].x, temp[3].xxxx; 10: RCP temp[2].z, temp[3].xxxx; 11: DP3 temp[4].x, input[3], temp[2]; 12: DP3 temp[4].y, input[4], temp[2]; 13: DP3 temp[4].z, input[5], temp[2]; 14: TEX temp[5], temp[4], CUBE[2]; 15: MUL temp[5], temp[5], const[3]; 16: MUL temp[5], temp[5], const[7].xxxx; 17: MUL temp[6], temp[0], const[4]; 18: MUL temp[6], temp[5], temp[6]; 19: DP3 temp[3], input[1], temp[4]; 20: ADD temp[3], temp[3], temp[3]; 21: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 22: TEX temp[8], temp[7], CUBE[3]; 23: TEX temp[9], input[2], 2D[4]; 24: ADD temp[1], temp[9], temp[9]; 25: MAD temp[6], temp[1], temp[8], temp[6]; 26: MUL temp[3], temp[6], input[0]; 27: MOV output[0].w, temp[0].wwww; 28: DP3 temp[1], input[1], temp[4]; 29: ADD temp[1], const[6].zzzz, -temp[1]; 30: MUL temp[1], temp[1], temp[1]; 31: MUL temp[1], temp[1], temp[1]; 32: MUL temp[1], temp[1], const[5]; 33: MUL temp[10], temp[1], temp[5]; 34: MAD temp[10], temp[1], const[6].wwww, temp[10]; 35: TEX temp[11], input[2], 2D[5]; 36: MUL_SAT temp[5], temp[5], const[7].zzzz; 37: MAD temp[1], temp[11], -temp[5].xxxx, temp[11]; 38: MAX temp[1], temp[1], const[6].yyyy; 39: ADD temp[10], temp[1], temp[10]; 40: ADD output[0].xyz, temp[3], temp[10]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: KIL temp[1].wwww; 3: TEX temp[2], input[2], 2D[1]; 4: MOV temp[2].x, temp[2].wwww; 5: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 6: MOV temp[2].z, const[6].yyyy; 7: DP3 temp[3].x, temp[2], temp[2]; 8: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 9: RSQ temp[3].x, temp[3].xxxx; 10: RCP temp[2].z, temp[3].xxxx; 11: DP3 temp[4].x, input[3], temp[2]; 12: DP3 temp[4].y, input[4], temp[2]; 13: DP3 temp[4].z, input[5], temp[2]; 14: TEX temp[5], temp[4], CUBE[2]; 15: MUL temp[5], temp[5], const[3]; 16: MUL temp[5], temp[5], const[7].xxxx; 17: MUL temp[6], temp[0], const[4]; 18: MUL temp[6], temp[5], temp[6]; 19: DP3 temp[3], input[1], temp[4]; 20: ADD temp[3], temp[3], temp[3]; 21: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 22: TEX temp[8], temp[7], CUBE[3]; 23: TEX temp[9], input[2], 2D[4]; 24: ADD temp[1], temp[9], temp[9]; 25: MAD temp[6], temp[1], temp[8], temp[6]; 26: MUL temp[3], temp[6], input[0]; 27: MOV output[0].w, temp[0].wwww; 28: DP3 temp[1], input[1], temp[4]; 29: ADD temp[1], const[6].zzzz, -temp[1]; 30: MUL temp[1], temp[1], temp[1]; 31: MUL temp[1], temp[1], temp[1]; 32: MUL temp[1], temp[1], const[5]; 33: MUL temp[10], temp[1], temp[5]; 34: MAD temp[10], temp[1], const[6].wwww, temp[10]; 35: TEX temp[11], input[2], 2D[5]; 36: MUL_SAT temp[5], temp[5], const[7].zzzz; 37: MAD temp[1], temp[11], -temp[5].xxxx, temp[11]; 38: MAX temp[1], temp[1], const[6].yyyy; 39: ADD temp[10], temp[1], temp[10]; 40: ADD output[0].xyz, temp[3], temp[10]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: KIL temp[1].wwww; 3: TEX temp[2], input[2], 2D[1]; 4: MOV temp[2].x, temp[2].wwww; 5: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 6: MOV temp[2].z, const[6].yyyy; 7: DP3 temp[3].x, temp[2], temp[2]; 8: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 9: RSQ temp[3].x, temp[3].xxxx; 10: RCP temp[2].z, temp[3].xxxx; 11: DP3 temp[4].x, input[3], temp[2]; 12: DP3 temp[4].y, input[4], temp[2]; 13: DP3 temp[4].z, input[5], temp[2]; 14: TEX temp[5], temp[4], CUBE[2]; 15: MUL temp[5], temp[5], const[3]; 16: MUL temp[5], temp[5], const[7].xxxx; 17: MUL temp[6], temp[0], const[4]; 18: MUL temp[6], temp[5], temp[6]; 19: DP3 temp[3], input[1], temp[4]; 20: ADD temp[3], temp[3], temp[3]; 21: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 22: TEX temp[8], temp[7], CUBE[3]; 23: TEX temp[9], input[2], 2D[4]; 24: ADD temp[1], temp[9], temp[9]; 25: MAD temp[6], temp[1], temp[8], temp[6]; 26: MUL temp[3], temp[6], input[0]; 27: MOV_SAT output[0].w, temp[0].wwww; 28: DP3 temp[1], input[1], temp[4]; 29: ADD temp[1], const[6].zzzz, -temp[1]; 30: MUL temp[1], temp[1], temp[1]; 31: MUL temp[1], temp[1], temp[1]; 32: MUL temp[1], temp[1], const[5]; 33: MUL temp[10], temp[1], temp[5]; 34: MAD temp[10], temp[1], const[6].wwww, temp[10]; 35: TEX temp[11], input[2], 2D[5]; 36: MUL_SAT temp[5], temp[5], const[7].zzzz; 37: MAD temp[1], temp[11], -temp[5].xxxx, temp[11]; 38: MAX temp[1], temp[1], const[6].yyyy; 39: ADD temp[10], temp[1], temp[10]; 40: ADD_SAT output[0].xyz, temp[3], temp[10]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: KIL temp[1].wwww; 3: TEX temp[2], input[2], 2D[1]; 4: MOV temp[2].x, temp[2].wwww; 5: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 6: MOV temp[2].z, const[6].yyyy; 7: DP3 temp[3].x, temp[2], temp[2]; 8: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 9: RSQ temp[3].x, temp[3].xxxx; 10: RCP temp[2].z, temp[3].xxxx; 11: DP3 temp[4].x, input[3], temp[2]; 12: DP3 temp[4].y, input[4], temp[2]; 13: DP3 temp[4].z, input[5], temp[2]; 14: TEX temp[5], temp[4], CUBE[2]; 15: MUL temp[5], temp[5], const[3]; 16: MUL temp[5], temp[5], const[7].xxxx; 17: MUL temp[6], temp[0], const[4]; 18: MUL temp[6], temp[5], temp[6]; 19: DP3 temp[3], input[1], temp[4]; 20: ADD temp[3], temp[3], temp[3]; 21: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 22: TEX temp[8], temp[7], CUBE[3]; 23: TEX temp[9], input[2], 2D[4]; 24: ADD temp[1], temp[9], temp[9]; 25: MAD temp[6], temp[1], temp[8], temp[6]; 26: MUL temp[3], temp[6], input[0]; 27: MOV_SAT output[0].w, temp[0].wwww; 28: DP3 temp[1], input[1], temp[4]; 29: ADD temp[1], const[6].zzzz, -temp[1]; 30: MUL temp[1], temp[1], temp[1]; 31: MUL temp[1], temp[1], temp[1]; 32: MUL temp[1], temp[1], const[5]; 33: MUL temp[10], temp[1], temp[5]; 34: MAD temp[10], temp[1], const[6].wwww, temp[10]; 35: TEX temp[11], input[2], 2D[5]; 36: MUL_SAT temp[5], temp[5], const[7].zzzz; 37: MAD temp[1], temp[11], -temp[5].xxxx, temp[11]; 38: MAX temp[1], temp[1], const[6].yyyy; 39: ADD temp[10], temp[1], temp[10]; 40: ADD_SAT output[0].xyz, temp[3], temp[10]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: ADD temp[1].w, temp[0].wwww, -const[6].xxxx; 2: KIL temp[1].wwww; 3: TEX temp[2], input[2], 2D[1]; 4: MOV temp[2].x, temp[2].wwww; 5: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 6: MOV temp[2].z, const[6].yyyy; 7: DP3 temp[3].x, temp[2], temp[2]; 8: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 9: RSQ temp[3].x, |temp[3].xxxx|; 10: RCP temp[2].z, temp[3].xxxx; 11: DP3 temp[4].x, input[3], temp[2]; 12: DP3 temp[4].y, input[4], temp[2]; 13: DP3 temp[4].z, input[5], temp[2]; 14: TEX temp[5], temp[4], CUBE[2]; 15: MUL temp[5], temp[5], const[3]; 16: MUL temp[5], temp[5], const[7].xxxx; 17: MUL temp[6], temp[0], const[4]; 18: MUL temp[6], temp[5], temp[6]; 19: DP3 temp[3], input[1], temp[4]; 20: ADD temp[3], temp[3], temp[3]; 21: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 22: TEX temp[8], temp[7], CUBE[3]; 23: TEX temp[9], input[2], 2D[4]; 24: ADD temp[1], temp[9], temp[9]; 25: MAD temp[6], temp[1], temp[8], temp[6]; 26: MUL temp[3], temp[6], input[0]; 27: MOV_SAT output[0].w, temp[0].wwww; 28: DP3 temp[1], input[1], temp[4]; 29: ADD temp[1], const[6].zzzz, -temp[1]; 30: MUL temp[1], temp[1], temp[1]; 31: MUL temp[1], temp[1], temp[1]; 32: MUL temp[1], temp[1], const[5]; 33: MUL temp[10], temp[1], temp[5]; 34: MAD temp[10], temp[1], const[6].wwww, temp[10]; 35: TEX temp[11], input[2], 2D[5]; 36: MUL_SAT temp[5], temp[5], const[7].zzzz; 37: MAD temp[1], temp[11], -temp[5].xxxx, temp[11]; 38: MAX temp[1], temp[1], const[6].yyyy; 39: ADD temp[10], temp[1], temp[10]; 40: ADD_SAT output[0].xyz, temp[3], temp[10]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: ADD temp[1].w, temp[0].___w, -const[6].___x; 2: KIL temp[1].wwww; 3: TEX temp[2].yw, input[2].xy__, 2D[1]; 4: MOV temp[2].x, temp[2].w___; 5: MAD temp[2].xy, temp[2].xy__, const[7].xx__, const[7].yy__; 6: MOV temp[2].z, const[6].__y_; 7: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 8: ADD temp[3].x, const[6].z___, -temp[3].x___; 9: RSQ temp[3].x, |temp[3].x___|; 10: RCP temp[2].z, temp[3].x___; 11: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 12: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 13: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 14: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 15: MUL temp[5].xyz, temp[5].xyz_, const[3].xyz_; 16: MUL temp[5].xyz, temp[5].xyz_, const[7].xxx_; 17: MUL temp[6].xyz, temp[0].xyz_, const[4].xyz_; 18: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 19: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 20: ADD temp[3].x, temp[3].x___, temp[3].x___; 21: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 22: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 23: TEX temp[9].xyz, input[2].xy__, 2D[4]; 24: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 25: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 26: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 27: MOV_SAT output[0].w, temp[0].___w; 28: DP3 temp[1].xyz, input[1].xyz_, temp[4].xyz_; 29: ADD temp[1].xyz, const[6].zzz_, -temp[1].xyz_; 30: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 31: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 32: MUL temp[1].xyz, temp[1].xyz_, const[5].xyz_; 33: MUL temp[10].xyz, temp[1].xyz_, temp[5].xyz_; 34: MAD temp[10].xyz, temp[1].xyz_, const[6].www_, temp[10].xyz_; 35: TEX temp[11].xyz, input[2].xy__, 2D[5]; 36: MUL_SAT temp[5].x, temp[5].x___, const[7].z___; 37: MAD temp[1].xyz, temp[11].xyz_, -temp[5].xxx_, temp[11].xyz_; 38: MAX temp[1].xyz, temp[1].xyz_, const[6].yyy_; 39: ADD temp[10].xyz, temp[1].xyz_, temp[10].xyz_; 40: ADD_SAT output[0].xyz, temp[3].xyz_, temp[10].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: ADD temp[1].w, temp[0].___w, -const[6].___x; 2: KIL temp[1].wwww; 3: TEX temp[2].yw, input[2].xy__, 2D[1]; 4: MOV temp[2].x, temp[2].w___; 5: MAD temp[2].xy, temp[2].xy__, const[7].xx__, const[7].yy__; 6: MOV temp[2].z, const[6].__y_; 7: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 8: ADD temp[3].x, const[6].z___, -temp[3].x___; 9: RSQ temp[3].x, |temp[3].x___|; 10: RCP temp[2].z, temp[3].x___; 11: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 12: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 13: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 14: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 15: MUL temp[5].xyz, temp[5].xyz_, const[3].xyz_; 16: MUL temp[5].xyz, temp[5].xyz_, const[7].xxx_; 17: MUL temp[6].xyz, temp[0].xyz_, const[4].xyz_; 18: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 19: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 20: ADD temp[3].x, temp[3].x___, temp[3].x___; 21: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 22: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 23: TEX temp[9].xyz, input[2].xy__, 2D[4]; 24: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 25: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 26: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 27: MOV_SAT output[0].w, temp[0].___w; 28: DP3 temp[1].xyz, input[1].xyz_, temp[4].xyz_; 29: ADD temp[1].xyz, const[6].zzz_, -temp[1].xyz_; 30: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 31: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 32: MUL temp[1].xyz, temp[1].xyz_, const[5].xyz_; 33: MUL temp[10].xyz, temp[1].xyz_, temp[5].xyz_; 34: MAD temp[10].xyz, temp[1].xyz_, const[6].www_, temp[10].xyz_; 35: TEX temp[11].xyz, input[2].xy__, 2D[5]; 36: MUL_SAT temp[5].x, temp[5].x___, const[7].z___; 37: MAD temp[1].xyz, temp[11].xyz_, -temp[5].xxx_, temp[11].xyz_; 38: MAX temp[1].xyz, temp[1].xyz_, const[6].yyy_; 39: ADD temp[10].xyz, temp[1].xyz_, temp[10].xyz_; 40: ADD_SAT output[0].xyz, temp[3].xyz_, temp[10].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: ADD temp[1].w, temp[0].___w, -const[6].___x; 2: KIL temp[1].wwww; 3: TEX temp[2].yw, input[2].xy__, 2D[1]; 4: MOV temp[2].x, temp[2].w___; 5: MAD temp[2].xy, temp[2].xy__, const[7].xx__, none.-1-1__; 6: MOV temp[2].z, none.__0_; 7: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 8: ADD temp[3].x, none.1___, -temp[3].x___; 9: RSQ temp[3].x, |temp[3].x___|; 10: RCP temp[2].z, temp[3].x___; 11: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 12: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 13: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 14: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 15: MUL temp[5].xyz, temp[5].xyz_, const[3].xyz_; 16: MUL temp[5].xyz, temp[5].xyz_, const[7].xxx_; 17: MUL temp[6].xyz, temp[0].xyz_, const[4].xyz_; 18: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 19: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 20: ADD temp[3].x, temp[3].x___, temp[3].x___; 21: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 22: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 23: TEX temp[9].xyz, input[2].xy__, 2D[4]; 24: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 25: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 26: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 27: MOV_SAT output[0].w, temp[0].___w; 28: DP3 temp[1].xyz, input[1].xyz_, temp[4].xyz_; 29: ADD temp[1].xyz, none.111_, -temp[1].xyz_; 30: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 31: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 32: MUL temp[1].xyz, temp[1].xyz_, const[5].xyz_; 33: MUL temp[10].xyz, temp[1].xyz_, temp[5].xyz_; 34: MAD temp[10].xyz, temp[1].xyz_, const[6].www_, temp[10].xyz_; 35: TEX temp[11].xyz, input[2].xy__, 2D[5]; 36: MUL_SAT temp[5].x, temp[5].x___, const[7].z___; 37: MAD temp[1].xyz, temp[11].xyz_, -temp[5].xxx_, temp[11].xyz_; 38: MAX temp[1].xyz, temp[1].xyz_, none.000_; 39: ADD temp[10].xyz, temp[1].xyz_, temp[10].xyz_; 40: ADD_SAT output[0].xyz, temp[3].xyz_, temp[10].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: ADD temp[1].w, temp[0].___w, -const[6].___x; 2: MOV temp[12], temp[1].wwww; 3: KIL temp[12]; 4: TEX temp[2].yw, input[2].xy__, 2D[1]; 5: MOV temp[2].x, temp[2].w___; 6: MAD temp[2].xy, temp[2].xy__, const[7].xx__, none.-1-1__; 7: MOV temp[2].z, none.__0_; 8: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 9: ADD temp[3].x, none.1___, -temp[3].x___; 10: RSQ temp[3].x, |temp[3].x___|; 11: RCP temp[2].z, temp[3].x___; 12: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 13: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 14: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 15: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 16: MUL temp[5].xyz, temp[5].xyz_, const[3].xyz_; 17: MUL temp[5].xyz, temp[5].xyz_, const[7].xxx_; 18: MUL temp[6].xyz, temp[0].xyz_, const[4].xyz_; 19: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 20: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 21: ADD temp[3].x, temp[3].x___, temp[3].x___; 22: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 23: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 24: TEX temp[9].xyz, input[2].xy__, 2D[4]; 25: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 26: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 27: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 28: MOV_SAT output[0].w, temp[0].___w; 29: DP3 temp[1].xyz, input[1].xyz_, temp[4].xyz_; 30: ADD temp[1].xyz, none.111_, -temp[1].xyz_; 31: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 32: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 33: MUL temp[1].xyz, temp[1].xyz_, const[5].xyz_; 34: MUL temp[10].xyz, temp[1].xyz_, temp[5].xyz_; 35: MAD temp[10].xyz, temp[1].xyz_, const[6].www_, temp[10].xyz_; 36: TEX temp[11].xyz, input[2].xy__, 2D[5]; 37: MUL_SAT temp[5].x, temp[5].x___, const[7].z___; 38: MAD temp[1].xyz, temp[11].xyz_, -temp[5].xxx_, temp[11].xyz_; 39: MAX temp[1].xyz, temp[1].xyz_, none.000_; 40: ADD temp[10].xyz, temp[1].xyz_, temp[10].xyz_; 41: ADD_SAT output[0].xyz, temp[3].xyz_, temp[10].xyz_; CONST[3] = { 0.0010 0.0000 1.0000 0.1000 } CONST[4] = { 2.0000 -1.0000 8.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: ADD temp[1].w, temp[0].___w, -const[3].___x; 2: MOV temp[12], temp[1].wwww; 3: KIL temp[12]; 4: TEX temp[2].yw, input[2].xy__, 2D[1]; 5: MOV temp[2].x, temp[2].w___; 6: MAD temp[2].xy, temp[2].xy__, const[4].xx__, none.-1-1__; 7: MOV temp[2].z, none.__0_; 8: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 9: ADD temp[3].x, none.1___, -temp[3].x___; 10: RSQ temp[3].x, |temp[3].x___|; 11: RCP temp[2].z, temp[3].x___; 12: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 13: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 14: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 15: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 16: MUL temp[5].xyz, temp[5].xyz_, const[0].xyz_; 17: MUL temp[5].xyz, temp[5].xyz_, const[4].xxx_; 18: MUL temp[6].xyz, temp[0].xyz_, const[1].xyz_; 19: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 20: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 21: ADD temp[3].x, temp[3].x___, temp[3].x___; 22: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 23: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 24: TEX temp[9].xyz, input[2].xy__, 2D[4]; 25: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 26: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 27: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 28: MOV_SAT output[0].w, temp[0].___w; 29: DP3 temp[1].xyz, input[1].xyz_, temp[4].xyz_; 30: ADD temp[1].xyz, none.111_, -temp[1].xyz_; 31: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 32: MUL temp[1].xyz, temp[1].xyz_, temp[1].xyz_; 33: MUL temp[1].xyz, temp[1].xyz_, const[2].xyz_; 34: MUL temp[10].xyz, temp[1].xyz_, temp[5].xyz_; 35: MAD temp[10].xyz, temp[1].xyz_, const[3].www_, temp[10].xyz_; 36: TEX temp[11].xyz, input[2].xy__, 2D[5]; 37: MUL_SAT temp[5].x, temp[5].x___, const[4].z___; 38: MAD temp[1].xyz, temp[11].xyz_, -temp[5].xxx_, temp[11].xyz_; 39: MAX temp[1].xyz, temp[1].xyz_, none.000_; 40: ADD temp[10].xyz, temp[1].xyz_, temp[10].xyz_; 41: ADD_SAT output[0].xyz, temp[3].xyz_, temp[10].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[13], input[2].xy__, 2D[0]; 1: ADD temp[14].w, temp[13].___w, -const[3].___x; 2: MOV temp[15], temp[14].wwww; 3: KIL temp[15]; 4: TEX temp[2].yw, input[2].xy__, 2D[1]; 5: MOV temp[2].x, temp[2].w___; 6: MAD temp[2].xy, temp[2].xy__, const[4].xx__, none.-1-1__; 7: MOV temp[2].z, none.__0_; 8: DP3 temp[16].x, temp[2].xyz_, temp[2].xyz_; 9: ADD temp[17].x, none.1___, -temp[16].x___; 10: RSQ temp[18].x, |temp[17].x___|; 11: RCP temp[2].z, temp[18].x___; 12: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 13: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 14: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 15: TEX temp[19].xyz, temp[4].xyz_, CUBE[2]; 16: MUL temp[20].xyz, temp[19].xyz_, const[0].xyz_; 17: MUL temp[21].xyz, temp[20].xyz_, const[4].xxx_; 18: MUL temp[22].xyz, temp[13].xyz_, const[1].xyz_; 19: MUL temp[23].xyz, temp[21].xyz_, temp[22].xyz_; 20: DP3 temp[24].x, input[1].xyz_, temp[4].xyz_; 21: ADD temp[25].x, temp[24].x___, temp[24].x___; 22: MAD temp[26].xyz, temp[4].xyz_, temp[25].xxx_, -input[1].xyz_; 23: TEX temp[27].xyz, temp[26].xyz_, CUBE[3]; 24: TEX temp[28].xyz, input[2].xy__, 2D[4]; 25: ADD temp[29].xyz, temp[28].xyz_, temp[28].xyz_; 26: MAD temp[30].xyz, temp[29].xyz_, temp[27].xyz_, temp[23].xyz_; 27: MUL temp[31].xyz, temp[30].xyz_, input[0].xyz_; 28: MOV_SAT output[0].w, temp[13].___w; 29: DP3 temp[32].xyz, input[1].xyz_, temp[4].xyz_; 30: ADD temp[33].xyz, none.111_, -temp[32].xyz_; 31: MUL temp[34].xyz, temp[33].xyz_, temp[33].xyz_; 32: MUL temp[35].xyz, temp[34].xyz_, temp[34].xyz_; 33: MUL temp[36].xyz, temp[35].xyz_, const[2].xyz_; 34: MUL temp[37].xyz, temp[36].xyz_, temp[21].xyz_; 35: MAD temp[38].xyz, temp[36].xyz_, const[3].www_, temp[37].xyz_; 36: TEX temp[39].xyz, input[2].xy__, 2D[5]; 37: MUL_SAT temp[40].x, temp[21].x___, const[4].z___; 38: MAD temp[41].xyz, temp[39].xyz_, -temp[40].xxx_, temp[39].xyz_; 39: MAX temp[42].xyz, temp[41].xyz_, none.000_; 40: ADD temp[43].xyz, temp[42].xyz_, temp[38].xyz_; 41: ADD_SAT output[0].xyz, temp[31].xyz_, temp[43].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[13], input[2].xy__, 2D[0]; 1: src0.xyz = const[3], src0.w = temp[13] MAD temp[14].w, src0.w, src0.1, -src0.x 2: src0.w = temp[14] MAD temp[15].xyz, src0.www, src0.111, src0.000 MAD temp[15].w, src0.w, src0.1, src0.0 3: KIL temp[15]; 4: TEX temp[2].yw, input[2].xy__, 2D[1]; 5: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.111, src0.000 6: src0.xyz = temp[2], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 7: MAD temp[2].z, src0.__0, src0.111, src0.000 8: src0.xyz = temp[2] DP3 temp[16].x, src0.xyz, src0.xyz 9: src0.xyz = temp[16] MAD temp[17].x, src0.1__, src0.111, -src0.x__ 10: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 11: src0.xyz = temp[18] REPL_ALPHA temp[2].z RCP, src0.x 12: src0.xyz = input[3], src1.xyz = temp[2] DP3 temp[4].x, src0.xyz, src1.xyz 13: src0.xyz = input[4], src1.xyz = temp[2] DP3 temp[4].y, src0.xyz, src1.xyz 14: src0.xyz = input[5], src1.xyz = temp[2] DP3 temp[4].z, src0.xyz, src1.xyz 15: TEX temp[19].xyz, temp[4].xyz_, CUBE[2]; 16: src0.xyz = temp[19], src1.xyz = const[0] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 17: src0.xyz = temp[20], src1.xyz = const[4] MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 18: src0.xyz = temp[13], src1.xyz = const[1] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 19: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 20: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[24].x, src0.xyz, src1.xyz 21: src0.xyz = temp[24] MAD temp[25].x, src0.x__, src0.111, src0.x__ 22: src0.xyz = temp[4], src1.xyz = temp[25], src2.xyz = input[1] MAD temp[26].xyz, src0.xyz, src1.xxx, -src2.xyz 23: TEX temp[27].xyz, temp[26].xyz_, CUBE[3]; 24: TEX temp[28].xyz, input[2].xy__, 2D[4]; 25: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.xyz 26: src0.xyz = temp[29], src1.xyz = temp[27], src2.xyz = temp[23] MAD temp[30].xyz, src0.xyz, src1.xyz, src2.xyz 27: src0.xyz = temp[30], src1.xyz = input[0] MAD temp[31].xyz, src0.xyz, src1.xyz, src0.000 28: src0.w = temp[13] MAD_SAT color[0].w, src0.w, src0.1, src0.0 29: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[32].xyz, src0.xyz, src1.xyz 30: src0.xyz = temp[32] MAD temp[33].xyz, src0.111, src0.111, -src0.xyz 31: src0.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src0.xyz, src0.000 32: src0.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src0.xyz, src0.000 33: src0.xyz = temp[35], src1.xyz = const[2] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[36], src1.xyz = temp[21] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[36], src0.w = const[3], src1.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src0.www, src1.xyz 36: TEX temp[39].xyz, input[2].xy__, 2D[5]; 37: src0.xyz = temp[21], src1.xyz = const[4] MAD_SAT temp[40].x, src0.x__, src1.z__, src0.000 38: src0.xyz = temp[39], src1.xyz = temp[40] MAD temp[41].xyz, src0.xyz, -src1.xxx, src0.xyz 39: src0.xyz = temp[41] MAX temp[42].xyz, src0.xyz, src0.000 40: src0.xyz = temp[42], src1.xyz = temp[38] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz 41: src0.xyz = temp[31], src1.xyz = temp[43] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[13], input[2].xy__, 2D[0]; 2: TEX temp[2].yw, input[2].xy__, 2D[1]; 3: TEX temp[28].xyz, input[2].xy__, 2D[4]; 4: TEX temp[39].xyz, input[2].xy__, 2D[5]; 5: src0.xyz = temp[28], src0.w = temp[13], src1.xyz = const[3] MAD temp[29].xyz, src0.xyz, src0.111, src0.xyz MAD temp[14].w, src0.w, src0.1, -src1.x 6: src0.w = temp[14] MAD temp[15].xyz, src0.www, src0.111, src0.000 MAD temp[15].w, src0.w, src0.1, src0.0 7: src0.w = temp[2], src1.w = temp[13] MAD temp[2].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src1.w, src0.1, src0.0 8: src0.xyz = temp[2], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[13], src1.xyz = const[1] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 10: MAD temp[2].z, src0.__0, src0.111, src0.000 11: src0.xyz = temp[2] DP3 temp[16].x, src0.xyz, src0.xyz 12: src0.xyz = temp[16] MAD temp[17].x, src0.1__, src0.111, -src0.x__ 13: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 14: src0.xyz = temp[18] REPL_ALPHA temp[2].z RCP, src0.x 15: src0.xyz = input[3], src1.xyz = temp[2] DP3 temp[4].x, src0.xyz, src1.xyz 16: src0.xyz = input[4], src1.xyz = temp[2] DP3 temp[4].y, src0.xyz, src1.xyz 17: src0.xyz = input[5], src1.xyz = temp[2] DP3 temp[4].z, src0.xyz, src1.xyz 18: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[24].x, src0.xyz, src1.xyz 19: src0.xyz = temp[24] MAD temp[25].x, src0.x__, src0.111, src0.x__ 20: src0.xyz = temp[4], src1.xyz = temp[25], src2.xyz = input[1] MAD temp[26].xyz, src0.xyz, src1.xxx, -src2.xyz 21: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[32].xyz, src0.xyz, src1.xyz 22: src0.xyz = temp[32] MAD temp[33].xyz, src0.111, src0.111, -src0.xyz 23: src0.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src0.xyz, src0.000 24: src0.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src0.xyz, src0.000 25: src0.xyz = temp[35], src1.xyz = const[2] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 26: BEGIN_TEX; 27: KIL temp[15]; 28: TEX temp[19].xyz, temp[4].xyz_, CUBE[2]; 29: TEX temp[27].xyz, temp[26].xyz_, CUBE[3]; 30: src0.xyz = temp[19], src1.xyz = const[0] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[20], src1.xyz = const[4] MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 32: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[29], src1.xyz = temp[27], src2.xyz = temp[23] MAD temp[30].xyz, src0.xyz, src1.xyz, src2.xyz 34: src0.xyz = temp[30], src1.xyz = input[0] MAD temp[31].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[36], src1.xyz = temp[21] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[36], src0.w = const[3], src1.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src0.www, src1.xyz 37: src0.xyz = temp[21], src1.xyz = const[4] MAD_SAT temp[40].x, src0.x__, src1.z__, src0.000 38: src0.xyz = temp[39], src1.xyz = temp[40] MAD temp[41].xyz, src0.xyz, -src1.xxx, src0.xyz 39: src0.xyz = temp[41] MAX temp[42].xyz, src0.xyz, src0.000 40: src0.xyz = temp[42], src1.xyz = temp[38] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz 41: src0.xyz = temp[31], src1.xyz = temp[43] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[13], input[2].xy__, 2D[0]; 2: TEX temp[2].yw, input[2].xy__, 2D[1]; 3: TEX temp[28].xyz, input[2].xy__, 2D[4]; 4: TEX temp[39].xyz, input[2].xy__, 2D[5]; 5: src0.xyz = temp[28], src0.w = temp[13], src1.xyz = const[3] MAD temp[29].xyz, src0.xyz, src0.111, src0.xyz MAD temp[14].w, src0.w, src0.1, -src1.x 6: src0.w = temp[14] MAD temp[15].xyz, src0.www, src0.111, src0.000 MAD temp[15].w, src0.w, src0.1, src0.0 7: src0.w = temp[2], src1.w = temp[13] MAD temp[2].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src1.w, src0.1, src0.0 8: src0.xyz = temp[2], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[13], src1.xyz = const[1] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 10: MAD temp[2].z, src0.__0, src0.111, src0.000 11: src0.xyz = temp[2] DP3 temp[16].x, src0.xyz, src0.xyz 12: src0.xyz = temp[16] MAD temp[17].x, src0.1__, src0.111, -src0.x__ 13: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 14: src0.xyz = temp[18] REPL_ALPHA temp[2].z RCP, src0.x 15: src0.xyz = input[3], src1.xyz = temp[2] DP3 temp[4].x, src0.xyz, src1.xyz 16: src0.xyz = input[4], src1.xyz = temp[2] DP3 temp[4].y, src0.xyz, src1.xyz 17: src0.xyz = input[5], src1.xyz = temp[2] DP3 temp[4].z, src0.xyz, src1.xyz 18: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[24].x, src0.xyz, src1.xyz 19: src0.xyz = temp[24] MAD temp[25].x, src0.x__, src0.111, src0.x__ 20: src0.xyz = temp[4], src1.xyz = temp[25], src2.xyz = input[1] MAD temp[26].xyz, src0.xyz, src1.xxx, -src2.xyz 21: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[32].xyz, src0.xyz, src1.xyz 22: src0.xyz = temp[32] MAD temp[33].xyz, src0.111, src0.111, -src0.xyz 23: src0.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src0.xyz, src0.000 24: src0.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src0.xyz, src0.000 25: src0.xyz = temp[35], src1.xyz = const[2] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 26: BEGIN_TEX; 27: KIL temp[15]; 28: TEX temp[19].xyz, temp[4].xyz_, CUBE[2]; 29: TEX temp[27].xyz, temp[26].xyz_, CUBE[3]; 30: src0.xyz = temp[19], src1.xyz = const[0] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[20], src1.xyz = const[4] MAD temp[21].xyz, src0.xyz, src1.xxx, src0.000 32: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[29], src1.xyz = temp[27], src2.xyz = temp[23] MAD temp[30].xyz, src0.xyz, src1.xyz, src2.xyz 34: src0.xyz = temp[30], src1.xyz = input[0] MAD temp[31].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[36], src1.xyz = temp[21] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[36], src0.w = const[3], src1.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src0.www, src1.xyz 37: src0.xyz = temp[21], src1.xyz = const[4] MAD_SAT temp[40].x, src0.x__, src1.z__, src0.000 38: src0.xyz = temp[39], src1.xyz = temp[40] MAD temp[41].xyz, src0.xyz, -src1.xxx, src0.xyz 39: src0.xyz = temp[41] MAX temp[42].xyz, src0.xyz, src0.000 40: src0.xyz = temp[42], src1.xyz = temp[38] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz 41: src0.xyz = temp[31], src1.xyz = temp[43] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[2].xy__, 2D[0]; 2: TEX temp[7].yw, input[2].xy__, 2D[1]; 3: TEX temp[8].xyz, input[2].xy__, 2D[4]; 4: TEX temp[2].xyz, input[2].xy__, 2D[5]; 5: src0.xyz = temp[8], src0.w = temp[6], src1.xyz = const[3] MAD temp[8].xyz, src0.xyz, src0.111, src0.xyz MAD temp[0].w, src0.w, src0.1, -src1.x 6: src0.w = temp[0] MAD temp[9].xyz, src0.www, src0.111, src0.000 MAD temp[9].w, src0.w, src0.1, src0.0 7: src0.w = temp[7], src1.w = temp[6] MAD temp[7].x, src0.w__, src0.11_, src0.00_ MAD_SAT color[0].w, src1.w, src0.1, src0.0 8: src0.xyz = temp[7], src1.xyz = const[4] MAD temp[7].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[6], src1.xyz = const[1] MAD temp[6].xyz, src0.xyz, src1.xyz, src0.000 10: MAD temp[7].z, src0.__0, src0.111, src0.000 11: src0.xyz = temp[7] DP3 temp[10].x, src0.xyz, src0.xyz 12: src0.xyz = temp[10] MAD temp[10].x, src0.1__, src0.1__, -src0.x__ 13: src0.xyz = temp[10] REPL_ALPHA temp[10].x RSQ, |src0.x| 14: src0.xyz = temp[10] REPL_ALPHA temp[7].z RCP, src0.x 15: src0.xyz = input[3], src1.xyz = temp[7] DP3 temp[3].x, src0.xyz, src1.xyz 16: src0.xyz = input[4], src1.xyz = temp[7] DP3 temp[3].y, src0.xyz, src1.xyz 17: src0.xyz = input[5], src1.xyz = temp[7] DP3 temp[3].z, src0.xyz, src1.xyz 18: src0.xyz = input[1], src1.xyz = temp[3] DP3 temp[4].x, src0.xyz, src1.xyz 19: src0.xyz = temp[4] MAD temp[4].x, src0.x__, src0.1__, src0.x__ 20: src0.xyz = temp[3], src1.xyz = temp[4], src2.xyz = input[1] MAD temp[4].xyz, src0.xyz, src1.xxx, -src2.xyz 21: src0.xyz = input[1], src1.xyz = temp[3] DP3 temp[1].xyz, src0.xyz, src1.xyz 22: src0.xyz = temp[1] MAD temp[1].xyz, src0.111, src0.111, -src0.xyz 23: src0.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.xyz, src0.000 24: src0.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.xyz, src0.000 25: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 26: BEGIN_TEX; 27: KIL temp[9]; 28: TEX temp[3].xyz, temp[3].xyz_, CUBE[2]; 29: TEX temp[4].xyz, temp[4].xyz_, CUBE[3]; 30: src0.xyz = temp[3], src1.xyz = const[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 32: src0.xyz = temp[3], src1.xyz = temp[6] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[8], src1.xyz = temp[4], src2.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xyz, src2.xyz 34: src0.xyz = temp[4], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[1], src1.xyz = temp[3] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[1], src0.w = const[3], src1.xyz = temp[4] MAD temp[1].xyz, src0.xyz, src0.www, src1.xyz 37: src0.xyz = temp[3], src1.xyz = const[4] MAD_SAT temp[3].x, src0.x__, src1.z__, src0.0__ 38: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, -src1.xxx, src0.xyz 39: src0.xyz = temp[2] MAX temp[2].xyz, src0.xyz, src0.000 40: src0.xyz = temp[2], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.111, src1.xyz 41: src0.xyz = temp[0], src1.xyz = temp[1] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz pc=5************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 20, tex_end: 3 (code_addr: 00460500) TEX: TEX t6, t2, texture[0] (00008182) TEX t7, t2, texture[1] (000089c2) TEX t8, t2, texture[4] (0000a202) TEX t2, t2, texture[5] (0000a882) 0: xyz: t8 c3 t0 bias-> t8.xyz (03a008c8) w: t6 t0 t0 bias-> t0.w (00800006) xyz: t8.xyz 1.0 t8.xyz op: 00000a80 w: t6.w 1.0 -c3.x op: 0008c889 1: xyz: t0 t0 t0 bias-> t9.xyz (03a40000) w: t0 t0 t0 bias-> t9.w (00a40000) xyz: t0.www 1.0 0.0 op: 00050a8c w: t0.w 1.0 0.0 op: 00040889 2: xyz: t0 t0 t0 bias-> t7.x (009c0000) w: t7 t6 t0 bias-> o0.w (01000187) xyz: t7.www 1.0 0.0 op: 00050a8c w: t6.w 1.0 0.0 op: 4004088a 3: xyz: t7 c4 t0 bias-> t7.xy (019c0907) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz c4.xxx -1.0 op: 000d4280 w: t7.x t7.x t7.x op: 00000000 4: xyz: t6 c1 t0 bias-> t6.xyz (03980846) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c1.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 5: xyz: t0 t0 t0 bias-> t7.z (021c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 6: xyz: t7 t0 t0 bias-> t10.x (00a80007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t7.xyz t7.xxx op: 00804000 w: t7.x t7.x t7.x op: 00000000 7: xyz: t10 t0 t0 bias-> t10.x (00a8000a) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t10.xyz op: 00080a95 w: t10.x t10.x t10.x op: 00000000 8: xyz: t10 t0 t0 bias-> t10.x (00a8000a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xxx t10.xxx t10.xxx op: 05004081 w: |t10.x| t10.x t10.x op: 05800040 9: xyz: t10 t0 t0 bias-> t7.z (021c000a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xxx t10.xxx t10.xxx op: 05004081 w: t10.x t10.x t10.x op: 05000000 10: xyz: t3 t7 t0 bias-> t3.x (008c01c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 11: xyz: t4 t7 t0 bias-> t3.y (010c01c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t7.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 12: xyz: t5 t7 t0 bias-> t3.z (020c01c5) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t7.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 13: xyz: t1 t3 t0 bias-> t4.x (009000c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t3.xyz t1.xxx op: 00804200 w: t1.x t1.x t1.x op: 00000000 14: xyz: t4 t0 t0 bias-> t4.x (00900004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz 1.0 t4.xyz op: 00000a80 w: t4.x t4.x t4.x op: 00000000 15: xyz: t3 t4 t1 bias-> t4.xyz (03901103) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t4.xxx -t1.xyz op: 000a0280 w: t3.x t3.x t3.x op: 00000000 16: xyz: t1 t3 t0 bias-> t1.xyz (038400c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t3.xyz t1.xxx op: 00804200 w: t1.x t1.x t1.x op: 00000000 17: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 18: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 19: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 20: xyz: t1 c2 t0 bias-> t1.xyz (03840881) 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: 21, tex_offset: 4, alu_end: 11, tex_end: 2 (code_addr: 004442d5) TEX: KIL t0, t9, texture[0] (00010009) TEX t3, t3, texture[2] (000090c3) TEX t4, t4, texture[3] (00009904) 21: xyz: t3 c0 t0 bias-> t3.xyz (038c0803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 22: xyz: t3 c4 t0 bias-> t3.xyz (038c0903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 23: xyz: t3 t6 t0 bias-> t5.xyz (03940183) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t6.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 24: xyz: t8 t4 t5 bias-> t4.xyz (03905108) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t4.xyz t5.xyz op: 00020200 w: t8.x t8.x t8.x op: 00000000 25: xyz: t4 t0 t0 bias-> t0.xyz (03800004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t0.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 26: xyz: t1 t3 t0 bias-> t4.xyz (039000c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t3.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 27: xyz: t1 t4 t0 bias-> t1.xyz (03840101) w: c3 t0 t0 bias-> (00000023) xyz: t1.xyz c3.www t4.xyz op: 00010600 w: t1.x t1.x t1.x op: 00000000 28: xyz: t3 c4 t0 bias-> t3.x (008c0903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.zzz 0.0 op: 40050380 w: t3.x t3.x t3.x op: 00000000 29: xyz: t2 t3 t0 bias-> t2.xyz (038800c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz -t3.xxx t2.xyz op: 00001280 w: t2.x t2.x t2.x op: 00000000 30: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 0.0 t2.xxx op: 02804a00 w: t2.x t2.x t2.x op: 00000000 31: xyz: t2 t1 t0 bias-> t1.xyz (03840042) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 t1.xyz op: 00010a80 w: t2.x t2.x t2.x op: 00000000 32: xyz: t0 t1 t0 bias-> o0.xyz (1c000040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 t1.xyz op: 40010a80 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[2], PERSPECTIVE DCL IN[2], GENERIC[4], PERSPECTIVE DCL IN[3], GENERIC[5], PERSPECTIVE DCL IN[4], GENERIC[6], PERSPECTIVE DCL IN[5], GENERIC[7], 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[3..5] DCL TEMP[0..12] IMM FLT32 { 0.0010, 0.0000, 1.0000, 0.1000} IMM FLT32 { 2.0000, -1.0000, 8.0000, 0.0000} 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: SUB TEMP[1].w, TEMP[0].wwww, IMM[0].xxxx 2: TEX TEMP[2], IN[2], SAMP[1], 2D 3: MOV TEMP[2].x, TEMP[2].wwww 4: MAD TEMP[2].xy, TEMP[2], IMM[1].xxxx, IMM[1].yyyy 5: MOV TEMP[2].z, IMM[0].yyyy 6: DP3 TEMP[3].x, TEMP[2], TEMP[2] 7: ADD TEMP[3].x, IMM[0].zzzz, -TEMP[3].xxxx 8: RSQ TEMP[3].x, TEMP[3].xxxx 9: RCP TEMP[2].z, TEMP[3].xxxx 10: DP3 TEMP[4].x, IN[3], TEMP[2] 11: DP3 TEMP[4].y, IN[4], TEMP[2] 12: DP3 TEMP[4].z, IN[5], TEMP[2] 13: TEX TEMP[5], TEMP[4], SAMP[2], CUBE 14: MUL TEMP[5], TEMP[5], CONST[3] 15: MUL TEMP[5], TEMP[5], IMM[1].xxxx 16: MUL TEMP[6], TEMP[0], CONST[4] 17: MUL TEMP[6], TEMP[5], TEMP[6] 18: DP3 TEMP[3], IN[1], TEMP[4] 19: ADD TEMP[3], TEMP[3], TEMP[3] 20: MAD TEMP[7], TEMP[4], TEMP[3].xxxx, -IN[1] 21: TEX TEMP[8], TEMP[7], SAMP[3], CUBE 22: TEX TEMP[9], IN[2], SAMP[4], 2D 23: ADD TEMP[1], TEMP[9], TEMP[9] 24: MAD TEMP[6], TEMP[1], TEMP[8], TEMP[6] 25: MUL TEMP[3], TEMP[6], IN[0] 26: DP3 TEMP[1], IN[1], TEMP[4] 27: ADD TEMP[1], IMM[0].zzzz, -TEMP[1] 28: MUL TEMP[1], TEMP[1], TEMP[1] 29: MUL TEMP[1], TEMP[1], TEMP[1] 30: MUL TEMP[10], TEMP[1], CONST[5] 31: MUL TEMP[11], TEMP[10], TEMP[5] 32: MAD TEMP[11], TEMP[10], IMM[0].wwww, TEMP[11] 33: TEX TEMP[12], IN[2], SAMP[5], 2D 34: MUL_SAT TEMP[5], TEMP[5], IMM[1].zzzz 35: MAD TEMP[1], TEMP[12], -TEMP[5].xxxx, TEMP[12] 36: ADD OUT[0].xyz, TEMP[3], TEMP[11] 37: SUB TEMP[1], IMM[0].zzzz, TEMP[10] 38: MUL OUT[0].w, TEMP[0].wwww, TEMP[1] 39: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: TEX temp[2], input[2], 2D[1]; 3: MOV temp[2].x, temp[2].wwww; 4: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 5: MOV temp[2].z, const[6].yyyy; 6: DP3 temp[3].x, temp[2], temp[2]; 7: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 8: RSQ temp[3].x, temp[3].xxxx; 9: RCP temp[2].z, temp[3].xxxx; 10: DP3 temp[4].x, input[3], temp[2]; 11: DP3 temp[4].y, input[4], temp[2]; 12: DP3 temp[4].z, input[5], temp[2]; 13: TEX temp[5], temp[4], CUBE[2]; 14: MUL temp[5], temp[5], const[3]; 15: MUL temp[5], temp[5], const[7].xxxx; 16: MUL temp[6], temp[0], const[4]; 17: MUL temp[6], temp[5], temp[6]; 18: DP3 temp[3], input[1], temp[4]; 19: ADD temp[3], temp[3], temp[3]; 20: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 21: TEX temp[8], temp[7], CUBE[3]; 22: TEX temp[9], input[2], 2D[4]; 23: ADD temp[1], temp[9], temp[9]; 24: MAD temp[6], temp[1], temp[8], temp[6]; 25: MUL temp[3], temp[6], input[0]; 26: DP3 temp[1], input[1], temp[4]; 27: ADD temp[1], const[6].zzzz, -temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[1], temp[1], temp[1]; 30: MUL temp[10], temp[1], const[5]; 31: MUL temp[11], temp[10], temp[5]; 32: MAD temp[11], temp[10], const[6].wwww, temp[11]; 33: TEX temp[12], input[2], 2D[5]; 34: MUL_SAT temp[5], temp[5], const[7].zzzz; 35: MAD temp[1], temp[12], -temp[5].xxxx, temp[12]; 36: ADD output[0].xyz, temp[3], temp[11]; 37: SUB temp[1], const[6].zzzz, temp[10]; 38: MUL output[0].w, temp[0].wwww, temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: TEX temp[2], input[2], 2D[1]; 3: MOV temp[2].x, temp[2].wwww; 4: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 5: MOV temp[2].z, const[6].yyyy; 6: DP3 temp[3].x, temp[2], temp[2]; 7: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 8: RSQ temp[3].x, temp[3].xxxx; 9: RCP temp[2].z, temp[3].xxxx; 10: DP3 temp[4].x, input[3], temp[2]; 11: DP3 temp[4].y, input[4], temp[2]; 12: DP3 temp[4].z, input[5], temp[2]; 13: TEX temp[5], temp[4], CUBE[2]; 14: MUL temp[5], temp[5], const[3]; 15: MUL temp[5], temp[5], const[7].xxxx; 16: MUL temp[6], temp[0], const[4]; 17: MUL temp[6], temp[5], temp[6]; 18: DP3 temp[3], input[1], temp[4]; 19: ADD temp[3], temp[3], temp[3]; 20: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 21: TEX temp[8], temp[7], CUBE[3]; 22: TEX temp[9], input[2], 2D[4]; 23: ADD temp[1], temp[9], temp[9]; 24: MAD temp[6], temp[1], temp[8], temp[6]; 25: MUL temp[3], temp[6], input[0]; 26: DP3 temp[1], input[1], temp[4]; 27: ADD temp[1], const[6].zzzz, -temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[1], temp[1], temp[1]; 30: MUL temp[10], temp[1], const[5]; 31: MUL temp[11], temp[10], temp[5]; 32: MAD temp[11], temp[10], const[6].wwww, temp[11]; 33: TEX temp[12], input[2], 2D[5]; 34: MUL_SAT temp[5], temp[5], const[7].zzzz; 35: MAD temp[1], temp[12], -temp[5].xxxx, temp[12]; 36: ADD output[0].xyz, temp[3], temp[11]; 37: SUB temp[1], const[6].zzzz, temp[10]; 38: MUL output[0].w, temp[0].wwww, temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: TEX temp[2], input[2], 2D[1]; 3: MOV temp[2].x, temp[2].wwww; 4: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 5: MOV temp[2].z, const[6].yyyy; 6: DP3 temp[3].x, temp[2], temp[2]; 7: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 8: RSQ temp[3].x, temp[3].xxxx; 9: RCP temp[2].z, temp[3].xxxx; 10: DP3 temp[4].x, input[3], temp[2]; 11: DP3 temp[4].y, input[4], temp[2]; 12: DP3 temp[4].z, input[5], temp[2]; 13: TEX temp[5], temp[4], CUBE[2]; 14: MUL temp[5], temp[5], const[3]; 15: MUL temp[5], temp[5], const[7].xxxx; 16: MUL temp[6], temp[0], const[4]; 17: MUL temp[6], temp[5], temp[6]; 18: DP3 temp[3], input[1], temp[4]; 19: ADD temp[3], temp[3], temp[3]; 20: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 21: TEX temp[8], temp[7], CUBE[3]; 22: TEX temp[9], input[2], 2D[4]; 23: ADD temp[1], temp[9], temp[9]; 24: MAD temp[6], temp[1], temp[8], temp[6]; 25: MUL temp[3], temp[6], input[0]; 26: DP3 temp[1], input[1], temp[4]; 27: ADD temp[1], const[6].zzzz, -temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[1], temp[1], temp[1]; 30: MUL temp[10], temp[1], const[5]; 31: MUL temp[11], temp[10], temp[5]; 32: MAD temp[11], temp[10], const[6].wwww, temp[11]; 33: TEX temp[12], input[2], 2D[5]; 34: MUL_SAT temp[5], temp[5], const[7].zzzz; 35: MAD temp[1], temp[12], -temp[5].xxxx, temp[12]; 36: ADD output[0].xyz, temp[3], temp[11]; 37: SUB temp[1], const[6].zzzz, temp[10]; 38: MUL output[0].w, temp[0].wwww, temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: TEX temp[2], input[2], 2D[1]; 3: MOV temp[2].x, temp[2].wwww; 4: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 5: MOV temp[2].z, const[6].yyyy; 6: DP3 temp[3].x, temp[2], temp[2]; 7: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 8: RSQ temp[3].x, temp[3].xxxx; 9: RCP temp[2].z, temp[3].xxxx; 10: DP3 temp[4].x, input[3], temp[2]; 11: DP3 temp[4].y, input[4], temp[2]; 12: DP3 temp[4].z, input[5], temp[2]; 13: TEX temp[5], temp[4], CUBE[2]; 14: MUL temp[5], temp[5], const[3]; 15: MUL temp[5], temp[5], const[7].xxxx; 16: MUL temp[6], temp[0], const[4]; 17: MUL temp[6], temp[5], temp[6]; 18: DP3 temp[3], input[1], temp[4]; 19: ADD temp[3], temp[3], temp[3]; 20: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 21: TEX temp[8], temp[7], CUBE[3]; 22: TEX temp[9], input[2], 2D[4]; 23: ADD temp[1], temp[9], temp[9]; 24: MAD temp[6], temp[1], temp[8], temp[6]; 25: MUL temp[3], temp[6], input[0]; 26: DP3 temp[1], input[1], temp[4]; 27: ADD temp[1], const[6].zzzz, -temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[1], temp[1], temp[1]; 30: MUL temp[10], temp[1], const[5]; 31: MUL temp[11], temp[10], temp[5]; 32: MAD temp[11], temp[10], const[6].wwww, temp[11]; 33: TEX temp[12], input[2], 2D[5]; 34: MUL_SAT temp[5], temp[5], const[7].zzzz; 35: MAD temp[1], temp[12], -temp[5].xxxx, temp[12]; 36: ADD output[0].xyz, temp[3], temp[11]; 37: SUB temp[1], const[6].zzzz, temp[10]; 38: MUL output[0].w, temp[0].wwww, temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: TEX temp[2], input[2], 2D[1]; 3: MOV temp[2].x, temp[2].wwww; 4: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 5: MOV temp[2].z, const[6].yyyy; 6: DP3 temp[3].x, temp[2], temp[2]; 7: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 8: RSQ temp[3].x, temp[3].xxxx; 9: RCP temp[2].z, temp[3].xxxx; 10: DP3 temp[4].x, input[3], temp[2]; 11: DP3 temp[4].y, input[4], temp[2]; 12: DP3 temp[4].z, input[5], temp[2]; 13: TEX temp[5], temp[4], CUBE[2]; 14: MUL temp[5], temp[5], const[3]; 15: MUL temp[5], temp[5], const[7].xxxx; 16: MUL temp[6], temp[0], const[4]; 17: MUL temp[6], temp[5], temp[6]; 18: DP3 temp[3], input[1], temp[4]; 19: ADD temp[3], temp[3], temp[3]; 20: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 21: TEX temp[8], temp[7], CUBE[3]; 22: TEX temp[9], input[2], 2D[4]; 23: ADD temp[1], temp[9], temp[9]; 24: MAD temp[6], temp[1], temp[8], temp[6]; 25: MUL temp[3], temp[6], input[0]; 26: DP3 temp[1], input[1], temp[4]; 27: ADD temp[1], const[6].zzzz, -temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[1], temp[1], temp[1]; 30: MUL temp[10], temp[1], const[5]; 31: MUL temp[11], temp[10], temp[5]; 32: MAD temp[11], temp[10], const[6].wwww, temp[11]; 33: TEX temp[12], input[2], 2D[5]; 34: MUL_SAT temp[5], temp[5], const[7].zzzz; 35: MAD temp[1], temp[12], -temp[5].xxxx, temp[12]; 36: ADD output[0].xyz, temp[3], temp[11]; 37: SUB temp[1], const[6].zzzz, temp[10]; 38: MUL output[0].w, temp[0].wwww, temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: TEX temp[2], input[2], 2D[1]; 3: MOV temp[2].x, temp[2].wwww; 4: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 5: MOV temp[2].z, const[6].yyyy; 6: DP3 temp[3].x, temp[2], temp[2]; 7: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 8: RSQ temp[3].x, temp[3].xxxx; 9: RCP temp[2].z, temp[3].xxxx; 10: DP3 temp[4].x, input[3], temp[2]; 11: DP3 temp[4].y, input[4], temp[2]; 12: DP3 temp[4].z, input[5], temp[2]; 13: TEX temp[5], temp[4], CUBE[2]; 14: MUL temp[5], temp[5], const[3]; 15: MUL temp[5], temp[5], const[7].xxxx; 16: MUL temp[6], temp[0], const[4]; 17: MUL temp[6], temp[5], temp[6]; 18: DP3 temp[3], input[1], temp[4]; 19: ADD temp[3], temp[3], temp[3]; 20: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 21: TEX temp[8], temp[7], CUBE[3]; 22: TEX temp[9], input[2], 2D[4]; 23: ADD temp[1], temp[9], temp[9]; 24: MAD temp[6], temp[1], temp[8], temp[6]; 25: MUL temp[3], temp[6], input[0]; 26: DP3 temp[1], input[1], temp[4]; 27: ADD temp[1], const[6].zzzz, -temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[1], temp[1], temp[1]; 30: MUL temp[10], temp[1], const[5]; 31: MUL temp[11], temp[10], temp[5]; 32: MAD temp[11], temp[10], const[6].wwww, temp[11]; 33: TEX temp[12], input[2], 2D[5]; 34: MUL_SAT temp[5], temp[5], const[7].zzzz; 35: MAD temp[1], temp[12], -temp[5].xxxx, temp[12]; 36: ADD_SAT output[0].xyz, temp[3], temp[11]; 37: SUB temp[1], const[6].zzzz, temp[10]; 38: MUL_SAT output[0].w, temp[0].wwww, temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: SUB temp[1].w, temp[0].wwww, const[6].xxxx; 2: TEX temp[2], input[2], 2D[1]; 3: MOV temp[2].x, temp[2].wwww; 4: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 5: MOV temp[2].z, const[6].yyyy; 6: DP3 temp[3].x, temp[2], temp[2]; 7: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 8: RSQ temp[3].x, temp[3].xxxx; 9: RCP temp[2].z, temp[3].xxxx; 10: DP3 temp[4].x, input[3], temp[2]; 11: DP3 temp[4].y, input[4], temp[2]; 12: DP3 temp[4].z, input[5], temp[2]; 13: TEX temp[5], temp[4], CUBE[2]; 14: MUL temp[5], temp[5], const[3]; 15: MUL temp[5], temp[5], const[7].xxxx; 16: MUL temp[6], temp[0], const[4]; 17: MUL temp[6], temp[5], temp[6]; 18: DP3 temp[3], input[1], temp[4]; 19: ADD temp[3], temp[3], temp[3]; 20: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 21: TEX temp[8], temp[7], CUBE[3]; 22: TEX temp[9], input[2], 2D[4]; 23: ADD temp[1], temp[9], temp[9]; 24: MAD temp[6], temp[1], temp[8], temp[6]; 25: MUL temp[3], temp[6], input[0]; 26: DP3 temp[1], input[1], temp[4]; 27: ADD temp[1], const[6].zzzz, -temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[1], temp[1], temp[1]; 30: MUL temp[10], temp[1], const[5]; 31: MUL temp[11], temp[10], temp[5]; 32: MAD temp[11], temp[10], const[6].wwww, temp[11]; 33: TEX temp[12], input[2], 2D[5]; 34: MUL_SAT temp[5], temp[5], const[7].zzzz; 35: MAD temp[1], temp[12], -temp[5].xxxx, temp[12]; 36: ADD_SAT output[0].xyz, temp[3], temp[11]; 37: SUB temp[1], const[6].zzzz, temp[10]; 38: MUL_SAT output[0].w, temp[0].wwww, temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: ADD temp[1].w, temp[0].wwww, -const[6].xxxx; 2: TEX temp[2], input[2], 2D[1]; 3: MOV temp[2].x, temp[2].wwww; 4: MAD temp[2].xy, temp[2], const[7].xxxx, const[7].yyyy; 5: MOV temp[2].z, const[6].yyyy; 6: DP3 temp[3].x, temp[2], temp[2]; 7: ADD temp[3].x, const[6].zzzz, -temp[3].xxxx; 8: RSQ temp[3].x, |temp[3].xxxx|; 9: RCP temp[2].z, temp[3].xxxx; 10: DP3 temp[4].x, input[3], temp[2]; 11: DP3 temp[4].y, input[4], temp[2]; 12: DP3 temp[4].z, input[5], temp[2]; 13: TEX temp[5], temp[4], CUBE[2]; 14: MUL temp[5], temp[5], const[3]; 15: MUL temp[5], temp[5], const[7].xxxx; 16: MUL temp[6], temp[0], const[4]; 17: MUL temp[6], temp[5], temp[6]; 18: DP3 temp[3], input[1], temp[4]; 19: ADD temp[3], temp[3], temp[3]; 20: MAD temp[7], temp[4], temp[3].xxxx, -input[1]; 21: TEX temp[8], temp[7], CUBE[3]; 22: TEX temp[9], input[2], 2D[4]; 23: ADD temp[1], temp[9], temp[9]; 24: MAD temp[6], temp[1], temp[8], temp[6]; 25: MUL temp[3], temp[6], input[0]; 26: DP3 temp[1], input[1], temp[4]; 27: ADD temp[1], const[6].zzzz, -temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[1], temp[1], temp[1]; 30: MUL temp[10], temp[1], const[5]; 31: MUL temp[11], temp[10], temp[5]; 32: MAD temp[11], temp[10], const[6].wwww, temp[11]; 33: TEX temp[12], input[2], 2D[5]; 34: MUL_SAT temp[5], temp[5], const[7].zzzz; 35: MAD temp[1], temp[12], -temp[5].xxxx, temp[12]; 36: ADD_SAT output[0].xyz, temp[3], temp[11]; 37: ADD temp[1], const[6].zzzz, -temp[10]; 38: MUL_SAT output[0].w, temp[0].wwww, temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: MOV temp[2].x, temp[2].w___; 3: MAD temp[2].xy, temp[2].xy__, const[7].xx__, const[7].yy__; 4: MOV temp[2].z, const[6].__y_; 5: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 6: ADD temp[3].x, const[6].z___, -temp[3].x___; 7: RSQ temp[3].x, |temp[3].x___|; 8: RCP temp[2].z, temp[3].x___; 9: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 10: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 11: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 12: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 13: MUL temp[5].xyz, temp[5].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[5].xyz_, const[7].xxx_; 15: MUL temp[6].xyz, temp[0].xyz_, const[4].xyz_; 16: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 17: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 18: ADD temp[3].x, temp[3].x___, temp[3].x___; 19: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 20: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 21: TEX temp[9].xyz, input[2].xy__, 2D[4]; 22: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 23: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 24: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 25: DP3 temp[1], input[1].xyz_, temp[4].xyz_; 26: ADD temp[1], const[6].zzzz, -temp[1]; 27: MUL temp[1], temp[1], temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[10], temp[1], const[5]; 30: MUL temp[11].xyz, temp[10].xyz_, temp[5].xyz_; 31: MAD temp[11].xyz, temp[10].xyz_, const[6].www_, temp[11].xyz_; 32: ADD_SAT output[0].xyz, temp[3].xyz_, temp[11].xyz_; 33: ADD temp[1].w, const[6].___z, -temp[10].___w; 34: MUL_SAT output[0].w, temp[0].___w, temp[1].___w; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: MOV temp[2].x, temp[2].w___; 3: MAD temp[2].xy, temp[2].xy__, const[7].xx__, const[7].yy__; 4: MOV temp[2].z, const[6].__y_; 5: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 6: ADD temp[3].x, const[6].z___, -temp[3].x___; 7: RSQ temp[3].x, |temp[3].x___|; 8: RCP temp[2].z, temp[3].x___; 9: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 10: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 11: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 12: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 13: MUL temp[5].xyz, temp[5].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[5].xyz_, const[7].xxx_; 15: MUL temp[6].xyz, temp[0].xyz_, const[4].xyz_; 16: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 17: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 18: ADD temp[3].x, temp[3].x___, temp[3].x___; 19: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 20: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 21: TEX temp[9].xyz, input[2].xy__, 2D[4]; 22: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 23: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 24: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 25: DP3 temp[1], input[1].xyz_, temp[4].xyz_; 26: ADD temp[1], const[6].zzzz, -temp[1]; 27: MUL temp[1], temp[1], temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[10], temp[1], const[5]; 30: MUL temp[11].xyz, temp[10].xyz_, temp[5].xyz_; 31: MAD temp[11].xyz, temp[10].xyz_, const[6].www_, temp[11].xyz_; 32: ADD_SAT output[0].xyz, temp[3].xyz_, temp[11].xyz_; 33: ADD temp[1].w, const[6].___z, -temp[10].___w; 34: MUL_SAT output[0].w, temp[0].___w, temp[1].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: MOV temp[2].x, temp[2].w___; 3: MAD temp[2].xy, temp[2].xy__, const[7].xx__, none.-1-1__; 4: MOV temp[2].z, none.__0_; 5: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 6: ADD temp[3].x, none.1___, -temp[3].x___; 7: RSQ temp[3].x, |temp[3].x___|; 8: RCP temp[2].z, temp[3].x___; 9: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 10: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 11: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 12: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 13: MUL temp[5].xyz, temp[5].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[5].xyz_, const[7].xxx_; 15: MUL temp[6].xyz, temp[0].xyz_, const[4].xyz_; 16: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 17: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 18: ADD temp[3].x, temp[3].x___, temp[3].x___; 19: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 20: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 21: TEX temp[9].xyz, input[2].xy__, 2D[4]; 22: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 23: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 24: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 25: DP3 temp[1], input[1].xyz_, temp[4].xyz_; 26: ADD temp[1], none.1111, -temp[1]; 27: MUL temp[1], temp[1], temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[10], temp[1], const[5]; 30: MUL temp[11].xyz, temp[10].xyz_, temp[5].xyz_; 31: MAD temp[11].xyz, temp[10].xyz_, const[6].www_, temp[11].xyz_; 32: ADD_SAT output[0].xyz, temp[3].xyz_, temp[11].xyz_; 33: MUL_SAT output[0].w, temp[0].___w, (1 - temp[10]).___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: MOV temp[2].x, temp[2].w___; 3: MAD temp[2].xy, temp[2].xy__, const[7].xx__, none.-1-1__; 4: MOV temp[2].z, none.__0_; 5: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 6: ADD temp[3].x, none.1___, -temp[3].x___; 7: RSQ temp[3].x, |temp[3].x___|; 8: RCP temp[2].z, temp[3].x___; 9: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 10: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 11: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 12: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 13: MUL temp[5].xyz, temp[5].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[5].xyz_, const[7].xxx_; 15: MUL temp[6].xyz, temp[0].xyz_, const[4].xyz_; 16: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 17: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 18: ADD temp[3].x, temp[3].x___, temp[3].x___; 19: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 20: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 21: TEX temp[9].xyz, input[2].xy__, 2D[4]; 22: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 23: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 24: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 25: DP3 temp[1], input[1].xyz_, temp[4].xyz_; 26: ADD temp[1], none.1111, -temp[1]; 27: MUL temp[1], temp[1], temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[10], temp[1], const[5]; 30: MUL temp[11].xyz, temp[10].xyz_, temp[5].xyz_; 31: MAD temp[11].xyz, temp[10].xyz_, const[6].www_, temp[11].xyz_; 32: ADD_SAT output[0].xyz, temp[3].xyz_, temp[11].xyz_; 33: MUL_SAT output[0].w, temp[0].___w, (1 - temp[10]).___w; CONST[3] = { 0.0010 0.0000 1.0000 0.1000 } CONST[4] = { 2.0000 -1.0000 8.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: MOV temp[2].x, temp[2].w___; 3: MAD temp[2].xy, temp[2].xy__, const[4].xx__, none.-1-1__; 4: MOV temp[2].z, none.__0_; 5: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 6: ADD temp[3].x, none.1___, -temp[3].x___; 7: RSQ temp[3].x, |temp[3].x___|; 8: RCP temp[2].z, temp[3].x___; 9: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 10: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 11: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 12: TEX temp[5].xyz, temp[4].xyz_, CUBE[2]; 13: MUL temp[5].xyz, temp[5].xyz_, const[0].xyz_; 14: MUL temp[5].xyz, temp[5].xyz_, const[4].xxx_; 15: MUL temp[6].xyz, temp[0].xyz_, const[1].xyz_; 16: MUL temp[6].xyz, temp[5].xyz_, temp[6].xyz_; 17: DP3 temp[3].x, input[1].xyz_, temp[4].xyz_; 18: ADD temp[3].x, temp[3].x___, temp[3].x___; 19: MAD temp[7].xyz, temp[4].xyz_, temp[3].xxx_, -input[1].xyz_; 20: TEX temp[8].xyz, temp[7].xyz_, CUBE[3]; 21: TEX temp[9].xyz, input[2].xy__, 2D[4]; 22: ADD temp[1].xyz, temp[9].xyz_, temp[9].xyz_; 23: MAD temp[6].xyz, temp[1].xyz_, temp[8].xyz_, temp[6].xyz_; 24: MUL temp[3].xyz, temp[6].xyz_, input[0].xyz_; 25: DP3 temp[1], input[1].xyz_, temp[4].xyz_; 26: ADD temp[1], none.1111, -temp[1]; 27: MUL temp[1], temp[1], temp[1]; 28: MUL temp[1], temp[1], temp[1]; 29: MUL temp[10], temp[1], const[2]; 30: MUL temp[11].xyz, temp[10].xyz_, temp[5].xyz_; 31: MAD temp[11].xyz, temp[10].xyz_, const[3].www_, temp[11].xyz_; 32: ADD_SAT output[0].xyz, temp[3].xyz_, temp[11].xyz_; 33: MUL_SAT output[0].w, temp[0].___w, (1 - temp[10]).___w; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[12], input[2].xy__, 2D[0]; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: MOV temp[2].x, temp[2].w___; 3: MAD temp[2].xy, temp[2].xy__, const[4].xx__, none.-1-1__; 4: MOV temp[2].z, none.__0_; 5: DP3 temp[13].x, temp[2].xyz_, temp[2].xyz_; 6: ADD temp[14].x, none.1___, -temp[13].x___; 7: RSQ temp[15].x, |temp[14].x___|; 8: RCP temp[2].z, temp[15].x___; 9: DP3 temp[4].x, input[3].xyz_, temp[2].xyz_; 10: DP3 temp[4].y, input[4].xyz_, temp[2].xyz_; 11: DP3 temp[4].z, input[5].xyz_, temp[2].xyz_; 12: TEX temp[16].xyz, temp[4].xyz_, CUBE[2]; 13: MUL temp[17].xyz, temp[16].xyz_, const[0].xyz_; 14: MUL temp[18].xyz, temp[17].xyz_, const[4].xxx_; 15: MUL temp[19].xyz, temp[12].xyz_, const[1].xyz_; 16: MUL temp[20].xyz, temp[18].xyz_, temp[19].xyz_; 17: DP3 temp[21].x, input[1].xyz_, temp[4].xyz_; 18: ADD temp[22].x, temp[21].x___, temp[21].x___; 19: MAD temp[23].xyz, temp[4].xyz_, temp[22].xxx_, -input[1].xyz_; 20: TEX temp[24].xyz, temp[23].xyz_, CUBE[3]; 21: TEX temp[25].xyz, input[2].xy__, 2D[4]; 22: ADD temp[26].xyz, temp[25].xyz_, temp[25].xyz_; 23: MAD temp[27].xyz, temp[26].xyz_, temp[24].xyz_, temp[20].xyz_; 24: MUL temp[28].xyz, temp[27].xyz_, input[0].xyz_; 25: DP3 temp[29], input[1].xyz_, temp[4].xyz_; 26: ADD temp[30], none.1111, -temp[29]; 27: MUL temp[31], temp[30], temp[30]; 28: MUL temp[32], temp[31], temp[31]; 29: MUL temp[33], temp[32], const[2]; 30: MUL temp[34].xyz, temp[33].xyz_, temp[18].xyz_; 31: MAD temp[35].xyz, temp[33].xyz_, const[3].www_, temp[34].xyz_; 32: ADD_SAT output[0].xyz, temp[28].xyz_, temp[35].xyz_; 33: MUL_SAT output[0].w, temp[12].___w, (1 - temp[33]).___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[12], input[2].xy__, 2D[0]; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.111, src0.000 3: src0.xyz = temp[2], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 4: MAD temp[2].z, src0.__0, src0.111, src0.000 5: src0.xyz = temp[2] DP3 temp[13].x, src0.xyz, src0.xyz 6: src0.xyz = temp[13] MAD temp[14].x, src0.1__, src0.111, -src0.x__ 7: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 8: src0.xyz = temp[15] REPL_ALPHA temp[2].z RCP, src0.x 9: src0.xyz = input[3], src1.xyz = temp[2] DP3 temp[4].x, src0.xyz, src1.xyz 10: src0.xyz = input[4], src1.xyz = temp[2] DP3 temp[4].y, src0.xyz, src1.xyz 11: src0.xyz = input[5], src1.xyz = temp[2] DP3 temp[4].z, src0.xyz, src1.xyz 12: TEX temp[16].xyz, temp[4].xyz_, CUBE[2]; 13: src0.xyz = temp[16], src1.xyz = const[0] MAD temp[17].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = temp[17], src1.xyz = const[4] MAD temp[18].xyz, src0.xyz, src1.xxx, src0.000 15: src0.xyz = temp[12], src1.xyz = const[1] MAD temp[19].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[18], src1.xyz = temp[19] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 17: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[21].x, src0.xyz, src1.xyz 18: src0.xyz = temp[21] MAD temp[22].x, src0.x__, src0.111, src0.x__ 19: src0.xyz = temp[4], src1.xyz = temp[22], src2.xyz = input[1] MAD temp[23].xyz, src0.xyz, src1.xxx, -src2.xyz 20: TEX temp[24].xyz, temp[23].xyz_, CUBE[3]; 21: TEX temp[25].xyz, input[2].xy__, 2D[4]; 22: src0.xyz = temp[25] MAD temp[26].xyz, src0.xyz, src0.111, src0.xyz 23: src0.xyz = temp[26], src1.xyz = temp[24], src2.xyz = temp[20] MAD temp[27].xyz, src0.xyz, src1.xyz, src2.xyz 24: src0.xyz = temp[27], src1.xyz = input[0] MAD temp[28].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[29].xyz, src0.xyz, src1.xyz DP3 temp[29].w, src0._, src0._ 26: src0.xyz = temp[29], src0.w = temp[29] MAD temp[30].xyz, src0.111, src0.111, -src0.xyz MAD temp[30].w, src0.1, src0.1, -src0.w 27: src0.xyz = temp[30], src0.w = temp[30] MAD temp[31].xyz, src0.xyz, src0.xyz, src0.000 MAD temp[31].w, src0.w, src0.w, src0.0 28: src0.xyz = temp[31], src0.w = temp[31] MAD temp[32].xyz, src0.xyz, src0.xyz, src0.000 MAD temp[32].w, src0.w, src0.w, src0.0 29: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = const[2], src1.w = const[2] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[33].w, src0.w, src1.w, src0.0 30: src0.xyz = temp[33], src1.xyz = temp[18] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[33], src0.w = const[3], src1.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src0.www, src1.xyz 32: src0.xyz = temp[28], src1.xyz = temp[35] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz 33: src0.w = temp[33], src1.w = temp[12], srcp.w = (1 - src0) MAD_SAT color[0].w, src1.w, srcp.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[12], input[2].xy__, 2D[0]; 2: TEX temp[2].yw, input[2].xy__, 2D[1]; 3: TEX temp[25].xyz, input[2].xy__, 2D[4]; 4: src0.xyz = temp[25] MAD temp[26].xyz, src0.xyz, src0.111, src0.xyz 5: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.111, src0.000 6: src0.xyz = temp[2], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[12], src1.xyz = const[1] MAD temp[19].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[2].z, src0.__0, src0.111, src0.000 9: src0.xyz = temp[2] DP3 temp[13].x, src0.xyz, src0.xyz 10: src0.xyz = temp[13] MAD temp[14].x, src0.1__, src0.111, -src0.x__ 11: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 12: src0.xyz = temp[15] REPL_ALPHA temp[2].z RCP, src0.x 13: src0.xyz = input[3], src1.xyz = temp[2] DP3 temp[4].x, src0.xyz, src1.xyz 14: src0.xyz = input[4], src1.xyz = temp[2] DP3 temp[4].y, src0.xyz, src1.xyz 15: src0.xyz = input[5], src1.xyz = temp[2] DP3 temp[4].z, src0.xyz, src1.xyz 16: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[29].xyz, src0.xyz, src1.xyz DP3 temp[29].w, src0._, src0._ 17: src0.xyz = temp[29], src0.w = temp[29] MAD temp[30].xyz, src0.111, src0.111, -src0.xyz MAD temp[30].w, src0.1, src0.1, -src0.w 18: src0.xyz = temp[30], src0.w = temp[30] MAD temp[31].xyz, src0.xyz, src0.xyz, src0.000 MAD temp[31].w, src0.w, src0.w, src0.0 19: src0.xyz = temp[31], src0.w = temp[31] MAD temp[32].xyz, src0.xyz, src0.xyz, src0.000 MAD temp[32].w, src0.w, src0.w, src0.0 20: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = const[2], src1.w = const[2] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[33].w, src0.w, src1.w, src0.0 21: src0.xyz = input[1], src0.w = temp[33], src1.xyz = temp[4], src1.w = temp[12], srcp.w = (1 - src0) DP3 temp[21].x, src0.xyz, src1.xyz MAD_SAT color[0].w, src1.w, srcp.w, src0.0 22: src0.xyz = temp[21] MAD temp[22].x, src0.x__, src0.111, src0.x__ 23: src0.xyz = temp[4], src1.xyz = temp[22], src2.xyz = input[1] MAD temp[23].xyz, src0.xyz, src1.xxx, -src2.xyz 24: BEGIN_TEX; 25: TEX temp[16].xyz, temp[4].xyz_, CUBE[2]; 26: TEX temp[24].xyz, temp[23].xyz_, CUBE[3]; 27: src0.xyz = temp[16], src1.xyz = const[0] MAD temp[17].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[17], src1.xyz = const[4] MAD temp[18].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[18], src1.xyz = temp[19] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[26], src1.xyz = temp[24], src2.xyz = temp[20] MAD temp[27].xyz, src0.xyz, src1.xyz, src2.xyz 31: src0.xyz = temp[27], src1.xyz = input[0] MAD temp[28].xyz, src0.xyz, src1.xyz, src0.000 32: src0.xyz = temp[33], src1.xyz = temp[18] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[33], src0.w = const[3], src1.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src0.www, src1.xyz 34: src0.xyz = temp[28], src1.xyz = temp[35] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[12], input[2].xy__, 2D[0]; 2: TEX temp[2].yw, input[2].xy__, 2D[1]; 3: TEX temp[25].xyz, input[2].xy__, 2D[4]; 4: src0.xyz = temp[25] MAD temp[26].xyz, src0.xyz, src0.111, src0.xyz 5: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.111, src0.000 6: src0.xyz = temp[2], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[12], src1.xyz = const[1] MAD temp[19].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[2].z, src0.__0, src0.111, src0.000 9: src0.xyz = temp[2] DP3 temp[13].x, src0.xyz, src0.xyz 10: src0.xyz = temp[13] MAD temp[14].x, src0.1__, src0.111, -src0.x__ 11: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 12: src0.xyz = temp[15] REPL_ALPHA temp[2].z RCP, src0.x 13: src0.xyz = input[3], src1.xyz = temp[2] DP3 temp[4].x, src0.xyz, src1.xyz 14: src0.xyz = input[4], src1.xyz = temp[2] DP3 temp[4].y, src0.xyz, src1.xyz 15: src0.xyz = input[5], src1.xyz = temp[2] DP3 temp[4].z, src0.xyz, src1.xyz 16: src0.xyz = input[1], src1.xyz = temp[4] DP3 temp[29].xyz, src0.xyz, src1.xyz DP3 temp[29].w, src0._, src0._ 17: src0.xyz = temp[29], src0.w = temp[29] MAD temp[30].xyz, src0.111, src0.111, -src0.xyz MAD temp[30].w, src0.1, src0.1, -src0.w 18: src0.xyz = temp[30], src0.w = temp[30] MAD temp[31].xyz, src0.xyz, src0.xyz, src0.000 MAD temp[31].w, src0.w, src0.w, src0.0 19: src0.xyz = temp[31], src0.w = temp[31] MAD temp[32].xyz, src0.xyz, src0.xyz, src0.000 MAD temp[32].w, src0.w, src0.w, src0.0 20: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = const[2], src1.w = const[2] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[33].w, src0.w, src1.w, src0.0 21: src0.xyz = input[1], src0.w = temp[33], src1.xyz = temp[4], src1.w = temp[12], srcp.w = (1 - src0) DP3 temp[21].x, src0.xyz, src1.xyz MAD_SAT color[0].w, src1.w, srcp.w, src0.0 22: src0.xyz = temp[21] MAD temp[22].x, src0.x__, src0.111, src0.x__ 23: src0.xyz = temp[4], src1.xyz = temp[22], src2.xyz = input[1] MAD temp[23].xyz, src0.xyz, src1.xxx, -src2.xyz 24: BEGIN_TEX; 25: TEX temp[16].xyz, temp[4].xyz_, CUBE[2]; 26: TEX temp[24].xyz, temp[23].xyz_, CUBE[3]; 27: src0.xyz = temp[16], src1.xyz = const[0] MAD temp[17].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[17], src1.xyz = const[4] MAD temp[18].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[18], src1.xyz = temp[19] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[26], src1.xyz = temp[24], src2.xyz = temp[20] MAD temp[27].xyz, src0.xyz, src1.xyz, src2.xyz 31: src0.xyz = temp[27], src1.xyz = input[0] MAD temp[28].xyz, src0.xyz, src1.xyz, src0.000 32: src0.xyz = temp[33], src1.xyz = temp[18] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[33], src0.w = const[3], src1.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src0.www, src1.xyz 34: src0.xyz = temp[28], src1.xyz = temp[35] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[2].xy__, 2D[0]; 2: TEX temp[7].yw, input[2].xy__, 2D[1]; 3: TEX temp[2].xyz, input[2].xy__, 2D[4]; 4: src0.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, src0.xyz 5: src0.w = temp[7] MAD temp[7].x, src0.w__, src0.11_, src0.00_ 6: src0.xyz = temp[7], src1.xyz = const[4] MAD temp[7].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[6], src1.xyz = const[1] MAD temp[8].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[7].z, src0.__0, src0.111, src0.000 9: src0.xyz = temp[7] DP3 temp[9].x, src0.xyz, src0.xyz 10: src0.xyz = temp[9] MAD temp[9].x, src0.1__, src0.1__, -src0.x__ 11: src0.xyz = temp[9] REPL_ALPHA temp[9].x RSQ, |src0.x| 12: src0.xyz = temp[9] REPL_ALPHA temp[7].z RCP, src0.x 13: src0.xyz = input[3], src1.xyz = temp[7] DP3 temp[3].x, src0.xyz, src1.xyz 14: src0.xyz = input[4], src1.xyz = temp[7] DP3 temp[3].y, src0.xyz, src1.xyz 15: src0.xyz = input[5], src1.xyz = temp[7] DP3 temp[3].z, src0.xyz, src1.xyz 16: src0.xyz = input[1], src1.xyz = temp[3] DP3 temp[4].xyz, src0.xyz, src1.xyz DP3 temp[0].w, src0._, src0._ 17: src0.xyz = temp[4], src0.w = temp[0] MAD temp[4].xyz, src0.111, src0.111, -src0.xyz MAD temp[0].w, src0.1, src0.1, -src0.w 18: src0.xyz = temp[4], src0.w = temp[0] MAD temp[4].xyz, src0.xyz, src0.xyz, src0.000 MAD temp[0].w, src0.w, src0.w, src0.0 19: src0.xyz = temp[4], src0.w = temp[0] MAD temp[4].xyz, src0.xyz, src0.xyz, src0.000 MAD temp[0].w, src0.w, src0.w, src0.0 20: src0.xyz = temp[4], src0.w = temp[0], src1.xyz = const[2], src1.w = const[2] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 21: src0.xyz = input[1], src0.w = temp[0], src1.xyz = temp[3], src1.w = temp[6], srcp.w = (1 - src0) DP3 temp[5].x, src0.xyz, src1.xyz MAD_SAT color[0].w, src1.w, srcp.w, src0.0 22: src0.xyz = temp[5] MAD temp[5].x, src0.x__, src0.1__, src0.x__ 23: src0.xyz = temp[3], src1.xyz = temp[5], src2.xyz = input[1] MAD temp[1].xyz, src0.xyz, src1.xxx, -src2.xyz 24: BEGIN_TEX; 25: TEX temp[3].xyz, temp[3].xyz_, CUBE[2]; 26: TEX temp[1].xyz, temp[1].xyz_, CUBE[3]; 27: src0.xyz = temp[3], src1.xyz = const[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[3], src1.xyz = temp[8] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[2], src1.xyz = temp[1], src2.xyz = temp[5] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 31: src0.xyz = temp[1], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 32: src0.xyz = temp[4], src1.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[4], src0.w = const[3], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src1.xyz 34: src0.xyz = temp[0], src1.xyz = temp[1] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz pc=6************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 19, tex_end: 2 (code_addr: 004404c0) TEX: TEX t6, t2, texture[0] (00008182) TEX t7, t2, texture[1] (000089c2) TEX t2, t2, texture[4] (0000a082) 0: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 t2.xyz op: 00000a80 w: t2.x t2.x t2.x op: 00000000 1: xyz: t0 t0 t0 bias-> t7.x (009c0000) w: t7 t0 t0 bias-> (00000007) xyz: t7.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t7 c4 t0 bias-> t7.xy (019c0907) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz c4.xxx -1.0 op: 000d4280 w: t7.x t7.x t7.x op: 00000000 3: xyz: t6 c1 t0 bias-> t8.xyz (03a00846) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c1.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 4: xyz: t0 t0 t0 bias-> t7.z (021c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 5: xyz: t7 t0 t0 bias-> t9.x (00a40007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t7.xyz t7.xxx op: 00804000 w: t7.x t7.x t7.x op: 00000000 6: xyz: t9 t0 t0 bias-> t9.x (00a40009) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t9.xyz op: 00080a95 w: t9.x t9.x t9.x op: 00000000 7: xyz: t9 t0 t0 bias-> t9.x (00a40009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xxx t9.xxx t9.xxx op: 05004081 w: |t9.x| t9.x t9.x op: 05800040 8: xyz: t9 t0 t0 bias-> t7.z (021c0009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xxx t9.xxx t9.xxx op: 05004081 w: t9.x t9.x t9.x op: 05000000 9: xyz: t3 t7 t0 bias-> t3.x (008c01c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 10: xyz: t4 t7 t0 bias-> t3.y (010c01c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t7.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 11: xyz: t5 t7 t0 bias-> t3.z (020c01c5) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t7.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 12: xyz: t1 t3 t0 bias-> t4.xyz (039000c1) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xyz t3.xyz t1.xxx op: 00804200 w: 1.0 1.0 t1.x op: 00800891 13: xyz: t4 t0 t0 bias-> t4.xyz (03900004) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 1.0 1.0 -t4.xyz op: 00080a95 w: 1.0 1.0 -t0.w op: 000a4891 14: xyz: t4 t0 t0 bias-> t4.xyz (03900004) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t4.xyz t4.xyz 0.0 op: 00050000 w: t0.w t0.w 0.0 op: 00040489 15: xyz: t4 t0 t0 bias-> t4.xyz (03900004) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t4.xyz t4.xyz 0.0 op: 00050000 w: t0.w t0.w 0.0 op: 00040489 16: xyz: t4 c2 t0 bias-> t4.xyz (03900884) w: t0 c2 t0 bias-> t0.w (00800880) xyz: t4.xyz c2.xyz 0.0 op: 80050200 NOP w: t0.w c2.w 0.0 op: 00040509 17: xyz: t1 t3 t0 bias-> t5.x (009400c1) w: t0 t6 t0 inv -> o0.w (01000180) xyz: t1.xyz t3.xyz t1.xxx op: 00804200 w: t6.w srcp.w 0.0 op: 4064078a 18: xyz: t5 t0 t0 bias-> t5.x (00940005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz 1.0 t5.xyz op: 00000a80 w: t5.x t5.x t5.x op: 00000000 19: xyz: t3 t5 t1 bias-> t1.xyz (03841143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xxx -t1.xyz op: 000a0280 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 20, tex_offset: 3, alu_end: 7, tex_end: 1 (code_addr: 004231d4) TEX: TEX t3, t3, texture[2] (000090c3) TEX t1, t1, texture[3] (00009841) 20: xyz: t3 c0 t0 bias-> t3.xyz (038c0803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 21: xyz: t3 c4 t0 bias-> t3.xyz (038c0903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 22: xyz: t3 t8 t0 bias-> t5.xyz (03940203) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t8.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 23: xyz: t2 t1 t5 bias-> t1.xyz (03845042) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t1.xyz t5.xyz op: 00020200 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.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 25: xyz: t4 t3 t0 bias-> t1.xyz (038400c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 26: xyz: t4 t1 t0 bias-> t1.xyz (03840044) w: c3 t0 t0 bias-> (00000023) xyz: t4.xyz c3.www t1.xyz op: 00010600 w: t4.x t4.x t4.x op: 00000000 27: xyz: t0 t1 t0 bias-> o0.xyz (1c000040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 t1.xyz op: 40010a80 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[1], PERSPECTIVE DCL IN[1], GENERIC[2], PERSPECTIVE DCL IN[2], GENERIC[5], PERSPECTIVE DCL IN[3], GENERIC[6], PERSPECTIVE DCL IN[4], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[3] DCL TEMP[0..3] IMM FLT32 { 2.0000, -1.0000, 0.0000, 1.0000} IMM FLT32 { 0.0000, 1.0000, 5.0000, 0.0000} 0: TEX TEMP[0], IN[0], SAMP[0], 2D 1: MOV TEMP[0].x, TEMP[0].wwww 2: MAD TEMP[0].xy, TEMP[0], IMM[0].xxxx, IMM[0].yyyy 3: MOV TEMP[0].z, IMM[1].xxxx 4: DP3 TEMP[1].x, TEMP[0], TEMP[0] 5: ADD TEMP[1].x, IMM[1].yyyy, -TEMP[1].xxxx 6: RSQ TEMP[1].x, TEMP[1].xxxx 7: RCP TEMP[0].z, TEMP[1].xxxx 8: DP3 TEMP[2].x, IN[2], TEMP[0] 9: DP3 TEMP[2].y, IN[3], TEMP[0] 10: DP3 TEMP[2].z, IN[4], TEMP[0] 11: DP3 TEMP[3], IN[1], TEMP[2] 12: MUL TEMP[3], TEMP[3], TEMP[3] 13: MUL_SAT TEMP[3], TEMP[3], IMM[1].zzzz 14: MUL TEMP[3], TEMP[3], CONST[3] 15: MOV OUT[0].xyz, TEMP[3] 16: MOV OUT[0].w, IMM[1].yyyy 17: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[0].xy, temp[0], const[4].xxxx, const[4].yyyy; 3: MOV temp[0].z, const[5].xxxx; 4: DP3 temp[1].x, temp[0], temp[0]; 5: ADD temp[1].x, const[5].yyyy, -temp[1].xxxx; 6: RSQ temp[1].x, temp[1].xxxx; 7: RCP temp[0].z, temp[1].xxxx; 8: DP3 temp[2].x, input[2], temp[0]; 9: DP3 temp[2].y, input[3], temp[0]; 10: DP3 temp[2].z, input[4], temp[0]; 11: DP3 temp[3], input[1], temp[2]; 12: MUL temp[3], temp[3], temp[3]; 13: MUL_SAT temp[3], temp[3], const[5].zzzz; 14: MUL temp[3], temp[3], const[3]; 15: MOV output[0].xyz, temp[3]; 16: MOV output[0].w, const[5].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[0].xy, temp[0], const[4].xxxx, const[4].yyyy; 3: MOV temp[0].z, const[5].xxxx; 4: DP3 temp[1].x, temp[0], temp[0]; 5: ADD temp[1].x, const[5].yyyy, -temp[1].xxxx; 6: RSQ temp[1].x, temp[1].xxxx; 7: RCP temp[0].z, temp[1].xxxx; 8: DP3 temp[2].x, input[2], temp[0]; 9: DP3 temp[2].y, input[3], temp[0]; 10: DP3 temp[2].z, input[4], temp[0]; 11: DP3 temp[3], input[1], temp[2]; 12: MUL temp[3], temp[3], temp[3]; 13: MUL_SAT temp[3], temp[3], const[5].zzzz; 14: MUL temp[3], temp[3], const[3]; 15: MOV output[0].xyz, temp[3]; 16: MOV output[0].w, const[5].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[0].xy, temp[0], const[4].xxxx, const[4].yyyy; 3: MOV temp[0].z, const[5].xxxx; 4: DP3 temp[1].x, temp[0], temp[0]; 5: ADD temp[1].x, const[5].yyyy, -temp[1].xxxx; 6: RSQ temp[1].x, temp[1].xxxx; 7: RCP temp[0].z, temp[1].xxxx; 8: DP3 temp[2].x, input[2], temp[0]; 9: DP3 temp[2].y, input[3], temp[0]; 10: DP3 temp[2].z, input[4], temp[0]; 11: DP3 temp[3], input[1], temp[2]; 12: MUL temp[3], temp[3], temp[3]; 13: MUL_SAT temp[3], temp[3], const[5].zzzz; 14: MUL temp[3], temp[3], const[3]; 15: MOV output[0].xyz, temp[3]; 16: MOV output[0].w, const[5].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[0].xy, temp[0], const[4].xxxx, const[4].yyyy; 3: MOV temp[0].z, const[5].xxxx; 4: DP3 temp[1].x, temp[0], temp[0]; 5: ADD temp[1].x, const[5].yyyy, -temp[1].xxxx; 6: RSQ temp[1].x, temp[1].xxxx; 7: RCP temp[0].z, temp[1].xxxx; 8: DP3 temp[2].x, input[2], temp[0]; 9: DP3 temp[2].y, input[3], temp[0]; 10: DP3 temp[2].z, input[4], temp[0]; 11: DP3 temp[3], input[1], temp[2]; 12: MUL temp[3], temp[3], temp[3]; 13: MUL_SAT temp[3], temp[3], const[5].zzzz; 14: MUL temp[3], temp[3], const[3]; 15: MOV output[0].xyz, temp[3]; 16: MOV output[0].w, const[5].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[0].xy, temp[0], const[4].xxxx, const[4].yyyy; 3: MOV temp[0].z, const[5].xxxx; 4: DP3 temp[1].x, temp[0], temp[0]; 5: ADD temp[1].x, const[5].yyyy, -temp[1].xxxx; 6: RSQ temp[1].x, temp[1].xxxx; 7: RCP temp[0].z, temp[1].xxxx; 8: DP3 temp[2].x, input[2], temp[0]; 9: DP3 temp[2].y, input[3], temp[0]; 10: DP3 temp[2].z, input[4], temp[0]; 11: DP3 temp[3], input[1], temp[2]; 12: MUL temp[3], temp[3], temp[3]; 13: MUL_SAT temp[3], temp[3], const[5].zzzz; 14: MUL temp[3], temp[3], const[3]; 15: MOV output[0].xyz, temp[3]; 16: MOV output[0].w, const[5].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[0].xy, temp[0], const[4].xxxx, const[4].yyyy; 3: MOV temp[0].z, const[5].xxxx; 4: DP3 temp[1].x, temp[0], temp[0]; 5: ADD temp[1].x, const[5].yyyy, -temp[1].xxxx; 6: RSQ temp[1].x, temp[1].xxxx; 7: RCP temp[0].z, temp[1].xxxx; 8: DP3 temp[2].x, input[2], temp[0]; 9: DP3 temp[2].y, input[3], temp[0]; 10: DP3 temp[2].z, input[4], temp[0]; 11: DP3 temp[3], input[1], temp[2]; 12: MUL temp[3], temp[3], temp[3]; 13: MUL_SAT temp[3], temp[3], const[5].zzzz; 14: MUL temp[3], temp[3], const[3]; 15: MOV_SAT output[0].xyz, temp[3]; 16: MOV_SAT output[0].w, const[5].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[0].xy, temp[0], const[4].xxxx, const[4].yyyy; 3: MOV temp[0].z, const[5].xxxx; 4: DP3 temp[1].x, temp[0], temp[0]; 5: ADD temp[1].x, const[5].yyyy, -temp[1].xxxx; 6: RSQ temp[1].x, temp[1].xxxx; 7: RCP temp[0].z, temp[1].xxxx; 8: DP3 temp[2].x, input[2], temp[0]; 9: DP3 temp[2].y, input[3], temp[0]; 10: DP3 temp[2].z, input[4], temp[0]; 11: DP3 temp[3], input[1], temp[2]; 12: MUL temp[3], temp[3], temp[3]; 13: MUL_SAT temp[3], temp[3], const[5].zzzz; 14: MUL temp[3], temp[3], const[3]; 15: MOV_SAT output[0].xyz, temp[3]; 16: MOV_SAT output[0].w, const[5].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[0].xy, temp[0], const[4].xxxx, const[4].yyyy; 3: MOV temp[0].z, const[5].xxxx; 4: DP3 temp[1].x, temp[0], temp[0]; 5: ADD temp[1].x, const[5].yyyy, -temp[1].xxxx; 6: RSQ temp[1].x, |temp[1].xxxx|; 7: RCP temp[0].z, temp[1].xxxx; 8: DP3 temp[2].x, input[2], temp[0]; 9: DP3 temp[2].y, input[3], temp[0]; 10: DP3 temp[2].z, input[4], temp[0]; 11: DP3 temp[3], input[1], temp[2]; 12: MUL temp[3], temp[3], temp[3]; 13: MUL_SAT temp[3], temp[3], const[5].zzzz; 14: MUL temp[3], temp[3], const[3]; 15: MOV_SAT output[0].xyz, temp[3]; 16: MOV_SAT output[0].w, const[5].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[0].xy, temp[0].xy__, const[4].xx__, const[4].yy__; 3: MOV temp[0].z, const[5].__x_; 4: DP3 temp[1].x, temp[0].xyz_, temp[0].xyz_; 5: ADD temp[1].x, const[5].y___, -temp[1].x___; 6: RSQ temp[1].x, |temp[1].x___|; 7: RCP temp[0].z, temp[1].x___; 8: DP3 temp[2].x, input[2].xyz_, temp[0].xyz_; 9: DP3 temp[2].y, input[3].xyz_, temp[0].xyz_; 10: DP3 temp[2].z, input[4].xyz_, temp[0].xyz_; 11: DP3 temp[3].xyz, input[1].xyz_, temp[2].xyz_; 12: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 13: MUL_SAT temp[3].xyz, temp[3].xyz_, const[5].zzz_; 14: MUL temp[3].xyz, temp[3].xyz_, const[3].xyz_; 15: MOV_SAT output[0].xyz, temp[3].xyz_; 16: MOV_SAT output[0].w, const[5].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[0].xy, temp[0].xy__, const[4].xx__, const[4].yy__; 3: MOV temp[0].z, const[5].__x_; 4: DP3 temp[1].x, temp[0].xyz_, temp[0].xyz_; 5: ADD temp[1].x, const[5].y___, -temp[1].x___; 6: RSQ temp[1].x, |temp[1].x___|; 7: RCP temp[0].z, temp[1].x___; 8: DP3 temp[2].x, input[2].xyz_, temp[0].xyz_; 9: DP3 temp[2].y, input[3].xyz_, temp[0].xyz_; 10: DP3 temp[2].z, input[4].xyz_, temp[0].xyz_; 11: DP3 temp[3].xyz, input[1].xyz_, temp[2].xyz_; 12: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 13: MUL_SAT temp[3].xyz, temp[3].xyz_, const[5].zzz_; 14: MUL temp[3].xyz, temp[3].xyz_, const[3].xyz_; 15: MOV_SAT output[0].xyz, temp[3].xyz_; 16: MOV_SAT output[0].w, const[5].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[0].xy, temp[0].xy__, const[4].xx__, none.-1-1__; 3: MOV temp[0].z, none.__0_; 4: DP3 temp[1].x, temp[0].xyz_, temp[0].xyz_; 5: ADD temp[1].x, none.1___, -temp[1].x___; 6: RSQ temp[1].x, |temp[1].x___|; 7: RCP temp[0].z, temp[1].x___; 8: DP3 temp[2].x, input[2].xyz_, temp[0].xyz_; 9: DP3 temp[2].y, input[3].xyz_, temp[0].xyz_; 10: DP3 temp[2].z, input[4].xyz_, temp[0].xyz_; 11: DP3 temp[3].xyz, input[1].xyz_, temp[2].xyz_; 12: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 13: MUL_SAT temp[3].xyz, temp[3].xyz_, const[5].zzz_; 14: MUL temp[3].xyz, temp[3].xyz_, const[3].xyz_; 15: MOV_SAT output[0].xyz, temp[3].xyz_; 16: MOV_SAT output[0].w, none.___1; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[0].xy, temp[0].xy__, const[4].xx__, none.-1-1__; 3: MOV temp[0].z, none.__0_; 4: DP3 temp[1].x, temp[0].xyz_, temp[0].xyz_; 5: ADD temp[1].x, none.1___, -temp[1].x___; 6: RSQ temp[1].x, |temp[1].x___|; 7: RCP temp[0].z, temp[1].x___; 8: DP3 temp[2].x, input[2].xyz_, temp[0].xyz_; 9: DP3 temp[2].y, input[3].xyz_, temp[0].xyz_; 10: DP3 temp[2].z, input[4].xyz_, temp[0].xyz_; 11: DP3 temp[3].xyz, input[1].xyz_, temp[2].xyz_; 12: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 13: MUL_SAT temp[3].xyz, temp[3].xyz_, const[5].zzz_; 14: MUL temp[3].xyz, temp[3].xyz_, const[3].xyz_; 15: MOV_SAT output[0].xyz, temp[3].xyz_; 16: MOV_SAT output[0].w, none.___1; CONST[1] = { 2.0000 -1.0000 0.0000 1.0000 } CONST[2] = { 0.0000 1.0000 5.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[0].xy, temp[0].xy__, const[1].xx__, none.-1-1__; 3: MOV temp[0].z, none.__0_; 4: DP3 temp[1].x, temp[0].xyz_, temp[0].xyz_; 5: ADD temp[1].x, none.1___, -temp[1].x___; 6: RSQ temp[1].x, |temp[1].x___|; 7: RCP temp[0].z, temp[1].x___; 8: DP3 temp[2].x, input[2].xyz_, temp[0].xyz_; 9: DP3 temp[2].y, input[3].xyz_, temp[0].xyz_; 10: DP3 temp[2].z, input[4].xyz_, temp[0].xyz_; 11: DP3 temp[3].xyz, input[1].xyz_, temp[2].xyz_; 12: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 13: MUL_SAT temp[3].xyz, temp[3].xyz_, const[2].zzz_; 14: MUL temp[3].xyz, temp[3].xyz_, const[0].xyz_; 15: MOV_SAT output[0].xyz, temp[3].xyz_; 16: MOV_SAT output[0].w, none.___1; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[0].xy, temp[0].xy__, const[1].xx__, none.-1-1__; 3: MOV temp[0].z, none.__0_; 4: DP3 temp[4].x, temp[0].xyz_, temp[0].xyz_; 5: ADD temp[5].x, none.1___, -temp[4].x___; 6: RSQ temp[6].x, |temp[5].x___|; 7: RCP temp[0].z, temp[6].x___; 8: DP3 temp[2].x, input[2].xyz_, temp[0].xyz_; 9: DP3 temp[2].y, input[3].xyz_, temp[0].xyz_; 10: DP3 temp[2].z, input[4].xyz_, temp[0].xyz_; 11: DP3 temp[7].xyz, input[1].xyz_, temp[2].xyz_; 12: MUL temp[8].xyz, temp[7].xyz_, temp[7].xyz_; 13: MUL_SAT temp[9].xyz, temp[8].xyz_, const[2].zzz_; 14: MUL temp[10].xyz, temp[9].xyz_, const[0].xyz_; 15: MOV_SAT output[0].xyz, temp[10].xyz_; 16: MOV_SAT output[0].w, none.___1; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: src0.w = temp[0] MAD temp[0].x, src0.w__, src0.111, src0.000 2: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[0].xy, src0.xy_, src1.xx_, -src0.11_ 3: MAD temp[0].z, src0.__0, src0.111, src0.000 4: src0.xyz = temp[0] DP3 temp[4].x, src0.xyz, src0.xyz 5: src0.xyz = temp[4] MAD temp[5].x, src0.1__, src0.111, -src0.x__ 6: src0.xyz = temp[5] REPL_ALPHA temp[6].x RSQ, |src0.x| 7: src0.xyz = temp[6] REPL_ALPHA temp[0].z RCP, src0.x 8: src0.xyz = input[2], src1.xyz = temp[0] DP3 temp[2].x, src0.xyz, src1.xyz 9: src0.xyz = input[3], src1.xyz = temp[0] DP3 temp[2].y, src0.xyz, src1.xyz 10: src0.xyz = input[4], src1.xyz = temp[0] DP3 temp[2].z, src0.xyz, src1.xyz 11: src0.xyz = input[1], src1.xyz = temp[2] DP3 temp[7].xyz, src0.xyz, src1.xyz 12: src0.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src0.xyz, src0.000 13: src0.xyz = temp[8], src1.xyz = const[2] MAD_SAT temp[9].xyz, src0.xyz, src1.zzz, src0.000 14: src0.xyz = temp[9], src1.xyz = const[0] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[10] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 16: MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].yw, input[0].xy__, 2D[0]; 2: src0.w = temp[0] MAD temp[0].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[0].xy, src0.xy_, src1.xx_, -src0.11_ 4: MAD temp[0].z, src0.__0, src0.111, src0.000 5: src0.xyz = temp[0] DP3 temp[4].x, src0.xyz, src0.xyz 6: src0.xyz = temp[4] MAD temp[5].x, src0.1__, src0.111, -src0.x__ 7: src0.xyz = temp[5] REPL_ALPHA temp[6].x RSQ, |src0.x| 8: src0.xyz = temp[6] REPL_ALPHA temp[0].z RCP, src0.x 9: src0.xyz = input[2], src1.xyz = temp[0] DP3 temp[2].x, src0.xyz, src1.xyz 10: src0.xyz = input[3], src1.xyz = temp[0] DP3 temp[2].y, src0.xyz, src1.xyz 11: src0.xyz = input[4], src1.xyz = temp[0] DP3 temp[2].z, src0.xyz, src1.xyz 12: src0.xyz = input[1], src1.xyz = temp[2] DP3 temp[7].xyz, src0.xyz, src1.xyz 13: src0.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src0.xyz, src0.000 14: src0.xyz = temp[8], src1.xyz = const[2] MAD_SAT temp[9].xyz, src0.xyz, src1.zzz, src0.000 15: src0.xyz = temp[9], src1.xyz = const[0] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[10] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].yw, input[0].xy__, 2D[0]; 2: src0.w = temp[0] MAD temp[0].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[0].xy, src0.xy_, src1.xx_, -src0.11_ 4: MAD temp[0].z, src0.__0, src0.111, src0.000 5: src0.xyz = temp[0] DP3 temp[4].x, src0.xyz, src0.xyz 6: src0.xyz = temp[4] MAD temp[5].x, src0.1__, src0.111, -src0.x__ 7: src0.xyz = temp[5] REPL_ALPHA temp[6].x RSQ, |src0.x| 8: src0.xyz = temp[6] REPL_ALPHA temp[0].z RCP, src0.x 9: src0.xyz = input[2], src1.xyz = temp[0] DP3 temp[2].x, src0.xyz, src1.xyz 10: src0.xyz = input[3], src1.xyz = temp[0] DP3 temp[2].y, src0.xyz, src1.xyz 11: src0.xyz = input[4], src1.xyz = temp[0] DP3 temp[2].z, src0.xyz, src1.xyz 12: src0.xyz = input[1], src1.xyz = temp[2] DP3 temp[7].xyz, src0.xyz, src1.xyz 13: src0.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src0.xyz, src0.000 14: src0.xyz = temp[8], src1.xyz = const[2] MAD_SAT temp[9].xyz, src0.xyz, src1.zzz, src0.000 15: src0.xyz = temp[9], src1.xyz = const[0] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[10] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].yw, input[0].xy__, 2D[0]; 2: src0.w = temp[0] MAD temp[0].x, src0.w__, src0.11_, src0.00_ MAD_SAT color[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[0].xy, src0.xy_, src1.xx_, -src0.11_ 4: MAD temp[0].z, src0.__0, src0.111, src0.000 5: src0.xyz = temp[0] DP3 temp[5].x, src0.xyz, src0.xyz 6: src0.xyz = temp[5] MAD temp[5].x, src0.1__, src0.1__, -src0.x__ 7: src0.xyz = temp[5] REPL_ALPHA temp[5].x RSQ, |src0.x| 8: src0.xyz = temp[5] REPL_ALPHA temp[0].z RCP, src0.x 9: src0.xyz = input[2], src1.xyz = temp[0] DP3 temp[2].x, src0.xyz, src1.xyz 10: src0.xyz = input[3], src1.xyz = temp[0] DP3 temp[2].y, src0.xyz, src1.xyz 11: src0.xyz = input[4], src1.xyz = temp[0] DP3 temp[2].z, src0.xyz, src1.xyz 12: src0.xyz = input[1], src1.xyz = temp[2] DP3 temp[0].xyz, src0.xyz, src1.xyz 13: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.xyz, src0.000 14: src0.xyz = temp[0], src1.xyz = const[2] MAD_SAT temp[0].xyz, src0.xyz, src1.zzz, src0.000 15: src0.xyz = temp[0], src1.xyz = const[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 pc=7************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 14, tex_end: 0 (code_addr: 00400380) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.www 1.0 0.0 op: 00050a8c w: 1.0 1.0 0.0 op: 40040891 1: xyz: t0 c1 t0 bias-> t0.xy (01800840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xxx -1.0 op: 000d4280 w: t0.x t0.x t0.x op: 00000000 2: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t0 t0 bias-> t5.x (00940000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz t0.xxx op: 00804000 w: t0.x t0.x t0.x op: 00000000 4: xyz: t5 t0 t0 bias-> t5.x (00940005) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t5.xyz op: 00080a95 w: t5.x t5.x t5.x op: 00000000 5: xyz: t5 t0 t0 bias-> t5.x (00940005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xxx t5.xxx t5.xxx op: 05004081 w: |t5.x| t5.x t5.x op: 05800040 6: xyz: t5 t0 t0 bias-> t0.z (02000005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xxx t5.xxx t5.xxx op: 05004081 w: t5.x t5.x t5.x op: 05000000 7: xyz: t2 t0 t0 bias-> t2.x (00880002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz t2.xxx op: 00804200 w: t2.x t2.x t2.x op: 00000000 8: xyz: t3 t0 t0 bias-> t2.y (01080003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t0.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 9: xyz: t4 t0 t0 bias-> t2.z (02080004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t0.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 10: xyz: t1 t2 t0 bias-> t0.xyz (03800081) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t2.xyz t1.xxx op: 00804200 w: t1.x t1.x t1.x op: 00000000 11: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz 0.0 op: 00050000 w: t0.x t0.x t0.x op: 00000000 12: xyz: t0 c2 t0 bias-> t0.xyz (03800880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c2.zzz 0.0 op: 40050380 w: t0.x t0.x t0.x op: 00000000 13: 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 14: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 40050a80 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] IMM FLT32 { 0.3330, 1.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: DP3 TEMP[0].w, TEMP[0], IMM[0].xxxx 2: MOV TEMP[0].xyz, IMM[0].yyyy 3: MUL OUT[0], TEMP[0], IN[0] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].w, temp[0], const[0].xxxx; 2: MOV temp[0].xyz, const[0].yyyy; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].w, temp[0], const[0].xxxx; 2: MOV temp[0].xyz, const[0].yyyy; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].w, temp[0], const[0].xxxx; 2: MOV temp[0].xyz, const[0].yyyy; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].w, temp[0], const[0].xxxx; 2: MOV temp[0].xyz, const[0].yyyy; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].w, temp[0], const[0].xxxx; 2: MOV temp[0].xyz, const[0].yyyy; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].w, temp[0], const[0].xxxx; 2: MOV temp[0].xyz, const[0].yyyy; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].w, temp[0], const[0].xxxx; 2: MOV temp[0].xyz, const[0].yyyy; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].w, temp[0], const[0].xxxx; 2: MOV temp[0].xyz, const[0].yyyy; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: DP3 temp[0].w, temp[0].xyz_, const[0].xxx_; 2: MOV temp[0].xyz, const[0].yyy_; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: DP3 temp[0].w, temp[0].xyz_, const[0].xxx_; 2: MOV temp[0].xyz, const[0].yyy_; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: DP3 temp[0].w, temp[0].xyz_, const[0].xxx_; 2: MOV temp[0].xyz, none.111_; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: DP3 temp[0].w, temp[0].xyz_, const[0].xxx_; 2: MOV temp[0].xyz, none.111_; 3: MUL_SAT output[0], temp[0], input[0]; CONST[0] = { 0.3330 1.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: DP3 temp[0].w, temp[0].xyz_, const[0].xxx_; 2: MOV temp[0].xyz, none.111_; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: DP3 temp[0].w, temp[1].xyz_, const[0].xxx_; 2: MOV temp[0].xyz, none.111_; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: src0.xyz = temp[1], src1.xyz = const[0] DP3, src0.xyz, src1.xxx DP3 temp[0].w, src0._, src0._ 2: MAD temp[0].xyz, src0.111, src0.111, src0.000 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src1.xyz = const[0] DP3, src0.xyz, src1.xxx DP3 temp[0].w, src0._, src0._ 3: MAD temp[0].xyz, src0.111, src0.111, src0.000 4: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src1.xyz = const[0] DP3, src0.xyz, src1.xxx DP3 temp[0].w, src0._, src0._ 3: MAD temp[0].xyz, src0.111, src0.111, src0.000 4: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src1.xyz = const[0] DP3, src0.xyz, src1.xxx DP3 temp[1].w, src0._, src0._ 3: MAD temp[1].xyz, src0.111, src0.111, src0.000 4: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=8************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 2, tex_end: 0 (code_addr: 00400080) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t1 c0 t0 bias-> (00000801) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c0.xxx t1.xxx op: 00804280 w: 1.0 1.0 t1.x op: 00800891 1: xyz: t0 t0 t0 bias-> t1.xyz (03840000) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 0.0 op: 00050a95 w: t0.x t0.x t0.x op: 00000000 2: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.w t0.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] IMM FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: MOV TEMP[0].xyz, IMM[0].xxxx 1: TEX TEMP[0].w, IN[1], SAMP[0], 2D 2: MUL OUT[0], TEMP[0], IN[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].1111; 1: TEX temp[0].w, input[1], 2D[0]; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].1111; 1: TEX temp[0].w, input[1], 2D[0]; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].1111; 1: TEX temp[0].w, input[1], 2D[0]; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].1111; 1: TEX temp[0].w, input[1], 2D[0]; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].1111; 1: TEX temp[0].w, input[1], 2D[0]; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].1111; 1: TEX temp[0].w, input[1], 2D[0]; 2: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].1111; 1: TEX temp[1], input[1], 2D[0]; 2: MOV temp[0].w, temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].1111; 1: TEX temp[1], input[1], 2D[0]; 2: MOV temp[0].w, temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].111_; 1: TEX temp[1].w, input[1].xy__, 2D[0]; 2: MOV temp[0].w, temp[1].___w; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV temp[0].xyz, temp[0].111_; 1: TEX temp[1].w, input[1].xy__, 2D[0]; 2: MOV temp[0].w, temp[1].___w; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV temp[0].xyz, none.111_; 1: TEX temp[1].w, input[1].xy__, 2D[0]; 2: MOV temp[0].w, temp[1].___w; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[0].xyz, none.111_; 1: TEX temp[1].w, input[1].xy__, 2D[0]; 2: MOV temp[0].w, temp[1].___w; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0].xyz, none.111_; 1: TEX temp[1].w, input[1].xy__, 2D[0]; 2: MOV temp[0].w, temp[1].___w; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[0].xyz, none.111_; 1: TEX temp[2].w, input[1].xy__, 2D[0]; 2: MOV temp[0].w, temp[2].___w; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD temp[0].xyz, src0.111, src0.111, src0.000 1: TEX temp[2].w, input[1].xy__, 2D[0]; 2: src0.w = temp[2] MAD temp[0].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2].w, input[1].xy__, 2D[0]; 2: src0.w = temp[2] MAD temp[0].xyz, src0.111, src0.111, src0.000 MAD temp[0].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2].w, input[1].xy__, 2D[0]; 2: src0.w = temp[2] MAD temp[0].xyz, src0.111, src0.111, src0.000 MAD temp[0].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].w, input[1].xy__, 2D[0]; 2: src0.w = temp[1] MAD temp[1].xyz, src0.111, src0.111, src0.000 MAD temp[1].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=9************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400040) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t0 t0 t0 bias-> t1.xyz (03840000) w: t1 t0 t0 bias-> t1.w (00840001) xyz: 1.0 1.0 0.0 op: 00050a95 w: t1.w 1.0 0.0 op: 00040889 1: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.w t0.w 0.0 op: 40040509 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 '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 'register rename' # 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]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0]; 2: 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 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0]; 2: 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=10************************************* 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], 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 '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 'register rename' # 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]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0]; 2: 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 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0]; 2: 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=11************************************* 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 IN[1], GENERIC[1], PERSPECTIVE DCL IN[2], GENERIC[2], PERSPECTIVE DCL IN[3], GENERIC[3], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[1] DCL TEMP[0..2] IMM FLT32 { 0.2500, 0.3300, 1.0000, 2.0000} IMM FLT32 { 3.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0], IN[1], SAMP[0], RECT 1: TEX TEMP[1], IN[0], SAMP[0], RECT 2: ADD TEMP[2], TEMP[1], TEMP[0] 3: TEX TEMP[1], IN[2], SAMP[0], RECT 4: ADD TEMP[1], TEMP[2], TEMP[1] 5: TEX TEMP[0], IN[3], SAMP[0], RECT 6: ADD TEMP[0], TEMP[1], TEMP[0] 7: MOV TEMP[1].x, IMM[0].zzzz 8: ADD TEMP[1].y, -CONST[1].zzzz, TEMP[1].xxxx 9: MUL TEMP[0], TEMP[0], IMM[0].xxxx 10: DP3 TEMP[1].x, TEMP[0], IMM[0].yyyy 11: RCP TEMP[1].y, TEMP[1].yyyy 12: ADD TEMP[1].x, TEMP[1], -CONST[1].zzzz 13: MUL_SAT TEMP[1].x, TEMP[1], TEMP[1].yyyy 14: MUL TEMP[1].y, -TEMP[1].xxxx, IMM[0].wwww 15: ADD TEMP[1].y, TEMP[1], IMM[1].xxxx 16: MUL TEMP[1].x, TEMP[1], TEMP[1] 17: MAD TEMP[1].x, TEMP[1], TEMP[1].yyyy, -IMM[0].zzzz 18: MUL TEMP[1].x, TEMP[1], CONST[1].wwww 19: ADD TEMP[1].x, TEMP[1], IMM[0].zzzz 20: MOV TEMP[1].w, IMM[0].zzzz 21: MUL TEMP[1].xyz, TEMP[1].xxxx, TEMP[0].wwww 22: MUL OUT[0], TEMP[0], TEMP[1] 23: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: TEX temp[1], input[0], RECT[0]; 2: ADD temp[2], temp[1], temp[0]; 3: TEX temp[1], input[2], RECT[0]; 4: ADD temp[1], temp[2], temp[1]; 5: TEX temp[0], input[3], RECT[0]; 6: ADD temp[0], temp[1], temp[0]; 7: MOV temp[1].x, const[2].zzzz; 8: ADD temp[1].y, -const[1].zzzz, temp[1].xxxx; 9: MUL temp[0], temp[0], const[2].xxxx; 10: DP3 temp[1].x, temp[0], const[2].yyyy; 11: RCP temp[1].y, temp[1].yyyy; 12: ADD temp[1].x, temp[1], -const[1].zzzz; 13: MUL_SAT temp[1].x, temp[1], temp[1].yyyy; 14: MUL temp[1].y, -temp[1].xxxx, const[2].wwww; 15: ADD temp[1].y, temp[1], const[3].xxxx; 16: MUL temp[1].x, temp[1], temp[1]; 17: MAD temp[1].x, temp[1], temp[1].yyyy, -const[2].zzzz; 18: MUL temp[1].x, temp[1], const[1].wwww; 19: ADD temp[1].x, temp[1], const[2].zzzz; 20: MOV temp[1].w, const[2].zzzz; 21: MUL temp[1].xyz, temp[1].xxxx, temp[0].wwww; 22: MUL output[0], temp[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: TEX temp[1], input[0], RECT[0]; 2: ADD temp[2], temp[1], temp[0]; 3: TEX temp[1], input[2], RECT[0]; 4: ADD temp[1], temp[2], temp[1]; 5: TEX temp[0], input[3], RECT[0]; 6: ADD temp[0], temp[1], temp[0]; 7: MOV temp[1].x, const[2].zzzz; 8: ADD temp[1].y, -const[1].zzzz, temp[1].xxxx; 9: MUL temp[0], temp[0], const[2].xxxx; 10: DP3 temp[1].x, temp[0], const[2].yyyy; 11: RCP temp[1].y, temp[1].yyyy; 12: ADD temp[1].x, temp[1], -const[1].zzzz; 13: MUL_SAT temp[1].x, temp[1], temp[1].yyyy; 14: MUL temp[1].y, -temp[1].xxxx, const[2].wwww; 15: ADD temp[1].y, temp[1], const[3].xxxx; 16: MUL temp[1].x, temp[1], temp[1]; 17: MAD temp[1].x, temp[1], temp[1].yyyy, -const[2].zzzz; 18: MUL temp[1].x, temp[1], const[1].wwww; 19: ADD temp[1].x, temp[1], const[2].zzzz; 20: MOV temp[1].w, const[2].zzzz; 21: MUL temp[1].xyz, temp[1].xxxx, temp[0].wwww; 22: MUL output[0], temp[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: TEX temp[1], input[0], RECT[0]; 2: ADD temp[2], temp[1], temp[0]; 3: TEX temp[1], input[2], RECT[0]; 4: ADD temp[1], temp[2], temp[1]; 5: TEX temp[0], input[3], RECT[0]; 6: ADD temp[0], temp[1], temp[0]; 7: MOV temp[1].x, const[2].zzzz; 8: ADD temp[1].y, -const[1].zzzz, temp[1].xxxx; 9: MUL temp[0], temp[0], const[2].xxxx; 10: DP3 temp[1].x, temp[0], const[2].yyyy; 11: RCP temp[1].y, temp[1].yyyy; 12: ADD temp[1].x, temp[1], -const[1].zzzz; 13: MUL_SAT temp[1].x, temp[1], temp[1].yyyy; 14: MUL temp[1].y, -temp[1].xxxx, const[2].wwww; 15: ADD temp[1].y, temp[1], const[3].xxxx; 16: MUL temp[1].x, temp[1], temp[1]; 17: MAD temp[1].x, temp[1], temp[1].yyyy, -const[2].zzzz; 18: MUL temp[1].x, temp[1], const[1].wwww; 19: ADD temp[1].x, temp[1], const[2].zzzz; 20: MOV temp[1].w, const[2].zzzz; 21: MUL temp[1].xyz, temp[1].xxxx, temp[0].wwww; 22: MUL output[0], temp[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: TEX temp[1], input[0], RECT[0]; 2: ADD temp[2], temp[1], temp[0]; 3: TEX temp[1], input[2], RECT[0]; 4: ADD temp[1], temp[2], temp[1]; 5: TEX temp[0], input[3], RECT[0]; 6: ADD temp[0], temp[1], temp[0]; 7: MOV temp[1].x, const[2].zzzz; 8: ADD temp[1].y, -const[1].zzzz, temp[1].xxxx; 9: MUL temp[0], temp[0], const[2].xxxx; 10: DP3 temp[1].x, temp[0], const[2].yyyy; 11: RCP temp[1].y, temp[1].yyyy; 12: ADD temp[1].x, temp[1], -const[1].zzzz; 13: MUL_SAT temp[1].x, temp[1], temp[1].yyyy; 14: MUL temp[1].y, -temp[1].xxxx, const[2].wwww; 15: ADD temp[1].y, temp[1], const[3].xxxx; 16: MUL temp[1].x, temp[1], temp[1]; 17: MAD temp[1].x, temp[1], temp[1].yyyy, -const[2].zzzz; 18: MUL temp[1].x, temp[1], const[1].wwww; 19: ADD temp[1].x, temp[1], const[2].zzzz; 20: MOV temp[1].w, const[2].zzzz; 21: MUL temp[1].xyz, temp[1].xxxx, temp[0].wwww; 22: MUL output[0], temp[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: TEX temp[1], input[0], RECT[0]; 2: ADD temp[2], temp[1], temp[0]; 3: TEX temp[1], input[2], RECT[0]; 4: ADD temp[1], temp[2], temp[1]; 5: TEX temp[0], input[3], RECT[0]; 6: ADD temp[0], temp[1], temp[0]; 7: MOV temp[1].x, const[2].zzzz; 8: ADD temp[1].y, -const[1].zzzz, temp[1].xxxx; 9: MUL temp[0], temp[0], const[2].xxxx; 10: DP3 temp[1].x, temp[0], const[2].yyyy; 11: RCP temp[1].y, temp[1].yyyy; 12: ADD temp[1].x, temp[1], -const[1].zzzz; 13: MUL_SAT temp[1].x, temp[1], temp[1].yyyy; 14: MUL temp[1].y, -temp[1].xxxx, const[2].wwww; 15: ADD temp[1].y, temp[1], const[3].xxxx; 16: MUL temp[1].x, temp[1], temp[1]; 17: MAD temp[1].x, temp[1], temp[1].yyyy, -const[2].zzzz; 18: MUL temp[1].x, temp[1], const[1].wwww; 19: ADD temp[1].x, temp[1], const[2].zzzz; 20: MOV temp[1].w, const[2].zzzz; 21: MUL temp[1].xyz, temp[1].xxxx, temp[0].wwww; 22: MUL output[0], temp[0], temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: TEX temp[1], input[0], RECT[0]; 2: ADD temp[2], temp[1], temp[0]; 3: TEX temp[1], input[2], RECT[0]; 4: ADD temp[1], temp[2], temp[1]; 5: TEX temp[0], input[3], RECT[0]; 6: ADD temp[0], temp[1], temp[0]; 7: MOV temp[1].x, const[2].zzzz; 8: ADD temp[1].y, -const[1].zzzz, temp[1].xxxx; 9: MUL temp[0], temp[0], const[2].xxxx; 10: DP3 temp[1].x, temp[0], const[2].yyyy; 11: RCP temp[1].y, temp[1].yyyy; 12: ADD temp[1].x, temp[1], -const[1].zzzz; 13: MUL_SAT temp[1].x, temp[1], temp[1].yyyy; 14: MUL temp[1].y, -temp[1].xxxx, const[2].wwww; 15: ADD temp[1].y, temp[1], const[3].xxxx; 16: MUL temp[1].x, temp[1], temp[1]; 17: MAD temp[1].x, temp[1], temp[1].yyyy, -const[2].zzzz; 18: MUL temp[1].x, temp[1], const[1].wwww; 19: ADD temp[1].x, temp[1], const[2].zzzz; 20: MOV temp[1].w, const[2].zzzz; 21: MUL temp[1].xyz, temp[1].xxxx, temp[0].wwww; 22: MUL_SAT output[0], temp[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[3], input[1], const[4]; 1: TEX temp[0], temp[3], 2D[0]; 2: MUL temp[4], input[0], const[4]; 3: TEX temp[1], temp[4], 2D[0]; 4: ADD temp[2], temp[1], temp[0]; 5: MUL temp[5], input[2], const[4]; 6: TEX temp[1], temp[5], 2D[0]; 7: ADD temp[1], temp[2], temp[1]; 8: MUL temp[6], input[3], const[4]; 9: TEX temp[0], temp[6], 2D[0]; 10: ADD temp[0], temp[1], temp[0]; 11: MOV temp[1].x, const[2].zzzz; 12: ADD temp[1].y, -const[1].zzzz, temp[1].xxxx; 13: MUL temp[0], temp[0], const[2].xxxx; 14: DP3 temp[1].x, temp[0], const[2].yyyy; 15: RCP temp[1].y, temp[1].yyyy; 16: ADD temp[1].x, temp[1], -const[1].zzzz; 17: MUL_SAT temp[1].x, temp[1], temp[1].yyyy; 18: MUL temp[1].y, -temp[1].xxxx, const[2].wwww; 19: ADD temp[1].y, temp[1], const[3].xxxx; 20: MUL temp[1].x, temp[1], temp[1]; 21: MAD temp[1].x, temp[1], temp[1].yyyy, -const[2].zzzz; 22: MUL temp[1].x, temp[1], const[1].wwww; 23: ADD temp[1].x, temp[1], const[2].zzzz; 24: MOV temp[1].w, const[2].zzzz; 25: MUL temp[1].xyz, temp[1].xxxx, temp[0].wwww; 26: MUL_SAT output[0], temp[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[3], input[1], const[4]; 1: TEX temp[0], temp[3], 2D[0]; 2: MUL temp[4], input[0], const[4]; 3: TEX temp[1], temp[4], 2D[0]; 4: ADD temp[2], temp[1], temp[0]; 5: MUL temp[5], input[2], const[4]; 6: TEX temp[1], temp[5], 2D[0]; 7: ADD temp[1], temp[2], temp[1]; 8: MUL temp[6], input[3], const[4]; 9: TEX temp[0], temp[6], 2D[0]; 10: ADD temp[0], temp[1], temp[0]; 11: MOV temp[1].x, const[2].zzzz; 12: ADD temp[1].y, -const[1].zzzz, temp[1].xxxx; 13: MUL temp[0], temp[0], const[2].xxxx; 14: DP3 temp[1].x, temp[0], const[2].yyyy; 15: RCP temp[1].y, temp[1].yyyy; 16: ADD temp[1].x, temp[1], -const[1].zzzz; 17: MUL_SAT temp[1].x, temp[1], temp[1].yyyy; 18: MUL temp[1].y, -temp[1].xxxx, const[2].wwww; 19: ADD temp[1].y, temp[1], const[3].xxxx; 20: MUL temp[1].x, temp[1], temp[1]; 21: MAD temp[1].x, temp[1], temp[1].yyyy, -const[2].zzzz; 22: MUL temp[1].x, temp[1], const[1].wwww; 23: ADD temp[1].x, temp[1], const[2].zzzz; 24: MOV temp[1].w, const[2].zzzz; 25: MUL temp[1].xyz, temp[1].xxxx, temp[0].wwww; 26: MUL_SAT output[0], temp[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[3].xy, input[1].xy__, const[4].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[4].xy, input[0].xy__, const[4].xy__; 3: TEX temp[1], temp[4].xy__, 2D[0]; 4: ADD temp[2], temp[1], temp[0]; 5: MUL temp[5].xy, input[2].xy__, const[4].xy__; 6: TEX temp[1], temp[5].xy__, 2D[0]; 7: ADD temp[1], temp[2], temp[1]; 8: MUL temp[6].xy, input[3].xy__, const[4].xy__; 9: TEX temp[0], temp[6].xy__, 2D[0]; 10: ADD temp[0], temp[1], temp[0]; 11: MOV temp[1].x, const[2].z___; 12: ADD temp[1].y, -const[1]._z__, temp[1]._x__; 13: MUL temp[0], temp[0], const[2].xxxx; 14: DP3 temp[1].x, temp[0].xyz_, const[2].yyy_; 15: RCP temp[1].y, temp[1].y___; 16: ADD temp[1].x, temp[1].x___, -const[1].z___; 17: MUL_SAT temp[1].x, temp[1].x___, temp[1].y___; 18: MUL temp[1].y, -temp[1]._x__, const[2]._w__; 19: ADD temp[1].y, temp[1]._y__, const[3]._x__; 20: MUL temp[1].x, temp[1].x___, temp[1].x___; 21: MAD temp[1].x, temp[1].x___, temp[1].y___, -const[2].z___; 22: MUL temp[1].x, temp[1].x___, const[1].w___; 23: ADD temp[1].x, temp[1].x___, const[2].z___; 24: MOV temp[1].w, const[2].___z; 25: MUL temp[1].xyz, temp[1].xxx_, temp[0].www_; 26: MUL_SAT output[0], temp[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[3].xy, input[1].xy__, const[4].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[4].xy, input[0].xy__, const[4].xy__; 3: TEX temp[1], temp[4].xy__, 2D[0]; 4: ADD temp[2], temp[1], temp[0]; 5: MUL temp[5].xy, input[2].xy__, const[4].xy__; 6: TEX temp[1], temp[5].xy__, 2D[0]; 7: ADD temp[1], temp[2], temp[1]; 8: MUL temp[6].xy, input[3].xy__, const[4].xy__; 9: TEX temp[0], temp[6].xy__, 2D[0]; 10: ADD temp[0], temp[1], temp[0]; 11: MOV temp[1].x, const[2].z___; 12: ADD temp[1].y, -const[1]._z__, temp[1]._x__; 13: MUL temp[0], temp[0], const[2].xxxx; 14: DP3 temp[1].x, temp[0].xyz_, const[2].yyy_; 15: RCP temp[1].y, temp[1].y___; 16: ADD temp[1].x, temp[1].x___, -const[1].z___; 17: MUL_SAT temp[1].x, temp[1].x___, temp[1].y___; 18: MUL temp[1].y, -temp[1]._x__, const[2]._w__; 19: ADD temp[1].y, temp[1]._y__, const[3]._x__; 20: MUL temp[1].x, temp[1].x___, temp[1].x___; 21: MAD temp[1].x, temp[1].x___, temp[1].y___, -const[2].z___; 22: MUL temp[1].x, temp[1].x___, const[1].w___; 23: ADD temp[1].x, temp[1].x___, const[2].z___; 24: MOV temp[1].w, const[2].___z; 25: MUL temp[1].xyz, temp[1].xxx_, temp[0].www_; 26: MUL_SAT output[0], temp[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[3].xy, input[1].xy__, const[4].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[4].xy, input[0].xy__, const[4].xy__; 3: TEX temp[1], temp[4].xy__, 2D[0]; 4: ADD temp[2], temp[1], temp[0]; 5: MUL temp[5].xy, input[2].xy__, const[4].xy__; 6: TEX temp[1], temp[5].xy__, 2D[0]; 7: ADD temp[1], temp[2], temp[1]; 8: MUL temp[6].xy, input[3].xy__, const[4].xy__; 9: TEX temp[0], temp[6].xy__, 2D[0]; 10: ADD temp[0], temp[1], temp[0]; 11: ADD temp[1].y, -const[1]._z__, none._1__; 12: MUL temp[0], temp[0], const[2].xxxx; 13: DP3 temp[1].x, temp[0].xyz_, const[2].yyy_; 14: RCP temp[1].y, temp[1].y___; 15: ADD temp[1].x, temp[1].x___, -const[1].z___; 16: MUL_SAT temp[1].x, temp[1].x___, temp[1].y___; 17: MUL temp[1].y, -temp[1]._x__, const[2]._w__; 18: ADD temp[1].y, temp[1]._y__, const[3]._x__; 19: MUL temp[1].x, temp[1].x___, temp[1].x___; 20: MAD temp[1].x, temp[1].x___, temp[1].y___, -none.1___; 21: MUL temp[1].x, temp[1].x___, const[1].w___; 22: ADD temp[1].x, temp[1].x___, none.1___; 23: MOV temp[1].w, none.___1; 24: MUL temp[1].xyz, temp[1].xxx_, temp[0].www_; 25: MUL_SAT output[0], temp[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[3].xy, input[1].xy__, const[4].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[4].xy, input[0].xy__, const[4].xy__; 3: TEX temp[1], temp[4].xy__, 2D[0]; 4: ADD temp[2], temp[1], temp[0]; 5: MUL temp[5].xy, input[2].xy__, const[4].xy__; 6: TEX temp[1], temp[5].xy__, 2D[0]; 7: ADD temp[1], temp[2], temp[1]; 8: MUL temp[6].xy, input[3].xy__, const[4].xy__; 9: TEX temp[0], temp[6].xy__, 2D[0]; 10: ADD temp[0], temp[1], temp[0]; 11: ADD temp[1].y, -const[1]._z__, none._1__; 12: MUL temp[0], temp[0], const[2].xxxx; 13: DP3 temp[1].x, temp[0].xyz_, const[2].yyy_; 14: RCP temp[1].y, temp[1].y___; 15: ADD temp[1].x, temp[1].x___, -const[1].z___; 16: MUL_SAT temp[1].x, temp[1].x___, temp[1].y___; 17: MUL temp[1].y, -temp[1]._x__, const[2]._w__; 18: ADD temp[1].y, temp[1]._y__, const[3]._x__; 19: MUL temp[1].x, temp[1].x___, temp[1].x___; 20: MAD temp[1].x, temp[1].x___, temp[1].y___, -none.1___; 21: MUL temp[1].x, temp[1].x___, const[1].w___; 22: ADD temp[1].x, temp[1].x___, none.1___; 23: MOV temp[1].w, none.___1; 24: MUL temp[1].xyz, temp[1].xxx_, temp[0].www_; 25: MUL_SAT output[0], temp[0], temp[1]; CONST[1] = { 0.2500 0.3300 1.0000 2.0000 } CONST[2] = { 3.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[3].xy, input[1].xy__, const[3].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[4].xy, input[0].xy__, const[3].xy__; 3: TEX temp[1], temp[4].xy__, 2D[0]; 4: ADD temp[2], temp[1], temp[0]; 5: MUL temp[5].xy, input[2].xy__, const[3].xy__; 6: TEX temp[1], temp[5].xy__, 2D[0]; 7: ADD temp[1], temp[2], temp[1]; 8: MUL temp[6].xy, input[3].xy__, const[3].xy__; 9: TEX temp[0], temp[6].xy__, 2D[0]; 10: ADD temp[0], temp[1], temp[0]; 11: ADD temp[1].y, -const[0]._z__, none._1__; 12: MUL temp[0], temp[0], const[1].xxxx; 13: DP3 temp[1].x, temp[0].xyz_, const[1].yyy_; 14: RCP temp[1].y, temp[1].y___; 15: ADD temp[1].x, temp[1].x___, -const[0].z___; 16: MUL_SAT temp[1].x, temp[1].x___, temp[1].y___; 17: MUL temp[1].y, -temp[1]._x__, const[1]._w__; 18: ADD temp[1].y, temp[1]._y__, const[2]._x__; 19: MUL temp[1].x, temp[1].x___, temp[1].x___; 20: MAD temp[1].x, temp[1].x___, temp[1].y___, -none.1___; 21: MUL temp[1].x, temp[1].x___, const[0].w___; 22: ADD temp[1].x, temp[1].x___, none.1___; 23: MOV temp[1].w, none.___1; 24: MUL temp[1].xyz, temp[1].xxx_, temp[0].www_; 25: MUL_SAT output[0], temp[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[7].xy, input[1].xy__, const[3].xy__; 1: TEX temp[8], temp[7].xy__, 2D[0]; 2: MUL temp[9].xy, input[0].xy__, const[3].xy__; 3: TEX temp[10], temp[9].xy__, 2D[0]; 4: ADD temp[11], temp[10], temp[8]; 5: MUL temp[12].xy, input[2].xy__, const[3].xy__; 6: TEX temp[13], temp[12].xy__, 2D[0]; 7: ADD temp[14], temp[11], temp[13]; 8: MUL temp[15].xy, input[3].xy__, const[3].xy__; 9: TEX temp[16], temp[15].xy__, 2D[0]; 10: ADD temp[17], temp[14], temp[16]; 11: ADD temp[18].y, -const[0]._z__, none._1__; 12: MUL temp[19], temp[17], const[1].xxxx; 13: DP3 temp[20].x, temp[19].xyz_, const[1].yyy_; 14: RCP temp[21].y, temp[18].y___; 15: ADD temp[22].x, temp[20].x___, -const[0].z___; 16: MUL_SAT temp[23].x, temp[22].x___, temp[21].y___; 17: MUL temp[24].y, -temp[23]._x__, const[1]._w__; 18: ADD temp[25].y, temp[24]._y__, const[2]._x__; 19: MUL temp[26].x, temp[23].x___, temp[23].x___; 20: MAD temp[27].x, temp[26].x___, temp[25].y___, -none.1___; 21: MUL temp[28].x, temp[27].x___, const[0].w___; 22: ADD temp[29].x, temp[28].x___, none.1___; 23: MOV temp[1].w, none.___1; 24: MUL temp[1].xyz, temp[29].xxx_, temp[19].www_; 25: MUL_SAT output[0], temp[19], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[3] MAD temp[7].xy, src0.xy_, src1.xy_, src0.000 1: TEX temp[8], temp[7].xy__, 2D[0]; 2: src0.xyz = input[0], src1.xyz = const[3] MAD temp[9].xy, src0.xy_, src1.xy_, src0.000 3: TEX temp[10], temp[9].xy__, 2D[0]; 4: src0.xyz = temp[10], src0.w = temp[10], src1.xyz = temp[8], src1.w = temp[8] MAD temp[11].xyz, src0.xyz, src0.111, src1.xyz MAD temp[11].w, src0.w, src0.1, src1.w 5: src0.xyz = input[2], src1.xyz = const[3] MAD temp[12].xy, src0.xy_, src1.xy_, src0.000 6: TEX temp[13], temp[12].xy__, 2D[0]; 7: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[13], src1.w = temp[13] MAD temp[14].xyz, src0.xyz, src0.111, src1.xyz MAD temp[14].w, src0.w, src0.1, src1.w 8: src0.xyz = input[3], src1.xyz = const[3] MAD temp[15].xy, src0.xy_, src1.xy_, src0.000 9: TEX temp[16], temp[15].xy__, 2D[0]; 10: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[16], src1.w = temp[16] MAD temp[17].xyz, src0.xyz, src0.111, src1.xyz MAD temp[17].w, src0.w, src0.1, src1.w 11: src0.xyz = const[0] MAD temp[18].y, -src0._z_, src0.111, src0._1_ 12: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = const[1] MAD temp[19].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[19].w, src0.w, src1.x, src0.0 13: src0.xyz = temp[19], src1.xyz = const[1] DP3 temp[20].x, src0.xyz, src1.yyy 14: src0.xyz = temp[18] REPL_ALPHA temp[21].y RCP, src0.y 15: src0.xyz = temp[20], src1.xyz = const[0] MAD temp[22].x, src0.x__, src0.111, -src1.z__ 16: src0.xyz = temp[22], src1.xyz = temp[21] MAD_SAT temp[23].x, src0.x__, src1.y__, src0.000 17: src0.xyz = temp[23], src0.w = const[1] MAD temp[24].y, -src0._x_, src0._w_, src0.000 18: src0.xyz = temp[24], src1.xyz = const[2] MAD temp[25].y, src0._y_, src0.111, src1._x_ 19: src0.xyz = temp[23] MAD temp[26].x, src0.x__, src0.x__, src0.000 20: src0.xyz = temp[26], src1.xyz = temp[25] MAD temp[27].x, src0.x__, src1.y__, -src0.1__ 21: src0.xyz = temp[27], src0.w = const[0] MAD temp[28].x, src0.x__, src0.w__, src0.000 22: src0.xyz = temp[28] MAD temp[29].x, src0.x__, src0.111, src0.1__ 23: MAD temp[1].w, src0.1, src0.1, src0.0 24: src0.xyz = temp[29], src0.w = temp[19] MAD temp[1].xyz, src0.xxx, src0.www, src0.000 25: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[18].y, -src0._z_, src0.111, src0._1_ MAD temp[1].w, src0.1, src0.1, src0.0 1: src0.xyz = temp[18] REPL_ALPHA temp[21].y RCP, src0.y 2: src0.xyz = input[3], src1.xyz = const[3] MAD temp[15].xy, src0.xy_, src1.xy_, src0.000 3: src0.xyz = input[2], src1.xyz = const[3] MAD temp[12].xy, src0.xy_, src1.xy_, src0.000 4: src0.xyz = input[0], src1.xyz = const[3] MAD temp[9].xy, src0.xy_, src1.xy_, src0.000 5: src0.xyz = input[1], src1.xyz = const[3] MAD temp[7].xy, src0.xy_, src1.xy_, src0.000 6: BEGIN_TEX; 7: TEX temp[16], temp[15].xy__, 2D[0]; 8: TEX temp[13], temp[12].xy__, 2D[0]; 9: TEX temp[10], temp[9].xy__, 2D[0]; 10: TEX temp[8], temp[7].xy__, 2D[0]; 11: src0.xyz = temp[10], src0.w = temp[10], src1.xyz = temp[8], src1.w = temp[8] MAD temp[11].xyz, src0.xyz, src0.111, src1.xyz MAD temp[11].w, src0.w, src0.1, src1.w 12: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[13], src1.w = temp[13] MAD temp[14].xyz, src0.xyz, src0.111, src1.xyz MAD temp[14].w, src0.w, src0.1, src1.w 13: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[16], src1.w = temp[16] MAD temp[17].xyz, src0.xyz, src0.111, src1.xyz MAD temp[17].w, src0.w, src0.1, src1.w 14: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = const[1] MAD temp[19].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[19].w, src0.w, src1.x, src0.0 15: src0.xyz = temp[19], src1.xyz = const[1] DP3 temp[20].x, src0.xyz, src1.yyy 16: src0.xyz = temp[20], src1.xyz = const[0] MAD temp[22].x, src0.x__, src0.111, -src1.z__ 17: src0.xyz = temp[22], src1.xyz = temp[21] MAD_SAT temp[23].x, src0.x__, src1.y__, src0.000 18: src0.xyz = temp[23], src0.w = const[1] MAD temp[26].x, src0.x__, src0.x__, src0.000 MAD temp[24].w, -src0.x, src0.w, src0.0 19: src0.xyz = temp[24], src0.w = temp[24], src1.xyz = const[2] MAD temp[25].y, src0._w_, src0.111, src1._x_ 20: src0.xyz = temp[26], src1.xyz = temp[25] MAD temp[27].x, src0.x__, src1.y__, -src0.1__ 21: src0.xyz = temp[27], src0.w = const[0] MAD temp[28].x, src0.x__, src0.w__, src0.000 22: src0.xyz = temp[28] MAD temp[29].x, src0.x__, src0.111, src0.1__ 23: src0.xyz = temp[29], src0.w = temp[19] MAD temp[1].xyz, src0.xxx, src0.www, src0.000 24: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[18].y, -src0._z_, src0.111, src0._1_ MAD temp[1].w, src0.1, src0.1, src0.0 1: src0.xyz = temp[18] REPL_ALPHA temp[21].y RCP, src0.y 2: src0.xyz = input[3], src1.xyz = const[3] MAD temp[15].xy, src0.xy_, src1.xy_, src0.000 3: src0.xyz = input[2], src1.xyz = const[3] MAD temp[12].xy, src0.xy_, src1.xy_, src0.000 4: src0.xyz = input[0], src1.xyz = const[3] MAD temp[9].xy, src0.xy_, src1.xy_, src0.000 5: src0.xyz = input[1], src1.xyz = const[3] MAD temp[7].xy, src0.xy_, src1.xy_, src0.000 6: BEGIN_TEX; 7: TEX temp[16], temp[15].xy__, 2D[0]; 8: TEX temp[13], temp[12].xy__, 2D[0]; 9: TEX temp[10], temp[9].xy__, 2D[0]; 10: TEX temp[8], temp[7].xy__, 2D[0]; 11: src0.xyz = temp[10], src0.w = temp[10], src1.xyz = temp[8], src1.w = temp[8] MAD temp[11].xyz, src0.xyz, src0.111, src1.xyz MAD temp[11].w, src0.w, src0.1, src1.w 12: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[13], src1.w = temp[13] MAD temp[14].xyz, src0.xyz, src0.111, src1.xyz MAD temp[14].w, src0.w, src0.1, src1.w 13: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[16], src1.w = temp[16] MAD temp[17].xyz, src0.xyz, src0.111, src1.xyz MAD temp[17].w, src0.w, src0.1, src1.w 14: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = const[1] MAD temp[19].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[19].w, src0.w, src1.x, src0.0 15: src0.xyz = temp[19], src1.xyz = const[1] DP3 temp[20].x, src0.xyz, src1.yyy 16: src0.xyz = temp[20], src1.xyz = const[0] MAD temp[22].x, src0.x__, src0.111, -src1.z__ 17: src0.xyz = temp[22], src1.xyz = temp[21] MAD_SAT temp[23].x, src0.x__, src1.y__, src0.000 18: src0.xyz = temp[23], src0.w = const[1] MAD temp[26].x, src0.x__, src0.x__, src0.000 MAD temp[24].w, -src0.x, src0.w, src0.0 19: src0.w = temp[24], src1.xyz = const[2] MAD temp[25].y, src0._w_, src0.111, src1._x_ 20: src0.xyz = temp[26], src1.xyz = temp[25] MAD temp[27].x, src0.x__, src1.y__, -src0.1__ 21: src0.xyz = temp[27], src0.w = const[0] MAD temp[28].x, src0.x__, src0.w__, src0.000 22: src0.xyz = temp[28] MAD temp[29].x, src0.x__, src0.111, src0.1__ 23: src0.xyz = temp[29], src0.w = temp[19] MAD temp[1].xyz, src0.xxx, src0.www, src0.000 24: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[0].z, -src0.__z, src0.__1, src0.__1 MAD temp[0].w, src0.1, src0.1, src0.0 1: src0.xyz = temp[0] REPL_ALPHA temp[0].z RCP, src0.z 2: src0.xyz = input[3], src1.xyz = const[3] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 3: src0.xyz = input[2], src1.xyz = const[3] MAD temp[2].xy, src0.xy_, src1.xy_, src0.00_ 4: src0.xyz = input[0], src1.xyz = const[3] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 5: src0.xyz = input[1], src1.xyz = const[3] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 6: BEGIN_TEX; 7: TEX temp[3], temp[3].xy__, 2D[0]; 8: TEX temp[2], temp[2].xy__, 2D[0]; 9: TEX temp[4], temp[0].xy__, 2D[0]; 10: TEX temp[1], temp[1].xy__, 2D[0]; 11: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[1], src1.w = temp[1] MAD temp[1].xyz, src0.xyz, src0.111, src1.xyz MAD temp[1].w, src0.w, src0.1, src1.w 12: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[2], src1.w = temp[2] MAD temp[1].xyz, src0.xyz, src0.111, src1.xyz MAD temp[1].w, src0.w, src0.1, src1.w 13: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[3], src1.w = temp[3] MAD temp[1].xyz, src0.xyz, src0.111, src1.xyz MAD temp[1].w, src0.w, src0.1, src1.w 14: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[1] MAD temp[1].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[1].w, src0.w, src1.x, src0.0 15: src0.xyz = temp[1], src1.xyz = const[1] DP3 temp[0].x, src0.xyz, src1.yyy 16: src0.xyz = temp[0], src1.xyz = const[0] MAD temp[0].x, src0.x__, src0.1__, -src1.z__ 17: src0.xyz = temp[0], src1.xyz = temp[0] MAD_SAT temp[0].x, src0.x__, src1.z__, src0.0__ 18: src0.xyz = temp[0], src0.w = const[1] MAD temp[0].x, src0.x__, src0.x__, src0.0__ MAD temp[2].w, -src0.x, src0.w, src0.0 19: src0.w = temp[2], src1.xyz = const[2] MAD temp[0].y, src0._w_, src0._1_, src1._x_ 20: src0.xyz = temp[0], src1.xyz = temp[0] MAD temp[0].x, src0.x__, src1.y__, -src0.1__ 21: src0.xyz = temp[0], src0.w = const[0] MAD temp[0].x, src0.x__, src0.w__, src0.0__ 22: src0.xyz = temp[0] MAD temp[0].x, src0.x__, src0.1__, src0.1__ 23: src0.xyz = temp[0], src0.w = temp[1] MAD temp[0].xyz, src0.xxx, src0.www, src0.000 24: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[0], src1.w = temp[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=12************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 5, tex_end: 0 (code_addr: 00000140) 0: xyz: c0 t0 t0 bias-> t0.z (02000020) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -c0.xyz 1.0 1.0 op: 00054aa0 w: 1.0 1.0 0.0 op: 00040891 1: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t0.z t0.x t0.x op: 05000002 2: xyz: t3 c3 t0 bias-> t3.xy (018c08c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c3.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 3: xyz: t2 c3 t0 bias-> t2.xy (018808c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c3.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 4: xyz: t0 c3 t0 bias-> t0.xy (018008c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 5: xyz: t1 c3 t0 bias-> t1.xy (018408c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c3.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 6, tex_offset: 0, alu_end: 13, tex_end: 3 (code_addr: 00460346) TEX: TEX t3, t3, texture[0] (000080c3) TEX t2, t2, texture[0] (00008082) TEX t4, t0, texture[0] (00008100) TEX t1, t1, texture[0] (00008041) 6: xyz: t4 t1 t0 bias-> t1.xyz (03840044) w: t4 t1 t0 bias-> t1.w (00840044) xyz: t4.xyz 1.0 t1.xyz op: 00010a80 w: t4.w 1.0 t1.w op: 00028889 7: xyz: t1 t2 t0 bias-> t1.xyz (03840081) w: t1 t2 t0 bias-> t1.w (00840081) xyz: t1.xyz 1.0 t2.xyz op: 00010a80 w: t1.w 1.0 t2.w op: 00028889 8: xyz: t1 t3 t0 bias-> t1.xyz (038400c1) w: t1 t3 t0 bias-> t1.w (008400c1) xyz: t1.xyz 1.0 t3.xyz op: 00010a80 w: t1.w 1.0 t3.w op: 00028889 9: xyz: t1 c1 t0 bias-> t1.xyz (03840841) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t1.xyz c1.xxx 0.0 op: 00050280 w: t1.w c1.x 0.0 op: 00040189 10: xyz: t1 c1 t0 bias-> t0.x (00800841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c1.yyy t1.xxx op: 00804300 w: t1.x t1.x t1.x op: 00000000 11: xyz: t0 c0 t0 bias-> t0.x (00800800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 -c0.zzz op: 0009ca80 w: t0.x t0.x t0.x op: 00000000 12: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.zzz 0.0 op: 40050380 w: t0.x t0.x t0.x op: 00000000 13: xyz: t0 t0 t0 bias-> t0.x (00800000) w: c1 t0 t0 bias-> t2.w (00880021) xyz: t0.xyz t0.xyz 0.0 op: 00050000 w: -t0.x c1.w 0.0 op: 000404a0 14: xyz: t0 c2 t0 bias-> t0.y (01000880) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 c2.xxx op: 00014a8c w: t0.x t0.x t0.x op: 00000000 15: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.yyy -1.0 op: 000d4300 w: t0.x t0.x t0.x op: 00000000 16: xyz: t0 t0 t0 bias-> t0.x (00800000) w: c0 t0 t0 bias-> (00000020) xyz: t0.xyz c0.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 17: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 1.0 op: 00054a80 w: t0.x t0.x t0.x op: 00000000 18: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xxx t1.www 0.0 op: 00050601 w: t0.x t0.x t0.x op: 00000000 19: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.w t0.w 0.0 op: 40040509 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 IN[2], GENERIC[2], PERSPECTIVE DCL IN[3], GENERIC[3], PERSPECTIVE DCL IN[4], GENERIC[4], PERSPECTIVE DCL IN[5], GENERIC[5], PERSPECTIVE DCL IN[6], GENERIC[6], PERSPECTIVE DCL IN[7], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0..1] IMM FLT32 { 0.0714, 0.1071, 0.1429, 0.1786} 0: TEX TEMP[0], IN[1], SAMP[0], RECT 1: MUL TEMP[1], TEMP[0], IMM[0].yyyy 2: TEX TEMP[0], IN[0], SAMP[0], RECT 3: MAD TEMP[1], TEMP[0], IMM[0].xxxx, TEMP[1] 4: TEX TEMP[0], IN[2], SAMP[0], RECT 5: MAD TEMP[1], TEMP[0], IMM[0].zzzz, TEMP[1] 6: TEX TEMP[0], IN[3], SAMP[0], RECT 7: MAD TEMP[1], TEMP[0], IMM[0].wwww, TEMP[1] 8: TEX TEMP[0], IN[4], SAMP[0], RECT 9: MAD TEMP[1], TEMP[0], IMM[0].wwww, TEMP[1] 10: TEX TEMP[0], IN[5], SAMP[0], RECT 11: MAD TEMP[1], TEMP[0], IMM[0].zzzz, TEMP[1] 12: TEX TEMP[0], IN[6], SAMP[0], RECT 13: MAD TEMP[1], TEMP[0], IMM[0].yyyy, TEMP[1] 14: TEX TEMP[0], IN[7], SAMP[0], RECT 15: MAD OUT[0], TEMP[0], IMM[0].xxxx, TEMP[1] 16: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[0]; 3: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 4: TEX temp[0], input[2], RECT[0]; 5: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 6: TEX temp[0], input[3], RECT[0]; 7: MAD temp[1], temp[0], const[0].wwww, temp[1]; 8: TEX temp[0], input[4], RECT[0]; 9: MAD temp[1], temp[0], const[0].wwww, temp[1]; 10: TEX temp[0], input[5], RECT[0]; 11: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 12: TEX temp[0], input[6], RECT[0]; 13: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 14: TEX temp[0], input[7], RECT[0]; 15: MAD output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[0]; 3: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 4: TEX temp[0], input[2], RECT[0]; 5: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 6: TEX temp[0], input[3], RECT[0]; 7: MAD temp[1], temp[0], const[0].wwww, temp[1]; 8: TEX temp[0], input[4], RECT[0]; 9: MAD temp[1], temp[0], const[0].wwww, temp[1]; 10: TEX temp[0], input[5], RECT[0]; 11: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 12: TEX temp[0], input[6], RECT[0]; 13: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 14: TEX temp[0], input[7], RECT[0]; 15: MAD output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[0]; 3: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 4: TEX temp[0], input[2], RECT[0]; 5: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 6: TEX temp[0], input[3], RECT[0]; 7: MAD temp[1], temp[0], const[0].wwww, temp[1]; 8: TEX temp[0], input[4], RECT[0]; 9: MAD temp[1], temp[0], const[0].wwww, temp[1]; 10: TEX temp[0], input[5], RECT[0]; 11: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 12: TEX temp[0], input[6], RECT[0]; 13: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 14: TEX temp[0], input[7], RECT[0]; 15: MAD output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[0]; 3: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 4: TEX temp[0], input[2], RECT[0]; 5: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 6: TEX temp[0], input[3], RECT[0]; 7: MAD temp[1], temp[0], const[0].wwww, temp[1]; 8: TEX temp[0], input[4], RECT[0]; 9: MAD temp[1], temp[0], const[0].wwww, temp[1]; 10: TEX temp[0], input[5], RECT[0]; 11: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 12: TEX temp[0], input[6], RECT[0]; 13: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 14: TEX temp[0], input[7], RECT[0]; 15: MAD output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[0]; 3: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 4: TEX temp[0], input[2], RECT[0]; 5: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 6: TEX temp[0], input[3], RECT[0]; 7: MAD temp[1], temp[0], const[0].wwww, temp[1]; 8: TEX temp[0], input[4], RECT[0]; 9: MAD temp[1], temp[0], const[0].wwww, temp[1]; 10: TEX temp[0], input[5], RECT[0]; 11: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 12: TEX temp[0], input[6], RECT[0]; 13: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 14: TEX temp[0], input[7], RECT[0]; 15: MAD output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[0]; 3: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 4: TEX temp[0], input[2], RECT[0]; 5: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 6: TEX temp[0], input[3], RECT[0]; 7: MAD temp[1], temp[0], const[0].wwww, temp[1]; 8: TEX temp[0], input[4], RECT[0]; 9: MAD temp[1], temp[0], const[0].wwww, temp[1]; 10: TEX temp[0], input[5], RECT[0]; 11: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 12: TEX temp[0], input[6], RECT[0]; 13: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 14: TEX temp[0], input[7], RECT[0]; 15: MAD_SAT output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[2], input[1], const[1]; 1: TEX temp[0], temp[2], 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3], input[0], const[1]; 4: TEX temp[0], temp[3], 2D[0]; 5: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 6: MUL temp[4], input[2], const[1]; 7: TEX temp[0], temp[4], 2D[0]; 8: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 9: MUL temp[5], input[3], const[1]; 10: TEX temp[0], temp[5], 2D[0]; 11: MAD temp[1], temp[0], const[0].wwww, temp[1]; 12: MUL temp[6], input[4], const[1]; 13: TEX temp[0], temp[6], 2D[0]; 14: MAD temp[1], temp[0], const[0].wwww, temp[1]; 15: MUL temp[7], input[5], const[1]; 16: TEX temp[0], temp[7], 2D[0]; 17: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 18: MUL temp[8], input[6], const[1]; 19: TEX temp[0], temp[8], 2D[0]; 20: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 21: MUL temp[9], input[7], const[1]; 22: TEX temp[0], temp[9], 2D[0]; 23: MAD_SAT output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[2], input[1], const[1]; 1: TEX temp[0], temp[2], 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3], input[0], const[1]; 4: TEX temp[0], temp[3], 2D[0]; 5: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 6: MUL temp[4], input[2], const[1]; 7: TEX temp[0], temp[4], 2D[0]; 8: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 9: MUL temp[5], input[3], const[1]; 10: TEX temp[0], temp[5], 2D[0]; 11: MAD temp[1], temp[0], const[0].wwww, temp[1]; 12: MUL temp[6], input[4], const[1]; 13: TEX temp[0], temp[6], 2D[0]; 14: MAD temp[1], temp[0], const[0].wwww, temp[1]; 15: MUL temp[7], input[5], const[1]; 16: TEX temp[0], temp[7], 2D[0]; 17: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 18: MUL temp[8], input[6], const[1]; 19: TEX temp[0], temp[8], 2D[0]; 20: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 21: MUL temp[9], input[7], const[1]; 22: TEX temp[0], temp[9], 2D[0]; 23: MAD_SAT output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[1].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[1].xy__; 4: TEX temp[0], temp[3].xy__, 2D[0]; 5: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 6: MUL temp[4].xy, input[2].xy__, const[1].xy__; 7: TEX temp[0], temp[4].xy__, 2D[0]; 8: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 9: MUL temp[5].xy, input[3].xy__, const[1].xy__; 10: TEX temp[0], temp[5].xy__, 2D[0]; 11: MAD temp[1], temp[0], const[0].wwww, temp[1]; 12: MUL temp[6].xy, input[4].xy__, const[1].xy__; 13: TEX temp[0], temp[6].xy__, 2D[0]; 14: MAD temp[1], temp[0], const[0].wwww, temp[1]; 15: MUL temp[7].xy, input[5].xy__, const[1].xy__; 16: TEX temp[0], temp[7].xy__, 2D[0]; 17: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 18: MUL temp[8].xy, input[6].xy__, const[1].xy__; 19: TEX temp[0], temp[8].xy__, 2D[0]; 20: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 21: MUL temp[9].xy, input[7].xy__, const[1].xy__; 22: TEX temp[0], temp[9].xy__, 2D[0]; 23: MAD_SAT output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[1].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[1].xy__; 4: TEX temp[0], temp[3].xy__, 2D[0]; 5: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 6: MUL temp[4].xy, input[2].xy__, const[1].xy__; 7: TEX temp[0], temp[4].xy__, 2D[0]; 8: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 9: MUL temp[5].xy, input[3].xy__, const[1].xy__; 10: TEX temp[0], temp[5].xy__, 2D[0]; 11: MAD temp[1], temp[0], const[0].wwww, temp[1]; 12: MUL temp[6].xy, input[4].xy__, const[1].xy__; 13: TEX temp[0], temp[6].xy__, 2D[0]; 14: MAD temp[1], temp[0], const[0].wwww, temp[1]; 15: MUL temp[7].xy, input[5].xy__, const[1].xy__; 16: TEX temp[0], temp[7].xy__, 2D[0]; 17: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 18: MUL temp[8].xy, input[6].xy__, const[1].xy__; 19: TEX temp[0], temp[8].xy__, 2D[0]; 20: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 21: MUL temp[9].xy, input[7].xy__, const[1].xy__; 22: TEX temp[0], temp[9].xy__, 2D[0]; 23: MAD_SAT output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[1].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[1].xy__; 4: TEX temp[0], temp[3].xy__, 2D[0]; 5: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 6: MUL temp[4].xy, input[2].xy__, const[1].xy__; 7: TEX temp[0], temp[4].xy__, 2D[0]; 8: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 9: MUL temp[5].xy, input[3].xy__, const[1].xy__; 10: TEX temp[0], temp[5].xy__, 2D[0]; 11: MAD temp[1], temp[0], const[0].wwww, temp[1]; 12: MUL temp[6].xy, input[4].xy__, const[1].xy__; 13: TEX temp[0], temp[6].xy__, 2D[0]; 14: MAD temp[1], temp[0], const[0].wwww, temp[1]; 15: MUL temp[7].xy, input[5].xy__, const[1].xy__; 16: TEX temp[0], temp[7].xy__, 2D[0]; 17: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 18: MUL temp[8].xy, input[6].xy__, const[1].xy__; 19: TEX temp[0], temp[8].xy__, 2D[0]; 20: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 21: MUL temp[9].xy, input[7].xy__, const[1].xy__; 22: TEX temp[0], temp[9].xy__, 2D[0]; 23: MAD_SAT output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[1].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[1].xy__; 4: TEX temp[0], temp[3].xy__, 2D[0]; 5: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 6: MUL temp[4].xy, input[2].xy__, const[1].xy__; 7: TEX temp[0], temp[4].xy__, 2D[0]; 8: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 9: MUL temp[5].xy, input[3].xy__, const[1].xy__; 10: TEX temp[0], temp[5].xy__, 2D[0]; 11: MAD temp[1], temp[0], const[0].wwww, temp[1]; 12: MUL temp[6].xy, input[4].xy__, const[1].xy__; 13: TEX temp[0], temp[6].xy__, 2D[0]; 14: MAD temp[1], temp[0], const[0].wwww, temp[1]; 15: MUL temp[7].xy, input[5].xy__, const[1].xy__; 16: TEX temp[0], temp[7].xy__, 2D[0]; 17: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 18: MUL temp[8].xy, input[6].xy__, const[1].xy__; 19: TEX temp[0], temp[8].xy__, 2D[0]; 20: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 21: MUL temp[9].xy, input[7].xy__, const[1].xy__; 22: TEX temp[0], temp[9].xy__, 2D[0]; 23: MAD_SAT output[0], temp[0], const[0].xxxx, temp[1]; CONST[0] = { 0.0714 0.1071 0.1429 0.1786 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[1].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[1].xy__; 4: TEX temp[0], temp[3].xy__, 2D[0]; 5: MAD temp[1], temp[0], const[0].xxxx, temp[1]; 6: MUL temp[4].xy, input[2].xy__, const[1].xy__; 7: TEX temp[0], temp[4].xy__, 2D[0]; 8: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 9: MUL temp[5].xy, input[3].xy__, const[1].xy__; 10: TEX temp[0], temp[5].xy__, 2D[0]; 11: MAD temp[1], temp[0], const[0].wwww, temp[1]; 12: MUL temp[6].xy, input[4].xy__, const[1].xy__; 13: TEX temp[0], temp[6].xy__, 2D[0]; 14: MAD temp[1], temp[0], const[0].wwww, temp[1]; 15: MUL temp[7].xy, input[5].xy__, const[1].xy__; 16: TEX temp[0], temp[7].xy__, 2D[0]; 17: MAD temp[1], temp[0], const[0].zzzz, temp[1]; 18: MUL temp[8].xy, input[6].xy__, const[1].xy__; 19: TEX temp[0], temp[8].xy__, 2D[0]; 20: MAD temp[1], temp[0], const[0].yyyy, temp[1]; 21: MUL temp[9].xy, input[7].xy__, const[1].xy__; 22: TEX temp[0], temp[9].xy__, 2D[0]; 23: MAD_SAT output[0], temp[0], const[0].xxxx, temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[10].xy, input[1].xy__, const[1].xy__; 1: TEX temp[11], temp[10].xy__, 2D[0]; 2: MUL temp[12], temp[11], const[0].yyyy; 3: MUL temp[13].xy, input[0].xy__, const[1].xy__; 4: TEX temp[14], temp[13].xy__, 2D[0]; 5: MAD temp[15], temp[14], const[0].xxxx, temp[12]; 6: MUL temp[16].xy, input[2].xy__, const[1].xy__; 7: TEX temp[17], temp[16].xy__, 2D[0]; 8: MAD temp[18], temp[17], const[0].zzzz, temp[15]; 9: MUL temp[19].xy, input[3].xy__, const[1].xy__; 10: TEX temp[20], temp[19].xy__, 2D[0]; 11: MAD temp[21], temp[20], const[0].wwww, temp[18]; 12: MUL temp[22].xy, input[4].xy__, const[1].xy__; 13: TEX temp[23], temp[22].xy__, 2D[0]; 14: MAD temp[24], temp[23], const[0].wwww, temp[21]; 15: MUL temp[25].xy, input[5].xy__, const[1].xy__; 16: TEX temp[26], temp[25].xy__, 2D[0]; 17: MAD temp[27], temp[26], const[0].zzzz, temp[24]; 18: MUL temp[28].xy, input[6].xy__, const[1].xy__; 19: TEX temp[29], temp[28].xy__, 2D[0]; 20: MAD temp[30], temp[29], const[0].yyyy, temp[27]; 21: MUL temp[31].xy, input[7].xy__, const[1].xy__; 22: TEX temp[32], temp[31].xy__, 2D[0]; 23: MAD_SAT output[0], temp[32], const[0].xxxx, temp[30]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[1] MAD temp[10].xy, src0.xy_, src1.xy_, src0.000 1: TEX temp[11], temp[10].xy__, 2D[0]; 2: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = const[0] MAD temp[12].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[12].w, src0.w, src1.y, src0.0 3: src0.xyz = input[0], src1.xyz = const[1] MAD temp[13].xy, src0.xy_, src1.xy_, src0.000 4: TEX temp[14], temp[13].xy__, 2D[0]; 5: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = const[0], src1.w = temp[12], src2.xyz = temp[12] MAD temp[15].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[15].w, src0.w, src1.x, src1.w 6: src0.xyz = input[2], src1.xyz = const[1] MAD temp[16].xy, src0.xy_, src1.xy_, src0.000 7: TEX temp[17], temp[16].xy__, 2D[0]; 8: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = const[0], src1.w = temp[15], src2.xyz = temp[15] MAD temp[18].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[18].w, src0.w, src1.z, src1.w 9: src0.xyz = input[3], src1.xyz = const[1] MAD temp[19].xy, src0.xy_, src1.xy_, src0.000 10: TEX temp[20], temp[19].xy__, 2D[0]; 11: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = temp[18], src1.w = const[0], src2.w = temp[18] MAD temp[21].xyz, src0.xyz, src1.www, src1.xyz MAD temp[21].w, src0.w, src1.w, src2.w 12: src0.xyz = input[4], src1.xyz = const[1] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 13: TEX temp[23], temp[22].xy__, 2D[0]; 14: src0.xyz = temp[23], src0.w = temp[23], src1.xyz = temp[21], src1.w = const[0], src2.w = temp[21] MAD temp[24].xyz, src0.xyz, src1.www, src1.xyz MAD temp[24].w, src0.w, src1.w, src2.w 15: src0.xyz = input[5], src1.xyz = const[1] MAD temp[25].xy, src0.xy_, src1.xy_, src0.000 16: TEX temp[26], temp[25].xy__, 2D[0]; 17: src0.xyz = temp[26], src0.w = temp[26], src1.xyz = const[0], src1.w = temp[24], src2.xyz = temp[24] MAD temp[27].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[27].w, src0.w, src1.z, src1.w 18: src0.xyz = input[6], src1.xyz = const[1] MAD temp[28].xy, src0.xy_, src1.xy_, src0.000 19: TEX temp[29], temp[28].xy__, 2D[0]; 20: src0.xyz = temp[29], src0.w = temp[29], src1.xyz = const[0], src1.w = temp[27], src2.xyz = temp[27] MAD temp[30].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[30].w, src0.w, src1.y, src1.w 21: src0.xyz = input[7], src1.xyz = const[1] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 22: TEX temp[32], temp[31].xy__, 2D[0]; 23: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = const[0], src1.w = temp[30], src2.xyz = temp[30] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src2.xyz MAD_SAT color[0].w, src0.w, src1.x, src1.w Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[7], src1.xyz = const[1] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 1: src0.xyz = input[6], src1.xyz = const[1] MAD temp[28].xy, src0.xy_, src1.xy_, src0.000 2: src0.xyz = input[5], src1.xyz = const[1] MAD temp[25].xy, src0.xy_, src1.xy_, src0.000 3: src0.xyz = input[4], src1.xyz = const[1] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 4: src0.xyz = input[3], src1.xyz = const[1] MAD temp[19].xy, src0.xy_, src1.xy_, src0.000 5: src0.xyz = input[2], src1.xyz = const[1] MAD temp[16].xy, src0.xy_, src1.xy_, src0.000 6: src0.xyz = input[0], src1.xyz = const[1] MAD temp[13].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = input[1], src1.xyz = const[1] MAD temp[10].xy, src0.xy_, src1.xy_, src0.000 8: BEGIN_TEX; 9: TEX temp[32], temp[31].xy__, 2D[0]; 10: TEX temp[29], temp[28].xy__, 2D[0]; 11: TEX temp[26], temp[25].xy__, 2D[0]; 12: TEX temp[23], temp[22].xy__, 2D[0]; 13: TEX temp[20], temp[19].xy__, 2D[0]; 14: TEX temp[17], temp[16].xy__, 2D[0]; 15: TEX temp[14], temp[13].xy__, 2D[0]; 16: TEX temp[11], temp[10].xy__, 2D[0]; 17: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = const[0] MAD temp[12].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[12].w, src0.w, src1.y, src0.0 18: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = const[0], src1.w = temp[12], src2.xyz = temp[12] MAD temp[15].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[15].w, src0.w, src1.x, src1.w 19: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = const[0], src1.w = temp[15], src2.xyz = temp[15] MAD temp[18].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[18].w, src0.w, src1.z, src1.w 20: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = temp[18], src1.w = const[0], src2.w = temp[18] MAD temp[21].xyz, src0.xyz, src1.www, src1.xyz MAD temp[21].w, src0.w, src1.w, src2.w 21: src0.xyz = temp[23], src0.w = temp[23], src1.xyz = temp[21], src1.w = const[0], src2.w = temp[21] MAD temp[24].xyz, src0.xyz, src1.www, src1.xyz MAD temp[24].w, src0.w, src1.w, src2.w 22: src0.xyz = temp[26], src0.w = temp[26], src1.xyz = const[0], src1.w = temp[24], src2.xyz = temp[24] MAD temp[27].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[27].w, src0.w, src1.z, src1.w 23: src0.xyz = temp[29], src0.w = temp[29], src1.xyz = const[0], src1.w = temp[27], src2.xyz = temp[27] MAD temp[30].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[30].w, src0.w, src1.y, src1.w 24: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = const[0], src1.w = temp[30], src2.xyz = temp[30] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src2.xyz MAD_SAT color[0].w, src0.w, src1.x, src1.w Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[7], src1.xyz = const[1] MAD temp[31].xy, src0.xy_, src1.xy_, src0.000 1: src0.xyz = input[6], src1.xyz = const[1] MAD temp[28].xy, src0.xy_, src1.xy_, src0.000 2: src0.xyz = input[5], src1.xyz = const[1] MAD temp[25].xy, src0.xy_, src1.xy_, src0.000 3: src0.xyz = input[4], src1.xyz = const[1] MAD temp[22].xy, src0.xy_, src1.xy_, src0.000 4: src0.xyz = input[3], src1.xyz = const[1] MAD temp[19].xy, src0.xy_, src1.xy_, src0.000 5: src0.xyz = input[2], src1.xyz = const[1] MAD temp[16].xy, src0.xy_, src1.xy_, src0.000 6: src0.xyz = input[0], src1.xyz = const[1] MAD temp[13].xy, src0.xy_, src1.xy_, src0.000 7: src0.xyz = input[1], src1.xyz = const[1] MAD temp[10].xy, src0.xy_, src1.xy_, src0.000 8: BEGIN_TEX; 9: TEX temp[32], temp[31].xy__, 2D[0]; 10: TEX temp[29], temp[28].xy__, 2D[0]; 11: TEX temp[26], temp[25].xy__, 2D[0]; 12: TEX temp[23], temp[22].xy__, 2D[0]; 13: TEX temp[20], temp[19].xy__, 2D[0]; 14: TEX temp[17], temp[16].xy__, 2D[0]; 15: TEX temp[14], temp[13].xy__, 2D[0]; 16: TEX temp[11], temp[10].xy__, 2D[0]; 17: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = const[0] MAD temp[12].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[12].w, src0.w, src1.y, src0.0 18: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = const[0], src1.w = temp[12], src2.xyz = temp[12] MAD temp[15].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[15].w, src0.w, src1.x, src1.w 19: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = const[0], src1.w = temp[15], src2.xyz = temp[15] MAD temp[18].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[18].w, src0.w, src1.z, src1.w 20: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = temp[18], src1.w = const[0], src2.w = temp[18] MAD temp[21].xyz, src0.xyz, src1.www, src1.xyz MAD temp[21].w, src0.w, src1.w, src2.w 21: src0.xyz = temp[23], src0.w = temp[23], src1.xyz = temp[21], src1.w = const[0], src2.w = temp[21] MAD temp[24].xyz, src0.xyz, src1.www, src1.xyz MAD temp[24].w, src0.w, src1.w, src2.w 22: src0.xyz = temp[26], src0.w = temp[26], src1.xyz = const[0], src1.w = temp[24], src2.xyz = temp[24] MAD temp[27].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[27].w, src0.w, src1.z, src1.w 23: src0.xyz = temp[29], src0.w = temp[29], src1.xyz = const[0], src1.w = temp[27], src2.xyz = temp[27] MAD temp[30].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[30].w, src0.w, src1.y, src1.w 24: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = const[0], src1.w = temp[30], src2.xyz = temp[30] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src2.xyz MAD_SAT color[0].w, src0.w, src1.x, src1.w Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[7], src1.xyz = const[1] MAD temp[7].xy, src0.xy_, src1.xy_, src0.00_ 1: src0.xyz = input[6], src1.xyz = const[1] MAD temp[6].xy, src0.xy_, src1.xy_, src0.00_ 2: src0.xyz = input[5], src1.xyz = const[1] MAD temp[5].xy, src0.xy_, src1.xy_, src0.00_ 3: src0.xyz = input[4], src1.xyz = const[1] MAD temp[4].xy, src0.xy_, src1.xy_, src0.00_ 4: src0.xyz = input[3], src1.xyz = const[1] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 5: src0.xyz = input[2], src1.xyz = const[1] MAD temp[2].xy, src0.xy_, src1.xy_, src0.00_ 6: src0.xyz = input[0], src1.xyz = const[1] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 7: src0.xyz = input[1], src1.xyz = const[1] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 8: BEGIN_TEX; 9: TEX temp[7], temp[7].xy__, 2D[0]; 10: TEX temp[6], temp[6].xy__, 2D[0]; 11: TEX temp[5], temp[5].xy__, 2D[0]; 12: TEX temp[4], temp[4].xy__, 2D[0]; 13: TEX temp[3], temp[3].xy__, 2D[0]; 14: TEX temp[2], temp[2].xy__, 2D[0]; 15: TEX temp[0], temp[0].xy__, 2D[0]; 16: TEX temp[1], temp[1].xy__, 2D[0]; 17: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0] MAD temp[1].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[1].w, src0.w, src1.y, src0.0 18: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = temp[1], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[0].w, src0.w, src1.x, src1.w 19: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = const[0], src1.w = temp[0], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[0].w, src0.w, src1.z, src1.w 20: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[0], src1.w = const[0], src2.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.www, src1.xyz MAD temp[0].w, src0.w, src1.w, src2.w 21: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[0], src1.w = const[0], src2.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.www, src1.xyz MAD temp[0].w, src0.w, src1.w, src2.w 22: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = const[0], src1.w = temp[0], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[0].w, src0.w, src1.z, src1.w 23: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = const[0], src1.w = temp[0], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[0].w, src0.w, src1.y, src1.w 24: src0.xyz = temp[7], src0.w = temp[7], src1.xyz = const[0], src1.w = temp[0], src2.xyz = temp[0] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src2.xyz MAD_SAT color[0].w, src0.w, src1.x, src1.w pc=13************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 7, tex_end: 0 (code_addr: 000001c0) 0: xyz: t7 c1 t0 bias-> t7.xy (019c0847) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz c1.xyz 0.0 op: 00050200 w: t7.x t7.x t7.x op: 00000000 1: xyz: t6 c1 t0 bias-> t6.xy (01980846) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c1.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 2: xyz: t5 c1 t0 bias-> t5.xy (01940845) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c1.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 3: xyz: t4 c1 t0 bias-> t4.xy (01900844) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c1.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 4: xyz: t3 c1 t0 bias-> t3.xy (018c0843) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c1.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 5: xyz: t2 c1 t0 bias-> t2.xy (01880842) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c1.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 6: 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 7: xyz: t1 c1 t0 bias-> t1.xy (01840841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c1.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 8, tex_offset: 0, alu_end: 7, tex_end: 7 (code_addr: 004e01c8) TEX: TEX t7, t7, texture[0] (000081c7) TEX t6, t6, texture[0] (00008186) TEX t5, t5, texture[0] (00008145) TEX t4, t4, texture[0] (00008104) TEX t3, t3, texture[0] (000080c3) TEX t2, t2, texture[0] (00008082) TEX t0, t0, texture[0] (00008000) TEX t1, t1, texture[0] (00008041) 8: xyz: t1 c0 t0 bias-> t1.xyz (03840801) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t1.xyz c0.yyy 0.0 op: 00050300 w: t1.w c0.y 0.0 op: 00040209 9: xyz: t0 c0 t1 bias-> t0.xyz (03801800) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t0.xyz c0.xxx t1.xyz op: 00020280 w: t0.w c0.x t1.w op: 00028189 10: xyz: t2 c0 t0 bias-> t0.xyz (03800802) w: t2 t0 t0 bias-> t0.w (00800002) xyz: t2.xyz c0.zzz t0.xyz op: 00020380 w: t2.w c0.z t0.w op: 00028289 11: xyz: t3 t0 t0 bias-> t0.xyz (03800003) w: t3 c0 t0 bias-> t0.w (00800803) xyz: t3.xyz c0.www t0.xyz op: 00010680 w: t3.w c0.w t0.w op: 0002c509 12: xyz: t4 t0 t0 bias-> t0.xyz (03800004) w: t4 c0 t0 bias-> t0.w (00800804) xyz: t4.xyz c0.www t0.xyz op: 00010680 w: t4.w c0.w t0.w op: 0002c509 13: xyz: t5 c0 t0 bias-> t0.xyz (03800805) w: t5 t0 t0 bias-> t0.w (00800005) xyz: t5.xyz c0.zzz t0.xyz op: 00020380 w: t5.w c0.z t0.w op: 00028289 14: xyz: t6 c0 t0 bias-> t0.xyz (03800806) w: t6 t0 t0 bias-> t0.w (00800006) xyz: t6.xyz c0.yyy t0.xyz op: 00020300 w: t6.w c0.y t0.w op: 00028209 15: xyz: t7 c0 t0 bias-> o0.xyz (1c000807) w: t7 t0 t0 bias-> o0.w (01000007) xyz: t7.xyz c0.xxx t0.xyz op: 40020280 w: t7.w c0.x t0.w op: 40028189 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 CONST[2..3] DCL TEMP[0..1] IMM FLT32 { 0.2990, 0.5870, 0.1140, 0.5000} 0: TEX TEMP[0], IN[1], SAMP[0], RECT 1: MUL TEMP[1], TEMP[0], CONST[0].yyyy 2: TEX TEMP[0], IN[0], SAMP[1], RECT 3: MAD TEMP[0], TEMP[0], CONST[0].xxxx, TEMP[1] 4: DP3 TEMP[1].x, TEMP[0], IMM[0] 5: ADD TEMP[0], TEMP[0], -TEMP[1].xxxx 6: MAD TEMP[0], TEMP[0], CONST[2].xxxx, TEMP[1].xxxx 7: ADD TEMP[0], TEMP[0], -IMM[0].wwww 8: MUL TEMP[0], TEMP[0], CONST[2].yyyy 9: ADD TEMP[0], TEMP[0], IMM[0].wwww 10: MUL OUT[0], TEMP[0], CONST[3] 11: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[1]; 3: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 4: DP3 temp[1].x, temp[0], const[4]; 5: ADD temp[0], temp[0], -temp[1].xxxx; 6: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 7: ADD temp[0], temp[0], -const[4].wwww; 8: MUL temp[0], temp[0], const[2].yyyy; 9: ADD temp[0], temp[0], const[4].wwww; 10: MUL output[0], temp[0], const[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[1]; 3: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 4: DP3 temp[1].x, temp[0], const[4]; 5: ADD temp[0], temp[0], -temp[1].xxxx; 6: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 7: ADD temp[0], temp[0], -const[4].wwww; 8: MUL temp[0], temp[0], const[2].yyyy; 9: ADD temp[0], temp[0], const[4].wwww; 10: MUL output[0], temp[0], const[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[1]; 3: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 4: DP3 temp[1].x, temp[0], const[4]; 5: ADD temp[0], temp[0], -temp[1].xxxx; 6: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 7: ADD temp[0], temp[0], -const[4].wwww; 8: MUL temp[0], temp[0], const[2].yyyy; 9: ADD temp[0], temp[0], const[4].wwww; 10: MUL output[0], temp[0], const[3]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[1]; 3: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 4: DP3 temp[1].x, temp[0], const[4]; 5: ADD temp[0], temp[0], -temp[1].xxxx; 6: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 7: ADD temp[0], temp[0], -const[4].wwww; 8: MUL temp[0], temp[0], const[2].yyyy; 9: ADD temp[0], temp[0], const[4].wwww; 10: MUL output[0], temp[0], const[3]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[1]; 3: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 4: DP3 temp[1].x, temp[0], const[4]; 5: ADD temp[0], temp[0], -temp[1].xxxx; 6: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 7: ADD temp[0], temp[0], -const[4].wwww; 8: MUL temp[0], temp[0], const[2].yyyy; 9: ADD temp[0], temp[0], const[4].wwww; 10: MUL output[0], temp[0], const[3]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], RECT[0]; 1: MUL temp[1], temp[0], const[0].yyyy; 2: TEX temp[0], input[0], RECT[1]; 3: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 4: DP3 temp[1].x, temp[0], const[4]; 5: ADD temp[0], temp[0], -temp[1].xxxx; 6: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 7: ADD temp[0], temp[0], -const[4].wwww; 8: MUL temp[0], temp[0], const[2].yyyy; 9: ADD temp[0], temp[0], const[4].wwww; 10: MUL_SAT output[0], temp[0], const[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[2], input[1], const[5]; 1: TEX temp[0], temp[2], 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3], input[0], const[6]; 4: TEX temp[0], temp[3], 2D[1]; 5: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 6: DP3 temp[1].x, temp[0], const[4]; 7: ADD temp[0], temp[0], -temp[1].xxxx; 8: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 9: ADD temp[0], temp[0], -const[4].wwww; 10: MUL temp[0], temp[0], const[2].yyyy; 11: ADD temp[0], temp[0], const[4].wwww; 12: MUL_SAT output[0], temp[0], const[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[2], input[1], const[5]; 1: TEX temp[0], temp[2], 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3], input[0], const[6]; 4: TEX temp[0], temp[3], 2D[1]; 5: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 6: DP3 temp[1].x, temp[0], const[4]; 7: ADD temp[0], temp[0], -temp[1].xxxx; 8: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 9: ADD temp[0], temp[0], -const[4].wwww; 10: MUL temp[0], temp[0], const[2].yyyy; 11: ADD temp[0], temp[0], const[4].wwww; 12: MUL_SAT output[0], temp[0], const[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[5].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[6].xy__; 4: TEX temp[0], temp[3].xy__, 2D[1]; 5: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 6: DP3 temp[1].x, temp[0].xyz_, const[4].xyz_; 7: ADD temp[0], temp[0], -temp[1].xxxx; 8: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 9: ADD temp[0], temp[0], -const[4].wwww; 10: MUL temp[0], temp[0], const[2].yyyy; 11: ADD temp[0], temp[0], const[4].wwww; 12: MUL_SAT output[0], temp[0], const[3]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[5].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[6].xy__; 4: TEX temp[0], temp[3].xy__, 2D[1]; 5: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 6: DP3 temp[1].x, temp[0].xyz_, const[4].xyz_; 7: ADD temp[0], temp[0], -temp[1].xxxx; 8: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 9: ADD temp[0], temp[0], -const[4].wwww; 10: MUL temp[0], temp[0], const[2].yyyy; 11: ADD temp[0], temp[0], const[4].wwww; 12: MUL_SAT output[0], temp[0], const[3]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[5].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[6].xy__; 4: TEX temp[0], temp[3].xy__, 2D[1]; 5: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 6: DP3 temp[1].x, temp[0].xyz_, const[4].xyz_; 7: ADD temp[0], temp[0], -temp[1].xxxx; 8: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 9: ADD temp[0], temp[0], -none.HHHH; 10: MUL temp[0], temp[0], const[2].yyyy; 11: ADD temp[0], temp[0], none.HHHH; 12: MUL_SAT output[0], temp[0], const[3]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[5].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[6].xy__; 4: TEX temp[0], temp[3].xy__, 2D[1]; 5: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 6: DP3 temp[1].x, temp[0].xyz_, const[4].xyz_; 7: ADD temp[0], temp[0], -temp[1].xxxx; 8: MAD temp[0], temp[0], const[2].xxxx, temp[1].xxxx; 9: ADD temp[0], temp[0], -none.HHHH; 10: MUL temp[0], temp[0], const[2].yyyy; 11: ADD temp[0], temp[0], none.HHHH; 12: MUL_SAT output[0], temp[0], const[3]; CONST[3] = { 0.2990 0.5870 0.1140 0.5000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[2].xy, input[1].xy__, const[4].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1], temp[0], const[0].yyyy; 3: MUL temp[3].xy, input[0].xy__, const[5].xy__; 4: TEX temp[0], temp[3].xy__, 2D[1]; 5: MAD temp[0], temp[0], const[0].xxxx, temp[1]; 6: DP3 temp[1].x, temp[0].xyz_, const[3].xyz_; 7: ADD temp[0], temp[0], -temp[1].xxxx; 8: MAD temp[0], temp[0], const[1].xxxx, temp[1].xxxx; 9: ADD temp[0], temp[0], -none.HHHH; 10: MUL temp[0], temp[0], const[1].yyyy; 11: ADD temp[0], temp[0], none.HHHH; 12: MUL_SAT output[0], temp[0], const[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[4].xy, input[1].xy__, const[4].xy__; 1: TEX temp[5], temp[4].xy__, 2D[0]; 2: MUL temp[6], temp[5], const[0].yyyy; 3: MUL temp[7].xy, input[0].xy__, const[5].xy__; 4: TEX temp[8], temp[7].xy__, 2D[1]; 5: MAD temp[9], temp[8], const[0].xxxx, temp[6]; 6: DP3 temp[10].x, temp[9].xyz_, const[3].xyz_; 7: ADD temp[11], temp[9], -temp[10].xxxx; 8: MAD temp[12], temp[11], const[1].xxxx, temp[10].xxxx; 9: ADD temp[13], temp[12], -none.HHHH; 10: MUL temp[14], temp[13], const[1].yyyy; 11: ADD temp[15], temp[14], none.HHHH; 12: MUL_SAT output[0], temp[15], const[2]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[4] MAD temp[4].xy, src0.xy_, src1.xy_, src0.000 1: TEX temp[5], temp[4].xy__, 2D[0]; 2: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = const[0] MAD temp[6].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[6].w, src0.w, src1.y, src0.0 3: src0.xyz = input[0], src1.xyz = const[5] MAD temp[7].xy, src0.xy_, src1.xy_, src0.000 4: TEX temp[8], temp[7].xy__, 2D[1]; 5: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = const[0], src1.w = temp[6], src2.xyz = temp[6] MAD temp[9].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[9].w, src0.w, src1.x, src1.w 6: src0.xyz = temp[9], src1.xyz = const[3] DP3 temp[10].x, src0.xyz, src1.xyz 7: src0.xyz = temp[9], src0.w = temp[9], src1.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src0.111, -src1.xxx MAD temp[11].w, src0.w, src0.1, -src1.x 8: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = const[1], src2.xyz = temp[10] MAD temp[12].xyz, src0.xyz, src1.xxx, src2.xxx MAD temp[12].w, src0.w, src1.x, src2.x 9: src0.xyz = temp[12], src0.w = temp[12] MAD temp[13].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[13].w, src0.w, src0.1, -src0.H 10: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = const[1] MAD temp[14].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[14].w, src0.w, src1.y, src0.0 11: src0.xyz = temp[14], src0.w = temp[14] MAD temp[15].xyz, src0.xyz, src0.111, src0.HHH MAD temp[15].w, src0.w, src0.1, src0.H 12: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = const[2], src1.w = const[2] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[5] MAD temp[7].xy, src0.xy_, src1.xy_, src0.000 1: src0.xyz = input[1], src1.xyz = const[4] MAD temp[4].xy, src0.xy_, src1.xy_, src0.000 2: BEGIN_TEX; 3: TEX temp[8], temp[7].xy__, 2D[1]; 4: TEX temp[5], temp[4].xy__, 2D[0]; 5: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = const[0] MAD temp[6].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[6].w, src0.w, src1.y, src0.0 6: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = const[0], src1.w = temp[6], src2.xyz = temp[6] MAD temp[9].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[9].w, src0.w, src1.x, src1.w 7: src0.xyz = temp[9], src1.xyz = const[3] DP3 temp[10].x, src0.xyz, src1.xyz 8: src0.xyz = temp[9], src0.w = temp[9], src1.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src0.111, -src1.xxx MAD temp[11].w, src0.w, src0.1, -src1.x 9: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = const[1], src2.xyz = temp[10] MAD temp[12].xyz, src0.xyz, src1.xxx, src2.xxx MAD temp[12].w, src0.w, src1.x, src2.x 10: src0.xyz = temp[12], src0.w = temp[12] MAD temp[13].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[13].w, src0.w, src0.1, -src0.H 11: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = const[1] MAD temp[14].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[14].w, src0.w, src1.y, src0.0 12: src0.xyz = temp[14], src0.w = temp[14] MAD temp[15].xyz, src0.xyz, src0.111, src0.HHH MAD temp[15].w, src0.w, src0.1, src0.H 13: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = const[2], src1.w = const[2] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[5] MAD temp[7].xy, src0.xy_, src1.xy_, src0.000 1: src0.xyz = input[1], src1.xyz = const[4] MAD temp[4].xy, src0.xy_, src1.xy_, src0.000 2: BEGIN_TEX; 3: TEX temp[8], temp[7].xy__, 2D[1]; 4: TEX temp[5], temp[4].xy__, 2D[0]; 5: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = const[0] MAD temp[6].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[6].w, src0.w, src1.y, src0.0 6: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = const[0], src1.w = temp[6], src2.xyz = temp[6] MAD temp[9].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[9].w, src0.w, src1.x, src1.w 7: src0.xyz = temp[9], src1.xyz = const[3] DP3 temp[10].x, src0.xyz, src1.xyz 8: src0.xyz = temp[9], src0.w = temp[9], src1.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src0.111, -src1.xxx MAD temp[11].w, src0.w, src0.1, -src1.x 9: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = const[1], src2.xyz = temp[10] MAD temp[12].xyz, src0.xyz, src1.xxx, src2.xxx MAD temp[12].w, src0.w, src1.x, src2.x 10: src0.xyz = temp[12], src0.w = temp[12] MAD temp[13].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[13].w, src0.w, src0.1, -src0.H 11: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = const[1] MAD temp[14].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[14].w, src0.w, src1.y, src0.0 12: src0.xyz = temp[14], src0.w = temp[14] MAD temp[15].xyz, src0.xyz, src0.111, src0.HHH MAD temp[15].w, src0.w, src0.1, src0.H 13: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = const[2], src1.w = const[2] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[5] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 1: src0.xyz = input[1], src1.xyz = const[4] 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]; 5: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0] MAD temp[1].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[1].w, src0.w, src1.y, src0.0 6: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = temp[1], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[0].w, src0.w, src1.x, src1.w 7: src0.xyz = temp[0], src1.xyz = const[3] DP3 temp[1].x, src0.xyz, src1.xyz 8: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src0.111, -src1.xxx MAD temp[0].w, src0.w, src0.1, -src1.x 9: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[1], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xxx MAD temp[0].w, src0.w, src1.x, src2.x 10: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.w, src0.1, -src0.H 11: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[1] MAD temp[0].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[0].w, src0.w, src1.y, src0.0 12: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src0.HHH MAD temp[0].w, src0.w, src0.1, src0.H 13: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[2], src1.w = const[2] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=14************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00000040) 0: xyz: t0 c5 t0 bias-> t0.xy (01800940) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c5.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 1: xyz: t1 c4 t0 bias-> t1.xy (01840901) 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: 2, tex_offset: 0, alu_end: 8, tex_end: 1 (code_addr: 00420202) TEX: TEX t0, t0, texture[1] (00008800) TEX t1, t1, texture[0] (00008041) 2: xyz: t1 c0 t0 bias-> t1.xyz (03840801) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t1.xyz c0.yyy 0.0 op: 00050300 w: t1.w c0.y 0.0 op: 00040209 3: xyz: t0 c0 t1 bias-> t0.xyz (03801800) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t0.xyz c0.xxx t1.xyz op: 00020280 w: t0.w c0.x t1.w op: 00028189 4: xyz: t0 c3 t0 bias-> t1.x (008408c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.xyz t0.xxx op: 00804200 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t1 t0 bias-> t0.xyz (03800040) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz 1.0 -t1.xxx op: 00094a80 w: t0.w 1.0 -t1.x op: 0008c889 6: xyz: t0 c1 t1 bias-> t0.xyz (03801840) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz c1.xxx t1.xxx op: 00024280 w: t0.w c1.x t1.x op: 00018189 7: 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: t0.w 1.0 -0.5 op: 000c8889 8: xyz: t0 c1 t0 bias-> t0.xyz (03800840) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz c1.yyy 0.0 op: 00050300 w: t0.w c1.y 0.0 op: 00040209 9: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz 1.0 0.5 op: 00058a80 w: t0.w 1.0 0.5 op: 00048889 10: xyz: t0 c2 t0 bias-> o0.xyz (1c000880) w: t0 c2 t0 bias-> o0.w (01000880) xyz: t0.xyz c2.xyz 0.0 op: 40050200 w: t0.w c2.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL TEMP[0..1] 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: TEX TEMP[1], IN[2], SAMP[1], 2D 2: MUL TEMP[0], TEMP[0], TEMP[1] 3: MUL OUT[0], TEMP[0], IN[0] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL output[0], temp[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], temp[0], temp[1]; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[2], input[1].xy__, 2D[0]; 1: TEX temp[3], input[2].xy__, 2D[1]; 2: MUL temp[4], temp[2], temp[3]; 3: MUL_SAT output[0], temp[4], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[2], input[1].xy__, 2D[0]; 1: TEX temp[3], input[2].xy__, 2D[1]; 2: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = temp[3], src1.w = temp[3] 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], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[1].xy__, 2D[0]; 2: TEX temp[3], input[2].xy__, 2D[1]; 3: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = temp[3], src1.w = temp[3] 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], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[1].xy__, 2D[0]; 2: TEX temp[3], input[2].xy__, 2D[1]; 3: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = temp[3], src1.w = temp[3] 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], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: TEX temp[2], input[2].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[2], src1.w = temp[2] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=15************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 1 (code_addr: 00420040) TEX: TEX t1, t1, texture[0] (00008041) TEX t2, t2, texture[1] (00008882) 0: xyz: t1 t2 t0 bias-> t1.xyz (03840081) w: t1 t2 t0 bias-> t1.w (00840081) xyz: t1.xyz t2.xyz 0.0 op: 00050200 w: t1.w t2.w 0.0 op: 00040509 1: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.w t0.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] IMM FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: SUB TEMP[0], TEMP[0], IMM[0].xxxx 2: MAD OUT[0].xyz, TEMP[0], IN[0].wwww, IMM[0].xxxx 3: MOV OUT[0].w, IMM[0].xxxx 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MAD output[0].xyz, temp[0], input[0].wwww, temp[0].1111; 3: MOV output[0].w, temp[0].1111; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MAD output[0].xyz, temp[0], input[0].wwww, temp[0].1111; 3: MOV output[0].w, temp[0].1111; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MAD output[0].xyz, temp[0], input[0].wwww, temp[0].1111; 3: MOV output[0].w, temp[0].1111; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MAD output[0].xyz, temp[0], input[0].wwww, temp[0].1111; 3: MOV output[0].w, temp[0].1111; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MAD output[0].xyz, temp[0], input[0].wwww, temp[0].1111; 3: MOV output[0].w, temp[0].1111; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MAD_SAT output[0].xyz, temp[0], input[0].wwww, temp[0].1111; 3: MOV_SAT output[0].w, temp[0].1111; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MAD_SAT output[0].xyz, temp[0], input[0].wwww, temp[0].1111; 3: MOV_SAT output[0].w, temp[0].1111; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: ADD temp[0], temp[0], -temp[0].1111; 2: MAD_SAT output[0].xyz, temp[0], input[0].wwww, temp[0].1111; 3: MOV_SAT output[0].w, temp[0].1111; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -temp[0].111_; 2: MAD_SAT output[0].xyz, temp[0].xyz_, input[0].www_, temp[0].111_; 3: MOV_SAT output[0].w, temp[0].___1; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -temp[0].111_; 2: MAD_SAT output[0].xyz, temp[0].xyz_, input[0].www_, temp[0].111_; 3: MOV_SAT output[0].w, temp[0].___1; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -none.111_; 2: MAD_SAT output[0].xyz, temp[0].xyz_, input[0].www_, none.111_; 3: MOV_SAT output[0].w, none.___1; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -none.111_; 2: MAD_SAT output[0].xyz, temp[0].xyz_, input[0].www_, none.111_; 3: MOV_SAT output[0].w, none.___1; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -none.111_; 2: MAD_SAT output[0].xyz, temp[0].xyz_, input[0].www_, none.111_; 3: MOV_SAT output[0].w, none.___1; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: ADD temp[2].xyz, temp[1].xyz_, -none.111_; 2: MAD_SAT output[0].xyz, temp[2].xyz_, input[0].www_, none.111_; 3: MOV_SAT output[0].w, none.___1; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: src0.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.111 2: src0.xyz = temp[2], src0.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.www, src0.111 3: MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.111 MAD_SAT color[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[2], src0.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.www, src0.111 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.111 MAD_SAT color[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[2], src0.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.www, src0.111 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src0.111, -src0.111 MAD_SAT color[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.www, src0.111 pc=16************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400040) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t1.xyz 1.0 -1.0 op: 000d4a80 w: 1.0 1.0 0.0 op: 40040891 1: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.www 1.0 op: 40054600 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] IMM FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0].xyz, IN[1], SAMP[0], 2D 1: MOV TEMP[0].w, IMM[0].xxxx 2: MUL OUT[0], TEMP[0], IN[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].xyz, input[1], 2D[0]; 1: MOV temp[0].w, temp[0].1111; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1], 2D[0]; 1: MOV temp[0].w, temp[0].1111; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1], 2D[0]; 1: MOV temp[0].w, temp[0].1111; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1], 2D[0]; 1: MOV temp[0].w, temp[0].1111; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1], 2D[0]; 1: MOV temp[0].w, temp[0].1111; 2: MUL output[0], temp[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1], 2D[0]; 1: MOV temp[0].w, temp[0].1111; 2: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[1], input[1], 2D[0]; 1: MOV temp[0].xyz, temp[1]; 2: MOV temp[0].w, temp[0].1111; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[1], input[1], 2D[0]; 1: MOV temp[0].xyz, temp[1]; 2: MOV temp[0].w, temp[0].1111; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: MOV temp[0].xyz, temp[1].xyz_; 2: MOV temp[0].w, temp[0].___1; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: MOV temp[0].xyz, temp[1].xyz_; 2: MOV temp[0].w, temp[0].___1; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: MOV temp[0].xyz, temp[1].xyz_; 2: MOV temp[0].w, none.___1; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: MOV temp[0].xyz, temp[1].xyz_; 2: MOV temp[0].w, none.___1; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: MOV temp[0].xyz, temp[1].xyz_; 2: MOV temp[0].w, none.___1; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[2].xyz, input[1].xy__, 2D[0]; 1: MOV temp[0].xyz, temp[2].xyz_; 2: MOV temp[0].w, none.___1; 3: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[2].xyz, input[1].xy__, 2D[0]; 1: src0.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src0.111, src0.000 2: MAD temp[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src0.111, src0.000 MAD temp[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src0.111, src0.000 MAD temp[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.111, src0.000 MAD temp[1].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, 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 t1, t1, texture[0] (00008041) 0: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: 1.0 1.0 0.0 op: 00040891 1: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.w t0.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[2], PERSPECTIVE DCL IN[4], GENERIC[4], PERSPECTIVE DCL IN[5], GENERIC[5], PERSPECTIVE DCL IN[6], GENERIC[6], PERSPECTIVE DCL IN[7], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL CONST[3..6] DCL TEMP[0..7] IMM FLT32 { 2.0000, -1.0000, 0.0000, 1.0000} 0: TEX TEMP[0], IN[4], SAMP[0], 2D 1: TEX TEMP[1], IN[2], SAMP[1], 2D 2: MOV TEMP[1].x, TEMP[1].wwww 3: MAD TEMP[1].xy, TEMP[1], IMM[0].xxxx, IMM[0].yyyy 4: MOV TEMP[1].z, IMM[0].zzzz 5: DP3 TEMP[2].x, TEMP[1], TEMP[1] 6: ADD TEMP[2].x, IMM[0].wwww, -TEMP[2].xxxx 7: RSQ TEMP[2].x, TEMP[2].xxxx 8: RCP TEMP[1].z, TEMP[2].xxxx 9: DP3 TEMP[3].x, IN[5], TEMP[1] 10: DP3 TEMP[3].y, IN[6], TEMP[1] 11: DP3 TEMP[3].z, IN[7], TEMP[1] 12: TEX TEMP[4], TEMP[3], SAMP[2], CUBE 13: MUL TEMP[4], TEMP[4], CONST[3] 14: MUL TEMP[5], TEMP[0], CONST[4] 15: MUL TEMP[5], TEMP[4], TEMP[5] 16: DP3 TEMP[2], IN[3], TEMP[3] 17: ADD TEMP[2], TEMP[2], TEMP[2] 18: MAD TEMP[6], -TEMP[3], TEMP[2].xxxx, IN[3] 19: TEX TEMP[4], TEMP[6], SAMP[3], CUBE 20: TEX TEMP[7], IN[4], SAMP[4], 2D 21: ADD TEMP[6], TEMP[7], TEMP[7] 22: MAD TEMP[5], TEMP[6], TEMP[4], TEMP[5] 23: MUL TEMP[5], CONST[5].xxxx, TEMP[5] 24: LRP TEMP[5].xyz, IN[1].xxxx, CONST[6], TEMP[5] 25: MUL OUT[0], TEMP[5], IN[0] 26: MOV OUT[0].w, CONST[5].yyyy 27: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 25: MUL output[0], temp[5], input[0]; 26: MOV output[0].w, const[5].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 25: MUL output[0], temp[5], input[0]; 26: MOV output[0].w, const[5].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 25: MUL output[0], temp[5], input[0]; 26: MOV output[0].w, const[5].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 25: MUL output[0], temp[5], input[0]; 26: MOV output[0].w, const[5].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 25: MUL output[0], temp[5], input[0]; 26: MOV output[0].w, const[5].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 25: MUL_SAT output[0], temp[5], input[0]; 26: MOV_SAT output[0].w, const[5].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 25: MUL_SAT output[0], temp[5], input[0]; 26: MOV_SAT output[0].w, const[5].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, |temp[2].xxxx|; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: ADD temp[8].xyz, const[6], -temp[5]; 25: MAD temp[5].xyz, input[1].xxxx, temp[8], temp[5]; 26: MUL_SAT output[0], temp[5], input[0]; 27: MOV_SAT output[0].w, const[5].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[7].xx__, const[7].yy__; 4: MOV temp[1].z, const[7].__z_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, const[7].w___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[5].xxx_, temp[5].xyz_; 24: ADD temp[8].xyz, const[6].xyz_, -temp[5].xyz_; 25: MAD temp[5].xyz, input[1].xxx_, temp[8].xyz_, temp[5].xyz_; 26: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 27: MOV_SAT output[0].w, const[5].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[7].xx__, const[7].yy__; 4: MOV temp[1].z, const[7].__z_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, const[7].w___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[5].xxx_, temp[5].xyz_; 24: ADD temp[8].xyz, const[6].xyz_, -temp[5].xyz_; 25: MAD temp[5].xyz, input[1].xxx_, temp[8].xyz_, temp[5].xyz_; 26: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 27: MOV_SAT output[0].w, const[5].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[7].xx__, none.-1-1__; 4: MOV temp[1].z, none.__0_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, none.1___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[5].xxx_, temp[5].xyz_; 24: MAD temp[5].xyz, input[1].xxx_, (const[6] - temp[5]).xyz_, temp[5].xyz_; 25: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 26: MOV_SAT output[0].w, const[5].___y; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[7].xx__, none.-1-1__; 4: MOV temp[1].z, none.__0_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, none.1___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[5].xxx_, temp[5].xyz_; 24: MAD temp[5].xyz, input[1].xxx_, (const[6] - temp[5]).xyz_, temp[5].xyz_; 25: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 26: MOV_SAT output[0].w, const[5].___y; CONST[4] = { 2.0000 -1.0000 0.0000 1.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[4].xx__, none.-1-1__; 4: MOV temp[1].z, none.__0_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, none.1___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[0].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[1].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[2].xxx_, temp[5].xyz_; 24: MAD temp[5].xyz, input[1].xxx_, (const[3] - temp[5]).xyz_, temp[5].xyz_; 25: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 26: MOV_SAT output[0].w, const[2].___y; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[8].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[4].xx__, none.-1-1__; 4: MOV temp[1].z, none.__0_; 5: DP3 temp[9].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[10].x, none.1___, -temp[9].x___; 7: RSQ temp[11].x, |temp[10].x___|; 8: RCP temp[1].z, temp[11].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[12].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[13].xyz, temp[12].xyz_, const[0].xyz_; 14: MUL temp[14].xyz, temp[8].xyz_, const[1].xyz_; 15: MUL temp[15].xyz, temp[13].xyz_, temp[14].xyz_; 16: DP3 temp[16].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[17].x, temp[16].x___, temp[16].x___; 18: MAD temp[18].xyz, -temp[3].xyz_, temp[17].xxx_, input[3].xyz_; 19: TEX temp[19].xyz, temp[18].xyz_, CUBE[3]; 20: TEX temp[20].xyz, input[4].xy__, 2D[4]; 21: ADD temp[21].xyz, temp[20].xyz_, temp[20].xyz_; 22: MAD temp[22].xyz, temp[21].xyz_, temp[19].xyz_, temp[15].xyz_; 23: MUL temp[23].xyz, const[2].xxx_, temp[22].xyz_; 24: MAD temp[24].xyz, input[1].xxx_, (const[3] - temp[23]).xyz_, temp[23].xyz_; 25: MUL_SAT output[0].xyz, temp[24].xyz_, input[0].xyz_; 26: MOV_SAT output[0].w, const[2].___y; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[8].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: src0.w = temp[1] MAD temp[1].x, src0.w__, src0.111, src0.000 3: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 4: MAD temp[1].z, src0.__0, src0.111, src0.000 5: src0.xyz = temp[1] DP3 temp[9].x, src0.xyz, src0.xyz 6: src0.xyz = temp[9] MAD temp[10].x, src0.1__, src0.111, -src0.x__ 7: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 8: src0.xyz = temp[11] REPL_ALPHA temp[1].z RCP, src0.x 9: src0.xyz = input[5], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz 10: src0.xyz = input[6], src1.xyz = temp[1] DP3 temp[3].y, src0.xyz, src1.xyz 11: src0.xyz = input[7], src1.xyz = temp[1] DP3 temp[3].z, src0.xyz, src1.xyz 12: TEX temp[12].xyz, temp[3].xyz_, CUBE[2]; 13: src0.xyz = temp[12], src1.xyz = const[0] MAD temp[13].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = temp[8], src1.xyz = const[1] MAD temp[14].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[13], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = input[3], src1.xyz = temp[3] DP3 temp[16].x, src0.xyz, src1.xyz 17: src0.xyz = temp[16] MAD temp[17].x, src0.x__, src0.111, src0.x__ 18: src0.xyz = temp[3], src1.xyz = temp[17], src2.xyz = input[3] MAD temp[18].xyz, -src0.xyz, src1.xxx, src2.xyz 19: TEX temp[19].xyz, temp[18].xyz_, CUBE[3]; 20: TEX temp[20].xyz, input[4].xy__, 2D[4]; 21: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.xyz 22: src0.xyz = temp[21], src1.xyz = temp[19], src2.xyz = temp[15] MAD temp[22].xyz, src0.xyz, src1.xyz, src2.xyz 23: src0.xyz = const[2], src1.xyz = temp[22] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 24: src0.xyz = temp[23], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[24].xyz, src2.xxx, srcp.xyz, src0.xyz 25: src0.xyz = temp[24], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 26: src0.xyz = const[2] MAD_SAT color[0].w, src0.y, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].xyz, input[4].xy__, 2D[0]; 2: TEX temp[1].yw, input[2].xy__, 2D[1]; 3: TEX temp[20].xyz, input[4].xy__, 2D[4]; 4: src0.xyz = temp[20], src1.xyz = const[2] MAD temp[21].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src1.y, src0.1, src0.0 5: src0.w = temp[1] MAD temp[1].x, src0.w__, src0.111, src0.000 6: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[8], src1.xyz = const[1] MAD temp[14].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[1].z, src0.__0, src0.111, src0.000 9: src0.xyz = temp[1] DP3 temp[9].x, src0.xyz, src0.xyz 10: src0.xyz = temp[9] MAD temp[10].x, src0.1__, src0.111, -src0.x__ 11: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 12: src0.xyz = temp[11] REPL_ALPHA temp[1].z RCP, src0.x 13: src0.xyz = input[5], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz 14: src0.xyz = input[6], src1.xyz = temp[1] DP3 temp[3].y, src0.xyz, src1.xyz 15: src0.xyz = input[7], src1.xyz = temp[1] DP3 temp[3].z, src0.xyz, src1.xyz 16: src0.xyz = input[3], src1.xyz = temp[3] DP3 temp[16].x, src0.xyz, src1.xyz 17: src0.xyz = temp[16] MAD temp[17].x, src0.x__, src0.111, src0.x__ 18: src0.xyz = temp[3], src1.xyz = temp[17], src2.xyz = input[3] MAD temp[18].xyz, -src0.xyz, src1.xxx, src2.xyz 19: BEGIN_TEX; 20: TEX temp[12].xyz, temp[3].xyz_, CUBE[2]; 21: TEX temp[19].xyz, temp[18].xyz_, CUBE[3]; 22: src0.xyz = temp[12], src1.xyz = const[0] MAD temp[13].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[13], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[21], src1.xyz = temp[19], src2.xyz = temp[15] MAD temp[22].xyz, src0.xyz, src1.xyz, src2.xyz 25: src0.xyz = const[2], src1.xyz = temp[22] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 26: src0.xyz = temp[23], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[24].xyz, src2.xxx, srcp.xyz, src0.xyz 27: src0.xyz = temp[24], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].xyz, input[4].xy__, 2D[0]; 2: TEX temp[1].yw, input[2].xy__, 2D[1]; 3: TEX temp[20].xyz, input[4].xy__, 2D[4]; 4: src0.xyz = temp[20], src1.xyz = const[2] MAD temp[21].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src1.y, src0.1, src0.0 5: src0.w = temp[1] MAD temp[1].x, src0.w__, src0.111, src0.000 6: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[8], src1.xyz = const[1] MAD temp[14].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[1].z, src0.__0, src0.111, src0.000 9: src0.xyz = temp[1] DP3 temp[9].x, src0.xyz, src0.xyz 10: src0.xyz = temp[9] MAD temp[10].x, src0.1__, src0.111, -src0.x__ 11: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 12: src0.xyz = temp[11] REPL_ALPHA temp[1].z RCP, src0.x 13: src0.xyz = input[5], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz 14: src0.xyz = input[6], src1.xyz = temp[1] DP3 temp[3].y, src0.xyz, src1.xyz 15: src0.xyz = input[7], src1.xyz = temp[1] DP3 temp[3].z, src0.xyz, src1.xyz 16: src0.xyz = input[3], src1.xyz = temp[3] DP3 temp[16].x, src0.xyz, src1.xyz 17: src0.xyz = temp[16] MAD temp[17].x, src0.x__, src0.111, src0.x__ 18: src0.xyz = temp[3], src1.xyz = temp[17], src2.xyz = input[3] MAD temp[18].xyz, -src0.xyz, src1.xxx, src2.xyz 19: BEGIN_TEX; 20: TEX temp[12].xyz, temp[3].xyz_, CUBE[2]; 21: TEX temp[19].xyz, temp[18].xyz_, CUBE[3]; 22: src0.xyz = temp[12], src1.xyz = const[0] MAD temp[13].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[13], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[21], src1.xyz = temp[19], src2.xyz = temp[15] MAD temp[22].xyz, src0.xyz, src1.xyz, src2.xyz 25: src0.xyz = const[2], src1.xyz = temp[22] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 26: src0.xyz = temp[23], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[24].xyz, src2.xxx, srcp.xyz, src0.xyz 27: src0.xyz = temp[24], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].xyz, input[4].xy__, 2D[0]; 2: TEX temp[2].yw, input[2].xy__, 2D[1]; 3: TEX temp[4].xyz, input[4].xy__, 2D[4]; 4: src0.xyz = temp[4], src1.xyz = const[2] MAD temp[4].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src1.y, src0.1, src0.0 5: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.11_, src0.00_ 6: src0.xyz = temp[2], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[8], src1.xyz = const[1] MAD temp[8].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[2].z, src0.__0, src0.111, src0.000 9: src0.xyz = temp[2] DP3 temp[1].y, src0.xyz, src0.xyz 10: src0.xyz = temp[1] MAD temp[1].y, src0._1_, src0._1_, -src0._y_ 11: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 12: src0.xyz = temp[1] REPL_ALPHA temp[2].z RCP, src0.y 13: src0.xyz = input[5], src1.xyz = temp[2] DP3 temp[5].x, src0.xyz, src1.xyz 14: src0.xyz = input[6], src1.xyz = temp[2] DP3 temp[5].y, src0.xyz, src1.xyz 15: src0.xyz = input[7], src1.xyz = temp[2] DP3 temp[5].z, src0.xyz, src1.xyz 16: src0.xyz = input[3], src1.xyz = temp[5] DP3 temp[1].y, src0.xyz, src1.xyz 17: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._1_, src0._y_ 18: src0.xyz = temp[5], src1.xyz = temp[1], src2.xyz = input[3] MAD temp[2].xyz, -src0.xyz, src1.yyy, src2.xyz 19: BEGIN_TEX; 20: TEX temp[3].xyz, temp[5].xyz_, CUBE[2]; 21: TEX temp[2].xyz, temp[2].xyz_, CUBE[3]; 22: src0.xyz = temp[3], src1.xyz = const[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[3], src1.xyz = temp[8] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[4], src1.xyz = temp[2], src2.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 25: src0.xyz = const[2], src1.xyz = temp[2] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 26: src0.xyz = temp[2], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xxx, srcp.xyz, src0.xyz 27: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 pc=18************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 14, tex_end: 2 (code_addr: 00440380) TEX: TEX t8, t4, texture[0] (00008204) TEX t2, t2, texture[1] (00008882) TEX t4, t4, texture[4] (0000a104) 0: xyz: t4 c2 t0 bias-> t4.xyz (03900884) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t4.xyz 1.0 t4.xyz op: 00000a80 w: c2.y 1.0 0.0 op: 40040884 1: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t2 c4 t0 bias-> t2.xy (01880902) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c4.xxx -1.0 op: 000d4280 w: t2.x t2.x t2.x op: 00000000 3: xyz: t8 c1 t0 bias-> t8.xyz (03a00848) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz c1.xyz 0.0 op: 00050200 w: t8.x t8.x t8.x op: 00000000 4: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 5: xyz: t2 t0 t0 bias-> t1.y (01040002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 6: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 7: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 8: xyz: t1 t0 t0 bias-> t2.z (02080001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.y t1.x t1.x op: 05000001 9: xyz: t5 t2 t0 bias-> t5.x (00940085) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t2.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 10: xyz: t6 t2 t0 bias-> t5.y (01140086) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t2.xyz t6.xxx op: 00804200 w: t6.x t6.x t6.x op: 00000000 11: xyz: t7 t2 t0 bias-> t5.z (02140087) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t2.xyz t7.xxx op: 00804200 w: t7.x t7.x t7.x op: 00000000 12: xyz: t3 t5 t0 bias-> t1.y (01040143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 13: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 t1.xyz op: 00000a80 w: t1.x t1.x t1.x op: 00000000 14: xyz: t5 t1 t3 bias-> t2.xyz (03883045) w: t0 t0 t0 bias-> (00000000) xyz: -t5.xyz t1.yyy t3.xyz op: 00020320 w: t5.x t5.x t5.x op: 00000000 NODE 1: alu_offset: 15, tex_offset: 3, alu_end: 5, tex_end: 1 (code_addr: 0042314f) TEX: TEX t3, t5, texture[2] (000090c5) TEX t2, t2, texture[3] (00009882) 15: xyz: t3 c0 t0 bias-> t3.xyz (038c0803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 16: xyz: t3 t8 t0 bias-> t3.xyz (038c0203) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t8.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 17: xyz: t4 t2 t3 bias-> t2.xyz (03883084) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t2.xyz t3.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 18: xyz: c2 t2 t0 bias-> t2.xyz (038800a2) w: t0 t0 t0 bias-> (00000000) xyz: c2.xxx t2.xyz 0.0 op: 80050201 NOP w: c2.x c2.x c2.x op: 00000000 19: xyz: t2 c3 t1 sub-> t1.xyz (038418c2) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t2.xyz op: 00200789 w: t2.x t2.x t2.x op: 00000000 20: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.x t1.x t1.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[2], PERSPECTIVE DCL IN[4], GENERIC[4], PERSPECTIVE DCL IN[5], GENERIC[5], PERSPECTIVE DCL IN[6], GENERIC[6], PERSPECTIVE DCL IN[7], GENERIC[7], 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[3..6] DCL TEMP[0..7] IMM FLT32 { 2.0000, -1.0000, 0.0000, 1.0000} 0: TEX TEMP[0], IN[4], SAMP[0], 2D 1: TEX TEMP[1], IN[2], SAMP[1], 2D 2: MOV TEMP[1].x, TEMP[1].wwww 3: MAD TEMP[1].xy, TEMP[1], IMM[0].xxxx, IMM[0].yyyy 4: MOV TEMP[1].z, IMM[0].zzzz 5: DP3 TEMP[2].x, TEMP[1], TEMP[1] 6: ADD TEMP[2].x, IMM[0].wwww, -TEMP[2].xxxx 7: RSQ TEMP[2].x, TEMP[2].xxxx 8: RCP TEMP[1].z, TEMP[2].xxxx 9: DP3 TEMP[3].x, IN[5], TEMP[1] 10: DP3 TEMP[3].y, IN[6], TEMP[1] 11: DP3 TEMP[3].z, IN[7], TEMP[1] 12: TEX TEMP[4], TEMP[3], SAMP[2], CUBE 13: MUL TEMP[4], TEMP[4], CONST[3] 14: MUL TEMP[5], TEMP[0], CONST[4] 15: MUL TEMP[5], TEMP[4], TEMP[5] 16: DP3 TEMP[2], IN[3], TEMP[3] 17: ADD TEMP[2], TEMP[2], TEMP[2] 18: MAD TEMP[6], -TEMP[3], TEMP[2].xxxx, IN[3] 19: TEX TEMP[4], TEMP[6], SAMP[3], CUBE 20: TEX TEMP[7], IN[4], SAMP[4], 2D 21: ADD TEMP[6], TEMP[7], TEMP[7] 22: MAD TEMP[5], TEMP[6], TEMP[4], TEMP[5] 23: MUL TEMP[5], CONST[5].xxxx, TEMP[5] 24: TEX TEMP[6], IN[4], SAMP[5], 2D 25: ADD TEMP[5], TEMP[5], TEMP[6] 26: LRP TEMP[5].xyz, IN[1].xxxx, CONST[6], TEMP[5] 27: MUL OUT[0], TEMP[5], IN[0] 28: MOV OUT[0].w, CONST[5].yyyy 29: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: TEX temp[6], input[4], 2D[5]; 25: ADD temp[5], temp[5], temp[6]; 26: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[5].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: TEX temp[6], input[4], 2D[5]; 25: ADD temp[5], temp[5], temp[6]; 26: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[5].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: TEX temp[6], input[4], 2D[5]; 25: ADD temp[5], temp[5], temp[6]; 26: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[5].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: TEX temp[6], input[4], 2D[5]; 25: ADD temp[5], temp[5], temp[6]; 26: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[5].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: TEX temp[6], input[4], 2D[5]; 25: ADD temp[5], temp[5], temp[6]; 26: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[5].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: TEX temp[6], input[4], 2D[5]; 25: ADD temp[5], temp[5], temp[6]; 26: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 27: MUL_SAT output[0], temp[5], input[0]; 28: MOV_SAT output[0].w, const[5].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, temp[2].xxxx; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: TEX temp[6], input[4], 2D[5]; 25: ADD temp[5], temp[5], temp[6]; 26: LRP temp[5].xyz, input[1].xxxx, const[6], temp[5]; 27: MUL_SAT output[0], temp[5], input[0]; 28: MOV_SAT output[0].w, const[5].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MOV temp[1].x, temp[1].wwww; 3: MAD temp[1].xy, temp[1], const[7].xxxx, const[7].yyyy; 4: MOV temp[1].z, const[7].zzzz; 5: DP3 temp[2].x, temp[1], temp[1]; 6: ADD temp[2].x, const[7].wwww, -temp[2].xxxx; 7: RSQ temp[2].x, |temp[2].xxxx|; 8: RCP temp[1].z, temp[2].xxxx; 9: DP3 temp[3].x, input[5], temp[1]; 10: DP3 temp[3].y, input[6], temp[1]; 11: DP3 temp[3].z, input[7], temp[1]; 12: TEX temp[4], temp[3], CUBE[2]; 13: MUL temp[4], temp[4], const[3]; 14: MUL temp[5], temp[0], const[4]; 15: MUL temp[5], temp[4], temp[5]; 16: DP3 temp[2], input[3], temp[3]; 17: ADD temp[2], temp[2], temp[2]; 18: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 19: TEX temp[4], temp[6], CUBE[3]; 20: TEX temp[7], input[4], 2D[4]; 21: ADD temp[6], temp[7], temp[7]; 22: MAD temp[5], temp[6], temp[4], temp[5]; 23: MUL temp[5], const[5].xxxx, temp[5]; 24: TEX temp[6], input[4], 2D[5]; 25: ADD temp[5], temp[5], temp[6]; 26: ADD temp[8].xyz, const[6], -temp[5]; 27: MAD temp[5].xyz, input[1].xxxx, temp[8], temp[5]; 28: MUL_SAT output[0], temp[5], input[0]; 29: MOV_SAT output[0].w, const[5].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[7].xx__, const[7].yy__; 4: MOV temp[1].z, const[7].__z_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, const[7].w___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[5].xxx_, temp[5].xyz_; 24: TEX temp[6].xyz, input[4].xy__, 2D[5]; 25: ADD temp[5].xyz, temp[5].xyz_, temp[6].xyz_; 26: ADD temp[8].xyz, const[6].xyz_, -temp[5].xyz_; 27: MAD temp[5].xyz, input[1].xxx_, temp[8].xyz_, temp[5].xyz_; 28: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 29: MOV_SAT output[0].w, const[5].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[7].xx__, const[7].yy__; 4: MOV temp[1].z, const[7].__z_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, const[7].w___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[5].xxx_, temp[5].xyz_; 24: TEX temp[6].xyz, input[4].xy__, 2D[5]; 25: ADD temp[5].xyz, temp[5].xyz_, temp[6].xyz_; 26: ADD temp[8].xyz, const[6].xyz_, -temp[5].xyz_; 27: MAD temp[5].xyz, input[1].xxx_, temp[8].xyz_, temp[5].xyz_; 28: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 29: MOV_SAT output[0].w, const[5].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[7].xx__, none.-1-1__; 4: MOV temp[1].z, none.__0_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, none.1___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[5].xxx_, temp[5].xyz_; 24: TEX temp[6].xyz, input[4].xy__, 2D[5]; 25: ADD temp[5].xyz, temp[5].xyz_, temp[6].xyz_; 26: MAD temp[5].xyz, input[1].xxx_, (const[6] - temp[5]).xyz_, temp[5].xyz_; 27: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 28: MOV_SAT output[0].w, const[5].___y; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[7].xx__, none.-1-1__; 4: MOV temp[1].z, none.__0_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, none.1___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[3].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[5].xxx_, temp[5].xyz_; 24: TEX temp[6].xyz, input[4].xy__, 2D[5]; 25: ADD temp[5].xyz, temp[5].xyz_, temp[6].xyz_; 26: MAD temp[5].xyz, input[1].xxx_, (const[6] - temp[5]).xyz_, temp[5].xyz_; 27: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 28: MOV_SAT output[0].w, const[5].___y; CONST[4] = { 2.0000 -1.0000 0.0000 1.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[4].xx__, none.-1-1__; 4: MOV temp[1].z, none.__0_; 5: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[2].x, none.1___, -temp[2].x___; 7: RSQ temp[2].x, |temp[2].x___|; 8: RCP temp[1].z, temp[2].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[4].xyz, temp[4].xyz_, const[0].xyz_; 14: MUL temp[5].xyz, temp[0].xyz_, const[1].xyz_; 15: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 16: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[2].x, temp[2].x___, temp[2].x___; 18: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 19: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 20: TEX temp[7].xyz, input[4].xy__, 2D[4]; 21: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 22: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 23: MUL temp[5].xyz, const[2].xxx_, temp[5].xyz_; 24: TEX temp[6].xyz, input[4].xy__, 2D[5]; 25: ADD temp[5].xyz, temp[5].xyz_, temp[6].xyz_; 26: MAD temp[5].xyz, input[1].xxx_, (const[3] - temp[5]).xyz_, temp[5].xyz_; 27: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 28: MOV_SAT output[0].w, const[2].___y; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[8].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: MOV temp[1].x, temp[1].w___; 3: MAD temp[1].xy, temp[1].xy__, const[4].xx__, none.-1-1__; 4: MOV temp[1].z, none.__0_; 5: DP3 temp[9].x, temp[1].xyz_, temp[1].xyz_; 6: ADD temp[10].x, none.1___, -temp[9].x___; 7: RSQ temp[11].x, |temp[10].x___|; 8: RCP temp[1].z, temp[11].x___; 9: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 10: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 11: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 12: TEX temp[12].xyz, temp[3].xyz_, CUBE[2]; 13: MUL temp[13].xyz, temp[12].xyz_, const[0].xyz_; 14: MUL temp[14].xyz, temp[8].xyz_, const[1].xyz_; 15: MUL temp[15].xyz, temp[13].xyz_, temp[14].xyz_; 16: DP3 temp[16].x, input[3].xyz_, temp[3].xyz_; 17: ADD temp[17].x, temp[16].x___, temp[16].x___; 18: MAD temp[18].xyz, -temp[3].xyz_, temp[17].xxx_, input[3].xyz_; 19: TEX temp[19].xyz, temp[18].xyz_, CUBE[3]; 20: TEX temp[20].xyz, input[4].xy__, 2D[4]; 21: ADD temp[21].xyz, temp[20].xyz_, temp[20].xyz_; 22: MAD temp[22].xyz, temp[21].xyz_, temp[19].xyz_, temp[15].xyz_; 23: MUL temp[23].xyz, const[2].xxx_, temp[22].xyz_; 24: TEX temp[24].xyz, input[4].xy__, 2D[5]; 25: ADD temp[25].xyz, temp[23].xyz_, temp[24].xyz_; 26: MAD temp[26].xyz, input[1].xxx_, (const[3] - temp[25]).xyz_, temp[25].xyz_; 27: MUL_SAT output[0].xyz, temp[26].xyz_, input[0].xyz_; 28: MOV_SAT output[0].w, const[2].___y; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[8].xyz, input[4].xy__, 2D[0]; 1: TEX temp[1].yw, input[2].xy__, 2D[1]; 2: src0.w = temp[1] MAD temp[1].x, src0.w__, src0.111, src0.000 3: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 4: MAD temp[1].z, src0.__0, src0.111, src0.000 5: src0.xyz = temp[1] DP3 temp[9].x, src0.xyz, src0.xyz 6: src0.xyz = temp[9] MAD temp[10].x, src0.1__, src0.111, -src0.x__ 7: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 8: src0.xyz = temp[11] REPL_ALPHA temp[1].z RCP, src0.x 9: src0.xyz = input[5], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz 10: src0.xyz = input[6], src1.xyz = temp[1] DP3 temp[3].y, src0.xyz, src1.xyz 11: src0.xyz = input[7], src1.xyz = temp[1] DP3 temp[3].z, src0.xyz, src1.xyz 12: TEX temp[12].xyz, temp[3].xyz_, CUBE[2]; 13: src0.xyz = temp[12], src1.xyz = const[0] MAD temp[13].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = temp[8], src1.xyz = const[1] MAD temp[14].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[13], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = input[3], src1.xyz = temp[3] DP3 temp[16].x, src0.xyz, src1.xyz 17: src0.xyz = temp[16] MAD temp[17].x, src0.x__, src0.111, src0.x__ 18: src0.xyz = temp[3], src1.xyz = temp[17], src2.xyz = input[3] MAD temp[18].xyz, -src0.xyz, src1.xxx, src2.xyz 19: TEX temp[19].xyz, temp[18].xyz_, CUBE[3]; 20: TEX temp[20].xyz, input[4].xy__, 2D[4]; 21: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.xyz 22: src0.xyz = temp[21], src1.xyz = temp[19], src2.xyz = temp[15] MAD temp[22].xyz, src0.xyz, src1.xyz, src2.xyz 23: src0.xyz = const[2], src1.xyz = temp[22] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 24: TEX temp[24].xyz, input[4].xy__, 2D[5]; 25: src0.xyz = temp[23], src1.xyz = temp[24] MAD temp[25].xyz, src0.xyz, src0.111, src1.xyz 26: src0.xyz = temp[25], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[26].xyz, src2.xxx, srcp.xyz, src0.xyz 27: src0.xyz = temp[26], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = const[2] MAD_SAT color[0].w, src0.y, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].xyz, input[4].xy__, 2D[0]; 2: TEX temp[1].yw, input[2].xy__, 2D[1]; 3: TEX temp[20].xyz, input[4].xy__, 2D[4]; 4: TEX temp[24].xyz, input[4].xy__, 2D[5]; 5: src0.xyz = temp[20], src1.xyz = const[2] MAD temp[21].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src1.y, src0.1, src0.0 6: src0.w = temp[1] MAD temp[1].x, src0.w__, src0.111, src0.000 7: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 8: src0.xyz = temp[8], src1.xyz = const[1] MAD temp[14].xyz, src0.xyz, src1.xyz, src0.000 9: MAD temp[1].z, src0.__0, src0.111, src0.000 10: src0.xyz = temp[1] DP3 temp[9].x, src0.xyz, src0.xyz 11: src0.xyz = temp[9] MAD temp[10].x, src0.1__, src0.111, -src0.x__ 12: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 13: src0.xyz = temp[11] REPL_ALPHA temp[1].z RCP, src0.x 14: src0.xyz = input[5], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz 15: src0.xyz = input[6], src1.xyz = temp[1] DP3 temp[3].y, src0.xyz, src1.xyz 16: src0.xyz = input[7], src1.xyz = temp[1] DP3 temp[3].z, src0.xyz, src1.xyz 17: src0.xyz = input[3], src1.xyz = temp[3] DP3 temp[16].x, src0.xyz, src1.xyz 18: src0.xyz = temp[16] MAD temp[17].x, src0.x__, src0.111, src0.x__ 19: src0.xyz = temp[3], src1.xyz = temp[17], src2.xyz = input[3] MAD temp[18].xyz, -src0.xyz, src1.xxx, src2.xyz 20: BEGIN_TEX; 21: TEX temp[12].xyz, temp[3].xyz_, CUBE[2]; 22: TEX temp[19].xyz, temp[18].xyz_, CUBE[3]; 23: src0.xyz = temp[12], src1.xyz = const[0] MAD temp[13].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[13], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = temp[21], src1.xyz = temp[19], src2.xyz = temp[15] MAD temp[22].xyz, src0.xyz, src1.xyz, src2.xyz 26: src0.xyz = const[2], src1.xyz = temp[22] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 27: src0.xyz = temp[23], src1.xyz = temp[24] MAD temp[25].xyz, src0.xyz, src0.111, src1.xyz 28: src0.xyz = temp[25], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[26].xyz, src2.xxx, srcp.xyz, src0.xyz 29: src0.xyz = temp[26], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].xyz, input[4].xy__, 2D[0]; 2: TEX temp[1].yw, input[2].xy__, 2D[1]; 3: TEX temp[20].xyz, input[4].xy__, 2D[4]; 4: TEX temp[24].xyz, input[4].xy__, 2D[5]; 5: src0.xyz = temp[20], src1.xyz = const[2] MAD temp[21].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src1.y, src0.1, src0.0 6: src0.w = temp[1] MAD temp[1].x, src0.w__, src0.111, src0.000 7: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 8: src0.xyz = temp[8], src1.xyz = const[1] MAD temp[14].xyz, src0.xyz, src1.xyz, src0.000 9: MAD temp[1].z, src0.__0, src0.111, src0.000 10: src0.xyz = temp[1] DP3 temp[9].x, src0.xyz, src0.xyz 11: src0.xyz = temp[9] MAD temp[10].x, src0.1__, src0.111, -src0.x__ 12: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 13: src0.xyz = temp[11] REPL_ALPHA temp[1].z RCP, src0.x 14: src0.xyz = input[5], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz 15: src0.xyz = input[6], src1.xyz = temp[1] DP3 temp[3].y, src0.xyz, src1.xyz 16: src0.xyz = input[7], src1.xyz = temp[1] DP3 temp[3].z, src0.xyz, src1.xyz 17: src0.xyz = input[3], src1.xyz = temp[3] DP3 temp[16].x, src0.xyz, src1.xyz 18: src0.xyz = temp[16] MAD temp[17].x, src0.x__, src0.111, src0.x__ 19: src0.xyz = temp[3], src1.xyz = temp[17], src2.xyz = input[3] MAD temp[18].xyz, -src0.xyz, src1.xxx, src2.xyz 20: BEGIN_TEX; 21: TEX temp[12].xyz, temp[3].xyz_, CUBE[2]; 22: TEX temp[19].xyz, temp[18].xyz_, CUBE[3]; 23: src0.xyz = temp[12], src1.xyz = const[0] MAD temp[13].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[13], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = temp[21], src1.xyz = temp[19], src2.xyz = temp[15] MAD temp[22].xyz, src0.xyz, src1.xyz, src2.xyz 26: src0.xyz = const[2], src1.xyz = temp[22] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 27: src0.xyz = temp[23], src1.xyz = temp[24] MAD temp[25].xyz, src0.xyz, src0.111, src1.xyz 28: src0.xyz = temp[25], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[26].xyz, src2.xxx, srcp.xyz, src0.xyz 29: src0.xyz = temp[26], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].xyz, input[4].xy__, 2D[0]; 2: TEX temp[2].yw, input[2].xy__, 2D[1]; 3: TEX temp[9].xyz, input[4].xy__, 2D[4]; 4: TEX temp[4].xyz, input[4].xy__, 2D[5]; 5: src0.xyz = temp[9], src1.xyz = const[2] MAD temp[9].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src1.y, src0.1, src0.0 6: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.11_, src0.00_ 7: src0.xyz = temp[2], src1.xyz = const[4] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 8: src0.xyz = temp[8], src1.xyz = const[1] MAD temp[8].xyz, src0.xyz, src1.xyz, src0.000 9: MAD temp[2].z, src0.__0, src0.111, src0.000 10: src0.xyz = temp[2] DP3 temp[1].y, src0.xyz, src0.xyz 11: src0.xyz = temp[1] MAD temp[1].y, src0._1_, src0._1_, -src0._y_ 12: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 13: src0.xyz = temp[1] REPL_ALPHA temp[2].z RCP, src0.y 14: src0.xyz = input[5], src1.xyz = temp[2] DP3 temp[5].x, src0.xyz, src1.xyz 15: src0.xyz = input[6], src1.xyz = temp[2] DP3 temp[5].y, src0.xyz, src1.xyz 16: src0.xyz = input[7], src1.xyz = temp[2] DP3 temp[5].z, src0.xyz, src1.xyz 17: src0.xyz = input[3], src1.xyz = temp[5] DP3 temp[1].y, src0.xyz, src1.xyz 18: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._1_, src0._y_ 19: src0.xyz = temp[5], src1.xyz = temp[1], src2.xyz = input[3] MAD temp[2].xyz, -src0.xyz, src1.yyy, src2.xyz 20: BEGIN_TEX; 21: TEX temp[3].xyz, temp[5].xyz_, CUBE[2]; 22: TEX temp[2].xyz, temp[2].xyz_, CUBE[3]; 23: src0.xyz = temp[3], src1.xyz = const[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[3], src1.xyz = temp[8] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = temp[9], src1.xyz = temp[2], src2.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 26: src0.xyz = const[2], src1.xyz = temp[2] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 27: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src0.111, src1.xyz 28: src0.xyz = temp[2], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xxx, srcp.xyz, src0.xyz 29: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 pc=19************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 14, tex_end: 3 (code_addr: 00460380) TEX: TEX t8, t4, texture[0] (00008204) TEX t2, t2, texture[1] (00008882) TEX t9, t4, texture[4] (0000a244) TEX t4, t4, texture[5] (0000a904) 0: xyz: t9 c2 t0 bias-> t9.xyz (03a40889) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t9.xyz 1.0 t9.xyz op: 00000a80 w: c2.y 1.0 0.0 op: 40040884 1: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t2 c4 t0 bias-> t2.xy (01880902) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c4.xxx -1.0 op: 000d4280 w: t2.x t2.x t2.x op: 00000000 3: xyz: t8 c1 t0 bias-> t8.xyz (03a00848) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz c1.xyz 0.0 op: 00050200 w: t8.x t8.x t8.x op: 00000000 4: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 5: xyz: t2 t0 t0 bias-> t1.y (01040002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 6: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 7: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 8: xyz: t1 t0 t0 bias-> t2.z (02080001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.y t1.x t1.x op: 05000001 9: xyz: t5 t2 t0 bias-> t5.x (00940085) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t2.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 10: xyz: t6 t2 t0 bias-> t5.y (01140086) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t2.xyz t6.xxx op: 00804200 w: t6.x t6.x t6.x op: 00000000 11: xyz: t7 t2 t0 bias-> t5.z (02140087) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t2.xyz t7.xxx op: 00804200 w: t7.x t7.x t7.x op: 00000000 12: xyz: t3 t5 t0 bias-> t1.y (01040143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 13: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 t1.xyz op: 00000a80 w: t1.x t1.x t1.x op: 00000000 14: xyz: t5 t1 t3 bias-> t2.xyz (03883045) w: t0 t0 t0 bias-> (00000000) xyz: -t5.xyz t1.yyy t3.xyz op: 00020320 w: t5.x t5.x t5.x op: 00000000 NODE 1: alu_offset: 15, tex_offset: 4, alu_end: 6, tex_end: 1 (code_addr: 0042418f) TEX: TEX t3, t5, texture[2] (000090c5) TEX t2, t2, texture[3] (00009882) 15: xyz: t3 c0 t0 bias-> t3.xyz (038c0803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 16: xyz: t3 t8 t0 bias-> t3.xyz (038c0203) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t8.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 17: xyz: t9 t2 t3 bias-> t2.xyz (03883089) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t2.xyz t3.xyz op: 00020200 w: t9.x t9.x t9.x op: 00000000 18: xyz: c2 t2 t0 bias-> t2.xyz (038800a2) w: t0 t0 t0 bias-> (00000000) xyz: c2.xxx t2.xyz 0.0 op: 00050201 w: c2.x c2.x c2.x op: 00000000 19: xyz: t2 t4 t0 bias-> t2.xyz (03880102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 t4.xyz op: 80010a80 NOP w: t2.x t2.x t2.x op: 00000000 20: xyz: t2 c3 t1 sub-> t1.xyz (038418c2) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t2.xyz op: 00200789 w: t2.x t2.x t2.x op: 00000000 21: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.x t1.x t1.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL CONST[4..5] DCL TEMP[0..7] IMM FLT32 { 2.0000, -1.0000, 1.0000, 4.0000} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.0000} 0: TEX TEMP[0], IN[6], SAMP[0], 2D 1: DP3 TEMP[1].x, IN[8], IN[8] 2: RSQ TEMP[1].x, TEMP[1].xxxx 3: MUL TEMP[1], TEMP[1].xxxx, IN[8] 4: DP3 TEMP[2].x, IN[2], IN[2] 5: RSQ TEMP[2].x, TEMP[2].xxxx 6: MUL TEMP[2], TEMP[2].xxxx, IN[2] 7: TEX TEMP[3], IN[3], SAMP[2], 2D 8: MOV TEMP[3].x, TEMP[3].wwww 9: MAD TEMP[3], TEMP[3], IMM[0].xxxx, IMM[0].yyyy 10: MOV TEMP[3].z, IMM[1].wwww 11: DP3 TEMP[4].x, TEMP[3], TEMP[3] 12: ADD TEMP[4].x, IMM[2].xxxx, -TEMP[4].xxxx 13: RSQ TEMP[4].x, TEMP[4].xxxx 14: RCP TEMP[3].z, TEMP[4].xxxx 15: DP3_SAT TEMP[2].x, TEMP[2], TEMP[3] 16: TXP TEMP[4], IN[5], SAMP[3], 2D 17: MUL TEMP[2], TEMP[2].xxxx, TEMP[4] 18: TEX TEMP[4].x, IN[4], SAMP[4], 2D 19: MUL TEMP[2], TEMP[2], TEMP[4].xxxx 20: MUL TEMP[0], TEMP[0], IN[0] 21: MUL TEMP[5], TEMP[0], CONST[4] 22: DP3 TEMP[1].x, TEMP[1], TEMP[3] 23: MAD_SAT TEMP[4].x, TEMP[1].xxxx, IMM[2].yyyy, -IMM[2].zzzz 24: MUL TEMP[4].x, TEMP[4].xxxx, TEMP[4].xxxx 25: MUL TEMP[4], TEMP[4].xxxx, CONST[5] 26: TEX TEMP[6], IN[7], SAMP[5], 2D 27: ADD TEMP[6], TEMP[6], TEMP[6] 28: MAD TEMP[5], TEMP[4], TEMP[6], TEMP[5] 29: MUL TEMP[7].xyz, TEMP[2], TEMP[5] 30: SUB TEMP[4].x, IMM[2].xxxx, IN[1].xxxx 31: MUL OUT[0].xyz, TEMP[7], TEMP[4].xxxx 32: MUL TEMP[4], TEMP[4], TEMP[6] 33: MUL TEMP[4], TEMP[4], TEMP[2] 34: DP3 OUT[0].w, TEMP[4], IMM[1] 35: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[6].xxxx, const[6].yyyy; 10: MOV temp[3].z, const[7].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[8].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[8].yyyy, -const[8].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: SUB temp[4].x, const[8].xxxx, input[1].xxxx; 31: MUL output[0].xyz, temp[7], temp[4].xxxx; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[7]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[6].xxxx, const[6].yyyy; 10: MOV temp[3].z, const[7].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[8].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[8].yyyy, -const[8].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: SUB temp[4].x, const[8].xxxx, input[1].xxxx; 31: MUL output[0].xyz, temp[7], temp[4].xxxx; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[7]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[6].xxxx, const[6].yyyy; 10: MOV temp[3].z, const[7].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[8].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[8].yyyy, -const[8].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: SUB temp[4].x, const[8].xxxx, input[1].xxxx; 31: MUL output[0].xyz, temp[7], temp[4].xxxx; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[7]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[6].xxxx, const[6].yyyy; 10: MOV temp[3].z, const[7].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[8].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[8].yyyy, -const[8].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: SUB temp[4].x, const[8].xxxx, input[1].xxxx; 31: MUL output[0].xyz, temp[7], temp[4].xxxx; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[7]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[6].xxxx, const[6].yyyy; 10: MOV temp[3].z, const[7].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[8].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[8].yyyy, -const[8].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: SUB temp[4].x, const[8].xxxx, input[1].xxxx; 31: MUL output[0].xyz, temp[7], temp[4].xxxx; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[7]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[6].xxxx, const[6].yyyy; 10: MOV temp[3].z, const[7].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[8].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[8].yyyy, -const[8].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: SUB temp[4].x, const[8].xxxx, input[1].xxxx; 31: MUL_SAT output[0].xyz, temp[7], temp[4].xxxx; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3_SAT output[0].w, temp[4], const[7]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[6].xxxx, const[6].yyyy; 10: MOV temp[3].z, const[7].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[8].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: MUL temp[0], temp[0], input[0]; 22: MUL temp[5], temp[0], const[4]; 23: DP3 temp[1].x, temp[1], temp[3]; 24: MAD_SAT temp[4].x, temp[1].xxxx, const[8].yyyy, -const[8].zzzz; 25: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 26: MUL temp[4], temp[4].xxxx, const[5]; 27: TEX temp[6], input[7], 2D[5]; 28: ADD temp[6], temp[6], temp[6]; 29: MAD temp[5], temp[4], temp[6], temp[5]; 30: MUL temp[7].xyz, temp[2], temp[5]; 31: SUB temp[4].x, const[8].xxxx, input[1].xxxx; 32: MUL_SAT output[0].xyz, temp[7], temp[4].xxxx; 33: MUL temp[4], temp[4], temp[6]; 34: MUL temp[4], temp[4], temp[2]; 35: DP3_SAT output[0].w, temp[4], const[7]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, |temp[1].xxxx|; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, |temp[2].xxxx|; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[6].xxxx, const[6].yyyy; 10: MOV temp[3].z, const[7].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[8].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, |temp[4].xxxx|; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: MUL temp[0], temp[0], input[0]; 22: MUL temp[5], temp[0], const[4]; 23: DP3 temp[1].x, temp[1], temp[3]; 24: MAD_SAT temp[4].x, temp[1].xxxx, const[8].yyyy, -const[8].zzzz; 25: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 26: MUL temp[4], temp[4].xxxx, const[5]; 27: TEX temp[6], input[7], 2D[5]; 28: ADD temp[6], temp[6], temp[6]; 29: MAD temp[5], temp[4], temp[6], temp[5]; 30: MUL temp[7].xyz, temp[2], temp[5]; 31: ADD temp[4].x, const[8].xxxx, -input[1].xxxx; 32: MUL_SAT output[0].xyz, temp[7], temp[4].xxxx; 33: MUL temp[4], temp[4], temp[6]; 34: MUL temp[4], temp[4], temp[2]; 35: DP3_SAT output[0].w, temp[4], const[7]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[6].xx__, const[6].yy__; 10: MOV temp[3].z, const[7].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[8].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 22: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 23: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 24: MAD_SAT temp[4].x, temp[1].x___, const[8].y___, -const[8].z___; 25: MUL temp[4].x, temp[4].x___, temp[4].x___; 26: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 27: TEX temp[6].xyz, input[7].xy__, 2D[5]; 28: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 29: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 30: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 31: ADD temp[4].x, const[8].x___, -input[1].x___; 32: MUL_SAT output[0].xyz, temp[7].xyz_, temp[4].xxx_; 33: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 35: DP3_SAT output[0].w, temp[4].xyz_, const[7].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[6].xx__, const[6].yy__; 10: MOV temp[3].z, const[7].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[8].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 22: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 23: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 24: MAD_SAT temp[4].x, temp[1].x___, const[8].y___, -const[8].z___; 25: MUL temp[4].x, temp[4].x___, temp[4].x___; 26: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 27: TEX temp[6].xyz, input[7].xy__, 2D[5]; 28: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 29: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 30: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 31: ADD temp[4].x, const[8].x___, -input[1].x___; 32: MUL_SAT output[0].xyz, temp[7].xyz_, temp[4].xxx_; 33: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 35: DP3_SAT output[0].w, temp[4].xyz_, const[7].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[6].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[8].y___, -const[8].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: ADD temp[4].x, none.1___, -input[1].x___; 31: MUL_SAT output[0].xyz, temp[7].xyz_, temp[4].xxx_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 33: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 34: DP3_SAT output[0].w, temp[4].xyz_, const[7].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[6].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[8].y___, -const[8].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: ADD temp[4].x, none.1___, -input[1].x___; 31: MUL_SAT output[0].xyz, temp[7].xyz_, temp[4].xxx_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 33: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 34: DP3_SAT output[0].w, temp[4].xyz_, const[7].xyz_; CONST[2] = { 2.0000 -1.0000 1.0000 4.0000 } CONST[3] = { 0.3000 0.5900 0.1100 0.0000 } CONST[4] = { 1.0000 4.0000 3.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[2].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[0].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[4].y___, -const[4].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[1].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: ADD temp[4].x, none.1___, -input[1].x___; 31: MUL_SAT output[0].xyz, temp[7].xyz_, temp[4].xxx_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 33: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 34: DP3_SAT output[0].w, temp[4].xyz_, const[3].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[9].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[10].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[11].x, |temp[10].x___|; 3: MUL temp[12].xyz, temp[11].xxx_, input[8].xyz_; 4: DP3 temp[13].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[14].x, |temp[13].x___|; 6: MUL temp[15].xyz, temp[14].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[2].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[16].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[17].x, none.1___, -temp[16].x___; 13: RSQ temp[18].x, |temp[17].x___|; 14: RCP temp[3].z, temp[18].x___; 15: DP3_SAT temp[19].x, temp[15].xyz_, temp[3].xyz_; 16: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[21].xyz, temp[19].xxx_, temp[20].xyz_; 18: TEX temp[22].x, input[4].xy__, 2D[4]; 19: MUL temp[23].xyz, temp[21].xyz_, temp[22].xxx_; 20: MUL temp[24].xyz, temp[9].xyz_, input[0].xyz_; 21: MUL temp[25].xyz, temp[24].xyz_, const[0].xyz_; 22: DP3 temp[26].x, temp[12].xyz_, temp[3].xyz_; 23: MAD_SAT temp[27].x, temp[26].x___, const[4].y___, -const[4].z___; 24: MUL temp[28].x, temp[27].x___, temp[27].x___; 25: MUL temp[4].xyz, temp[28].xxx_, const[1].xyz_; 26: TEX temp[29].xyz, input[7].xy__, 2D[5]; 27: ADD temp[30].xyz, temp[29].xyz_, temp[29].xyz_; 28: MAD temp[31].xyz, temp[4].xyz_, temp[30].xyz_, temp[25].xyz_; 29: MUL temp[32].xyz, temp[23].xyz_, temp[31].xyz_; 30: ADD temp[4].x, none.1___, -input[1].x___; 31: MUL_SAT output[0].xyz, temp[32].xyz_, temp[4].xxx_; 32: MUL temp[33].xyz, temp[4].xyz_, temp[30].xyz_; 33: MUL temp[34].xyz, temp[33].xyz_, temp[23].xyz_; 34: DP3_SAT output[0].w, temp[34].xyz_, const[3].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[9].xyz, input[6].xy__, 2D[0]; 1: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 2: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 3: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = input[2] DP3 temp[13].x, src0.xyz, src0.xyz 5: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 6: src0.xyz = temp[14], src1.xyz = input[2] MAD temp[15].xyz, src0.xxx, src1.xyz, src0.000 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[2] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: MAD temp[3].z, src0.__0, src0.111, src0.000 11: src0.xyz = temp[3] DP3 temp[16].x, src0.xyz, src0.xyz 12: src0.xyz = temp[16] MAD temp[17].x, src0.1__, src0.111, -src0.x__ 13: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 14: src0.xyz = temp[18] REPL_ALPHA temp[3].z RCP, src0.x 15: src0.xyz = temp[15], src1.xyz = temp[3] DP3_SAT temp[19].x, src0.xyz, src1.xyz 16: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 17: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 18: TEX temp[22].x, input[4].xy__, 2D[4]; 19: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 20: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 21: src0.xyz = temp[24], src1.xyz = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[12], src1.xyz = temp[3] DP3 temp[26].x, src0.xyz, src1.xyz 23: src0.xyz = temp[26], src1.xyz = const[4] MAD_SAT temp[27].x, src0.x__, src1.y__, -src1.z__ 24: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 25: src0.xyz = temp[28], src1.xyz = const[1] MAD temp[4].xyz, src0.xxx, src1.xyz, src0.000 26: TEX temp[29].xyz, input[7].xy__, 2D[5]; 27: src0.xyz = temp[29] MAD temp[30].xyz, src0.xyz, src0.111, src0.xyz 28: src0.xyz = temp[4], src1.xyz = temp[30], src2.xyz = temp[25] MAD temp[31].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[23], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = input[1] MAD temp[4].x, src0.1__, src0.111, -src0.x__ 31: src0.xyz = temp[32], src1.xyz = temp[4] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 32: src0.xyz = temp[4], src1.xyz = temp[30] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[33], src1.xyz = temp[23] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[34], src1.xyz = const[3] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[22].x, input[4].xy__, 2D[4]; 5: TEX temp[29].xyz, input[7].xy__, 2D[5]; 6: src0.xyz = temp[29] MAD temp[30].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[3], src1.xyz = const[2] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[24], src1.xyz = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[3].z, src0.__0, src0.111, src0.000 12: src0.xyz = temp[3] DP3 temp[16].x, src0.xyz, src0.xyz 13: src0.xyz = input[2], src1.xyz = temp[16] DP3 temp[13].x, src0.xyz, src0.xyz MAD temp[17].w, src0.1, src0.1, -src1.x 14: src0.xyz = temp[17], src0.w = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.w| 15: src0.xyz = temp[18] REPL_ALPHA temp[3].z RCP, src0.x 16: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 17: src0.xyz = temp[14], src1.xyz = input[2] MAD temp[15].xyz, src0.xxx, src1.xyz, src0.000 18: src0.xyz = temp[15], src1.xyz = temp[3] DP3_SAT temp[19].x, src0.xyz, src1.xyz 19: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 20: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 22: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 23: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 24: src0.xyz = temp[12], src1.xyz = temp[3] DP3 temp[26].x, src0.xyz, src1.xyz 25: src0.xyz = temp[26], src1.xyz = const[4] MAD_SAT temp[27].x, src0.x__, src1.y__, -src1.z__ 26: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 27: src0.xyz = temp[28], src1.xyz = const[1] MAD temp[4].xyz, src0.xxx, src1.xyz, src0.000 28: src0.xyz = temp[4], src1.xyz = temp[30], src2.xyz = temp[25] MAD temp[31].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[23], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = input[1] MAD temp[4].x, src0.1__, src0.111, -src0.x__ 31: src0.xyz = temp[32], src1.xyz = temp[4] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 32: src0.xyz = temp[4], src1.xyz = temp[30] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[33], src1.xyz = temp[23] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[34], src1.xyz = const[3] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[22].x, input[4].xy__, 2D[4]; 5: TEX temp[29].xyz, input[7].xy__, 2D[5]; 6: src0.xyz = temp[29] MAD temp[30].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[3], src1.xyz = const[2] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[24], src1.xyz = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[3].z, src0.__0, src0.111, src0.000 12: src0.xyz = temp[3] DP3 temp[16].x, src0.xyz, src0.xyz 13: src0.xyz = input[2], src1.xyz = temp[16] DP3 temp[13].x, src0.xyz, src0.xyz MAD temp[17].w, src0.1, src0.1, -src1.x 14: src0.w = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.w| 15: src0.xyz = temp[18] REPL_ALPHA temp[3].z RCP, src0.x 16: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 17: src0.xyz = temp[14], src1.xyz = input[2] MAD temp[15].xyz, src0.xxx, src1.xyz, src0.000 18: src0.xyz = temp[15], src1.xyz = temp[3] DP3_SAT temp[19].x, src0.xyz, src1.xyz 19: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 20: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 22: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 23: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 24: src0.xyz = temp[12], src1.xyz = temp[3] DP3 temp[26].x, src0.xyz, src1.xyz 25: src0.xyz = temp[26], src1.xyz = const[4] MAD_SAT temp[27].x, src0.x__, src1.y__, -src1.z__ 26: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 27: src0.xyz = temp[28], src1.xyz = const[1] MAD temp[4].xyz, src0.xxx, src1.xyz, src0.000 28: src0.xyz = temp[4], src1.xyz = temp[30], src2.xyz = temp[25] MAD temp[31].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[23], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = input[1] MAD temp[4].x, src0.1__, src0.111, -src0.x__ 31: src0.xyz = temp[32], src1.xyz = temp[4] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 32: src0.xyz = temp[4], src1.xyz = temp[30] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[33], src1.xyz = temp[23] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[34], src1.xyz = const[3] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[5].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[4].x, input[4].xy__, 2D[4]; 5: TEX temp[7].xyz, input[7].xy__, 2D[5]; 6: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 8: src0.xyz = temp[3], src1.xyz = const[2] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[6], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[0], src1.xyz = const[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[3].z, src0.__0, src0.111, src0.000 12: src0.xyz = temp[3] DP3 temp[1].y, src0.xyz, src0.xyz 13: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[0].w, src0.1, src0.1, -src1.y 14: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 15: src0.xyz = temp[1] REPL_ALPHA temp[3].z RCP, src0.z 16: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 17: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 18: src0.xyz = temp[2], src1.xyz = temp[3] DP3_SAT temp[1].y, src0.xyz, src1.xyz 19: src0.xyz = temp[1], src1.xyz = temp[5] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 20: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = input[8] DP3 temp[1].y, src0.xyz, src0.xyz 22: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 23: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 24: src0.xyz = temp[4], src1.xyz = temp[3] DP3 temp[1].y, src0.xyz, src1.xyz 25: src0.xyz = temp[1], src1.xyz = const[4] MAD_SAT temp[1].y, src0._y_, src1._y_, -src1._z_ 26: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._y_, src0._0_ 27: src0.xyz = temp[1], src1.xyz = const[1] MAD temp[3].xyz, src0.yyy, src1.xyz, src0.000 28: src0.xyz = temp[3], src1.xyz = temp[7], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = input[1] MAD temp[3].x, src0.1__, src0.111, -src0.x__ 31: src0.xyz = temp[0], src1.xyz = temp[3] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 32: src0.xyz = temp[3], src1.xyz = temp[7] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[0], src1.xyz = const[3] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ pc=20************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 28, tex_end: 4 (code_addr: 00480700) TEX: TEX t6, t6, texture[0] (00008186) TEX t3, t3, texture[2] (000090c3) TXP t5, t5, texture[3] (00019945) TEX t4, t4, texture[4] (0000a104) TEX t7, t7, texture[5] (0000a9c7) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 1: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t3 c2 t0 bias-> t3.xy (018c0883) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c2.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 3: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t0.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 4: 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 5: xyz: t0 t0 t0 bias-> t3.z (020c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 6: xyz: t3 t0 t0 bias-> t1.y (01040003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 7: xyz: t2 t1 t0 bias-> t1.y (01040042) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 1.0 1.0 -t1.y op: 00090891 8: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 9: xyz: t1 t0 t0 bias-> t3.z (020c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 10: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 11: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 12: xyz: t2 t3 t0 bias-> t1.y (010400c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 13: xyz: t1 t5 t0 bias-> t2.xyz (03880141) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t5.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 14: 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 15: xyz: t8 t0 t0 bias-> t1.y (01040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 16: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 17: xyz: t1 t8 t0 bias-> t4.xyz (03900201) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t8.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 18: xyz: t4 t3 t0 bias-> t1.y (010400c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 19: xyz: t1 c4 t0 bias-> t1.y (01040901) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c4.xyz -c4.zzz op: 4009c200 w: t1.x t1.x t1.x op: 00000000 20: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 21: xyz: t1 c1 t0 bias-> t3.xyz (038c0841) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c1.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 22: xyz: t3 t7 t0 bias-> t0.xyz (038001c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz t0.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 23: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 24: xyz: t1 t0 t0 bias-> t3.x (008c0001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 25: xyz: t0 t3 t0 bias-> o0.xyz (1c0000c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t3.xxx 0.0 op: 40050280 w: t0.x t0.x t0.x op: 00000000 26: xyz: t3 t7 t0 bias-> t0.xyz (038001c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 27: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 28: xyz: t0 c3 t0 bias-> (000008c0) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c3.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL CONST[4..7] DCL TEMP[0..7] IMM FLT32 { 2.0000, -1.0000, 1.0000, 4.0000} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.0000} 0: TEX TEMP[0], IN[6], SAMP[0], 2D 1: DP3 TEMP[1].x, IN[8], IN[8] 2: RSQ TEMP[1].x, TEMP[1].xxxx 3: MUL TEMP[1], TEMP[1].xxxx, IN[8] 4: DP3 TEMP[2].x, IN[2], IN[2] 5: RSQ TEMP[2].x, TEMP[2].xxxx 6: MUL TEMP[2], TEMP[2].xxxx, IN[2] 7: TEX TEMP[3], IN[3], SAMP[2], 2D 8: MOV TEMP[3].x, TEMP[3].wwww 9: MAD TEMP[3], TEMP[3], IMM[0].xxxx, IMM[0].yyyy 10: MOV TEMP[3].z, IMM[1].wwww 11: DP3 TEMP[4].x, TEMP[3], TEMP[3] 12: ADD TEMP[4].x, IMM[2].xxxx, -TEMP[4].xxxx 13: RSQ TEMP[4].x, TEMP[4].xxxx 14: RCP TEMP[3].z, TEMP[4].xxxx 15: DP3_SAT TEMP[2].x, TEMP[2], TEMP[3] 16: TXP TEMP[4], IN[5], SAMP[3], 2D 17: MUL TEMP[2], TEMP[2].xxxx, TEMP[4] 18: TEX TEMP[4].x, IN[4], SAMP[4], 2D 19: MUL TEMP[2], TEMP[2], TEMP[4].xxxx 20: MUL TEMP[0], TEMP[0], IN[0] 21: MUL TEMP[5], TEMP[0], CONST[4] 22: DP3 TEMP[1].x, TEMP[1], TEMP[3] 23: MAD_SAT TEMP[4].x, TEMP[1].xxxx, IMM[2].yyyy, -IMM[2].zzzz 24: MUL TEMP[4].x, TEMP[4].xxxx, TEMP[4].xxxx 25: MUL TEMP[4], TEMP[4].xxxx, CONST[5] 26: TEX TEMP[6], IN[7], SAMP[5], 2D 27: ADD TEMP[6], TEMP[6], TEMP[6] 28: MAD TEMP[5], TEMP[4], TEMP[6], TEMP[5] 29: MUL TEMP[7].xyz, TEMP[2], TEMP[5] 30: MAD TEMP[7].xyz, TEMP[0], CONST[6], TEMP[7] 31: LRP OUT[0].xyz, IN[1].xxxx, CONST[7], TEMP[7] 32: MUL TEMP[4], TEMP[4], TEMP[6] 33: MUL TEMP[4], TEMP[4], TEMP[2] 34: DP3 OUT[0].w, TEMP[4], IMM[1] 35: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: LRP_SAT output[0].xyz, input[1].xxxx, const[7], temp[7]; 32: MUL temp[4], temp[4], temp[6]; 33: MUL temp[4], temp[4], temp[2]; 34: DP3_SAT output[0].w, temp[4], const[9]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: MUL temp[0], temp[0], input[0]; 22: MUL temp[5], temp[0], const[4]; 23: DP3 temp[1].x, temp[1], temp[3]; 24: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 25: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 26: MUL temp[4], temp[4].xxxx, const[5]; 27: TEX temp[6], input[7], 2D[5]; 28: ADD temp[6], temp[6], temp[6]; 29: MAD temp[5], temp[4], temp[6], temp[5]; 30: MUL temp[7].xyz, temp[2], temp[5]; 31: MAD temp[7].xyz, temp[0], const[6], temp[7]; 32: LRP_SAT output[0].xyz, input[1].xxxx, const[7], temp[7]; 33: MUL temp[4], temp[4], temp[6]; 34: MUL temp[4], temp[4], temp[2]; 35: DP3_SAT output[0].w, temp[4], const[9]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, |temp[1].xxxx|; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, |temp[2].xxxx|; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, |temp[4].xxxx|; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: MUL temp[0], temp[0], input[0]; 22: MUL temp[5], temp[0], const[4]; 23: DP3 temp[1].x, temp[1], temp[3]; 24: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 25: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 26: MUL temp[4], temp[4].xxxx, const[5]; 27: TEX temp[6], input[7], 2D[5]; 28: ADD temp[6], temp[6], temp[6]; 29: MAD temp[5], temp[4], temp[6], temp[5]; 30: MUL temp[7].xyz, temp[2], temp[5]; 31: MAD temp[7].xyz, temp[0], const[6], temp[7]; 32: ADD temp[9].xyz, const[7], -temp[7]; 33: MAD_SAT output[0].xyz, input[1].xxxx, temp[9], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3_SAT output[0].w, temp[4], const[9]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[8].xx__, const[8].yy__; 10: MOV temp[3].z, const[9].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[10].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 22: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 23: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 24: MAD_SAT temp[4].x, temp[1].x___, const[10].y___, -const[10].z___; 25: MUL temp[4].x, temp[4].x___, temp[4].x___; 26: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 27: TEX temp[6].xyz, input[7].xy__, 2D[5]; 28: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 29: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 30: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 31: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 32: ADD temp[9].xyz, const[7].xyz_, -temp[7].xyz_; 33: MAD_SAT output[0].xyz, input[1].xxx_, temp[9].xyz_, temp[7].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 35: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 36: DP3_SAT output[0].w, temp[4].xyz_, const[9].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[8].xx__, const[8].yy__; 10: MOV temp[3].z, const[9].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[10].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 22: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 23: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 24: MAD_SAT temp[4].x, temp[1].x___, const[10].y___, -const[10].z___; 25: MUL temp[4].x, temp[4].x___, temp[4].x___; 26: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 27: TEX temp[6].xyz, input[7].xy__, 2D[5]; 28: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 29: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 30: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 31: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 32: ADD temp[9].xyz, const[7].xyz_, -temp[7].xyz_; 33: MAD_SAT output[0].xyz, input[1].xxx_, temp[9].xyz_, temp[7].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 35: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 36: DP3_SAT output[0].w, temp[4].xyz_, const[9].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[8].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[10].y___, -const[10].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 31: MAD_SAT output[0].xyz, input[1].xxx_, (const[7] - temp[7]).xyz_, temp[7].xyz_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 33: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 34: DP3_SAT output[0].w, temp[4].xyz_, const[9].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[8].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[10].y___, -const[10].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 31: MAD_SAT output[0].xyz, input[1].xxx_, (const[7] - temp[7]).xyz_, temp[7].xyz_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 33: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 34: DP3_SAT output[0].w, temp[4].xyz_, const[9].xyz_; CONST[4] = { 2.0000 -1.0000 1.0000 4.0000 } CONST[5] = { 0.3000 0.5900 0.1100 0.0000 } CONST[6] = { 1.0000 4.0000 3.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[4].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[0].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[6].y___, -const[6].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[1].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: MAD temp[7].xyz, temp[0].xyz_, const[2].xyz_, temp[7].xyz_; 31: MAD_SAT output[0].xyz, input[1].xxx_, (const[3] - temp[7]).xyz_, temp[7].xyz_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 33: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 34: DP3_SAT output[0].w, temp[4].xyz_, const[5].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[9].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[10].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[11].x, |temp[10].x___|; 3: MUL temp[12].xyz, temp[11].xxx_, input[8].xyz_; 4: DP3 temp[13].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[14].x, |temp[13].x___|; 6: MUL temp[15].xyz, temp[14].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[4].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[16].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[17].x, none.1___, -temp[16].x___; 13: RSQ temp[18].x, |temp[17].x___|; 14: RCP temp[3].z, temp[18].x___; 15: DP3_SAT temp[19].x, temp[15].xyz_, temp[3].xyz_; 16: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[21].xyz, temp[19].xxx_, temp[20].xyz_; 18: TEX temp[22].x, input[4].xy__, 2D[4]; 19: MUL temp[23].xyz, temp[21].xyz_, temp[22].xxx_; 20: MUL temp[24].xyz, temp[9].xyz_, input[0].xyz_; 21: MUL temp[25].xyz, temp[24].xyz_, const[0].xyz_; 22: DP3 temp[26].x, temp[12].xyz_, temp[3].xyz_; 23: MAD_SAT temp[27].x, temp[26].x___, const[6].y___, -const[6].z___; 24: MUL temp[28].x, temp[27].x___, temp[27].x___; 25: MUL temp[29].xyz, temp[28].xxx_, const[1].xyz_; 26: TEX temp[30].xyz, input[7].xy__, 2D[5]; 27: ADD temp[31].xyz, temp[30].xyz_, temp[30].xyz_; 28: MAD temp[32].xyz, temp[29].xyz_, temp[31].xyz_, temp[25].xyz_; 29: MUL temp[33].xyz, temp[23].xyz_, temp[32].xyz_; 30: MAD temp[34].xyz, temp[24].xyz_, const[2].xyz_, temp[33].xyz_; 31: MAD_SAT output[0].xyz, input[1].xxx_, (const[3] - temp[34]).xyz_, temp[34].xyz_; 32: MUL temp[35].xyz, temp[29].xyz_, temp[31].xyz_; 33: MUL temp[36].xyz, temp[35].xyz_, temp[23].xyz_; 34: DP3_SAT output[0].w, temp[36].xyz_, const[5].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[9].xyz, input[6].xy__, 2D[0]; 1: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 2: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 3: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = input[2] DP3 temp[13].x, src0.xyz, src0.xyz 5: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 6: src0.xyz = temp[14], src1.xyz = input[2] MAD temp[15].xyz, src0.xxx, src1.xyz, src0.000 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: MAD temp[3].z, src0.__0, src0.111, src0.000 11: src0.xyz = temp[3] DP3 temp[16].x, src0.xyz, src0.xyz 12: src0.xyz = temp[16] MAD temp[17].x, src0.1__, src0.111, -src0.x__ 13: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 14: src0.xyz = temp[18] REPL_ALPHA temp[3].z RCP, src0.x 15: src0.xyz = temp[15], src1.xyz = temp[3] DP3_SAT temp[19].x, src0.xyz, src1.xyz 16: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 17: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 18: TEX temp[22].x, input[4].xy__, 2D[4]; 19: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 20: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 21: src0.xyz = temp[24], src1.xyz = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[12], src1.xyz = temp[3] DP3 temp[26].x, src0.xyz, src1.xyz 23: src0.xyz = temp[26], src1.xyz = const[6] MAD_SAT temp[27].x, src0.x__, src1.y__, -src1.z__ 24: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 25: src0.xyz = temp[28], src1.xyz = const[1] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 26: TEX temp[30].xyz, input[7].xy__, 2D[5]; 27: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, src0.xyz 28: src0.xyz = temp[29], src1.xyz = temp[31], src2.xyz = temp[25] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[23], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[24], src1.xyz = const[2], src2.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 31: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 32: src0.xyz = temp[29], src1.xyz = temp[31] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[35], src1.xyz = temp[23] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[36], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[22].x, input[4].xy__, 2D[4]; 5: TEX temp[30].xyz, input[7].xy__, 2D[5]; 6: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[24], src1.xyz = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[3].z, src0.__0, src0.111, src0.000 12: src0.xyz = temp[3] DP3 temp[16].x, src0.xyz, src0.xyz 13: src0.xyz = input[2], src1.xyz = temp[16] DP3 temp[13].x, src0.xyz, src0.xyz MAD temp[17].w, src0.1, src0.1, -src1.x 14: src0.xyz = temp[17], src0.w = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.w| 15: src0.xyz = temp[18] REPL_ALPHA temp[3].z RCP, src0.x 16: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 17: src0.xyz = temp[14], src1.xyz = input[2] MAD temp[15].xyz, src0.xxx, src1.xyz, src0.000 18: src0.xyz = temp[15], src1.xyz = temp[3] DP3_SAT temp[19].x, src0.xyz, src1.xyz 19: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 20: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 22: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 23: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 24: src0.xyz = temp[12], src1.xyz = temp[3] DP3 temp[26].x, src0.xyz, src1.xyz 25: src0.xyz = temp[26], src1.xyz = const[6] MAD_SAT temp[27].x, src0.x__, src1.y__, -src1.z__ 26: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 27: src0.xyz = temp[28], src1.xyz = const[1] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 28: src0.xyz = temp[29], src1.xyz = temp[31], src2.xyz = temp[25] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[23], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[24], src1.xyz = const[2], src2.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 31: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 32: src0.xyz = temp[29], src1.xyz = temp[31] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[35], src1.xyz = temp[23] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[36], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[22].x, input[4].xy__, 2D[4]; 5: TEX temp[30].xyz, input[7].xy__, 2D[5]; 6: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[24], src1.xyz = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[3].z, src0.__0, src0.111, src0.000 12: src0.xyz = temp[3] DP3 temp[16].x, src0.xyz, src0.xyz 13: src0.xyz = input[2], src1.xyz = temp[16] DP3 temp[13].x, src0.xyz, src0.xyz MAD temp[17].w, src0.1, src0.1, -src1.x 14: src0.w = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.w| 15: src0.xyz = temp[18] REPL_ALPHA temp[3].z RCP, src0.x 16: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 17: src0.xyz = temp[14], src1.xyz = input[2] MAD temp[15].xyz, src0.xxx, src1.xyz, src0.000 18: src0.xyz = temp[15], src1.xyz = temp[3] DP3_SAT temp[19].x, src0.xyz, src1.xyz 19: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 20: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 22: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 23: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 24: src0.xyz = temp[12], src1.xyz = temp[3] DP3 temp[26].x, src0.xyz, src1.xyz 25: src0.xyz = temp[26], src1.xyz = const[6] MAD_SAT temp[27].x, src0.x__, src1.y__, -src1.z__ 26: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 27: src0.xyz = temp[28], src1.xyz = const[1] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 28: src0.xyz = temp[29], src1.xyz = temp[31], src2.xyz = temp[25] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[23], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[24], src1.xyz = const[2], src2.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 31: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 32: src0.xyz = temp[29], src1.xyz = temp[31] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[35], src1.xyz = temp[23] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[36], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[5].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[4].x, input[4].xy__, 2D[4]; 5: TEX temp[7].xyz, input[7].xy__, 2D[5]; 6: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 8: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[6], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[0], src1.xyz = const[0] MAD temp[6].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[3].z, src0.__0, src0.111, src0.000 12: src0.xyz = temp[3] DP3 temp[1].y, src0.xyz, src0.xyz 13: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[0].w, src0.1, src0.1, -src1.y 14: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 15: src0.xyz = temp[1] REPL_ALPHA temp[3].z RCP, src0.z 16: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 17: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 18: src0.xyz = temp[2], src1.xyz = temp[3] DP3_SAT temp[1].y, src0.xyz, src1.xyz 19: src0.xyz = temp[1], src1.xyz = temp[5] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 20: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = input[8] DP3 temp[1].y, src0.xyz, src0.xyz 22: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 23: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 24: src0.xyz = temp[4], src1.xyz = temp[3] DP3 temp[1].y, src0.xyz, src1.xyz 25: src0.xyz = temp[1], src1.xyz = const[6] MAD_SAT temp[1].y, src0._y_, src1._y_, -src1._z_ 26: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._y_, src0._0_ 27: src0.xyz = temp[1], src1.xyz = const[1] MAD temp[3].xyz, src0.yyy, src1.xyz, src0.000 28: src0.xyz = temp[3], src1.xyz = temp[7], src2.xyz = temp[6] MAD temp[4].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[0], src1.xyz = const[2], src2.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 31: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 32: src0.xyz = temp[3], src1.xyz = temp[7] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[0], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ pc=21************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 28, tex_end: 4 (code_addr: 00480700) TEX: TEX t6, t6, texture[0] (00008186) TEX t3, t3, texture[2] (000090c3) TXP t5, t5, texture[3] (00019945) TEX t4, t4, texture[4] (0000a104) TEX t7, t7, texture[5] (0000a9c7) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 1: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t3 c4 t0 bias-> t3.xy (018c0903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 3: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t0.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 4: xyz: t0 c0 t0 bias-> t6.xyz (03980800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t3.z (020c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 6: xyz: t3 t0 t0 bias-> t1.y (01040003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 7: xyz: t2 t1 t0 bias-> t1.y (01040042) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 1.0 1.0 -t1.y op: 00090891 8: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 9: xyz: t1 t0 t0 bias-> t3.z (020c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 10: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 11: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 12: xyz: t2 t3 t0 bias-> t1.y (010400c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 13: xyz: t1 t5 t0 bias-> t2.xyz (03880141) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t5.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 14: 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 15: xyz: t8 t0 t0 bias-> t1.y (01040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 16: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 17: xyz: t1 t8 t0 bias-> t4.xyz (03900201) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t8.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 18: xyz: t4 t3 t0 bias-> t1.y (010400c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 19: xyz: t1 c6 t0 bias-> t1.y (01040981) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c6.xyz -c6.zzz op: 4009c200 w: t1.x t1.x t1.x op: 00000000 20: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 21: xyz: t1 c1 t0 bias-> t3.xyz (038c0841) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c1.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 22: xyz: t3 t7 t6 bias-> t4.xyz (039061c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz t6.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 23: xyz: t2 t4 t0 bias-> t4.xyz (03900102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 24: xyz: t0 c2 t4 bias-> t0.xyz (03804880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c2.xyz t4.xyz op: 80020200 NOP w: t0.x t0.x t0.x op: 00000000 25: xyz: t0 c3 t1 sub-> o0.xyz (1c0018c0) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 26: xyz: t3 t7 t0 bias-> t0.xyz (038001c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 27: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 28: xyz: t0 c5 t0 bias-> (00000940) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c5.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL CONST[0] DCL CONST[5..8] DCL TEMP[0..11] IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.5000} IMM FLT32 { 2.0000, -1.0000, 0.3000, 0.5900} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} 0: MAD TEMP[0].xy, IN[3], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[6], SAMP[0], 2D 2: MOV TEMP[2], IMM[0].xxxx 3: MUL_SAT TEMP[2], TEMP[2], IN[3].wwww 4: DP3 TEMP[3].x, IN[8], IN[8] 5: RSQ TEMP[3].x, TEMP[3].xxxx 6: MUL TEMP[3], TEMP[3].xxxx, IN[8] 7: DP3 TEMP[4].x, IN[2], IN[2] 8: RSQ TEMP[4].x, TEMP[4].xxxx 9: MUL TEMP[4], TEMP[4].xxxx, IN[2] 10: TEX TEMP[5], IN[3], SAMP[2], 2D 11: MOV TEMP[5].x, TEMP[5].wwww 12: MAD TEMP[5], TEMP[5], IMM[1].xxxx, IMM[1].yyyy 13: TEX TEMP[6], TEMP[0], SAMP[3], 2D 14: MOV TEMP[6].x, TEMP[6].wwww 15: MAD TEMP[6].xy, TEMP[6], IMM[1].xxxx, IMM[1].yyyy 16: MAD TEMP[5].xy, TEMP[2].xxxx, TEMP[6], TEMP[5] 17: MOV TEMP[5].z, IMM[2].wwww 18: DP3 TEMP[7].x, TEMP[5], TEMP[5] 19: ADD TEMP[7].x, IMM[0].xxxx, -TEMP[7].xxxx 20: RSQ TEMP[7].x, TEMP[7].xxxx 21: RCP TEMP[5].z, TEMP[7].xxxx 22: DP3_SAT TEMP[4].x, TEMP[4], TEMP[5] 23: TXP TEMP[7], IN[5], SAMP[4], 2D 24: MUL TEMP[4], TEMP[4].xxxx, TEMP[7] 25: TEX TEMP[7].x, IN[4], SAMP[5], 2D 26: MUL TEMP[4], TEMP[4], TEMP[7].xxxx 27: MUL TEMP[1], TEMP[1], IN[0] 28: MUL TEMP[8], TEMP[1], CONST[5] 29: DP3 TEMP[3].x, TEMP[3], TEMP[5] 30: MAD_SAT TEMP[7].x, TEMP[3].xxxx, IMM[0].yyyy, -IMM[0].zzzz 31: MUL TEMP[7].x, TEMP[7].xxxx, TEMP[7].xxxx 32: MUL TEMP[7], TEMP[7].xxxx, CONST[6] 33: TEX TEMP[9], IN[7], SAMP[6], 2D 34: ADD TEMP[9], TEMP[9], TEMP[9] 35: TEX TEMP[10], TEMP[0], SAMP[7], 2D 36: ADD TEMP[10], TEMP[10], -IMM[0].wwww 37: MAD TEMP[9], TEMP[2].xxxx, TEMP[10], TEMP[9] 38: MAD TEMP[8], TEMP[7], TEMP[9], TEMP[8] 39: MUL TEMP[11].xyz, TEMP[4], TEMP[8] 40: MAD TEMP[11].xyz, TEMP[1], CONST[7], TEMP[11] 41: LRP OUT[0].xyz, IN[1].xxxx, CONST[8], TEMP[11] 42: MUL TEMP[7], TEMP[7], TEMP[9] 43: MUL TEMP[7], TEMP[7], TEMP[4] 44: DP3 OUT[0].w, TEMP[7], IMM[2] 45: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[9].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[10].xxxx, const[10].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[10].xxxx, const[10].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[11].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[11]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[9].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[10].xxxx, const[10].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[10].xxxx, const[10].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[11].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[11]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[9].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[10].xxxx, const[10].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[10].xxxx, const[10].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[11].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[11]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[9].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[10].xxxx, const[10].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[10].xxxx, const[10].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[11].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[11]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[9].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[10].xxxx, const[10].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[10].xxxx, const[10].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[11].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[11]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[9].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[10].xxxx, const[10].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[10].xxxx, const[10].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[11].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP_SAT output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3_SAT output[0].w, temp[7], const[11]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[9].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[10].xxxx, const[10].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[10].xxxx, const[10].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[11].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[5]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[6]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[7]; 37: ADD temp[10], temp[10], -const[9].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: MAD temp[11].xyz, temp[1], const[7], temp[11]; 42: LRP_SAT output[0].xyz, input[1].xxxx, const[8], temp[11]; 43: MUL temp[7], temp[7], temp[9]; 44: MUL temp[7], temp[7], temp[4]; 45: DP3_SAT output[0].w, temp[7], const[11]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[9].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, |temp[3].xxxx|; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[10].xxxx, const[10].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[10].xxxx, const[10].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[11].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, |temp[7].xxxx|; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[5]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[6]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[7]; 37: ADD temp[10], temp[10], -const[9].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: MAD temp[11].xyz, temp[1], const[7], temp[11]; 42: ADD temp[13].xyz, const[8], -temp[11]; 43: MAD_SAT output[0].xyz, input[1].xxxx, temp[13], temp[11]; 44: MUL temp[7], temp[7], temp[9]; 45: MUL temp[7], temp[7], temp[4]; 46: DP3_SAT output[0].w, temp[7], const[11]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: MOV temp[2].x, const[9].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[2]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[10].xx__, const[10].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[3]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[10].xx__, const[10].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[11].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[9].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[5]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[9].y___, -const[9].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[9].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: ADD temp[13].xyz, const[8].xyz_, -temp[11].xyz_; 43: MAD_SAT output[0].xyz, input[1].xxx_, temp[13].xyz_, temp[11].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 45: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[7].xyz_, const[11].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: MOV temp[2].x, const[9].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[2]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[10].xx__, const[10].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[3]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[10].xx__, const[10].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[11].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[9].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[5]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[9].y___, -const[9].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[9].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: ADD temp[13].xyz, const[8].xyz_, -temp[11].xyz_; 43: MAD_SAT output[0].xyz, input[1].xxx_, temp[13].xyz_, temp[11].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 45: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[7].xyz_, const[11].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: MOV_SAT temp[2].x, input[3].w___; 3: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 4: RSQ temp[3].x, |temp[3].x___|; 5: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 6: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 7: RSQ temp[4].x, |temp[4].x___|; 8: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 9: TEX temp[5].yw, input[3].xy__, 2D[2]; 10: MOV temp[5].x, temp[5].w___; 11: MAD temp[5].xy, temp[5].xy__, const[10].xx__, none.-1-1__; 12: TEX temp[6].yw, temp[0].xy__, 2D[3]; 13: MOV temp[6].x, temp[6].w___; 14: MAD temp[6].xy, temp[6].xy__, const[10].xx__, none.-1-1__; 15: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 16: MOV temp[5].z, none.__0_; 17: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 18: ADD temp[7].x, none.1___, -temp[7].x___; 19: RSQ temp[7].x, |temp[7].x___|; 20: RCP temp[5].z, temp[7].x___; 21: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 22: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 23: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 24: TEX temp[12].x, input[4].xy__, 2D[5]; 25: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 26: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 27: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 28: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 29: MAD_SAT temp[7].x, temp[3].x___, const[9].y___, -const[9].z___; 30: MUL temp[7].x, temp[7].x___, temp[7].x___; 31: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 32: TEX temp[9].xyz, input[7].xy__, 2D[6]; 33: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 34: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 35: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 36: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 37: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 38: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 39: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 40: MAD_SAT output[0].xyz, input[1].xxx_, (const[8] - temp[11]).xyz_, temp[11].xyz_; 41: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 42: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 43: DP3_SAT output[0].w, temp[7].xyz_, const[11].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[3].w___; 5: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[3].x, |temp[3].x___|; 7: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 8: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 9: RSQ temp[4].x, |temp[4].x___|; 10: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: MOV temp[5].x, temp[5].w___; 13: MAD temp[5].xy, temp[5].xy__, const[10].xx__, none.-1-1__; 14: TEX temp[6].yw, temp[0].xy__, 2D[3]; 15: MOV temp[6].x, temp[6].w___; 16: MAD temp[6].xy, temp[6].xy__, const[10].xx__, none.-1-1__; 17: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 18: MOV temp[5].z, none.__0_; 19: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 20: ADD temp[7].x, none.1___, -temp[7].x___; 21: RSQ temp[7].x, |temp[7].x___|; 22: RCP temp[5].z, temp[7].x___; 23: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 24: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 25: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 26: TEX temp[12].x, input[4].xy__, 2D[5]; 27: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[9].y___, -const[9].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: MAD_SAT output[0].xyz, input[1].xxx_, (const[8] - temp[11]).xyz_, temp[11].xyz_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 45: DP3_SAT output[0].w, temp[7].xyz_, const[11].xyz_; CONST[5] = { 1.0000 4.0000 3.0000 0.5000 } CONST[6] = { 2.0000 -1.0000 0.3000 0.5900 } CONST[7] = { 0.3000 0.5900 0.1100 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[3].w___; 5: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[3].x, |temp[3].x___|; 7: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 8: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 9: RSQ temp[4].x, |temp[4].x___|; 10: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: MOV temp[5].x, temp[5].w___; 13: MAD temp[5].xy, temp[5].xy__, const[6].xx__, none.-1-1__; 14: TEX temp[6].yw, temp[0].xy__, 2D[3]; 15: MOV temp[6].x, temp[6].w___; 16: MAD temp[6].xy, temp[6].xy__, const[6].xx__, none.-1-1__; 17: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 18: MOV temp[5].z, none.__0_; 19: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 20: ADD temp[7].x, none.1___, -temp[7].x___; 21: RSQ temp[7].x, |temp[7].x___|; 22: RCP temp[5].z, temp[7].x___; 23: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 24: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 25: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 26: TEX temp[12].x, input[4].xy__, 2D[5]; 27: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[1].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[5].y___, -const[5].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[2].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[3].xyz_, temp[11].xyz_; 42: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[11]).xyz_, temp[11].xyz_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 45: DP3_SAT output[0].w, temp[7].xyz_, const[7].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[14].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: MOV_SAT temp[16].x, input[3].w___; 5: DP3 temp[17].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[18].x, |temp[17].x___|; 7: MUL temp[19].xyz, temp[18].xxx_, input[8].xyz_; 8: DP3 temp[20].x, input[2].xyz_, input[2].xyz_; 9: RSQ temp[21].x, |temp[20].x___|; 10: MUL temp[22].xyz, temp[21].xxx_, input[2].xyz_; 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: MOV temp[5].x, temp[5].w___; 13: MAD temp[23].xy, temp[5].xy__, const[6].xx__, none.-1-1__; 14: TEX temp[6].yw, temp[14].xy__, 2D[3]; 15: MOV temp[6].x, temp[6].w___; 16: MAD temp[24].xy, temp[6].xy__, const[6].xx__, none.-1-1__; 17: MAD temp[5].xy, temp[16].xx__, temp[24].xy__, temp[23].xy__; 18: MOV temp[5].z, none.__0_; 19: DP3 temp[25].x, temp[5].xyz_, temp[5].xyz_; 20: ADD temp[26].x, none.1___, -temp[25].x___; 21: RSQ temp[27].x, |temp[26].x___|; 22: RCP temp[5].z, temp[27].x___; 23: DP3_SAT temp[28].x, temp[22].xyz_, temp[5].xyz_; 24: TXP temp[29].xyz, input[5].xy_w, 2D[4]; 25: MUL temp[30].xyz, temp[28].xxx_, temp[29].xyz_; 26: TEX temp[31].x, input[4].xy__, 2D[5]; 27: MUL temp[32].xyz, temp[30].xyz_, temp[31].xxx_; 28: MUL temp[33].xyz, temp[15].xyz_, input[0].xyz_; 29: MUL temp[34].xyz, temp[33].xyz_, const[1].xyz_; 30: DP3 temp[35].x, temp[19].xyz_, temp[5].xyz_; 31: MAD_SAT temp[36].x, temp[35].x___, const[5].y___, -const[5].z___; 32: MUL temp[37].x, temp[36].x___, temp[36].x___; 33: MUL temp[38].xyz, temp[37].xxx_, const[2].xyz_; 34: TEX temp[39].xyz, input[7].xy__, 2D[6]; 35: ADD temp[40].xyz, temp[39].xyz_, temp[39].xyz_; 36: TEX temp[41].xyz, temp[14].xy__, 2D[7]; 37: ADD temp[42].xyz, temp[41].xyz_, -none.HHH_; 38: MAD temp[43].xyz, temp[16].xxx_, temp[42].xyz_, temp[40].xyz_; 39: MAD temp[44].xyz, temp[38].xyz_, temp[43].xyz_, temp[34].xyz_; 40: MUL temp[45].xyz, temp[32].xyz_, temp[44].xyz_; 41: MAD temp[46].xyz, temp[33].xyz_, const[3].xyz_, temp[45].xyz_; 42: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[46]).xyz_, temp[46].xyz_; 43: MUL temp[47].xyz, temp[38].xyz_, temp[43].xyz_; 44: MUL temp[48].xyz, temp[47].xyz_, temp[32].xyz_; 45: DP3_SAT output[0].w, temp[48].xyz_, const[7].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: src0.w = input[3] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 5: src0.xyz = input[8] DP3 temp[17].x, src0.xyz, src0.xyz 6: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 7: src0.xyz = temp[18], src1.xyz = input[8] MAD temp[19].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = input[2] DP3 temp[20].x, src0.xyz, src0.xyz 9: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 10: src0.xyz = temp[21], src1.xyz = input[2] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 13: src0.xyz = temp[5], src1.xyz = const[6] MAD temp[23].xy, src0.xy_, src1.xx_, -src0.11_ 14: TEX temp[6].yw, temp[14].xy__, 2D[3]; 15: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 16: src0.xyz = temp[6], src1.xyz = const[6] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 17: src0.xyz = temp[16], src1.xyz = temp[24], src2.xyz = temp[23] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 18: MAD temp[5].z, src0.__0, src0.111, src0.000 19: src0.xyz = temp[5] DP3 temp[25].x, src0.xyz, src0.xyz 20: src0.xyz = temp[25] MAD temp[26].x, src0.1__, src0.111, -src0.x__ 21: src0.xyz = temp[26] REPL_ALPHA temp[27].x RSQ, |src0.x| 22: src0.xyz = temp[27] REPL_ALPHA temp[5].z RCP, src0.x 23: src0.xyz = temp[22], src1.xyz = temp[5] DP3_SAT temp[28].x, src0.xyz, src1.xyz 24: TXP temp[29].xyz, input[5].xy_w, 2D[4]; 25: src0.xyz = temp[28], src1.xyz = temp[29] MAD temp[30].xyz, src0.xxx, src1.xyz, src0.000 26: TEX temp[31].x, input[4].xy__, 2D[5]; 27: src0.xyz = temp[30], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 28: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 29: src0.xyz = temp[33], src1.xyz = const[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[19], src1.xyz = temp[5] DP3 temp[35].x, src0.xyz, src1.xyz 31: src0.xyz = temp[35], src1.xyz = const[5] MAD_SAT temp[36].x, src0.x__, src1.y__, -src1.z__ 32: src0.xyz = temp[36] MAD temp[37].x, src0.x__, src0.x__, src0.000 33: src0.xyz = temp[37], src1.xyz = const[2] MAD temp[38].xyz, src0.xxx, src1.xyz, src0.000 34: TEX temp[39].xyz, input[7].xy__, 2D[6]; 35: src0.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, src0.xyz 36: TEX temp[41].xyz, temp[14].xy__, 2D[7]; 37: src0.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src0.111, -src0.HHH 38: src0.xyz = temp[16], src1.xyz = temp[42], src2.xyz = temp[40] MAD temp[43].xyz, src0.xxx, src1.xyz, src2.xyz 39: src0.xyz = temp[38], src1.xyz = temp[43], src2.xyz = temp[34] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 40: src0.xyz = temp[32], src1.xyz = temp[44] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[33], src1.xyz = const[3], src2.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = temp[46], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 43: src0.xyz = temp[38], src1.xyz = temp[43] MAD temp[47].xyz, src0.xyz, src1.xyz, src0.000 44: src0.xyz = temp[47], src1.xyz = temp[32] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[48], src1.xyz = const[7] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[5].yw, input[3].xy__, 2D[2]; 3: TXP temp[29].xyz, input[5].xy_w, 2D[4]; 4: TEX temp[31].x, input[4].xy__, 2D[5]; 5: TEX temp[39].xyz, input[7].xy__, 2D[6]; 6: src0.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[5], src1.xyz = const[6] MAD temp[23].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[33], src1.xyz = const[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[5].z, src0.__0, src0.111, src0.000 12: src0.xyz = input[2] DP3 temp[20].x, src0.xyz, src0.xyz 13: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 14: src0.xyz = temp[21], src1.xyz = input[2] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = input[8] DP3 temp[17].x, src0.xyz, src0.xyz 16: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 17: src0.xyz = temp[18], src1.xyz = input[8] MAD temp[19].xyz, src0.xxx, src1.xyz, src0.000 18: src0.w = input[3] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 19: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 20: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 21: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 22: BEGIN_TEX; 23: TEX temp[41].xyz, temp[14].xy__, 2D[7]; 24: TEX temp[6].yw, temp[14].xy__, 2D[3]; 25: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 26: src0.xyz = temp[6], src1.xyz = const[6] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 27: src0.xyz = temp[16], src1.xyz = temp[24], src2.xyz = temp[23] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 28: src0.xyz = temp[5] DP3 temp[25].x, src0.xyz, src0.xyz 29: src0.xyz = temp[41], src1.xyz = temp[25] MAD temp[42].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[26].w, src0.1, src0.1, -src1.x 30: src0.xyz = temp[26], src0.w = temp[26] REPL_ALPHA temp[27].x RSQ, |src0.w| 31: src0.xyz = temp[27] REPL_ALPHA temp[5].z RCP, src0.x 32: src0.xyz = temp[22], src1.xyz = temp[5] DP3_SAT temp[28].x, src0.xyz, src1.xyz 33: src0.xyz = temp[28], src1.xyz = temp[29] MAD temp[30].xyz, src0.xxx, src1.xyz, src0.000 34: src0.xyz = temp[30], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 35: src0.xyz = temp[19], src1.xyz = temp[5] DP3 temp[35].x, src0.xyz, src1.xyz 36: src0.xyz = temp[16], src1.xyz = temp[42], src2.xyz = temp[40] MAD temp[43].xyz, src0.xxx, src1.xyz, src2.xyz 37: src0.xyz = temp[35], src1.xyz = const[5] MAD_SAT temp[36].w, src0.x, src1.y, -src1.z 38: src0.xyz = temp[36], src0.w = temp[36] MAD temp[37].x, src0.w__, src0.w__, src0.000 39: src0.xyz = temp[37], src1.xyz = const[2] MAD temp[38].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[38], src1.xyz = temp[43], src2.xyz = temp[34] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[32], src1.xyz = temp[44] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[33], src1.xyz = const[3], src2.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src2.xyz 43: src0.xyz = temp[46], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 44: src0.xyz = temp[38], src1.xyz = temp[43] MAD temp[47].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[47], src1.xyz = temp[32] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[48], src1.xyz = const[7] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[5].yw, input[3].xy__, 2D[2]; 3: TXP temp[29].xyz, input[5].xy_w, 2D[4]; 4: TEX temp[31].x, input[4].xy__, 2D[5]; 5: TEX temp[39].xyz, input[7].xy__, 2D[6]; 6: src0.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[5], src1.xyz = const[6] MAD temp[23].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[33], src1.xyz = const[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[5].z, src0.__0, src0.111, src0.000 12: src0.xyz = input[2] DP3 temp[20].x, src0.xyz, src0.xyz 13: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 14: src0.xyz = temp[21], src1.xyz = input[2] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = input[8] DP3 temp[17].x, src0.xyz, src0.xyz 16: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 17: src0.xyz = temp[18], src1.xyz = input[8] MAD temp[19].xyz, src0.xxx, src1.xyz, src0.000 18: src0.w = input[3] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 19: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 20: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 21: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 22: BEGIN_TEX; 23: TEX temp[41].xyz, temp[14].xy__, 2D[7]; 24: TEX temp[6].yw, temp[14].xy__, 2D[3]; 25: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 26: src0.xyz = temp[6], src1.xyz = const[6] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 27: src0.xyz = temp[16], src1.xyz = temp[24], src2.xyz = temp[23] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 28: src0.xyz = temp[5] DP3 temp[25].x, src0.xyz, src0.xyz 29: src0.xyz = temp[41], src1.xyz = temp[25] MAD temp[42].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[26].w, src0.1, src0.1, -src1.x 30: src0.w = temp[26] REPL_ALPHA temp[27].x RSQ, |src0.w| 31: src0.xyz = temp[27] REPL_ALPHA temp[5].z RCP, src0.x 32: src0.xyz = temp[22], src1.xyz = temp[5] DP3_SAT temp[28].x, src0.xyz, src1.xyz 33: src0.xyz = temp[28], src1.xyz = temp[29] MAD temp[30].xyz, src0.xxx, src1.xyz, src0.000 34: src0.xyz = temp[30], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 35: src0.xyz = temp[19], src1.xyz = temp[5] DP3 temp[35].x, src0.xyz, src1.xyz 36: src0.xyz = temp[16], src1.xyz = temp[42], src2.xyz = temp[40] MAD temp[43].xyz, src0.xxx, src1.xyz, src2.xyz 37: src0.xyz = temp[35], src1.xyz = const[5] MAD_SAT temp[36].w, src0.x, src1.y, -src1.z 38: src0.w = temp[36] MAD temp[37].x, src0.w__, src0.w__, src0.000 39: src0.xyz = temp[37], src1.xyz = const[2] MAD temp[38].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[38], src1.xyz = temp[43], src2.xyz = temp[34] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[32], src1.xyz = temp[44] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[33], src1.xyz = const[3], src2.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src2.xyz 43: src0.xyz = temp[46], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 44: src0.xyz = temp[38], src1.xyz = temp[43] MAD temp[47].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[47], src1.xyz = temp[32] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[48], src1.xyz = const[7] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6].xyz, input[6].xy__, 2D[0]; 2: TEX temp[9].yw, input[3].xy__, 2D[2]; 3: TXP temp[5].xyz, input[5].xy_w, 2D[4]; 4: TEX temp[4].x, input[4].xy__, 2D[5]; 5: TEX temp[7].xyz, input[7].xy__, 2D[6]; 6: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[9] MAD temp[9].x, src0.w__, src0.11_, src0.00_ 8: src0.xyz = temp[9], src1.xyz = const[6] MAD temp[9].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[6], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[6].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[10].z, src0.__0, src0.111, src0.000 12: src0.xyz = input[2] DP3 temp[1].y, src0.xyz, src0.xyz 13: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 14: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 15: src0.xyz = input[8] DP3 temp[1].y, src0.xyz, src0.xyz 16: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 17: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[8].xyz, src0.yyy, src1.xyz, src0.000 18: src0.w = input[3] MAD_SAT temp[1].y, src0._w_, src0._1_, src0._0_ 19: src0.w = const[0] MAD temp[11].y, src0._w_, src0.11_, src0.00_ 20: src0.xyz = const[0] MAD temp[11].x, src0.z__, src0.11_, src0.00_ 21: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[11] MAD temp[3].xy, src0.xy_, src1.xy_, src2.xy_ 22: BEGIN_TEX; 23: TEX temp[11].xyz, temp[3].xy__, 2D[7]; 24: TEX temp[3].yw, temp[3].xy__, 2D[3]; 25: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 26: src0.xyz = temp[3], src1.xyz = const[6] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 27: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[9] MAD temp[10].xy, src0.yy_, src1.xy_, src2.xy_ 28: src0.xyz = temp[10] DP3 temp[1].z, src0.xyz, src0.xyz 29: src0.xyz = temp[11], src1.xyz = temp[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.1, src0.1, -src1.z 30: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 31: src0.xyz = temp[1] REPL_ALPHA temp[1].z RCP, src0.z 32: src0.xyz = temp[2], src1.xyz = temp[10], src2.xyz = temp[1] DP3_SAT temp[2].x, src0.xyz, src2.xyz 33: src0.xyz = temp[2], src1.xyz = temp[5] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 34: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 35: src0.xyz = temp[8], src1.xyz = temp[10], src2.xyz = temp[1] DP3 temp[1].z, src0.xyz, src2.xyz 36: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[7] MAD temp[3].xyz, src0.yyy, src1.xyz, src2.xyz 37: src0.xyz = temp[1], src1.xyz = const[5] MAD_SAT temp[0].w, src0.z, src1.y, -src1.z 38: src0.w = temp[0] MAD temp[1].y, src0._w_, src0._w_, src0._0_ 39: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 40: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = temp[6] MAD temp[5].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[2], src1.xyz = temp[5] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[5] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 43: src0.xyz = temp[0], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 44: src0.xyz = temp[4], src1.xyz = temp[3] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[0], src1.xyz = const[7] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ pc=22************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 4 (code_addr: 000803c0) TEX: TEX t6, t6, texture[0] (00008186) TEX t9, t3, texture[2] (00009243) TXP t5, t5, texture[4] (0001a145) TEX t4, t4, texture[5] (0000a904) TEX t7, t7, texture[6] (0000b1c7) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 1: xyz: t0 t0 t0 bias-> t9.x (00a40000) w: t9 t0 t0 bias-> (00000009) xyz: t9.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t9 c6 t0 bias-> t9.xy (01a40989) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz c6.xxx -1.0 op: 000d4280 w: t9.x t9.x t9.x op: 00000000 3: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t0.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 4: xyz: t0 c1 t0 bias-> t6.xyz (03980840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t10.z (02280000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 6: xyz: t2 t0 t0 bias-> t1.y (01040002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 7: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 8: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 9: xyz: t8 t0 t0 bias-> t1.y (01040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 10: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 11: xyz: t1 t8 t0 bias-> t8.xyz (03a00201) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t8.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 12: xyz: t0 t0 t0 bias-> t1.y (01040000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 40050a8c w: t0.x t0.x t0.x op: 00000000 13: xyz: t0 t0 t0 bias-> t11.y (012c0000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 14: xyz: c0 t0 t0 bias-> t11.x (00ac0020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 15: xyz: t3 c0 t11 bias-> t3.xy (018cb803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz t11.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 16, tex_offset: 5, alu_end: 21, tex_end: 1 (code_addr: 00425550) TEX: TEX t11, t3, texture[7] (0000bac3) TEX t3, t3, texture[3] (000098c3) 16: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 17: xyz: t3 c6 t0 bias-> t3.xy (018c0983) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c6.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 18: xyz: t1 t3 t9 bias-> t10.xy (01a890c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t9.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 19: xyz: t10 t0 t0 bias-> t1.z (0204000a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xyz t10.xyz t10.xxx op: 00804000 w: t10.x t10.x t10.x op: 00000000 20: xyz: t11 t1 t0 bias-> t3.xyz (038c004b) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t11.xyz 1.0 -0.5 op: 000d8a80 w: 1.0 1.0 -t1.z op: 00094891 21: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 22: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 23: xyz: t2 t10 t1 bias-> t2.x (00881282) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t1.xyz t2.xxx op: 40804400 w: t2.x t2.x t2.x op: 00000000 24: xyz: t2 t5 t0 bias-> t2.xyz (03880142) w: t0 t0 t0 bias-> (00000000) xyz: t2.xxx t5.xyz 0.0 op: 00050201 w: t2.x t2.x t2.x op: 00000000 25: 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 26: xyz: t8 t10 t1 bias-> t1.z (02041288) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t1.xyz t8.xxx op: 00804400 w: t8.x t8.x t8.x op: 00000000 27: xyz: t1 t3 t7 bias-> t3.xyz (038c70c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t7.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 28: xyz: t1 c5 t0 bias-> (00000941) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xxx t1.xxx t1.xxx op: 00004081 w: t1.z c5.y -c5.z op: 40094202 29: xyz: t32 t0 t0 bias-> t1.y (01040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t0.www 0.0 op: 0005060c w: t32.x t32.x t32.x op: 00000000 30: xyz: t1 c2 t0 bias-> t4.xyz (03900881) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 31: xyz: t4 t3 t6 bias-> t5.xyz (039460c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t6.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 32: xyz: t2 t5 t0 bias-> t5.xyz (03940142) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t5.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 33: xyz: t0 c3 t5 bias-> t0.xyz (038058c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.xyz t5.xyz op: 80020200 NOP w: t0.x t0.x t0.x op: 00000000 34: xyz: t0 c4 t1 sub-> o0.xyz (1c001900) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 35: xyz: t4 t3 t0 bias-> t0.xyz (038000c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 36: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 37: xyz: t0 c7 t0 bias-> (000009c0) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c7.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR[1], LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL CONST[2] DCL CONST[5..6] DCL TEMP[0..13] IMM FLT32 { 0.0000, 0.5000, 1.0000, 2.0000} IMM FLT32 { -32.0000, 16.0000, 0.0000, 2.0000} IMM FLT32 {100000.0000, 0.3500, 2.0000, 4.0000} IMM FLT32 { 2.0000, 4.0000, 8.0000, 16.0000} 0: SUB TEMP[0], IMM[0].yyyy, IN[1] 1: SUB TEMP[1], IMM[0].yyyy, IN[2] 2: ABS TEMP[0], TEMP[0] 3: ABS TEMP[1], TEMP[1] 4: MAX TEMP[0].xy, TEMP[0].xzwy, TEMP[0].ywxz 5: MAX TEMP[0].zw, TEMP[1].zwxz, TEMP[1].xyyw 6: MAD_SAT TEMP[2].yw, TEMP[0].zxwy, IMM[1].xxxx, IMM[1].yyyy 7: MAD_SAT TEMP[2].x, TEMP[0].zxwy, IMM[1].xxxx, IMM[1].yyyy 8: MAD_SAT TEMP[2].z, TEMP[0].zxwy, IMM[1].xxxx, IMM[1].yyyy 9: MUL TEMP[2], TEMP[2], CONST[2] 10: SUB TEMP[3], IMM[0].zzzz, TEMP[2] 11: MOV TEMP[4], IMM[0].xxxx 12: MOV TEMP[5], IN[3] 13: MUL_SAT TEMP[6], TEMP[2], IMM[2].xxxx 14: MUL TEMP[7], IMM[3], TEMP[6] 15: MUL_SAT TEMP[6].x, TEMP[3].xxxx, IMM[2].xxxx 16: MUL TEMP[0].xy, TEMP[6].xxxx, TEMP[5] 17: MUL TEMP[1].xy, TEMP[5], TEMP[7].xxxx 18: MUL TEMP[8].xy, TEMP[5], TEMP[7].yyyy 19: MUL TEMP[9].xy, TEMP[5], TEMP[7].zzzz 20: MUL TEMP[10].xy, TEMP[5], TEMP[7].wwww 21: TEX TEMP[0], TEMP[0], SAMP[0], 2D 22: TEX TEMP[1], TEMP[1], SAMP[1], 2D 23: TEX TEMP[8], TEMP[8], SAMP[2], 2D 24: TEX TEMP[9], TEMP[9], SAMP[3], 2D 25: TEX TEMP[10], TEMP[10], SAMP[4], 2D 26: MOV TEMP[4], TEMP[0] 27: MUL TEMP[4], TEMP[4], TEMP[3].xxxx 28: MAD TEMP[4], TEMP[1], TEMP[2].xxxx, TEMP[4] 29: MUL TEMP[4], TEMP[4], TEMP[3].yyyy 30: MAD TEMP[4], TEMP[8], TEMP[2].yyyy, TEMP[4] 31: MUL TEMP[4], TEMP[4], TEMP[3].zzzz 32: MAD TEMP[4], TEMP[9], TEMP[2].zzzz, TEMP[4] 33: MUL TEMP[4], TEMP[4], TEMP[3].wwww 34: MAD TEMP[4], TEMP[10], TEMP[2].wwww, TEMP[4] 35: TEX TEMP[11], IN[3].zwzz, SAMP[5], 2D 36: MAD TEMP[0], TEMP[11], IMM[3].xxxx, -IMM[0].zzzz 37: TEX TEMP[12], IN[3], SAMP[6], 2D 38: DP4 TEMP[0], TEMP[12], TEMP[0] 39: MAD TEMP[4], TEMP[0], TEMP[4], TEMP[4] 40: LRP TEMP[13], IMM[2].yyyy, CONST[5], IMM[0].zzzz 41: MUL TEMP[4].xyz, TEMP[4], TEMP[13] 42: LRP OUT[0].xyz, IN[0].xxxx, CONST[6], TEMP[4] 43: MOV OUT[0].w, IMM[0].xxxx 44: END Fragment Program: before compilation # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[3]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[3].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[3], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: LRP temp[13], const[9].yyyy, const[5], const[7].zzzz; 41: MUL temp[4].xyz, temp[4], temp[13]; 42: LRP output[0].xyz, input[0].xxxx, const[6], temp[4]; 43: MOV output[0].w, const[7].xxxx; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[3]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[3].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[3], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: LRP temp[13], const[9].yyyy, const[5], const[7].zzzz; 41: MUL temp[4].xyz, temp[4], temp[13]; 42: LRP output[0].xyz, input[0].xxxx, const[6], temp[4]; 43: MOV output[0].w, const[7].xxxx; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[3]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[3].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[3], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: LRP temp[13], const[9].yyyy, const[5], const[7].zzzz; 41: MUL temp[4].xyz, temp[4], temp[13]; 42: LRP output[0].xyz, input[0].xxxx, const[6], temp[4]; 43: MOV output[0].w, const[7].xxxx; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[3]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[3].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[3], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: LRP temp[13], const[9].yyyy, const[5], const[7].zzzz; 41: MUL temp[4].xyz, temp[4], temp[13]; 42: LRP output[0].xyz, input[0].xxxx, const[6], temp[4]; 43: MOV output[0].w, const[7].xxxx; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[3]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[3].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[3], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: LRP temp[13], const[9].yyyy, const[5], const[7].zzzz; 41: MUL temp[4].xyz, temp[4], temp[13]; 42: LRP output[0].xyz, input[0].xxxx, const[6], temp[4]; 43: MOV output[0].w, const[7].xxxx; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[3]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[3].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[3], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: LRP temp[13], const[9].yyyy, const[5], const[7].zzzz; 41: MUL temp[4].xyz, temp[4], temp[13]; 42: LRP_SAT output[0].xyz, input[0].xxxx, const[6], temp[4]; 43: MOV_SAT output[0].w, const[7].xxxx; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[3]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[3].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[3], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: LRP temp[13], const[9].yyyy, const[5], const[7].zzzz; 41: MUL temp[4].xyz, temp[4], temp[13]; 42: LRP_SAT output[0].xyz, input[0].xxxx, const[6], temp[4]; 43: MOV_SAT output[0].w, const[7].xxxx; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0], const[7].yyyy, -input[1]; 1: ADD temp[1], const[7].yyyy, -input[2]; 2: MOV temp[0], |temp[0]|; 3: MOV temp[1], |temp[1]|; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: ADD temp[3], const[7].zzzz, -temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[3]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[3].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[3], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: ADD temp[13], const[5], -const[7].zzzz; 41: MAD temp[13], const[9].yyyy, temp[13], const[7].zzzz; 42: MUL temp[4].xyz, temp[4], temp[13]; 43: ADD temp[14].xyz, const[6], -temp[4]; 44: MAD_SAT output[0].xyz, input[0].xxxx, temp[14], temp[4]; 45: MOV_SAT output[0].w, const[7].xxxx; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0], const[7].yyyy, -input[1]; 1: ADD temp[1], const[7].yyyy, -input[2]; 2: MOV temp[0], |temp[0]|; 3: MOV temp[1], |temp[1]|; 4: MAX temp[0].xy, temp[0].xz__, temp[0].yw__; 5: MAX temp[0].zw, temp[1].__xz, temp[1].__yw; 6: MAD_SAT temp[2].yw, temp[0]._x_y, const[8]._x_x, const[8]._y_y; 7: MAD_SAT temp[2].x, temp[0].z___, const[8].x___, const[8].y___; 8: MAD_SAT temp[2].z, temp[0].__w_, const[8].__x_, const[8].__y_; 9: MUL temp[2], temp[2], const[2]; 10: ADD temp[3], const[7].zzzz, -temp[2]; 11: MOV temp[5].xy, input[3].xy__; 12: MUL_SAT temp[6], temp[2], const[9].xxxx; 13: MUL temp[7], const[10], temp[6]; 14: MUL_SAT temp[6].x, temp[3].x___, const[9].x___; 15: MUL temp[0].xy, temp[6].xx__, temp[5].xy__; 16: MUL temp[1].xy, temp[5].xy__, temp[7].xx__; 17: MUL temp[8].xy, temp[5].xy__, temp[7].yy__; 18: MUL temp[9].xy, temp[5].xy__, temp[7].zz__; 19: MUL temp[10].xy, temp[5].xy__, temp[7].ww__; 20: TEX temp[0].xyz, temp[0].xy__, 2D[0]; 21: TEX temp[1].xyz, temp[1].xy__, 2D[1]; 22: TEX temp[8].xyz, temp[8].xy__, 2D[2]; 23: TEX temp[9].xyz, temp[9].xy__, 2D[3]; 24: TEX temp[10].xyz, temp[10].xy__, 2D[4]; 25: MOV temp[4].xyz, temp[0].xyz_; 26: MUL temp[4].xyz, temp[4].xyz_, temp[3].xxx_; 27: MAD temp[4].xyz, temp[1].xyz_, temp[2].xxx_, temp[4].xyz_; 28: MUL temp[4].xyz, temp[4].xyz_, temp[3].yyy_; 29: MAD temp[4].xyz, temp[8].xyz_, temp[2].yyy_, temp[4].xyz_; 30: MUL temp[4].xyz, temp[4].xyz_, temp[3].zzz_; 31: MAD temp[4].xyz, temp[9].xyz_, temp[2].zzz_, temp[4].xyz_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[3].www_; 33: MAD temp[4].xyz, temp[10].xyz_, temp[2].www_, temp[4].xyz_; 34: TEX temp[11], input[3].zw__, 2D[5]; 35: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 36: TEX temp[12], input[3].xy__, 2D[6]; 37: DP4 temp[0].xyz, temp[12], temp[0]; 38: MAD temp[4].xyz, temp[0].xyz_, temp[4].xyz_, temp[4].xyz_; 39: ADD temp[13].xyz, const[5].xyz_, -const[7].zzz_; 40: MAD temp[13].xyz, const[9].yyy_, temp[13].xyz_, const[7].zzz_; 41: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 42: ADD temp[14].xyz, const[6].xyz_, -temp[4].xyz_; 43: MAD_SAT output[0].xyz, input[0].xxx_, temp[14].xyz_, temp[4].xyz_; 44: MOV_SAT output[0].w, const[7].___x; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0], const[7].yyyy, -input[1]; 1: ADD temp[1], const[7].yyyy, -input[2]; 2: MOV temp[0], |temp[0]|; 3: MOV temp[1], |temp[1]|; 4: MAX temp[0].xy, temp[0].xz__, temp[0].yw__; 5: MAX temp[0].zw, temp[1].__xz, temp[1].__yw; 6: MAD_SAT temp[2].yw, temp[0]._x_y, const[8]._x_x, const[8]._y_y; 7: MAD_SAT temp[2].x, temp[0].z___, const[8].x___, const[8].y___; 8: MAD_SAT temp[2].z, temp[0].__w_, const[8].__x_, const[8].__y_; 9: MUL temp[2], temp[2], const[2]; 10: ADD temp[3], const[7].zzzz, -temp[2]; 11: MOV temp[5].xy, input[3].xy__; 12: MUL_SAT temp[6], temp[2], const[9].xxxx; 13: MUL temp[7], const[10], temp[6]; 14: MUL_SAT temp[6].x, temp[3].x___, const[9].x___; 15: MUL temp[0].xy, temp[6].xx__, temp[5].xy__; 16: MUL temp[1].xy, temp[5].xy__, temp[7].xx__; 17: MUL temp[8].xy, temp[5].xy__, temp[7].yy__; 18: MUL temp[9].xy, temp[5].xy__, temp[7].zz__; 19: MUL temp[10].xy, temp[5].xy__, temp[7].ww__; 20: TEX temp[0].xyz, temp[0].xy__, 2D[0]; 21: TEX temp[1].xyz, temp[1].xy__, 2D[1]; 22: TEX temp[8].xyz, temp[8].xy__, 2D[2]; 23: TEX temp[9].xyz, temp[9].xy__, 2D[3]; 24: TEX temp[10].xyz, temp[10].xy__, 2D[4]; 25: MOV temp[4].xyz, temp[0].xyz_; 26: MUL temp[4].xyz, temp[4].xyz_, temp[3].xxx_; 27: MAD temp[4].xyz, temp[1].xyz_, temp[2].xxx_, temp[4].xyz_; 28: MUL temp[4].xyz, temp[4].xyz_, temp[3].yyy_; 29: MAD temp[4].xyz, temp[8].xyz_, temp[2].yyy_, temp[4].xyz_; 30: MUL temp[4].xyz, temp[4].xyz_, temp[3].zzz_; 31: MAD temp[4].xyz, temp[9].xyz_, temp[2].zzz_, temp[4].xyz_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[3].www_; 33: MAD temp[4].xyz, temp[10].xyz_, temp[2].www_, temp[4].xyz_; 34: TEX temp[11], input[3].zw__, 2D[5]; 35: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 36: TEX temp[12], input[3].xy__, 2D[6]; 37: DP4 temp[0].xyz, temp[12], temp[0]; 38: MAD temp[4].xyz, temp[0].xyz_, temp[4].xyz_, temp[4].xyz_; 39: ADD temp[13].xyz, const[5].xyz_, -const[7].zzz_; 40: MAD temp[13].xyz, const[9].yyy_, temp[13].xyz_, const[7].zzz_; 41: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 42: ADD temp[14].xyz, const[6].xyz_, -temp[4].xyz_; 43: MAD_SAT output[0].xyz, input[0].xxx_, temp[14].xyz_, temp[4].xyz_; 44: MOV_SAT output[0].w, const[7].___x; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0], none.HHHH, -input[1]; 1: ADD temp[1], none.HHHH, -input[2]; 2: MAX temp[0].xy, |temp[0].xz__|, |temp[0].yw__|; 3: MAX temp[0].zw, |temp[1].__xz|, |temp[1].__yw|; 4: MAD_SAT temp[2].yw, temp[0]._x_y, const[8]._x_x, const[8]._y_y; 5: MAD_SAT temp[2].x, temp[0].z___, const[8].x___, const[8].y___; 6: MAD_SAT temp[2].z, temp[0].__w_, const[8].__x_, const[8].__y_; 7: MUL temp[2], temp[2], const[2]; 8: ADD temp[3], none.1111, -temp[2]; 9: MUL_SAT temp[6], temp[2], const[9].xxxx; 10: MUL temp[7], const[10], temp[6]; 11: MUL_SAT temp[6].x, temp[3].x___, const[9].x___; 12: MUL temp[0].xy, temp[6].xx__, input[3].xy__; 13: MUL temp[1].xy, input[3].xy__, temp[7].xx__; 14: MUL temp[8].xy, input[3].xy__, temp[7].yy__; 15: MUL temp[9].xy, input[3].xy__, temp[7].zz__; 16: MUL temp[10].xy, input[3].xy__, temp[7].ww__; 17: TEX temp[0].xyz, temp[0].xy__, 2D[0]; 18: TEX temp[1].xyz, temp[1].xy__, 2D[1]; 19: TEX temp[8].xyz, temp[8].xy__, 2D[2]; 20: TEX temp[9].xyz, temp[9].xy__, 2D[3]; 21: TEX temp[10].xyz, temp[10].xy__, 2D[4]; 22: MUL temp[4].xyz, temp[0].xyz_, temp[3].xxx_; 23: MAD temp[4].xyz, temp[1].xyz_, temp[2].xxx_, temp[4].xyz_; 24: MUL temp[4].xyz, temp[4].xyz_, temp[3].yyy_; 25: MAD temp[4].xyz, temp[8].xyz_, temp[2].yyy_, temp[4].xyz_; 26: MUL temp[4].xyz, temp[4].xyz_, temp[3].zzz_; 27: MAD temp[4].xyz, temp[9].xyz_, temp[2].zzz_, temp[4].xyz_; 28: MUL temp[4].xyz, temp[4].xyz_, temp[3].www_; 29: MAD temp[4].xyz, temp[10].xyz_, temp[2].www_, temp[4].xyz_; 30: TEX temp[11], input[3].zw__, 2D[5]; 31: MAD temp[0], temp[11], const[10].xxxx, -none.1111; 32: TEX temp[12], input[3].xy__, 2D[6]; 33: DP4 temp[0].xyz, temp[12], temp[0]; 34: MAD temp[4].xyz, temp[0].xyz_, temp[4].xyz_, temp[4].xyz_; 35: ADD temp[13].xyz, const[5].xyz_, -none.111_; 36: MAD temp[13].xyz, const[9].yyy_, temp[13].xyz_, none.111_; 37: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 38: MAD_SAT output[0].xyz, input[0].xxx_, (const[6] - temp[4]).xyz_, temp[4].xyz_; 39: MOV_SAT output[0].w, none.___0; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[0], none.HHHH, -input[1]; 1: ADD temp[1], none.HHHH, -input[2]; 2: MOV temp[5].x, |temp[0].x___|; 3: MOV temp[5].y, |temp[0]._z__|; 4: MOV temp[14].x, |temp[0].y___|; 5: MOV temp[14].y, |temp[0]._w__|; 6: MAX temp[0].xy, temp[5].xy__, temp[14].xy__; 7: MAX temp[0].zw, |temp[1].__xz|, |temp[1].__yw|; 8: MAD_SAT temp[2].yw, temp[0]._x_y, const[8]._x_x, const[8]._y_y; 9: MAD_SAT temp[2].x, temp[0].z___, const[8].x___, const[8].y___; 10: MAD_SAT temp[2].z, temp[0].__w_, const[8].__x_, const[8].__y_; 11: MUL temp[2], temp[2], const[2]; 12: ADD temp[3], none.1111, -temp[2]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].x___, const[9].x___; 16: MUL temp[0].xy, temp[6].xx__, input[3].xy__; 17: MUL temp[1].xy, input[3].xy__, temp[7].xx__; 18: MUL temp[8].xy, input[3].xy__, temp[7].yy__; 19: MUL temp[9].xy, input[3].xy__, temp[7].zz__; 20: MUL temp[10].xy, input[3].xy__, temp[7].ww__; 21: TEX temp[0].xyz, temp[0].xy__, 2D[0]; 22: TEX temp[1].xyz, temp[1].xy__, 2D[1]; 23: TEX temp[8].xyz, temp[8].xy__, 2D[2]; 24: TEX temp[9].xyz, temp[9].xy__, 2D[3]; 25: TEX temp[10].xyz, temp[10].xy__, 2D[4]; 26: MUL temp[4].xyz, temp[0].xyz_, temp[3].xxx_; 27: MAD temp[4].xyz, temp[1].xyz_, temp[2].xxx_, temp[4].xyz_; 28: MUL temp[4].xyz, temp[4].xyz_, temp[3].yyy_; 29: MAD temp[4].xyz, temp[8].xyz_, temp[2].yyy_, temp[4].xyz_; 30: MUL temp[4].xyz, temp[4].xyz_, temp[3].zzz_; 31: MAD temp[4].xyz, temp[9].xyz_, temp[2].zzz_, temp[4].xyz_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[3].www_; 33: MAD temp[4].xyz, temp[10].xyz_, temp[2].www_, temp[4].xyz_; 34: MOV temp[15].x, input[3].z___; 35: MOV temp[15].y, input[3]._w__; 36: TEX temp[11], temp[15].xy__, 2D[5]; 37: MAD temp[0], temp[11], const[10].xxxx, -none.1111; 38: TEX temp[12], input[3].xy__, 2D[6]; 39: DP4 temp[0].xyz, temp[12], temp[0]; 40: MAD temp[4].xyz, temp[0].xyz_, temp[4].xyz_, temp[4].xyz_; 41: ADD temp[13].xyz, const[5].xyz_, -none.111_; 42: MAD temp[13].xyz, const[9].yyy_, temp[13].xyz_, none.111_; 43: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 44: MAD_SAT output[0].xyz, input[0].xxx_, (const[6] - temp[4]).xyz_, temp[4].xyz_; 45: MOV_SAT output[0].w, none.___0; CONST[3] = { -32.0000 16.0000 0.0000 2.0000 } CONST[4] = { 100000.0000 0.3500 2.0000 4.0000 } CONST[5] = { 2.0000 4.0000 8.0000 16.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[0], none.HHHH, -input[1]; 1: ADD temp[1], none.HHHH, -input[2]; 2: MOV temp[5].x, |temp[0].x___|; 3: MOV temp[5].y, |temp[0]._z__|; 4: MOV temp[14].x, |temp[0].y___|; 5: MOV temp[14].y, |temp[0]._w__|; 6: MAX temp[0].xy, temp[5].xy__, temp[14].xy__; 7: MAX temp[0].zw, |temp[1].__xz|, |temp[1].__yw|; 8: MAD_SAT temp[2].yw, temp[0]._x_y, const[3]._x_x, const[3]._y_y; 9: MAD_SAT temp[2].x, temp[0].z___, const[3].x___, const[3].y___; 10: MAD_SAT temp[2].z, temp[0].__w_, const[3].__x_, const[3].__y_; 11: MUL temp[2], temp[2], const[0]; 12: ADD temp[3], none.1111, -temp[2]; 13: MUL_SAT temp[6], temp[2], const[4].xxxx; 14: MUL temp[7], const[5], temp[6]; 15: MUL_SAT temp[6].x, temp[3].x___, const[4].x___; 16: MUL temp[0].xy, temp[6].xx__, input[3].xy__; 17: MUL temp[1].xy, input[3].xy__, temp[7].xx__; 18: MUL temp[8].xy, input[3].xy__, temp[7].yy__; 19: MUL temp[9].xy, input[3].xy__, temp[7].zz__; 20: MUL temp[10].xy, input[3].xy__, temp[7].ww__; 21: TEX temp[0].xyz, temp[0].xy__, 2D[0]; 22: TEX temp[1].xyz, temp[1].xy__, 2D[1]; 23: TEX temp[8].xyz, temp[8].xy__, 2D[2]; 24: TEX temp[9].xyz, temp[9].xy__, 2D[3]; 25: TEX temp[10].xyz, temp[10].xy__, 2D[4]; 26: MUL temp[4].xyz, temp[0].xyz_, temp[3].xxx_; 27: MAD temp[4].xyz, temp[1].xyz_, temp[2].xxx_, temp[4].xyz_; 28: MUL temp[4].xyz, temp[4].xyz_, temp[3].yyy_; 29: MAD temp[4].xyz, temp[8].xyz_, temp[2].yyy_, temp[4].xyz_; 30: MUL temp[4].xyz, temp[4].xyz_, temp[3].zzz_; 31: MAD temp[4].xyz, temp[9].xyz_, temp[2].zzz_, temp[4].xyz_; 32: MUL temp[4].xyz, temp[4].xyz_, temp[3].www_; 33: MAD temp[4].xyz, temp[10].xyz_, temp[2].www_, temp[4].xyz_; 34: MOV temp[15].x, input[3].z___; 35: MOV temp[15].y, input[3]._w__; 36: TEX temp[11], temp[15].xy__, 2D[5]; 37: MAD temp[0], temp[11], const[5].xxxx, -none.1111; 38: TEX temp[12], input[3].xy__, 2D[6]; 39: DP4 temp[0].xyz, temp[12], temp[0]; 40: MAD temp[4].xyz, temp[0].xyz_, temp[4].xyz_, temp[4].xyz_; 41: ADD temp[13].xyz, const[1].xyz_, -none.111_; 42: MAD temp[13].xyz, const[4].yyy_, temp[13].xyz_, none.111_; 43: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 44: MAD_SAT output[0].xyz, input[0].xxx_, (const[2] - temp[4]).xyz_, temp[4].xyz_; 45: MOV_SAT output[0].w, none.___0; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[16], none.HHHH, -input[1]; 1: ADD temp[17], none.HHHH, -input[2]; 2: MOV temp[5].x, |temp[16].x___|; 3: MOV temp[5].y, |temp[16]._z__|; 4: MOV temp[14].x, |temp[16].y___|; 5: MOV temp[14].y, |temp[16]._w__|; 6: MAX temp[18].xy, temp[5].xy__, temp[14].xy__; 7: MAX temp[19].zw, |temp[17].__xz|, |temp[17].__yw|; 8: MAD_SAT temp[2].yw, temp[18]._x_y, const[3]._x_x, const[3]._y_y; 9: MAD_SAT temp[2].x, temp[19].z___, const[3].x___, const[3].y___; 10: MAD_SAT temp[2].z, temp[19].__w_, const[3].__x_, const[3].__y_; 11: MUL temp[20], temp[2], const[0]; 12: ADD temp[21], none.1111, -temp[20]; 13: MUL_SAT temp[22], temp[20], const[4].xxxx; 14: MUL temp[23], const[5], temp[22]; 15: MUL_SAT temp[24].x, temp[21].x___, const[4].x___; 16: MUL temp[25].xy, temp[24].xx__, input[3].xy__; 17: MUL temp[26].xy, input[3].xy__, temp[23].xx__; 18: MUL temp[27].xy, input[3].xy__, temp[23].yy__; 19: MUL temp[28].xy, input[3].xy__, temp[23].zz__; 20: MUL temp[29].xy, input[3].xy__, temp[23].ww__; 21: TEX temp[30].xyz, temp[25].xy__, 2D[0]; 22: TEX temp[31].xyz, temp[26].xy__, 2D[1]; 23: TEX temp[32].xyz, temp[27].xy__, 2D[2]; 24: TEX temp[33].xyz, temp[28].xy__, 2D[3]; 25: TEX temp[34].xyz, temp[29].xy__, 2D[4]; 26: MUL temp[35].xyz, temp[30].xyz_, temp[21].xxx_; 27: MAD temp[36].xyz, temp[31].xyz_, temp[20].xxx_, temp[35].xyz_; 28: MUL temp[37].xyz, temp[36].xyz_, temp[21].yyy_; 29: MAD temp[38].xyz, temp[32].xyz_, temp[20].yyy_, temp[37].xyz_; 30: MUL temp[39].xyz, temp[38].xyz_, temp[21].zzz_; 31: MAD temp[40].xyz, temp[33].xyz_, temp[20].zzz_, temp[39].xyz_; 32: MUL temp[41].xyz, temp[40].xyz_, temp[21].www_; 33: MAD temp[42].xyz, temp[34].xyz_, temp[20].www_, temp[41].xyz_; 34: MOV temp[15].x, input[3].z___; 35: MOV temp[15].y, input[3]._w__; 36: TEX temp[43], temp[15].xy__, 2D[5]; 37: MAD temp[44], temp[43], const[5].xxxx, -none.1111; 38: TEX temp[45], input[3].xy__, 2D[6]; 39: DP4 temp[46].xyz, temp[45], temp[44]; 40: MAD temp[47].xyz, temp[46].xyz_, temp[42].xyz_, temp[42].xyz_; 41: ADD temp[48].xyz, const[1].xyz_, -none.111_; 42: MAD temp[49].xyz, const[4].yyy_, temp[48].xyz_, none.111_; 43: MUL temp[50].xyz, temp[47].xyz_, temp[49].xyz_; 44: MAD_SAT output[0].xyz, input[0].xxx_, (const[2] - temp[50]).xyz_, temp[50].xyz_; 45: MOV_SAT output[0].w, none.___0; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1] MAD temp[16].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[16].w, src0.H, src0.1, -src0.w 1: src0.xyz = input[2], src0.w = input[2] MAD temp[17].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[17].w, src0.H, src0.1, -src0.w 2: src0.xyz = temp[16] MAD temp[5].x, |src0.x__|, src0.111, src0.000 3: src0.xyz = temp[16] MAD temp[5].y, |src0._z_|, src0.111, src0.000 4: src0.xyz = temp[16] MAD temp[14].x, |src0.y__|, src0.111, src0.000 5: src0.w = temp[16] MAD temp[14].y, |src0._w_|, src0.111, src0.000 6: src0.xyz = temp[5], src1.xyz = temp[14] MAX temp[18].xy, src0.xy_, src1.xy_ 7: src0.xyz = temp[17], src0.w = temp[17] MAX temp[19].z, |src0.__x|, |src0.__y| MAX temp[19].w, |src0.z|, |src0.w| 8: src0.xyz = temp[18], src1.xyz = const[3] MAD_SAT temp[2].y, src0._x_, src1._x_, src1._y_ MAD_SAT temp[2].w, src0.y, src1.x, src1.y 9: src0.xyz = temp[19], src1.xyz = const[3] MAD_SAT temp[2].x, src0.z__, src1.x__, src1.y__ 10: src0.xyz = const[3], src0.w = temp[19] MAD_SAT temp[2].z, src0.__w, src0.__x, src0.__y 11: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = const[0], src1.w = const[0] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[20].w, src0.w, src1.w, src0.0 12: src0.xyz = temp[20], src0.w = temp[20] MAD temp[21].xyz, src0.111, src0.111, -src0.xyz MAD temp[21].w, src0.1, src0.1, -src0.w 13: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = const[4] MAD_SAT temp[22].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[22].w, src0.w, src1.x, src0.0 14: src0.xyz = const[5], src0.w = const[5], src1.xyz = temp[22], src1.w = temp[22] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[23].w, src0.w, src1.w, src0.0 15: src0.xyz = temp[21], src1.xyz = const[4] MAD_SAT temp[24].x, src0.x__, src1.x__, src0.000 16: src0.xyz = temp[24], src1.xyz = input[3] MAD temp[25].xy, src0.xx_, src1.xy_, src0.000 17: src0.xyz = input[3], src1.xyz = temp[23] MAD temp[26].xy, src0.xy_, src1.xx_, src0.000 18: src0.xyz = input[3], src1.xyz = temp[23] MAD temp[27].xy, src0.xy_, src1.yy_, src0.000 19: src0.xyz = input[3], src1.xyz = temp[23] MAD temp[28].xy, src0.xy_, src1.zz_, src0.000 20: src0.xyz = input[3], src0.w = temp[23] MAD temp[29].xy, src0.xy_, src0.ww_, src0.000 21: TEX temp[30].xyz, temp[25].xy__, 2D[0]; 22: TEX temp[31].xyz, temp[26].xy__, 2D[1]; 23: TEX temp[32].xyz, temp[27].xy__, 2D[2]; 24: TEX temp[33].xyz, temp[28].xy__, 2D[3]; 25: TEX temp[34].xyz, temp[29].xy__, 2D[4]; 26: src0.xyz = temp[30], src1.xyz = temp[21] MAD temp[35].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = temp[31], src1.xyz = temp[20], src2.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src1.xxx, src2.xyz 28: src0.xyz = temp[36], src1.xyz = temp[21] MAD temp[37].xyz, src0.xyz, src1.yyy, src0.000 29: src0.xyz = temp[32], src1.xyz = temp[20], src2.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src1.yyy, src2.xyz 30: src0.xyz = temp[38], src1.xyz = temp[21] MAD temp[39].xyz, src0.xyz, src1.zzz, src0.000 31: src0.xyz = temp[33], src1.xyz = temp[20], src2.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src1.zzz, src2.xyz 32: src0.xyz = temp[40], src0.w = temp[21] MAD temp[41].xyz, src0.xyz, src0.www, src0.000 33: src0.xyz = temp[34], src0.w = temp[20], src1.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src0.www, src1.xyz 34: src0.xyz = input[3] MAD temp[15].x, src0.z__, src0.111, src0.000 35: src0.w = input[3] MAD temp[15].y, src0._w_, src0.111, src0.000 36: TEX temp[43], temp[15].xy__, 2D[5]; 37: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = const[5] MAD temp[44].xyz, src0.xyz, src1.xxx, -src0.111 MAD temp[44].w, src0.w, src1.x, -src0.1 38: TEX temp[45], input[3].xy__, 2D[6]; 39: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[46].xyz, src0.xyz, src1.xyz DP4, src0.w, src1.w 40: src0.xyz = temp[46], src1.xyz = temp[42] MAD temp[47].xyz, src0.xyz, src1.xyz, src1.xyz 41: src0.xyz = const[1] MAD temp[48].xyz, src0.xyz, src0.111, -src0.111 42: src0.xyz = const[4], src1.xyz = temp[48] MAD temp[49].xyz, src0.yyy, src1.xyz, src0.111 43: src0.xyz = temp[47], src1.xyz = temp[49] MAD temp[50].xyz, src0.xyz, src1.xyz, src0.000 44: src0.xyz = temp[50], src1.xyz = const[2], src2.xyz = input[0], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 45: MAD_SAT color[0].w, src0.0, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[45], input[3].xy__, 2D[6]; 2: src0.xyz = input[2], src0.w = input[2] MAD temp[17].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[17].w, src0.H, src0.1, -src0.w 3: src0.xyz = temp[17], src0.w = temp[17] MAX temp[19].z, |src0.__x|, |src0.__y| MAX temp[19].w, |src0.z|, |src0.w| 4: src0.xyz = input[1], src0.w = input[1] MAD temp[16].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[16].w, src0.H, src0.1, -src0.w 5: src0.w = temp[16] MAD temp[14].y, |src0._w_|, src0.111, src0.000 MAD_SAT color[0].w, src0.0, src0.1, src0.0 6: src0.xyz = temp[16] MAD temp[5].y, |src0._z_|, src0.111, src0.000 7: src0.xyz = temp[16] MAD temp[14].x, |src0.y__|, src0.111, src0.000 8: src0.xyz = temp[16] MAD temp[5].x, |src0.x__|, src0.111, src0.000 9: src0.xyz = temp[5], src1.xyz = temp[14] MAX temp[18].xy, src0.xy_, src1.xy_ 10: src0.xyz = temp[18], src1.xyz = const[3] MAD_SAT temp[2].y, src0._x_, src1._x_, src1._y_ MAD_SAT temp[2].w, src0.y, src1.x, src1.y 11: src0.xyz = const[3], src0.w = temp[19] MAD_SAT temp[2].z, src0.__w, src0.__x, src0.__y 12: src0.xyz = temp[19], src1.xyz = const[3] MAD_SAT temp[2].x, src0.z__, src1.x__, src1.y__ 13: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = const[0], src1.w = const[0] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[20].w, src0.w, src1.w, src0.0 14: src0.xyz = temp[20], src0.w = temp[20] MAD temp[21].xyz, src0.111, src0.111, -src0.xyz MAD temp[21].w, src0.1, src0.1, -src0.w 15: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = const[4] MAD_SAT temp[22].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[22].w, src0.w, src1.x, src0.0 16: src0.xyz = const[5], src0.w = const[5], src1.xyz = temp[22], src1.w = temp[22] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[23].w, src0.w, src1.w, src0.0 17: src0.xyz = input[3], src0.w = temp[23] MAD temp[29].xy, src0.xy_, src0.ww_, src0.000 18: src0.xyz = input[3], src1.xyz = temp[23] MAD temp[28].xy, src0.xy_, src1.zz_, src0.000 19: src0.xyz = input[3], src1.xyz = temp[23] MAD temp[27].xy, src0.xy_, src1.yy_, src0.000 20: src0.xyz = input[3], src1.xyz = temp[23] MAD temp[26].xy, src0.xy_, src1.xx_, src0.000 21: src0.xyz = temp[21], src1.xyz = const[4] MAD_SAT temp[24].x, src0.x__, src1.x__, src0.000 22: src0.xyz = temp[24], src1.xyz = input[3] MAD temp[25].xy, src0.xx_, src1.xy_, src0.000 23: src0.xyz = const[1] MAD temp[48].xyz, src0.xyz, src0.111, -src0.111 24: src0.xyz = const[4], src1.xyz = temp[48] MAD temp[49].xyz, src0.yyy, src1.xyz, src0.111 25: src0.w = input[3] MAD temp[15].y, src0._w_, src0.111, src0.000 26: src0.xyz = input[3] MAD temp[15].x, src0.z__, src0.111, src0.000 27: BEGIN_TEX; 28: TEX temp[34].xyz, temp[29].xy__, 2D[4]; 29: TEX temp[33].xyz, temp[28].xy__, 2D[3]; 30: TEX temp[32].xyz, temp[27].xy__, 2D[2]; 31: TEX temp[31].xyz, temp[26].xy__, 2D[1]; 32: TEX temp[30].xyz, temp[25].xy__, 2D[0]; 33: TEX temp[43], temp[15].xy__, 2D[5]; 34: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = const[5] MAD temp[44].xyz, src0.xyz, src1.xxx, -src0.111 MAD temp[44].w, src0.w, src1.x, -src0.1 35: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[46].xyz, src0.xyz, src1.xyz DP4, src0.w, src1.w 36: src0.xyz = temp[30], src1.xyz = temp[21] MAD temp[35].xyz, src0.xyz, src1.xxx, src0.000 37: src0.xyz = temp[31], src1.xyz = temp[20], src2.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src1.xxx, src2.xyz 38: src0.xyz = temp[36], src1.xyz = temp[21] MAD temp[37].xyz, src0.xyz, src1.yyy, src0.000 39: src0.xyz = temp[32], src1.xyz = temp[20], src2.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src1.yyy, src2.xyz 40: src0.xyz = temp[38], src1.xyz = temp[21] MAD temp[39].xyz, src0.xyz, src1.zzz, src0.000 41: src0.xyz = temp[33], src1.xyz = temp[20], src2.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src1.zzz, src2.xyz 42: src0.xyz = temp[40], src0.w = temp[21] MAD temp[41].xyz, src0.xyz, src0.www, src0.000 43: src0.xyz = temp[34], src0.w = temp[20], src1.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src0.www, src1.xyz 44: src0.xyz = temp[46], src1.xyz = temp[42] MAD temp[47].xyz, src0.xyz, src1.xyz, src1.xyz 45: src0.xyz = temp[47], src1.xyz = temp[49] MAD temp[50].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[50], src1.xyz = const[2], src2.xyz = input[0], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[45], input[3].xy__, 2D[6]; 2: src0.xyz = input[2], src0.w = input[2] MAD temp[17].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[17].w, src0.H, src0.1, -src0.w 3: src0.xyz = temp[17], src0.w = temp[17] MAX temp[19].z, |src0.__x|, |src0.__y| MAX temp[19].w, |src0.z|, |src0.w| 4: src0.xyz = input[1], src0.w = input[1] MAD temp[16].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[16].w, src0.H, src0.1, -src0.w 5: src0.w = temp[16] MAD temp[14].y, |src0._w_|, src0.111, src0.000 MAD_SAT color[0].w, src0.0, src0.1, src0.0 6: src0.xyz = temp[16] MAD temp[5].y, |src0._z_|, src0.111, src0.000 7: src0.xyz = temp[16] MAD temp[14].x, |src0.y__|, src0.111, src0.000 8: src0.xyz = temp[16] MAD temp[5].x, |src0.x__|, src0.111, src0.000 9: src0.xyz = temp[5], src1.xyz = temp[14] MAX temp[18].xy, src0.xy_, src1.xy_ 10: src0.xyz = temp[18], src1.xyz = const[3] MAD_SAT temp[2].y, src0._x_, src1._x_, src1._y_ MAD_SAT temp[2].w, src0.y, src1.x, src1.y 11: src0.xyz = const[3], src0.w = temp[19] MAD_SAT temp[2].z, src0.__w, src0.__x, src0.__y 12: src0.xyz = temp[19], src1.xyz = const[3] MAD_SAT temp[2].x, src0.z__, src1.x__, src1.y__ 13: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = const[0], src1.w = const[0] MAD temp[20].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[20].w, src0.w, src1.w, src0.0 14: src0.xyz = temp[20], src0.w = temp[20] MAD temp[21].xyz, src0.111, src0.111, -src0.xyz MAD temp[21].w, src0.1, src0.1, -src0.w 15: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = const[4] MAD_SAT temp[22].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[22].w, src0.w, src1.x, src0.0 16: src0.xyz = const[5], src0.w = const[5], src1.xyz = temp[22], src1.w = temp[22] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[23].w, src0.w, src1.w, src0.0 17: src0.xyz = input[3], src0.w = temp[23] MAD temp[29].xy, src0.xy_, src0.ww_, src0.000 18: src0.xyz = input[3], src1.xyz = temp[23] MAD temp[28].xy, src0.xy_, src1.zz_, src0.000 19: src0.xyz = input[3], src1.xyz = temp[23] MAD temp[27].xy, src0.xy_, src1.yy_, src0.000 20: src0.xyz = input[3], src1.xyz = temp[23] MAD temp[26].xy, src0.xy_, src1.xx_, src0.000 21: src0.xyz = temp[21], src1.xyz = const[4] MAD_SAT temp[24].x, src0.x__, src1.x__, src0.000 22: src0.xyz = temp[24], src1.xyz = input[3] MAD temp[25].xy, src0.xx_, src1.xy_, src0.000 23: src0.xyz = const[1] MAD temp[48].xyz, src0.xyz, src0.111, -src0.111 24: src0.xyz = const[4], src1.xyz = temp[48] MAD temp[49].xyz, src0.yyy, src1.xyz, src0.111 25: src0.w = input[3] MAD temp[15].y, src0._w_, src0.111, src0.000 26: src0.xyz = input[3] MAD temp[15].x, src0.z__, src0.111, src0.000 27: BEGIN_TEX; 28: TEX temp[34].xyz, temp[29].xy__, 2D[4]; 29: TEX temp[33].xyz, temp[28].xy__, 2D[3]; 30: TEX temp[32].xyz, temp[27].xy__, 2D[2]; 31: TEX temp[31].xyz, temp[26].xy__, 2D[1]; 32: TEX temp[30].xyz, temp[25].xy__, 2D[0]; 33: TEX temp[43], temp[15].xy__, 2D[5]; 34: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = const[5] MAD temp[44].xyz, src0.xyz, src1.xxx, -src0.111 MAD temp[44].w, src0.w, src1.x, -src0.1 35: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[46].xyz, src0.xyz, src1.xyz DP4, src0.w, src1.w 36: src0.xyz = temp[30], src1.xyz = temp[21] MAD temp[35].xyz, src0.xyz, src1.xxx, src0.000 37: src0.xyz = temp[31], src1.xyz = temp[20], src2.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src1.xxx, src2.xyz 38: src0.xyz = temp[36], src1.xyz = temp[21] MAD temp[37].xyz, src0.xyz, src1.yyy, src0.000 39: src0.xyz = temp[32], src1.xyz = temp[20], src2.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src1.yyy, src2.xyz 40: src0.xyz = temp[38], src1.xyz = temp[21] MAD temp[39].xyz, src0.xyz, src1.zzz, src0.000 41: src0.xyz = temp[33], src1.xyz = temp[20], src2.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src1.zzz, src2.xyz 42: src0.xyz = temp[40], src0.w = temp[21] MAD temp[41].xyz, src0.xyz, src0.www, src0.000 43: src0.xyz = temp[34], src0.w = temp[20], src1.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src0.www, src1.xyz 44: src0.xyz = temp[46], src1.xyz = temp[42] MAD temp[47].xyz, src0.xyz, src1.xyz, src1.xyz 45: src0.xyz = temp[47], src1.xyz = temp[49] MAD temp[50].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[50], src1.xyz = const[2], src2.xyz = input[0], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[4], input[3].xy__, 2D[6]; 2: src0.xyz = input[2], src0.w = input[2] MAD temp[2].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[0].w, src0.H, src0.1, -src0.w 3: src0.xyz = temp[2], src0.w = temp[0] MAX temp[0].y, |src0._x_|, |src0._y_| MAX temp[0].w, |src0.z|, |src0.w| 4: src0.xyz = input[1], src0.w = input[1] MAD temp[1].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[1].w, src0.H, src0.1, -src0.w 5: src0.w = temp[1] MAD temp[2].y, |src0._w_|, src0.11_, src0.00_ MAD_SAT color[0].w, src0.0, src0.1, src0.0 6: src0.xyz = temp[1] MAD temp[5].y, |src0._z_|, src0.11_, src0.00_ 7: src0.xyz = temp[1] MAD temp[2].x, |src0.y__|, src0.11_, src0.00_ 8: src0.xyz = temp[1] MAD temp[5].x, |src0.x__|, src0.11_, src0.00_ 9: src0.xyz = temp[5], src1.xyz = temp[2] MAX temp[1].xy, src0.xy_, src1.xy_ 10: src0.xyz = temp[1], src1.xyz = const[3] MAD_SAT temp[1].y, src0._x_, src1._x_, src1._y_ MAD_SAT temp[1].w, src0.y, src1.x, src1.y 11: src0.xyz = const[3], src0.w = temp[0] MAD_SAT temp[1].z, src0.__w, src0.__x, src0.__y 12: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[1].x, src0.y__, src1.x__, src1.y__ 13: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0], src1.w = const[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 14: src0.xyz = temp[1], src0.w = temp[0] MAD temp[2].xyz, src0.111, src0.111, -src0.xyz MAD temp[1].w, src0.1, src0.1, -src0.w 15: src0.xyz = temp[1], src0.w = temp[0], src1.xyz = const[4] MAD_SAT temp[5].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[2].w, src0.w, src1.x, src0.0 16: src0.xyz = const[5], src0.w = const[5], src1.xyz = temp[5], src1.w = temp[2] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 17: src0.xyz = input[3], src0.w = temp[2] MAD temp[6].xy, src0.xy_, src0.ww_, src0.00_ 18: src0.xyz = input[3], src1.xyz = temp[5] MAD temp[7].xy, src0.xy_, src1.zz_, src0.00_ 19: src0.xyz = input[3], src1.xyz = temp[5] MAD temp[8].xy, src0.xy_, src1.yy_, src0.00_ 20: src0.xyz = input[3], src1.xyz = temp[5] MAD temp[5].xy, src0.xy_, src1.xx_, src0.00_ 21: src0.xyz = temp[2], src1.xyz = const[4] MAD_SAT temp[0].y, src0._x_, src1._x_, src0._0_ 22: src0.xyz = temp[0], src1.xyz = input[3] MAD temp[9].xy, src0.yy_, src1.xy_, src0.00_ 23: src0.xyz = const[1] MAD temp[10].xyz, src0.xyz, src0.111, -src0.111 24: src0.xyz = const[4], src1.xyz = temp[10] MAD temp[10].xyz, src0.yyy, src1.xyz, src0.111 25: src0.w = input[3] MAD temp[11].y, src0._w_, src0.11_, src0.00_ 26: src0.xyz = input[3] MAD temp[11].x, src0.z__, src0.11_, src0.00_ 27: BEGIN_TEX; 28: TEX temp[3].xyz, temp[6].xy__, 2D[4]; 29: TEX temp[6].xyz, temp[7].xy__, 2D[3]; 30: TEX temp[7].xyz, temp[8].xy__, 2D[2]; 31: TEX temp[5].xyz, temp[5].xy__, 2D[1]; 32: TEX temp[8].xyz, temp[9].xy__, 2D[0]; 33: TEX temp[9], temp[11].xy__, 2D[5]; 34: src0.xyz = temp[9], src0.w = temp[9], src1.xyz = const[5] MAD temp[9].xyz, src0.xyz, src1.xxx, -src0.111 MAD temp[2].w, src0.w, src1.x, -src0.1 35: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[9], src1.w = temp[2] DP4 temp[4].xyz, src0.xyz, src1.xyz DP4, src0.w, src1.w 36: src0.xyz = temp[8], src1.xyz = temp[2] MAD temp[8].xyz, src0.xyz, src1.xxx, src0.000 37: src0.xyz = temp[5], src1.xyz = temp[1], src2.xyz = temp[8] MAD temp[5].xyz, src0.xyz, src1.xxx, src2.xyz 38: src0.xyz = temp[5], src1.xyz = temp[2] MAD temp[5].xyz, src0.xyz, src1.yyy, src0.000 39: src0.xyz = temp[7], src1.xyz = temp[1], src2.xyz = temp[5] MAD temp[5].xyz, src0.xyz, src1.yyy, src2.xyz 40: src0.xyz = temp[5], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.zzz, src0.000 41: src0.xyz = temp[6], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.zzz, src2.xyz 42: src0.xyz = temp[1], src0.w = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 43: src0.xyz = temp[3], src0.w = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src1.xyz 44: src0.xyz = temp[4], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src1.xyz 45: src0.xyz = temp[1], src1.xyz = temp[10] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[1], src1.xyz = const[2], src2.xyz = input[0], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz pc=23************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 24, tex_end: 0 (code_addr: 00400600) TEX: TEX t4, t3, texture[6] (0000b103) 0: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t2 t0 t0 bias-> t0.w (00800002) xyz: 0.5 1.0 -t2.xyz op: 00080a96 w: 0.5 1.0 -t2.w op: 000a4892 1: xyz: t2 t0 t0 bias-> t0.y (01000002) w: t0 t0 t0 bias-> t0.w (00800000) xyz: |t2.xxx| |t2.xyz| t2.xxx op: 02806041 w: |t2.z| |t0.w| t2.x op: 018024c2 2: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t1 t0 t0 bias-> t1.w (00840001) xyz: 0.5 1.0 -t1.xyz op: 00080a96 w: 0.5 1.0 -t1.w op: 000a4892 3: xyz: t0 t0 t0 bias-> t2.y (01080000) w: t1 t0 t0 bias-> o0.w (01000001) xyz: |t1.www| 1.0 0.0 op: 00050acc w: 0.0 1.0 0.0 op: 40040890 4: xyz: t1 t0 t0 bias-> t5.y (01140001) w: t0 t0 t0 bias-> (00000000) xyz: |t1.zzz| 1.0 0.0 op: 00050ac3 w: t1.x t1.x t1.x op: 00000000 5: xyz: t1 t0 t0 bias-> t2.x (00880001) w: t0 t0 t0 bias-> (00000000) xyz: |t1.yyy| 1.0 0.0 op: 00050ac2 w: t1.x t1.x t1.x op: 00000000 6: xyz: t1 t0 t0 bias-> t5.x (00940001) w: t0 t0 t0 bias-> (00000000) xyz: |t1.xyz| 1.0 0.0 op: 00050ac0 w: t1.x t1.x t1.x op: 00000000 7: xyz: t5 t2 t0 bias-> t1.xy (01840085) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t2.xyz t5.xxx op: 02804200 w: t5.x t5.x t5.x op: 00000000 8: xyz: t1 c3 t0 bias-> t1.y (010408c1) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xxx c3.xxx c3.xyz op: 40010281 w: t1.y c3.x c3.y op: 40010181 9: xyz: c3 t0 t0 bias-> t1.z (02040023) w: t0 t0 t0 bias-> (00000000) xyz: t0.www c3.xxx c3.yyy op: 4000808c w: c3.x c3.x c3.x op: 00000000 10: xyz: t0 c3 t0 bias-> t1.x (008408c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.yyy c3.xyz c3.yyy op: 40018202 w: t0.x t0.x t0.x op: 00000000 11: xyz: t1 c0 t0 bias-> t1.xyz (03840801) w: t1 c0 t0 bias-> t0.w (00800801) xyz: t1.xyz c0.xyz 0.0 op: 00050200 w: t1.w c0.w 0.0 op: 00040509 12: xyz: t1 t0 t0 bias-> t2.xyz (03880001) w: t0 t0 t0 bias-> t1.w (00840000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: 1.0 1.0 -t0.w op: 000a4891 13: xyz: t1 c4 t0 bias-> t5.xyz (03940901) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t1.xyz c4.xxx 0.0 op: 40050280 w: t0.w c4.x 0.0 op: 40040189 14: xyz: c5 t5 t0 bias-> t5.xyz (03940165) w: c5 t2 t0 bias-> t2.w (008800a5) xyz: c5.xyz t5.xyz 0.0 op: 00050200 w: c5.w t2.w 0.0 op: 00040509 15: xyz: t3 t0 t0 bias-> t6.xy (01980003) w: t2 t0 t0 bias-> (00000002) xyz: t3.xyz t2.www 0.0 op: 00050600 w: t3.x t3.x t3.x op: 00000000 16: xyz: t3 t5 t0 bias-> t7.xy (019c0143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.zzz 0.0 op: 00050380 w: t3.x t3.x t3.x op: 00000000 17: xyz: t3 t5 t0 bias-> t8.xy (01a00143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.yyy 0.0 op: 00050300 w: t3.x t3.x t3.x op: 00000000 18: xyz: t3 t5 t0 bias-> t5.xy (01940143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 19: xyz: t2 c4 t0 bias-> t0.y (01000902) w: t0 t0 t0 bias-> (00000000) xyz: t2.xxx c4.xxx 0.0 op: 40050281 w: t2.x t2.x t2.x op: 00000000 20: xyz: t0 t3 t0 bias-> t9.xy (01a400c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.yyy t3.xyz 0.0 op: 00050202 w: t0.x t0.x t0.x op: 00000000 21: xyz: c1 t0 t0 bias-> t10.xyz (03a80021) w: t0 t0 t0 bias-> (00000000) xyz: c1.xyz 1.0 -1.0 op: 000d4a80 w: c1.x c1.x c1.x op: 00000000 22: xyz: c4 t10 t0 bias-> t10.xyz (03a802a4) w: t0 t0 t0 bias-> (00000000) xyz: c4.yyy t10.xyz 1.0 op: 00054202 w: c4.x c4.x c4.x op: 00000000 23: xyz: t0 t0 t0 bias-> t11.y (012c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 24: xyz: t3 t0 t0 bias-> t11.x (00ac0003) w: t0 t0 t0 bias-> (00000000) xyz: t3.zzz 1.0 0.0 op: 00050a83 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 25, tex_offset: 1, alu_end: 12, tex_end: 5 (code_addr: 004a1319) TEX: TEX t3, t6, texture[4] (0000a0c6) TEX t6, t7, texture[3] (00009987) TEX t7, t8, texture[2] (000091c8) TEX t5, t5, texture[1] (00008945) TEX t8, t9, texture[0] (00008209) TEX t9, t11, texture[5] (0000aa4b) 25: xyz: t9 c5 t0 bias-> t9.xyz (03a40949) w: t9 t0 t0 bias-> t2.w (00880009) xyz: t9.xyz c5.xxx -1.0 op: 000d4280 w: t9.w c5.x -1.0 op: 000c4189 26: xyz: t4 t9 t0 bias-> t4.xyz (03900244) w: t4 t2 t0 bias-> (00000084) xyz: t4.xyz t9.xyz t4.xxx op: 01004200 w: t4.w t2.w t4.x op: 00800509 27: xyz: t8 t2 t0 bias-> t8.xyz (03a00088) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t2.xxx 0.0 op: 00050280 w: t8.x t8.x t8.x op: 00000000 28: xyz: t5 t1 t8 bias-> t5.xyz (03948045) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t1.xxx t8.xyz op: 00020280 w: t5.x t5.x t5.x op: 00000000 29: xyz: t5 t2 t0 bias-> t5.xyz (03940085) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t2.yyy 0.0 op: 00050300 w: t5.x t5.x t5.x op: 00000000 30: xyz: t7 t1 t5 bias-> t5.xyz (03945047) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t1.yyy t5.xyz op: 00020300 w: t7.x t7.x t7.x op: 00000000 31: xyz: t5 t2 t0 bias-> t2.xyz (03880085) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t2.zzz 0.0 op: 00050380 w: t5.x t5.x t5.x op: 00000000 32: xyz: t6 t1 t2 bias-> t1.xyz (03842046) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t1.zzz t2.xyz op: 00020380 w: t6.x t6.x t6.x op: 00000000 33: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t1 t0 t0 bias-> (00000001) xyz: t1.xyz t1.www 0.0 op: 00050600 w: t1.x t1.x t1.x op: 00000000 34: xyz: t3 t1 t0 bias-> t1.xyz (03840043) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t0.www t1.xyz op: 00010600 w: t3.x t3.x t3.x op: 00000000 35: xyz: t4 t1 t0 bias-> t1.xyz (03840044) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t1.xyz t1.xyz op: 00010200 w: t4.x t4.x t4.x op: 00000000 36: xyz: t1 t10 t0 bias-> t1.xyz (03840281) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t10.xyz 0.0 op: 80050200 NOP w: t1.x t1.x t1.x op: 00000000 37: xyz: t1 c2 t0 sub-> o0.xyz (1c000881) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx srcp.xyz t1.xyz op: 40200789 w: t1.x t1.x t1.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], COLOR, LINEAR DCL IN[2], COLOR[1], LINEAR DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL IN[5], GENERIC[2], PERSPECTIVE DCL IN[6], GENERIC[3], PERSPECTIVE DCL IN[7], GENERIC[4], PERSPECTIVE DCL IN[8], GENERIC[5], PERSPECTIVE DCL IN[9], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL CONST[8..9] DCL CONST[4..7] DCL TEMP[0..8] IMM FLT32 { 0.0625, 1.0000, 4.0000, 3.0000} IMM FLT32 { 2.0000, -1.0000, 0.3000, 0.5900} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[9].xxxx, CONST[9].yyyy 2: MUL TEMP[1].xy, TEMP[0], IMM[0].xxxx 3: TEX TEMP[1], TEMP[1], SAMP[0], 2D 4: SLT TEMP[1].w, IN[9].wwww, TEMP[1].wwww 5: KIL -TEMP[1].wwww 6: TEX TEMP[2], IN[7], SAMP[1], 2D 7: DP3 TEMP[3].x, IN[9], IN[9] 8: RSQ TEMP[3].x, TEMP[3].xxxx 9: MUL TEMP[3], TEMP[3].xxxx, IN[9] 10: DP3 TEMP[4].x, IN[3], IN[3] 11: RSQ TEMP[4].x, TEMP[4].xxxx 12: MUL TEMP[4], TEMP[4].xxxx, IN[3] 13: TEX TEMP[5], IN[4], SAMP[3], 2D 14: MOV TEMP[5].x, TEMP[5].wwww 15: MAD TEMP[5], TEMP[5], IMM[1].xxxx, IMM[1].yyyy 16: MOV TEMP[5].z, IMM[2].wwww 17: DP3 TEMP[1].x, TEMP[5], TEMP[5] 18: ADD TEMP[1].x, IMM[0].yyyy, -TEMP[1].xxxx 19: RSQ TEMP[1].x, TEMP[1].xxxx 20: RCP TEMP[5].z, TEMP[1].xxxx 21: DP3_SAT TEMP[4].x, TEMP[4], TEMP[5] 22: TXP TEMP[1], IN[6], SAMP[4], 2D 23: MUL TEMP[4], TEMP[4].xxxx, TEMP[1] 24: TEX TEMP[1].x, IN[5], SAMP[5], 2D 25: MUL TEMP[4], TEMP[4], TEMP[1].xxxx 26: SUB TEMP[1].w, TEMP[2].wwww, CONST[4] 27: KIL TEMP[1].wwww 28: MUL TEMP[2], TEMP[2], IN[1] 29: MUL TEMP[6], TEMP[2], CONST[5] 30: DP3 TEMP[3].x, TEMP[3], TEMP[5] 31: MAD_SAT TEMP[1].x, TEMP[3].xxxx, IMM[0].zzzz, -IMM[0].wwww 32: MUL TEMP[1].x, TEMP[1].xxxx, TEMP[1].xxxx 33: MUL TEMP[1], TEMP[1].xxxx, CONST[6] 34: TEX TEMP[7], IN[8], SAMP[6], 2D 35: ADD TEMP[7], TEMP[7], TEMP[7] 36: MAD TEMP[6], TEMP[1], TEMP[7], TEMP[6] 37: MUL TEMP[8].xyz, TEMP[4], TEMP[6] 38: MAD TEMP[8].xyz, TEMP[2], CONST[7], TEMP[8] 39: LRP OUT[0].xyz, IN[2].xxxx, CONST[8], TEMP[8] 40: MUL TEMP[1], TEMP[1], TEMP[7] 41: MUL TEMP[1], TEMP[1], TEMP[4] 42: DP3 OUT[0].w, TEMP[1], IMM[2] 43: 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: MUL temp[1].xy, temp[0], const[10].xxxx; 6: TEX temp[1], temp[1], 2D[0]; 7: SLT temp[1].w, input[9].wwww, temp[1].wwww; 8: KIL -temp[1].wwww; 9: TEX temp[2], input[7], 2D[1]; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[3]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[1].x, temp[5], temp[5]; 21: ADD temp[1].x, const[10].yyyy, -temp[1].xxxx; 22: RSQ temp[1].x, temp[1].xxxx; 23: RCP temp[5].z, temp[1].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[1], input[6], 2D[4]; 26: MUL temp[4], temp[4].xxxx, temp[1]; 27: TEX temp[1].x, input[5], 2D[5]; 28: MUL temp[4], temp[4], temp[1].xxxx; 29: SUB temp[1].w, temp[2].wwww, const[4]; 30: KIL temp[1].wwww; 31: MUL temp[2], temp[2], input[1]; 32: MUL temp[6], temp[2], const[5]; 33: DP3 temp[3].x, temp[3], temp[5]; 34: MAD_SAT temp[1].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 35: MUL temp[1].x, temp[1].xxxx, temp[1].xxxx; 36: MUL temp[1], temp[1].xxxx, const[6]; 37: TEX temp[7], input[8], 2D[6]; 38: ADD temp[7], temp[7], temp[7]; 39: MAD temp[6], temp[1], temp[7], temp[6]; 40: MUL temp[8].xyz, temp[4], temp[6]; 41: MAD temp[8].xyz, temp[2], const[7], temp[8]; 42: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 43: MUL temp[1], temp[1], temp[7]; 44: MUL temp[1], temp[1], temp[4]; 45: DP3 output[0].w, temp[1], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: MUL temp[1].xy, temp[0], const[10].xxxx; 6: TEX temp[1], temp[1], 2D[0]; 7: SLT temp[1].w, input[9].wwww, temp[1].wwww; 8: KIL -temp[1].wwww; 9: TEX temp[2], input[7], 2D[1]; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[3]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[1].x, temp[5], temp[5]; 21: ADD temp[1].x, const[10].yyyy, -temp[1].xxxx; 22: RSQ temp[1].x, temp[1].xxxx; 23: RCP temp[5].z, temp[1].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[1], input[6], 2D[4]; 26: MUL temp[4], temp[4].xxxx, temp[1]; 27: TEX temp[1].x, input[5], 2D[5]; 28: MUL temp[4], temp[4], temp[1].xxxx; 29: SUB temp[1].w, temp[2].wwww, const[4]; 30: KIL temp[1].wwww; 31: MUL temp[2], temp[2], input[1]; 32: MUL temp[6], temp[2], const[5]; 33: DP3 temp[3].x, temp[3], temp[5]; 34: MAD_SAT temp[1].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 35: MUL temp[1].x, temp[1].xxxx, temp[1].xxxx; 36: MUL temp[1], temp[1].xxxx, const[6]; 37: TEX temp[7], input[8], 2D[6]; 38: ADD temp[7], temp[7], temp[7]; 39: MAD temp[6], temp[1], temp[7], temp[6]; 40: MUL temp[8].xyz, temp[4], temp[6]; 41: MAD temp[8].xyz, temp[2], const[7], temp[8]; 42: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 43: MUL temp[1], temp[1], temp[7]; 44: MUL temp[1], temp[1], temp[4]; 45: DP3 output[0].w, temp[1], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: MUL temp[1].xy, temp[0], const[10].xxxx; 6: TEX temp[1], temp[1], 2D[0]; 7: SLT temp[1].w, input[9].wwww, temp[1].wwww; 8: KIL -temp[1].wwww; 9: TEX temp[2], input[7], 2D[1]; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[3]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[1].x, temp[5], temp[5]; 21: ADD temp[1].x, const[10].yyyy, -temp[1].xxxx; 22: RSQ temp[1].x, temp[1].xxxx; 23: RCP temp[5].z, temp[1].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[1], input[6], 2D[4]; 26: MUL temp[4], temp[4].xxxx, temp[1]; 27: TEX temp[1].x, input[5], 2D[5]; 28: MUL temp[4], temp[4], temp[1].xxxx; 29: SUB temp[1].w, temp[2].wwww, const[4]; 30: KIL temp[1].wwww; 31: MUL temp[2], temp[2], input[1]; 32: MUL temp[6], temp[2], const[5]; 33: DP3 temp[3].x, temp[3], temp[5]; 34: MAD_SAT temp[1].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 35: MUL temp[1].x, temp[1].xxxx, temp[1].xxxx; 36: MUL temp[1], temp[1].xxxx, const[6]; 37: TEX temp[7], input[8], 2D[6]; 38: ADD temp[7], temp[7], temp[7]; 39: MAD temp[6], temp[1], temp[7], temp[6]; 40: MUL temp[8].xyz, temp[4], temp[6]; 41: MAD temp[8].xyz, temp[2], const[7], temp[8]; 42: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 43: MUL temp[1], temp[1], temp[7]; 44: MUL temp[1], temp[1], temp[4]; 45: DP3 output[0].w, temp[1], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: MUL temp[1].xy, temp[0], const[10].xxxx; 6: TEX temp[1], temp[1], 2D[0]; 7: SLT temp[1].w, input[9].wwww, temp[1].wwww; 8: KIL -temp[1].wwww; 9: TEX temp[2], input[7], 2D[1]; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[3]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[1].x, temp[5], temp[5]; 21: ADD temp[1].x, const[10].yyyy, -temp[1].xxxx; 22: RSQ temp[1].x, temp[1].xxxx; 23: RCP temp[5].z, temp[1].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[1], input[6], 2D[4]; 26: MUL temp[4], temp[4].xxxx, temp[1]; 27: TEX temp[1].x, input[5], 2D[5]; 28: MUL temp[4], temp[4], temp[1].xxxx; 29: SUB temp[1].w, temp[2].wwww, const[4]; 30: KIL temp[1].wwww; 31: MUL temp[2], temp[2], input[1]; 32: MUL temp[6], temp[2], const[5]; 33: DP3 temp[3].x, temp[3], temp[5]; 34: MAD_SAT temp[1].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 35: MUL temp[1].x, temp[1].xxxx, temp[1].xxxx; 36: MUL temp[1], temp[1].xxxx, const[6]; 37: TEX temp[7], input[8], 2D[6]; 38: ADD temp[7], temp[7], temp[7]; 39: MAD temp[6], temp[1], temp[7], temp[6]; 40: MUL temp[8].xyz, temp[4], temp[6]; 41: MAD temp[8].xyz, temp[2], const[7], temp[8]; 42: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 43: MUL temp[1], temp[1], temp[7]; 44: MUL temp[1], temp[1], temp[4]; 45: DP3 output[0].w, temp[1], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: MUL temp[1].xy, temp[0], const[10].xxxx; 6: TEX temp[1], temp[1], 2D[0]; 7: SLT temp[1].w, input[9].wwww, temp[1].wwww; 8: KIL -temp[1].wwww; 9: TEX temp[2], input[7], 2D[1]; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[3]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[1].x, temp[5], temp[5]; 21: ADD temp[1].x, const[10].yyyy, -temp[1].xxxx; 22: RSQ temp[1].x, temp[1].xxxx; 23: RCP temp[5].z, temp[1].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[1], input[6], 2D[4]; 26: MUL temp[4], temp[4].xxxx, temp[1]; 27: TEX temp[1].x, input[5], 2D[5]; 28: MUL temp[4], temp[4], temp[1].xxxx; 29: SUB temp[1].w, temp[2].wwww, const[4]; 30: KIL temp[1].wwww; 31: MUL temp[2], temp[2], input[1]; 32: MUL temp[6], temp[2], const[5]; 33: DP3 temp[3].x, temp[3], temp[5]; 34: MAD_SAT temp[1].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 35: MUL temp[1].x, temp[1].xxxx, temp[1].xxxx; 36: MUL temp[1], temp[1].xxxx, const[6]; 37: TEX temp[7], input[8], 2D[6]; 38: ADD temp[7], temp[7], temp[7]; 39: MAD temp[6], temp[1], temp[7], temp[6]; 40: MUL temp[8].xyz, temp[4], temp[6]; 41: MAD temp[8].xyz, temp[2], const[7], temp[8]; 42: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 43: MUL temp[1], temp[1], temp[7]; 44: MUL temp[1], temp[1], temp[4]; 45: DP3 output[0].w, temp[1], const[12]; Fragment Program: after 'saturate output writes' # 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: MUL temp[1].xy, temp[0], const[10].xxxx; 6: TEX temp[1], temp[1], 2D[0]; 7: SLT temp[1].w, input[9].wwww, temp[1].wwww; 8: KIL -temp[1].wwww; 9: TEX temp[2], input[7], 2D[1]; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[3]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[1].x, temp[5], temp[5]; 21: ADD temp[1].x, const[10].yyyy, -temp[1].xxxx; 22: RSQ temp[1].x, temp[1].xxxx; 23: RCP temp[5].z, temp[1].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[1], input[6], 2D[4]; 26: MUL temp[4], temp[4].xxxx, temp[1]; 27: TEX temp[1].x, input[5], 2D[5]; 28: MUL temp[4], temp[4], temp[1].xxxx; 29: SUB temp[1].w, temp[2].wwww, const[4]; 30: KIL temp[1].wwww; 31: MUL temp[2], temp[2], input[1]; 32: MUL temp[6], temp[2], const[5]; 33: DP3 temp[3].x, temp[3], temp[5]; 34: MAD_SAT temp[1].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 35: MUL temp[1].x, temp[1].xxxx, temp[1].xxxx; 36: MUL temp[1], temp[1].xxxx, const[6]; 37: TEX temp[7], input[8], 2D[6]; 38: ADD temp[7], temp[7], temp[7]; 39: MAD temp[6], temp[1], temp[7], temp[6]; 40: MUL temp[8].xyz, temp[4], temp[6]; 41: MAD temp[8].xyz, temp[2], const[7], temp[8]; 42: LRP_SAT output[0].xyz, input[2].xxxx, const[8], temp[8]; 43: MUL temp[1], temp[1], temp[7]; 44: MUL temp[1], temp[1], temp[4]; 45: DP3_SAT output[0].w, temp[1], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: MUL temp[1].xy, temp[0], const[10].xxxx; 6: TEX temp[1], temp[1], 2D[0]; 7: SLT temp[1].w, input[9].wwww, temp[1].wwww; 8: KIL -temp[1].wwww; 9: TEX temp[2], input[7], 2D[1]; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[3]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[1].x, temp[5], temp[5]; 21: ADD temp[1].x, const[10].yyyy, -temp[1].xxxx; 22: RSQ temp[1].x, temp[1].xxxx; 23: RCP temp[5].z, temp[1].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[1], input[6], 2D[4]; 26: MUL temp[4], temp[4].xxxx, temp[1]; 27: TEX temp[10], input[5], 2D[5]; 28: MOV temp[1].x, temp[10]; 29: MUL temp[4], temp[4], temp[1].xxxx; 30: SUB temp[1].w, temp[2].wwww, const[4]; 31: KIL temp[1].wwww; 32: MUL temp[2], temp[2], input[1]; 33: MUL temp[6], temp[2], const[5]; 34: DP3 temp[3].x, temp[3], temp[5]; 35: MAD_SAT temp[1].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 36: MUL temp[1].x, temp[1].xxxx, temp[1].xxxx; 37: MUL temp[1], temp[1].xxxx, const[6]; 38: TEX temp[7], input[8], 2D[6]; 39: ADD temp[7], temp[7], temp[7]; 40: MAD temp[6], temp[1], temp[7], temp[6]; 41: MUL temp[8].xyz, temp[4], temp[6]; 42: MAD temp[8].xyz, temp[2], const[7], temp[8]; 43: LRP_SAT output[0].xyz, input[2].xxxx, const[8], temp[8]; 44: MUL temp[1], temp[1], temp[7]; 45: MUL temp[1], temp[1], temp[4]; 46: DP3_SAT output[0].w, temp[1], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: MUL temp[1].xy, temp[0], const[10].xxxx; 6: TEX temp[1], temp[1], 2D[0]; 7: ADD temp[11].w, input[9].wwww, -temp[1].wwww; 8: CMP temp[1].w, temp[11], none.1111, none.0000; 9: KIL -temp[1].wwww; 10: TEX temp[2], input[7], 2D[1]; 11: DP3 temp[3].x, input[9], input[9]; 12: RSQ temp[3].x, |temp[3].xxxx|; 13: MUL temp[3], temp[3].xxxx, input[9]; 14: DP3 temp[4].x, input[3], input[3]; 15: RSQ temp[4].x, |temp[4].xxxx|; 16: MUL temp[4], temp[4].xxxx, input[3]; 17: TEX temp[5], input[4], 2D[3]; 18: MOV temp[5].x, temp[5].wwww; 19: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 20: MOV temp[5].z, const[12].wwww; 21: DP3 temp[1].x, temp[5], temp[5]; 22: ADD temp[1].x, const[10].yyyy, -temp[1].xxxx; 23: RSQ temp[1].x, |temp[1].xxxx|; 24: RCP temp[5].z, temp[1].xxxx; 25: DP3_SAT temp[4].x, temp[4], temp[5]; 26: TXP temp[1], input[6], 2D[4]; 27: MUL temp[4], temp[4].xxxx, temp[1]; 28: TEX temp[10], input[5], 2D[5]; 29: MOV temp[1].x, temp[10]; 30: MUL temp[4], temp[4], temp[1].xxxx; 31: ADD temp[1].w, temp[2].wwww, -const[4]; 32: KIL temp[1].wwww; 33: MUL temp[2], temp[2], input[1]; 34: MUL temp[6], temp[2], const[5]; 35: DP3 temp[3].x, temp[3], temp[5]; 36: MAD_SAT temp[1].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 37: MUL temp[1].x, temp[1].xxxx, temp[1].xxxx; 38: MUL temp[1], temp[1].xxxx, const[6]; 39: TEX temp[7], input[8], 2D[6]; 40: ADD temp[7], temp[7], temp[7]; 41: MAD temp[6], temp[1], temp[7], temp[6]; 42: MUL temp[8].xyz, temp[4], temp[6]; 43: MAD temp[8].xyz, temp[2], const[7], temp[8]; 44: ADD temp[12].xyz, const[8], -temp[8]; 45: MAD_SAT output[0].xyz, input[2].xxxx, temp[12], temp[8]; 46: MUL temp[1], temp[1], temp[7]; 47: MUL temp[1], temp[1], temp[4]; 48: DP3_SAT output[0].w, temp[1], const[12]; 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[13].xy__, const[14].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[9]._x__, const[9]._y__; 5: MUL temp[1].xy, temp[0].xy__, const[10].xx__; 6: TEX temp[1].w, temp[1].xy__, 2D[0]; 7: ADD temp[11].w, input[9].___w, -temp[1].___w; 8: CMP temp[1].w, temp[11].___w, none.___1, none.___0; 9: KIL -temp[1].wwww; 10: TEX temp[2], input[7].xy__, 2D[1]; 11: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[3].x, |temp[3].x___|; 13: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 14: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[4].x, |temp[4].x___|; 16: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[3]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[11].xx__, const[11].yy__; 20: MOV temp[5].z, const[12].__w_; 21: DP3 temp[1].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[1].x, const[10].y___, -temp[1].x___; 23: RSQ temp[1].x, |temp[1].x___|; 24: RCP temp[5].z, temp[1].x___; 25: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 26: TXP temp[1].xyz, input[6].xy_w, 2D[4]; 27: MUL temp[4].xyz, temp[4].xxx_, temp[1].xyz_; 28: TEX temp[10].x, input[5].xy__, 2D[5]; 29: MOV temp[1].x, temp[10].x___; 30: MUL temp[4].xyz, temp[4].xyz_, temp[1].xxx_; 31: ADD temp[1].w, temp[2].___w, -const[4].___w; 32: KIL temp[1].wwww; 33: MUL temp[2].xyz, temp[2].xyz_, input[1].xyz_; 34: MUL temp[6].xyz, temp[2].xyz_, const[5].xyz_; 35: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 36: MAD_SAT temp[1].x, temp[3].x___, const[10].z___, -const[10].w___; 37: MUL temp[1].x, temp[1].x___, temp[1].x___; 38: MUL temp[1].xyz, temp[1].xxx_, const[6].xyz_; 39: TEX temp[7].xyz, input[8].xy__, 2D[6]; 40: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 41: MAD temp[6].xyz, temp[1].xyz_, temp[7].xyz_, temp[6].xyz_; 42: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 43: MAD temp[8].xyz, temp[2].xyz_, const[7].xyz_, temp[8].xyz_; 44: ADD temp[12].xyz, const[8].xyz_, -temp[8].xyz_; 45: MAD_SAT output[0].xyz, input[2].xxx_, temp[12].xyz_, temp[8].xyz_; 46: MUL temp[1].xyz, temp[1].xyz_, temp[7].xyz_; 47: MUL temp[1].xyz, temp[1].xyz_, temp[4].xyz_; 48: DP3_SAT output[0].w, temp[1].xyz_, const[12].xyz_; 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[13].xy__, const[14].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[9]._x__, const[9]._y__; 5: MUL temp[1].xy, temp[0].xy__, const[10].xx__; 6: TEX temp[1].w, temp[1].xy__, 2D[0]; 7: ADD temp[11].w, input[9].___w, -temp[1].___w; 8: CMP temp[1].w, temp[11].___w, none.___1, none.___0; 9: KIL -temp[1].wwww; 10: TEX temp[2], input[7].xy__, 2D[1]; 11: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[3].x, |temp[3].x___|; 13: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 14: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[4].x, |temp[4].x___|; 16: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[3]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[11].xx__, const[11].yy__; 20: MOV temp[5].z, const[12].__w_; 21: DP3 temp[1].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[1].x, const[10].y___, -temp[1].x___; 23: RSQ temp[1].x, |temp[1].x___|; 24: RCP temp[5].z, temp[1].x___; 25: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 26: TXP temp[1].xyz, input[6].xy_w, 2D[4]; 27: MUL temp[4].xyz, temp[4].xxx_, temp[1].xyz_; 28: TEX temp[10].x, input[5].xy__, 2D[5]; 29: MOV temp[1].x, temp[10].x___; 30: MUL temp[4].xyz, temp[4].xyz_, temp[1].xxx_; 31: ADD temp[1].w, temp[2].___w, -const[4].___w; 32: KIL temp[1].wwww; 33: MUL temp[2].xyz, temp[2].xyz_, input[1].xyz_; 34: MUL temp[6].xyz, temp[2].xyz_, const[5].xyz_; 35: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 36: MAD_SAT temp[1].x, temp[3].x___, const[10].z___, -const[10].w___; 37: MUL temp[1].x, temp[1].x___, temp[1].x___; 38: MUL temp[1].xyz, temp[1].xxx_, const[6].xyz_; 39: TEX temp[7].xyz, input[8].xy__, 2D[6]; 40: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 41: MAD temp[6].xyz, temp[1].xyz_, temp[7].xyz_, temp[6].xyz_; 42: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 43: MAD temp[8].xyz, temp[2].xyz_, const[7].xyz_, temp[8].xyz_; 44: ADD temp[12].xyz, const[8].xyz_, -temp[8].xyz_; 45: MAD_SAT output[0].xyz, input[2].xxx_, temp[12].xyz_, temp[8].xyz_; 46: MUL temp[1].xyz, temp[1].xyz_, temp[7].xyz_; 47: MUL temp[1].xyz, temp[1].xyz_, temp[4].xyz_; 48: DP3_SAT output[0].w, temp[1].xyz_, const[12].xyz_; Fragment Program: after 'dataflow optimize' # 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[13].xy__, const[14].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[9]._x__, const[9]._y__; 5: MUL temp[1].xy, temp[0].xy__, const[10].xx__; 6: TEX temp[1].w, temp[1].xy__, 2D[0]; 7: CMP temp[1].w, (input[9] - temp[1]).___w, none.___1, none.___0; 8: KIL -temp[1].wwww; 9: TEX temp[2], input[7].xy__, 2D[1]; 10: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 11: RSQ temp[3].x, |temp[3].x___|; 12: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 13: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 14: RSQ temp[4].x, |temp[4].x___|; 15: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 16: TEX temp[5].yw, input[4].xy__, 2D[3]; 17: MOV temp[5].x, temp[5].w___; 18: MAD temp[5].xy, temp[5].xy__, const[11].xx__, none.-1-1__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[1].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[1].x, none.1___, -temp[1].x___; 22: RSQ temp[1].x, |temp[1].x___|; 23: RCP temp[5].z, temp[1].x___; 24: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 25: TXP temp[1].xyz, input[6].xy_w, 2D[4]; 26: MUL temp[4].xyz, temp[4].xxx_, temp[1].xyz_; 27: TEX temp[10].x, input[5].xy__, 2D[5]; 28: MUL temp[4].xyz, temp[4].xyz_, temp[10].xxx_; 29: KIL (temp[2] - const[4]).wwww; 30: MUL temp[2].xyz, temp[2].xyz_, input[1].xyz_; 31: MUL temp[6].xyz, temp[2].xyz_, const[5].xyz_; 32: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 33: MAD_SAT temp[1].x, temp[3].x___, const[10].z___, -const[10].w___; 34: MUL temp[1].x, temp[1].x___, temp[1].x___; 35: MUL temp[1].xyz, temp[1].xxx_, const[6].xyz_; 36: TEX temp[7].xyz, input[8].xy__, 2D[6]; 37: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 38: MAD temp[6].xyz, temp[1].xyz_, temp[7].xyz_, temp[6].xyz_; 39: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 40: MAD temp[8].xyz, temp[2].xyz_, const[7].xyz_, temp[8].xyz_; 41: MAD_SAT output[0].xyz, input[2].xxx_, (const[8] - temp[8]).xyz_, temp[8].xyz_; 42: MUL temp[1].xyz, temp[1].xyz_, temp[7].xyz_; 43: MUL temp[1].xyz, temp[1].xyz_, temp[4].xyz_; 44: DP3_SAT output[0].w, temp[1].xyz_, const[12].xyz_; Fragment Program: after 'dataflow swizzles' # 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[13].xy__, const[14].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[9]._x__, const[9]._y__; 5: MUL temp[1].xy, temp[0].xy__, const[10].xx__; 6: TEX temp[1].w, temp[1].xy__, 2D[0]; 7: CMP temp[1].w, (input[9] - temp[1]).___w, none.___1, none.___0; 8: MOV temp[11], -temp[1].wwww; 9: KIL temp[11]; 10: TEX temp[2], input[7].xy__, 2D[1]; 11: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[3].x, |temp[3].x___|; 13: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 14: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[4].x, |temp[4].x___|; 16: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[3]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[11].xx__, none.-1-1__; 20: MOV temp[5].z, none.__0_; 21: DP3 temp[1].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[1].x, none.1___, -temp[1].x___; 23: RSQ temp[1].x, |temp[1].x___|; 24: RCP temp[5].z, temp[1].x___; 25: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 26: TXP temp[1].xyz, input[6].xy_w, 2D[4]; 27: MUL temp[4].xyz, temp[4].xxx_, temp[1].xyz_; 28: TEX temp[10].x, input[5].xy__, 2D[5]; 29: MUL temp[4].xyz, temp[4].xyz_, temp[10].xxx_; 30: MOV temp[12], (temp[2] - const[4]).wwww; 31: KIL temp[12]; 32: MUL temp[2].xyz, temp[2].xyz_, input[1].xyz_; 33: MUL temp[6].xyz, temp[2].xyz_, const[5].xyz_; 34: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 35: MAD_SAT temp[1].x, temp[3].x___, const[10].z___, -const[10].w___; 36: MUL temp[1].x, temp[1].x___, temp[1].x___; 37: MUL temp[1].xyz, temp[1].xxx_, const[6].xyz_; 38: TEX temp[7].xyz, input[8].xy__, 2D[6]; 39: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 40: MAD temp[6].xyz, temp[1].xyz_, temp[7].xyz_, temp[6].xyz_; 41: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 42: MAD temp[8].xyz, temp[2].xyz_, const[7].xyz_, temp[8].xyz_; 43: MAD_SAT output[0].xyz, input[2].xxx_, (const[8] - temp[8]).xyz_, temp[8].xyz_; 44: MUL temp[1].xyz, temp[1].xyz_, temp[7].xyz_; 45: MUL temp[1].xyz, temp[1].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[1].xyz_, const[12].xyz_; CONST[6] = { 0.0625 1.0000 4.0000 3.0000 } CONST[7] = { 2.0000 -1.0000 0.3000 0.5900 } CONST[8] = { 0.3000 0.5900 0.1100 0.0000 } Fragment Program: after 'dead constants' # 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[9].xy__, const[10].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[5]._x__, const[5]._y__; 5: MUL temp[1].xy, temp[0].xy__, const[6].xx__; 6: TEX temp[1].w, temp[1].xy__, 2D[0]; 7: CMP temp[1].w, (input[9] - temp[1]).___w, none.___1, none.___0; 8: MOV temp[11], -temp[1].wwww; 9: KIL temp[11]; 10: TEX temp[2], input[7].xy__, 2D[1]; 11: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[3].x, |temp[3].x___|; 13: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 14: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[4].x, |temp[4].x___|; 16: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[3]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[7].xx__, none.-1-1__; 20: MOV temp[5].z, none.__0_; 21: DP3 temp[1].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[1].x, none.1___, -temp[1].x___; 23: RSQ temp[1].x, |temp[1].x___|; 24: RCP temp[5].z, temp[1].x___; 25: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 26: TXP temp[1].xyz, input[6].xy_w, 2D[4]; 27: MUL temp[4].xyz, temp[4].xxx_, temp[1].xyz_; 28: TEX temp[10].x, input[5].xy__, 2D[5]; 29: MUL temp[4].xyz, temp[4].xyz_, temp[10].xxx_; 30: MOV temp[12], (temp[2] - const[0]).wwww; 31: KIL temp[12]; 32: MUL temp[2].xyz, temp[2].xyz_, input[1].xyz_; 33: MUL temp[6].xyz, temp[2].xyz_, const[1].xyz_; 34: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 35: MAD_SAT temp[1].x, temp[3].x___, const[6].z___, -const[6].w___; 36: MUL temp[1].x, temp[1].x___, temp[1].x___; 37: MUL temp[1].xyz, temp[1].xxx_, const[2].xyz_; 38: TEX temp[7].xyz, input[8].xy__, 2D[6]; 39: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 40: MAD temp[6].xyz, temp[1].xyz_, temp[7].xyz_, temp[6].xyz_; 41: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 42: MAD temp[8].xyz, temp[2].xyz_, const[3].xyz_, temp[8].xyz_; 43: MAD_SAT output[0].xyz, input[2].xxx_, (const[4] - temp[8]).xyz_, temp[8].xyz_; 44: MUL temp[1].xyz, temp[1].xyz_, temp[7].xyz_; 45: MUL temp[1].xyz, temp[1].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[1].xyz_, const[8].xyz_; 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[9].xy__, const[10].xy__; 3: MOV temp[0].x, temp[15].x___; 4: MAD temp[0].y, temp[15]._y__, const[5]._x__, const[5]._y__; 5: MUL temp[16].xy, temp[0].xy__, const[6].xx__; 6: TEX temp[17].w, temp[16].xy__, 2D[0]; 7: CMP temp[18].w, (input[9] - temp[17]).___w, none.___1, none.___0; 8: MOV temp[19], -temp[18].wwww; 9: KIL temp[19]; 10: TEX temp[20], input[7].xy__, 2D[1]; 11: DP3 temp[21].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[22].x, |temp[21].x___|; 13: MUL temp[23].xyz, temp[22].xxx_, input[9].xyz_; 14: DP3 temp[24].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[25].x, |temp[24].x___|; 16: MUL temp[26].xyz, temp[25].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[3]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[7].xx__, none.-1-1__; 20: MOV temp[5].z, none.__0_; 21: DP3 temp[27].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[28].x, none.1___, -temp[27].x___; 23: RSQ temp[29].x, |temp[28].x___|; 24: RCP temp[5].z, temp[29].x___; 25: DP3_SAT temp[30].x, temp[26].xyz_, temp[5].xyz_; 26: TXP temp[31].xyz, input[6].xy_w, 2D[4]; 27: MUL temp[32].xyz, temp[30].xxx_, temp[31].xyz_; 28: TEX temp[33].x, input[5].xy__, 2D[5]; 29: MUL temp[34].xyz, temp[32].xyz_, temp[33].xxx_; 30: MOV temp[35], (temp[20] - const[0]).wwww; 31: KIL temp[35]; 32: MUL temp[36].xyz, temp[20].xyz_, input[1].xyz_; 33: MUL temp[37].xyz, temp[36].xyz_, const[1].xyz_; 34: DP3 temp[38].x, temp[23].xyz_, temp[5].xyz_; 35: MAD_SAT temp[39].x, temp[38].x___, const[6].z___, -const[6].w___; 36: MUL temp[40].x, temp[39].x___, temp[39].x___; 37: MUL temp[41].xyz, temp[40].xxx_, const[2].xyz_; 38: TEX temp[42].xyz, input[8].xy__, 2D[6]; 39: ADD temp[43].xyz, temp[42].xyz_, temp[42].xyz_; 40: MAD temp[44].xyz, temp[41].xyz_, temp[43].xyz_, temp[37].xyz_; 41: MUL temp[45].xyz, temp[34].xyz_, temp[44].xyz_; 42: MAD temp[46].xyz, temp[36].xyz_, const[3].xyz_, temp[45].xyz_; 43: MAD_SAT output[0].xyz, input[2].xxx_, (const[4] - temp[46]).xyz_, temp[46].xyz_; 44: MUL temp[47].xyz, temp[41].xyz_, temp[43].xyz_; 45: MUL temp[48].xyz, temp[47].xyz_, temp[34].xyz_; 46: DP3_SAT output[0].w, temp[48].xyz_, const[8].xyz_; 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[9], src2.xyz = const[10] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[15] MAD temp[0].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[15], src1.xyz = const[5] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = temp[0], src1.xyz = const[6] MAD temp[16].xy, src0.xy_, src1.xx_, src0.000 6: TEX temp[17].w, temp[16].xy__, 2D[0]; 7: src0.w = temp[17], src1.w = input[9], srcp.w = (src1 - src0) CMP temp[18].w, src0.0, src0.1, srcp.w 8: src0.w = temp[18] MAD temp[19].xyz, -src0.www, src0.111, src0.000 MAD temp[19].w, -src0.w, src0.1, src0.0 9: KIL temp[19]; 10: TEX temp[20], input[7].xy__, 2D[1]; 11: src0.xyz = input[9] DP3 temp[21].x, src0.xyz, src0.xyz 12: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 13: src0.xyz = temp[22], src1.xyz = input[9] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 14: src0.xyz = input[3] DP3 temp[24].x, src0.xyz, src0.xyz 15: src0.xyz = temp[24] REPL_ALPHA temp[25].x RSQ, |src0.x| 16: src0.xyz = temp[25], src1.xyz = input[3] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 17: TEX temp[5].yw, input[4].xy__, 2D[3]; 18: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 19: src0.xyz = temp[5], src1.xyz = const[7] MAD temp[5].xy, src0.xy_, src1.xx_, -src0.11_ 20: MAD temp[5].z, src0.__0, src0.111, src0.000 21: src0.xyz = temp[5] DP3 temp[27].x, src0.xyz, src0.xyz 22: src0.xyz = temp[27] MAD temp[28].x, src0.1__, src0.111, -src0.x__ 23: src0.xyz = temp[28] REPL_ALPHA temp[29].x RSQ, |src0.x| 24: src0.xyz = temp[29] REPL_ALPHA temp[5].z RCP, src0.x 25: src0.xyz = temp[26], src1.xyz = temp[5] DP3_SAT temp[30].x, src0.xyz, src1.xyz 26: TXP temp[31].xyz, input[6].xy_w, 2D[4]; 27: src0.xyz = temp[30], src1.xyz = temp[31] MAD temp[32].xyz, src0.xxx, src1.xyz, src0.000 28: TEX temp[33].x, input[5].xy__, 2D[5]; 29: src0.xyz = temp[32], src1.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xxx, src0.000 30: src0.w = const[0], src1.w = temp[20], srcp.w = (src1 - src0) MAD temp[35].xyz, srcp.www, src0.111, src0.000 MAD temp[35].w, srcp.w, src0.1, src0.0 31: KIL temp[35]; 32: src0.xyz = temp[20], src1.xyz = input[1] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[36], src1.xyz = const[1] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[23], src1.xyz = temp[5] DP3 temp[38].x, src0.xyz, src1.xyz 35: src0.xyz = temp[38], src0.w = const[6], src1.xyz = const[6] MAD_SAT temp[39].x, src0.x__, src1.z__, -src0.w__ 36: src0.xyz = temp[39] MAD temp[40].x, src0.x__, src0.x__, src0.000 37: src0.xyz = temp[40], src1.xyz = const[2] MAD temp[41].xyz, src0.xxx, src1.xyz, src0.000 38: TEX temp[42].xyz, input[8].xy__, 2D[6]; 39: src0.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src0.111, src0.xyz 40: src0.xyz = temp[41], src1.xyz = temp[43], src2.xyz = temp[37] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[34], src1.xyz = temp[44] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[36], src1.xyz = const[3], src2.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src2.xyz 43: src0.xyz = temp[46], src1.xyz = const[4], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 44: src0.xyz = temp[41], src1.xyz = temp[43] MAD temp[47].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[47], src1.xyz = temp[34] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[48], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[20], input[7].xy__, 2D[1]; 2: TEX temp[5].yw, input[4].xy__, 2D[3]; 3: TXP temp[31].xyz, input[6].xy_w, 2D[4]; 4: TEX temp[33].x, input[5].xy__, 2D[5]; 5: TEX temp[42].xyz, input[8].xy__, 2D[6]; 6: src0.w = const[0], src1.w = temp[20], srcp.w = (src1 - src0) MAD temp[35].xyz, srcp.www, src0.111, src0.000 MAD temp[35].w, srcp.w, src0.1, src0.0 7: src0.xyz = temp[42], src0.w = input[0] MAD temp[43].xyz, src0.xyz, src0.111, src0.xyz RCP temp[13].w, src0.w 8: src0.xyz = input[0], src0.w = temp[13] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 9: src0.xyz = temp[14], src1.xyz = const[9], src2.xyz = const[10] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 10: src0.xyz = temp[15], src1.xyz = const[5] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 11: src0.xyz = temp[15] MAD temp[0].x, src0.x__, src0.111, src0.000 12: src0.xyz = temp[0], src1.xyz = const[6] MAD temp[16].xy, src0.xy_, src1.xx_, src0.000 13: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 14: src0.xyz = temp[5], src1.xyz = const[7] MAD temp[5].xy, src0.xy_, src1.xx_, -src0.11_ 15: src0.xyz = temp[20], src1.xyz = input[1] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[36], src1.xyz = const[1] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 17: MAD temp[5].z, src0.__0, src0.111, src0.000 18: src0.xyz = temp[5] DP3 temp[27].x, src0.xyz, src0.xyz 19: src0.xyz = input[3], src1.xyz = temp[27] DP3 temp[24].x, src0.xyz, src0.xyz MAD temp[28].w, src0.1, src0.1, -src1.x 20: src0.xyz = temp[28], src0.w = temp[28] REPL_ALPHA temp[29].x RSQ, |src0.w| 21: src0.xyz = temp[29] REPL_ALPHA temp[5].z RCP, src0.x 22: src0.xyz = temp[24] REPL_ALPHA temp[25].x RSQ, |src0.x| 23: src0.xyz = temp[25], src1.xyz = input[3] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 24: src0.xyz = temp[26], src1.xyz = temp[5] DP3_SAT temp[30].x, src0.xyz, src1.xyz 25: src0.xyz = temp[30], src1.xyz = temp[31] MAD temp[32].xyz, src0.xxx, src1.xyz, src0.000 26: src0.xyz = temp[32], src1.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = input[9] DP3 temp[21].x, src0.xyz, src0.xyz 28: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 29: src0.xyz = temp[22], src1.xyz = input[9] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 30: src0.xyz = temp[23], src1.xyz = temp[5] DP3 temp[38].x, src0.xyz, src1.xyz 31: src0.xyz = temp[38], src0.w = const[6], src1.xyz = const[6] MAD_SAT temp[39].x, src0.x__, src1.z__, -src0.w__ 32: src0.xyz = temp[39] MAD temp[40].x, src0.x__, src0.x__, src0.000 33: src0.xyz = temp[40], src1.xyz = const[2] MAD temp[41].xyz, src0.xxx, src1.xyz, src0.000 34: src0.xyz = temp[41], src1.xyz = temp[43], src2.xyz = temp[37] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 35: src0.xyz = temp[34], src1.xyz = temp[44] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[36], src1.xyz = const[3], src2.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src2.xyz 37: src0.xyz = temp[46], src1.xyz = const[4], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 38: src0.xyz = temp[41], src1.xyz = temp[43] MAD temp[47].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[47], src1.xyz = temp[34] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[48], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 41: BEGIN_TEX; 42: KIL temp[35]; 43: TEX temp[17].w, temp[16].xy__, 2D[0]; 44: src0.w = temp[17], src1.w = input[9], srcp.w = (src1 - src0) CMP temp[18].w, src0.0, src0.1, srcp.w 45: src0.w = temp[18] MAD temp[19].xyz, -src0.www, src0.111, src0.000 MAD temp[19].w, -src0.w, src0.1, src0.0 46: BEGIN_TEX; 47: KIL temp[19]; Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[20], input[7].xy__, 2D[1]; 2: TEX temp[5].yw, input[4].xy__, 2D[3]; 3: TXP temp[31].xyz, input[6].xy_w, 2D[4]; 4: TEX temp[33].x, input[5].xy__, 2D[5]; 5: TEX temp[42].xyz, input[8].xy__, 2D[6]; 6: src0.w = const[0], src1.w = temp[20], srcp.w = (src1 - src0) MAD temp[35].xyz, srcp.www, src0.111, src0.000 MAD temp[35].w, srcp.w, src0.1, src0.0 7: src0.xyz = temp[42], src0.w = input[0] MAD temp[43].xyz, src0.xyz, src0.111, src0.xyz RCP temp[13].w, src0.w 8: src0.xyz = input[0], src0.w = temp[13] MAD temp[14].xy, src0.xy_, src0.ww_, src0.000 9: src0.xyz = temp[14], src1.xyz = const[9], src2.xyz = const[10] MAD temp[15].xy, src0.xy_, src1.xy_, src2.xy_ 10: src0.xyz = temp[15], src1.xyz = const[5] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 11: src0.xyz = temp[15] MAD temp[0].x, src0.x__, src0.111, src0.000 12: src0.xyz = temp[0], src1.xyz = const[6] MAD temp[16].xy, src0.xy_, src1.xx_, src0.000 13: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 14: src0.xyz = temp[5], src1.xyz = const[7] MAD temp[5].xy, src0.xy_, src1.xx_, -src0.11_ 15: src0.xyz = temp[20], src1.xyz = input[1] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[36], src1.xyz = const[1] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 17: MAD temp[5].z, src0.__0, src0.111, src0.000 18: src0.xyz = temp[5] DP3 temp[27].x, src0.xyz, src0.xyz 19: src0.xyz = input[3], src1.xyz = temp[27] DP3 temp[24].x, src0.xyz, src0.xyz MAD temp[28].w, src0.1, src0.1, -src1.x 20: src0.w = temp[28] REPL_ALPHA temp[29].x RSQ, |src0.w| 21: src0.xyz = temp[29] REPL_ALPHA temp[5].z RCP, src0.x 22: src0.xyz = temp[24] REPL_ALPHA temp[25].x RSQ, |src0.x| 23: src0.xyz = temp[25], src1.xyz = input[3] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 24: src0.xyz = temp[26], src1.xyz = temp[5] DP3_SAT temp[30].x, src0.xyz, src1.xyz 25: src0.xyz = temp[30], src1.xyz = temp[31] MAD temp[32].xyz, src0.xxx, src1.xyz, src0.000 26: src0.xyz = temp[32], src1.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = input[9] DP3 temp[21].x, src0.xyz, src0.xyz 28: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 29: src0.xyz = temp[22], src1.xyz = input[9] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 30: src0.xyz = temp[23], src1.xyz = temp[5] DP3 temp[38].x, src0.xyz, src1.xyz 31: src0.xyz = temp[38], src0.w = const[6], src1.xyz = const[6] MAD_SAT temp[39].x, src0.x__, src1.z__, -src0.w__ 32: src0.xyz = temp[39] MAD temp[40].x, src0.x__, src0.x__, src0.000 33: src0.xyz = temp[40], src1.xyz = const[2] MAD temp[41].xyz, src0.xxx, src1.xyz, src0.000 34: src0.xyz = temp[41], src1.xyz = temp[43], src2.xyz = temp[37] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 35: src0.xyz = temp[34], src1.xyz = temp[44] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[36], src1.xyz = const[3], src2.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src2.xyz 37: src0.xyz = temp[46], src1.xyz = const[4], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 38: src0.xyz = temp[41], src1.xyz = temp[43] MAD temp[47].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[47], src1.xyz = temp[34] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[48], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 41: BEGIN_TEX; 42: KIL temp[35]; 43: TEX temp[17].w, temp[16].xy__, 2D[0]; 44: src0.w = temp[17], src1.w = input[9], srcp.w = (src1 - src0) CMP temp[18].w, src0.0, src0.1, srcp.w 45: src0.w = temp[18] MAD temp[19].xyz, -src0.www, src0.111, src0.000 MAD temp[19].w, -src0.w, src0.1, src0.0 46: BEGIN_TEX; 47: KIL temp[19]; Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[6].xy__, 2D[1]; 2: TEX temp[3].yw, input[3].xy__, 2D[3]; 3: TXP temp[5].xyz, input[5].xy_w, 2D[4]; 4: TEX temp[4].x, input[4].xy__, 2D[5]; 5: TEX temp[7].xyz, input[7].xy__, 2D[6]; 6: src0.w = const[0], src1.w = temp[6], srcp.w = (src1 - src0) MAD temp[10].xyz, srcp.www, src0.111, src0.000 MAD temp[10].w, srcp.w, src0.1, src0.0 7: src0.xyz = temp[7], src0.w = input[9] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz RCP temp[0].w, src0.w 8: src0.xyz = input[9], src0.w = temp[0] MAD temp[9].xy, src0.xy_, src0.ww_, src0.00_ 9: src0.xyz = temp[9], src1.xyz = const[9], src2.xyz = const[10] MAD temp[1].yz, src0._xy, src1._xy, src2._xy 10: src0.xyz = temp[1], src1.xyz = const[5] MAD temp[9].y, src0._z_, src1._x_, src1._y_ 11: src0.xyz = temp[1] MAD temp[9].x, src0.y__, src0.11_, src0.00_ 12: src0.xyz = temp[9], src1.xyz = const[6] MAD temp[9].xy, src0.xy_, src1.xx_, src0.00_ 13: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 14: src0.xyz = temp[3], src1.xyz = const[7] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 15: src0.xyz = temp[6], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[6].xyz, src0.xyz, src1.xyz, src0.000 17: MAD temp[3].z, src0.__0, src0.111, src0.000 18: src0.xyz = temp[3] DP3 temp[1].y, src0.xyz, src0.xyz 19: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[0].w, src0.1, src0.1, -src1.y 20: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 21: src0.xyz = temp[1] REPL_ALPHA temp[3].z RCP, src0.z 22: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 23: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 24: src0.xyz = temp[2], src1.xyz = temp[3] DP3_SAT temp[1].y, src0.xyz, src1.xyz 25: src0.xyz = temp[1], src1.xyz = temp[5] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 26: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 27: src0.xyz = input[8] DP3 temp[1].y, src0.xyz, src0.xyz 28: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 29: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 30: src0.xyz = temp[4], src1.xyz = temp[3] DP3 temp[1].y, src0.xyz, src1.xyz 31: src0.xyz = temp[1], src0.w = const[6], src1.xyz = const[6] MAD_SAT temp[1].y, src0._y_, src1._z_, -src0._w_ 32: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._y_, src0._0_ 33: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[3].xyz, src0.yyy, src1.xyz, src0.000 34: src0.xyz = temp[3], src1.xyz = temp[7], src2.xyz = temp[6] MAD temp[4].xyz, src0.xyz, src1.xyz, src2.xyz 35: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 37: src0.xyz = temp[0], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 38: src0.xyz = temp[3], src1.xyz = temp[7] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[0], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 41: BEGIN_TEX; 42: KIL temp[10]; 43: TEX temp[0].w, temp[9].xy__, 2D[0]; 44: src0.w = temp[0], src1.w = input[8], srcp.w = (src1 - src0) CMP temp[0].w, src0.0, src0.1, srcp.w 45: src0.w = temp[0] MAD temp[0].xyz, -src0.www, src0.111, src0.000 MAD temp[0].w, -src0.w, src0.1, src0.0 46: BEGIN_TEX; 47: KIL temp[0]; pc=24************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 34, tex_end: 4 (code_addr: 00480880) TEX: TEX t6, t6, texture[1] (00008986) TEX t3, t3, texture[3] (000098c3) TXP t5, t5, texture[4] (0001a145) TEX t4, t4, texture[5] (0000a904) TEX t7, t7, texture[6] (0000b1c7) 0: xyz: t0 t0 t0 bias-> t10.xyz (03a80000) w: c0 t6 t0 sub-> t10.w (00a801a0) xyz: srcp.www 1.0 0.0 op: 00050a93 w: srcp.w 1.0 0.0 op: 0024088f 1: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t9 t0 t0 bias-> t0.w (00800009) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t9.w t7.x t7.x op: 05000009 2: xyz: t9 t0 t0 bias-> t9.xy (01a40009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t0.www 0.0 op: 00050600 w: t9.x t9.x t9.x op: 00000000 3: xyz: t9 c9 c10 bias-> t1.yz (0306aa49) w: t0 t0 t0 bias-> (00000000) xyz: t9.zxy c9.zxy c10.zxy op: 00070d9a w: t9.x t9.x t9.x op: 00000000 4: xyz: t1 c5 t0 bias-> t9.y (01240941) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz c5.xxx c5.xyz op: 00010283 w: t1.x t1.x t1.x op: 00000000 5: xyz: t1 t0 t0 bias-> t9.x (00a40001) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy 1.0 0.0 op: 00050a82 w: t1.x t1.x t1.x op: 00000000 6: xyz: t9 c6 t0 bias-> t9.xy (01a40989) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz c6.xxx 0.0 op: 00050280 w: t9.x t9.x t9.x op: 00000000 7: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 8: xyz: t3 c7 t0 bias-> t3.xy (018c09c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c7.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 9: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t0.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 10: xyz: t0 c1 t0 bias-> t6.xyz (03980840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 11: xyz: t0 t0 t0 bias-> t3.z (020c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 12: xyz: t3 t0 t0 bias-> t1.y (01040003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 13: xyz: t2 t1 t0 bias-> t1.y (01040042) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 1.0 1.0 -t1.y op: 00090891 14: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 15: xyz: t1 t0 t0 bias-> t3.z (020c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 16: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 17: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 18: xyz: t2 t3 t0 bias-> t1.y (010400c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 19: xyz: t1 t5 t0 bias-> t2.xyz (03880141) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t5.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 20: 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 21: xyz: t8 t0 t0 bias-> t1.y (01040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 22: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 23: xyz: t1 t8 t0 bias-> t4.xyz (03900201) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t8.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 24: xyz: t4 t3 t0 bias-> t1.y (010400c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 25: xyz: t1 c6 t0 bias-> t1.y (01040981) w: c6 t0 t0 bias-> (00000026) xyz: t1.xyz c6.zzz -c6.www op: 400b0380 w: t1.x t1.x t1.x op: 00000000 26: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 27: xyz: t1 c2 t0 bias-> t3.xyz (038c0881) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 28: xyz: t3 t7 t6 bias-> t4.xyz (039061c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz t6.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 29: xyz: t2 t4 t0 bias-> t4.xyz (03900102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 30: xyz: t0 c3 t4 bias-> t0.xyz (038048c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.xyz t4.xyz op: 80020200 NOP w: t0.x t0.x t0.x op: 00000000 31: xyz: t0 c4 t1 sub-> o0.xyz (1c001900) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 32: xyz: t3 t7 t0 bias-> t0.xyz (038001c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 33: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 34: xyz: t0 c8 t0 bias-> (00000a00) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c8.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 NODE 1: alu_offset: 35, tex_offset: 5, alu_end: 1, tex_end: 1 (code_addr: 00025063) TEX: KIL t0, t10, texture[0] (0001000a) TEX t0, t9, texture[0] (00008009) 35: xyz: t0 t0 t0 bias-> (00000000) w: t0 t8 t0 sub-> t0.w (00800200) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: 0.0 1.0 srcp.w op: 0323c890 36: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t0.www 1.0 0.0 op: 00050aac w: -t0.w 1.0 0.0 op: 000408a9 NODE 2: alu_offset: 37, tex_offset: 7, alu_end: 0, tex_end: 0 (code_addr: 00007025) TEX: KIL t0, t0, texture[0] (00010000) 37: 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], COLOR, LINEAR DCL IN[2], COLOR[1], LINEAR DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL CONST[4..5] DCL CONST[1..3] DCL TEMP[0..7] IMM FLT32 { 0.0625, 1.0000, 4.0000, 3.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[5].xxxx, CONST[5].yyyy 2: DP3 TEMP[1].x, IN[8], IN[8] 3: RSQ TEMP[1].x, TEMP[1].xxxx 4: MUL TEMP[1], TEMP[1].xxxx, IN[8] 5: MUL TEMP[2].xy, TEMP[0], IMM[0].xxxx 6: TEX TEMP[2], TEMP[2], SAMP[0], 2D 7: SLT TEMP[2].w, IN[8].wwww, TEMP[2].wwww 8: KIL -TEMP[2].wwww 9: DP3 TEMP[3].x, IN[3], IN[3] 10: RSQ TEMP[3], TEMP[3].xxxx 11: MUL TEMP[3], TEMP[3].xxxx, IN[3] 12: MOV TEMP[3], IMM[0].yyyy 13: TXP TEMP[2], IN[5], SAMP[2], 2D 14: MUL TEMP[3], TEMP[3], TEMP[2] 15: TEX TEMP[2], IN[4], SAMP[3], 2D 16: MUL TEMP[3], TEMP[3], TEMP[2] 17: TEX TEMP[4], IN[6], SAMP[4], 2D 18: MUL TEMP[5], TEMP[4], CONST[1] 19: SUB TEMP[6].w, TEMP[5].wwww, CONST[2] 20: KIL TEMP[6].wwww 21: MOV TEMP[1], TEMP[1].zzzz 22: MAD_SAT TEMP[2].x, TEMP[1].xxxx, IMM[0].zzzz, -IMM[0].wwww 23: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[2].xxxx 24: MUL TEMP[2], TEMP[2].xxxx, CONST[3] 25: TEX TEMP[7], IN[7], SAMP[5], 2D 26: ADD TEMP[7], TEMP[7], TEMP[7] 27: MAD TEMP[5], TEMP[2], TEMP[7], TEMP[5] 28: MUL TEMP[5], TEMP[3], TEMP[5] 29: MUL TEMP[5], TEMP[5], IN[1] 30: LRP OUT[0].xyz, IN[2].xxxx, CONST[4], TEMP[5] 31: MOV OUT[0].w, IMM[0].yyyy 32: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[8].w, input[0].wwww; 1: MUL temp[8].xyz, input[0], temp[8].wwww; 2: MAD temp[8].xyz, temp[8].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[8]; 4: MAD temp[0].y, temp[8], const[5].xxxx, const[5].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[6].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[6].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: SUB temp[6].w, temp[5].wwww, const[2]; 23: KIL temp[6].wwww; 24: MOV temp[1], temp[1].zzzz; 25: MAD_SAT temp[2].x, temp[1].xxxx, const[6].zzzz, -const[6].wwww; 26: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 27: MUL temp[2], temp[2].xxxx, const[3]; 28: TEX temp[7], input[7], 2D[5]; 29: ADD temp[7], temp[7], temp[7]; 30: MAD temp[5], temp[2], temp[7], temp[5]; 31: MUL temp[5], temp[3], temp[5]; 32: MUL temp[5], temp[5], input[1]; 33: LRP output[0].xyz, input[2].xxxx, const[4], temp[5]; 34: MOV output[0].w, const[6].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[8].w, input[0].wwww; 1: MUL temp[8].xyz, input[0], temp[8].wwww; 2: MAD temp[8].xyz, temp[8].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[8]; 4: MAD temp[0].y, temp[8], const[5].xxxx, const[5].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[6].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[6].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: SUB temp[6].w, temp[5].wwww, const[2]; 23: KIL temp[6].wwww; 24: MOV temp[1], temp[1].zzzz; 25: MAD_SAT temp[2].x, temp[1].xxxx, const[6].zzzz, -const[6].wwww; 26: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 27: MUL temp[2], temp[2].xxxx, const[3]; 28: TEX temp[7], input[7], 2D[5]; 29: ADD temp[7], temp[7], temp[7]; 30: MAD temp[5], temp[2], temp[7], temp[5]; 31: MUL temp[5], temp[3], temp[5]; 32: MUL temp[5], temp[5], input[1]; 33: LRP output[0].xyz, input[2].xxxx, const[4], temp[5]; 34: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[8].w, input[0].wwww; 1: MUL temp[8].xyz, input[0], temp[8].wwww; 2: MAD temp[8].xyz, temp[8].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[8]; 4: MAD temp[0].y, temp[8], const[5].xxxx, const[5].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[6].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[6].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: SUB temp[6].w, temp[5].wwww, const[2]; 23: KIL temp[6].wwww; 24: MOV temp[1], temp[1].zzzz; 25: MAD_SAT temp[2].x, temp[1].xxxx, const[6].zzzz, -const[6].wwww; 26: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 27: MUL temp[2], temp[2].xxxx, const[3]; 28: TEX temp[7], input[7], 2D[5]; 29: ADD temp[7], temp[7], temp[7]; 30: MAD temp[5], temp[2], temp[7], temp[5]; 31: MUL temp[5], temp[3], temp[5]; 32: MUL temp[5], temp[5], input[1]; 33: LRP output[0].xyz, input[2].xxxx, const[4], temp[5]; 34: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[8].w, input[0].wwww; 1: MUL temp[8].xyz, input[0], temp[8].wwww; 2: MAD temp[8].xyz, temp[8].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[8]; 4: MAD temp[0].y, temp[8], const[5].xxxx, const[5].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[6].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[6].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: SUB temp[6].w, temp[5].wwww, const[2]; 23: KIL temp[6].wwww; 24: MOV temp[1], temp[1].zzzz; 25: MAD_SAT temp[2].x, temp[1].xxxx, const[6].zzzz, -const[6].wwww; 26: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 27: MUL temp[2], temp[2].xxxx, const[3]; 28: TEX temp[7], input[7], 2D[5]; 29: ADD temp[7], temp[7], temp[7]; 30: MAD temp[5], temp[2], temp[7], temp[5]; 31: MUL temp[5], temp[3], temp[5]; 32: MUL temp[5], temp[5], input[1]; 33: LRP output[0].xyz, input[2].xxxx, const[4], temp[5]; 34: MOV output[0].w, const[6].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[8].w, input[0].wwww; 1: MUL temp[8].xyz, input[0], temp[8].wwww; 2: MAD temp[8].xyz, temp[8].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[8]; 4: MAD temp[0].y, temp[8], const[5].xxxx, const[5].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[6].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[6].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: SUB temp[6].w, temp[5].wwww, const[2]; 23: KIL temp[6].wwww; 24: MOV temp[1], temp[1].zzzz; 25: MAD_SAT temp[2].x, temp[1].xxxx, const[6].zzzz, -const[6].wwww; 26: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 27: MUL temp[2], temp[2].xxxx, const[3]; 28: TEX temp[7], input[7], 2D[5]; 29: ADD temp[7], temp[7], temp[7]; 30: MAD temp[5], temp[2], temp[7], temp[5]; 31: MUL temp[5], temp[3], temp[5]; 32: MUL temp[5], temp[5], input[1]; 33: LRP output[0].xyz, input[2].xxxx, const[4], temp[5]; 34: MOV output[0].w, const[6].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: RCP temp[8].w, input[0].wwww; 1: MUL temp[8].xyz, input[0], temp[8].wwww; 2: MAD temp[8].xyz, temp[8].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[8]; 4: MAD temp[0].y, temp[8], const[5].xxxx, const[5].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[6].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[6].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: SUB temp[6].w, temp[5].wwww, const[2]; 23: KIL temp[6].wwww; 24: MOV temp[1], temp[1].zzzz; 25: MAD_SAT temp[2].x, temp[1].xxxx, const[6].zzzz, -const[6].wwww; 26: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 27: MUL temp[2], temp[2].xxxx, const[3]; 28: TEX temp[7], input[7], 2D[5]; 29: ADD temp[7], temp[7], temp[7]; 30: MAD temp[5], temp[2], temp[7], temp[5]; 31: MUL temp[5], temp[3], temp[5]; 32: MUL temp[5], temp[5], input[1]; 33: LRP_SAT output[0].xyz, input[2].xxxx, const[4], temp[5]; 34: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[8].w, input[0].wwww; 1: MUL temp[8].xyz, input[0], temp[8].wwww; 2: MAD temp[8].xyz, temp[8].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[8]; 4: MAD temp[0].y, temp[8], const[5].xxxx, const[5].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[6].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[6].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: SUB temp[6].w, temp[5].wwww, const[2]; 23: KIL temp[6].wwww; 24: MOV temp[1], temp[1].zzzz; 25: MAD_SAT temp[2].x, temp[1].xxxx, const[6].zzzz, -const[6].wwww; 26: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 27: MUL temp[2], temp[2].xxxx, const[3]; 28: TEX temp[7], input[7], 2D[5]; 29: ADD temp[7], temp[7], temp[7]; 30: MAD temp[5], temp[2], temp[7], temp[5]; 31: MUL temp[5], temp[3], temp[5]; 32: MUL temp[5], temp[5], input[1]; 33: LRP_SAT output[0].xyz, input[2].xxxx, const[4], temp[5]; 34: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[8].w, input[0].wwww; 1: MUL temp[8].xyz, input[0], temp[8].wwww; 2: MAD temp[8].xyz, temp[8].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[8]; 4: MAD temp[0].y, temp[8], const[5].xxxx, const[5].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, |temp[1].xxxx|; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[6].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: ADD temp[9].w, input[8].wwww, -temp[2].wwww; 11: CMP temp[2].w, temp[9], none.1111, none.0000; 12: KIL -temp[2].wwww; 13: DP3 temp[3].x, input[3], input[3]; 14: RSQ temp[3], |temp[3].xxxx|; 15: MUL temp[3], temp[3].xxxx, input[3]; 16: MOV temp[3], const[6].yyyy; 17: TXP temp[2], input[5], 2D[2]; 18: MUL temp[3], temp[3], temp[2]; 19: TEX temp[2], input[4], 2D[3]; 20: MUL temp[3], temp[3], temp[2]; 21: TEX temp[4], input[6], 2D[4]; 22: MUL temp[5], temp[4], const[1]; 23: ADD temp[6].w, temp[5].wwww, -const[2]; 24: KIL temp[6].wwww; 25: MOV temp[1], temp[1].zzzz; 26: MAD_SAT temp[2].x, temp[1].xxxx, const[6].zzzz, -const[6].wwww; 27: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 28: MUL temp[2], temp[2].xxxx, const[3]; 29: TEX temp[7], input[7], 2D[5]; 30: ADD temp[7], temp[7], temp[7]; 31: MAD temp[5], temp[2], temp[7], temp[5]; 32: MUL temp[5], temp[3], temp[5]; 33: MUL temp[5], temp[5], input[1]; 34: ADD temp[10].xyz, const[4], -temp[5]; 35: MAD_SAT output[0].xyz, input[2].xxxx, temp[10], temp[5]; 36: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[8].w, input[0].w___; 1: MUL temp[8].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[8].xy, temp[8].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[8].x___; 4: MAD temp[0].y, temp[8]._y__, const[5]._x__, const[5]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[6].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: ADD temp[9].w, input[8].___w, -temp[2].___w; 11: CMP temp[2].w, temp[9].___w, none.___1, none.___0; 12: KIL -temp[2].wwww; 13: MOV temp[3].xyz, const[6].yyy_; 14: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 15: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 16: TEX temp[2].xyz, input[4].xy__, 2D[3]; 17: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 18: TEX temp[4], input[6].xy__, 2D[4]; 19: MUL temp[5], temp[4], const[1]; 20: ADD temp[6].w, temp[5].___w, -const[2].___w; 21: KIL temp[6].wwww; 22: MOV temp[1].x, temp[1].z___; 23: MAD_SAT temp[2].x, temp[1].x___, const[6].z___, -const[6].w___; 24: MUL temp[2].x, temp[2].x___, temp[2].x___; 25: MUL temp[2].xyz, temp[2].xxx_, const[3].xyz_; 26: TEX temp[7].xyz, input[7].xy__, 2D[5]; 27: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 28: MAD temp[5].xyz, temp[2].xyz_, temp[7].xyz_, temp[5].xyz_; 29: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 30: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 31: ADD temp[10].xyz, const[4].xyz_, -temp[5].xyz_; 32: MAD_SAT output[0].xyz, input[2].xxx_, temp[10].xyz_, temp[5].xyz_; 33: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[8].w, input[0].w___; 1: MUL temp[8].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[8].xy, temp[8].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[8].x___; 4: MAD temp[0].y, temp[8]._y__, const[5]._x__, const[5]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[6].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: ADD temp[9].w, input[8].___w, -temp[2].___w; 11: CMP temp[2].w, temp[9].___w, none.___1, none.___0; 12: KIL -temp[2].wwww; 13: MOV temp[3].xyz, const[6].yyy_; 14: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 15: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 16: TEX temp[2].xyz, input[4].xy__, 2D[3]; 17: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 18: TEX temp[4], input[6].xy__, 2D[4]; 19: MUL temp[5], temp[4], const[1]; 20: ADD temp[6].w, temp[5].___w, -const[2].___w; 21: KIL temp[6].wwww; 22: MOV temp[1].x, temp[1].z___; 23: MAD_SAT temp[2].x, temp[1].x___, const[6].z___, -const[6].w___; 24: MUL temp[2].x, temp[2].x___, temp[2].x___; 25: MUL temp[2].xyz, temp[2].xxx_, const[3].xyz_; 26: TEX temp[7].xyz, input[7].xy__, 2D[5]; 27: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 28: MAD temp[5].xyz, temp[2].xyz_, temp[7].xyz_, temp[5].xyz_; 29: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 30: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 31: ADD temp[10].xyz, const[4].xyz_, -temp[5].xyz_; 32: MAD_SAT output[0].xyz, input[2].xxx_, temp[10].xyz_, temp[5].xyz_; 33: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[8].w, input[0].w___; 1: MUL temp[8].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[8].xy, temp[8].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[8].x___; 4: MAD temp[0].y, temp[8]._y__, const[5]._x__, const[5]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[6].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: CMP temp[2].w, (input[8] - temp[2]).___w, none.___1, none.___0; 11: KIL -temp[2].wwww; 12: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 13: MOV temp[3].xyz, temp[2].xyz_; 14: TEX temp[2].xyz, input[4].xy__, 2D[3]; 15: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 16: TEX temp[4], input[6].xy__, 2D[4]; 17: MUL temp[5], temp[4], const[1]; 18: KIL (temp[5] - const[2]).wwww; 19: MAD_SAT temp[2].x, temp[1].z___, const[6].z___, -const[6].w___; 20: MUL temp[2].x, temp[2].x___, temp[2].x___; 21: MUL temp[2].xyz, temp[2].xxx_, const[3].xyz_; 22: TEX temp[7].xyz, input[7].xy__, 2D[5]; 23: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 24: MAD temp[5].xyz, temp[2].xyz_, temp[7].xyz_, temp[5].xyz_; 25: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 26: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 27: MAD_SAT output[0].xyz, input[2].xxx_, (const[4] - temp[5]).xyz_, temp[5].xyz_; 28: MOV_SAT output[0].w, none.___1; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[8].w, input[0].w___; 1: MUL temp[8].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[8].xy, temp[8].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[8].x___; 4: MAD temp[0].y, temp[8]._y__, const[5]._x__, const[5]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[6].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: CMP temp[2].w, (input[8] - temp[2]).___w, none.___1, none.___0; 11: MOV temp[6], -temp[2].wwww; 12: KIL temp[6]; 13: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 14: MOV temp[3].xyz, temp[2].xyz_; 15: TEX temp[2].xyz, input[4].xy__, 2D[3]; 16: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 17: TEX temp[4], input[6].xy__, 2D[4]; 18: MUL temp[5], temp[4], const[1]; 19: MOV temp[9], (temp[5] - const[2]).wwww; 20: KIL temp[9]; 21: MAD_SAT temp[2].x, temp[1].z___, const[6].z___, -const[6].w___; 22: MUL temp[2].x, temp[2].x___, temp[2].x___; 23: MUL temp[2].xyz, temp[2].xxx_, const[3].xyz_; 24: TEX temp[7].xyz, input[7].xy__, 2D[5]; 25: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 26: MAD temp[5].xyz, temp[2].xyz_, temp[7].xyz_, temp[5].xyz_; 27: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 28: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 29: MAD_SAT output[0].xyz, input[2].xxx_, (const[4] - temp[5]).xyz_, temp[5].xyz_; 30: MOV_SAT output[0].w, none.___1; CONST[5] = { 0.0625 1.0000 4.0000 3.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[8].w, input[0].w___; 1: MUL temp[8].xy, input[0].xy__, temp[8].ww__; 2: MAD temp[8].xy, temp[8].xy__, const[6].xy__, const[7].xy__; 3: MOV temp[0].x, temp[8].x___; 4: MAD temp[0].y, temp[8]._y__, const[4]._x__, const[4]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[5].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: CMP temp[2].w, (input[8] - temp[2]).___w, none.___1, none.___0; 11: MOV temp[6], -temp[2].wwww; 12: KIL temp[6]; 13: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 14: MOV temp[3].xyz, temp[2].xyz_; 15: TEX temp[2].xyz, input[4].xy__, 2D[3]; 16: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 17: TEX temp[4], input[6].xy__, 2D[4]; 18: MUL temp[5], temp[4], const[0]; 19: MOV temp[9], (temp[5] - const[1]).wwww; 20: KIL temp[9]; 21: MAD_SAT temp[2].x, temp[1].z___, const[5].z___, -const[5].w___; 22: MUL temp[2].x, temp[2].x___, temp[2].x___; 23: MUL temp[2].xyz, temp[2].xxx_, const[2].xyz_; 24: TEX temp[7].xyz, input[7].xy__, 2D[5]; 25: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 26: MAD temp[5].xyz, temp[2].xyz_, temp[7].xyz_, temp[5].xyz_; 27: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 28: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 29: MAD_SAT output[0].xyz, input[2].xxx_, (const[3] - temp[5]).xyz_, temp[5].xyz_; 30: MOV_SAT output[0].w, none.___1; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[10].w, input[0].w___; 1: MUL temp[11].xy, input[0].xy__, temp[10].ww__; 2: MAD temp[12].xy, temp[11].xy__, const[6].xy__, const[7].xy__; 3: MOV temp[0].x, temp[12].x___; 4: MAD temp[0].y, temp[12]._y__, const[4]._x__, const[4]._y__; 5: DP3 temp[13].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[14].x, |temp[13].x___|; 7: MUL temp[15].z, temp[14].__x_, input[8].__z_; 8: MUL temp[16].xy, temp[0].xy__, const[5].xx__; 9: TEX temp[17].w, temp[16].xy__, 2D[0]; 10: CMP temp[18].w, (input[8] - temp[17]).___w, none.___1, none.___0; 11: MOV temp[19], -temp[18].wwww; 12: KIL temp[19]; 13: TXP temp[20].xyz, input[5].xy_w, 2D[2]; 14: MOV temp[21].xyz, temp[20].xyz_; 15: TEX temp[22].xyz, input[4].xy__, 2D[3]; 16: MUL temp[23].xyz, temp[21].xyz_, temp[22].xyz_; 17: TEX temp[24], input[6].xy__, 2D[4]; 18: MUL temp[25], temp[24], const[0]; 19: MOV temp[26], (temp[25] - const[1]).wwww; 20: KIL temp[26]; 21: MAD_SAT temp[27].x, temp[15].z___, const[5].z___, -const[5].w___; 22: MUL temp[28].x, temp[27].x___, temp[27].x___; 23: MUL temp[29].xyz, temp[28].xxx_, const[2].xyz_; 24: TEX temp[30].xyz, input[7].xy__, 2D[5]; 25: ADD temp[31].xyz, temp[30].xyz_, temp[30].xyz_; 26: MAD temp[32].xyz, temp[29].xyz_, temp[31].xyz_, temp[25].xyz_; 27: MUL temp[33].xyz, temp[23].xyz_, temp[32].xyz_; 28: MUL temp[34].xyz, temp[33].xyz_, input[1].xyz_; 29: MAD_SAT output[0].xyz, input[2].xxx_, (const[3] - temp[34]).xyz_, temp[34].xyz_; 30: MOV_SAT output[0].w, none.___1; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[10].w, src0.w 1: src0.xyz = input[0], src0.w = temp[10] MAD temp[11].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[11], src1.xyz = const[6], src2.xyz = const[7] MAD temp[12].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[12] MAD temp[0].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[12], src1.xyz = const[4] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = input[8] DP3 temp[13].x, src0.xyz, src0.xyz 6: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 7: src0.xyz = temp[14], src1.xyz = input[8] MAD temp[15].z, src0.__x, src1.__z, src0.000 8: src0.xyz = temp[0], src1.xyz = const[5] MAD temp[16].xy, src0.xy_, src1.xx_, src0.000 9: TEX temp[17].w, temp[16].xy__, 2D[0]; 10: src0.w = temp[17], src1.w = input[8], srcp.w = (src1 - src0) CMP temp[18].w, src0.0, src0.1, srcp.w 11: src0.w = temp[18] MAD temp[19].xyz, -src0.www, src0.111, src0.000 MAD temp[19].w, -src0.w, src0.1, src0.0 12: KIL temp[19]; 13: TXP temp[20].xyz, input[5].xy_w, 2D[2]; 14: src0.xyz = temp[20] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 15: TEX temp[22].xyz, input[4].xy__, 2D[3]; 16: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 17: TEX temp[24], input[6].xy__, 2D[4]; 18: src0.xyz = temp[24], src0.w = temp[24], src1.xyz = const[0], src1.w = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[25].w, src0.w, src1.w, src0.0 19: src0.w = const[1], src1.w = temp[25], srcp.w = (src1 - src0) MAD temp[26].xyz, srcp.www, src0.111, src0.000 MAD temp[26].w, srcp.w, src0.1, src0.0 20: KIL temp[26]; 21: src0.xyz = temp[15], src0.w = const[5], src1.xyz = const[5] MAD_SAT temp[27].x, src0.z__, src1.z__, -src0.w__ 22: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 23: src0.xyz = temp[28], src1.xyz = const[2] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 24: TEX temp[30].xyz, input[7].xy__, 2D[5]; 25: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, src0.xyz 26: src0.xyz = temp[29], src1.xyz = temp[31], src2.xyz = temp[25] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 27: src0.xyz = temp[23], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[33], src1.xyz = input[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 29: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 30: MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[20].xyz, input[5].xy_w, 2D[2]; 2: TEX temp[22].xyz, input[4].xy__, 2D[3]; 3: TEX temp[24], input[6].xy__, 2D[4]; 4: TEX temp[30].xyz, input[7].xy__, 2D[5]; 5: src0.xyz = temp[24], src0.w = temp[24], src1.xyz = const[0], src1.w = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[25].w, src0.w, src1.w, src0.0 6: src0.w = const[1], src1.w = temp[25], srcp.w = (src1 - src0) MAD temp[26].xyz, srcp.www, src0.111, src0.000 MAD temp[26].w, srcp.w, src0.1, src0.0 7: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src0.1, src0.1, src0.0 8: src0.xyz = temp[20], src0.w = input[0] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 RCP temp[10].w, src0.w 9: src0.xyz = input[0], src0.w = temp[10] MAD temp[11].xy, src0.xy_, src0.ww_, src0.000 10: src0.xyz = temp[11], src1.xyz = const[6], src2.xyz = const[7] MAD temp[12].xy, src0.xy_, src1.xy_, src2.xy_ 11: src0.xyz = temp[12], src1.xyz = const[4] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 12: src0.xyz = temp[12] MAD temp[0].x, src0.x__, src0.111, src0.000 13: src0.xyz = temp[0], src1.xyz = const[5] MAD temp[16].xy, src0.xy_, src1.xx_, src0.000 14: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = input[8] DP3 temp[13].x, src0.xyz, src0.xyz 16: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 17: src0.xyz = temp[14], src1.xyz = input[8] MAD temp[15].z, src0.__x, src1.__z, src0.000 18: src0.xyz = temp[15], src0.w = const[5], src1.xyz = const[5] MAD_SAT temp[27].x, src0.z__, src1.z__, -src0.w__ 19: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 20: src0.xyz = temp[28], src1.xyz = const[2] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[29], src1.xyz = temp[31], src2.xyz = temp[25] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 22: src0.xyz = temp[23], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[33], src1.xyz = input[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 25: BEGIN_TEX; 26: KIL temp[26]; 27: TEX temp[17].w, temp[16].xy__, 2D[0]; 28: src0.w = temp[17], src1.w = input[8], srcp.w = (src1 - src0) CMP temp[18].w, src0.0, src0.1, srcp.w 29: src0.w = temp[18] MAD temp[19].xyz, -src0.www, src0.111, src0.000 MAD temp[19].w, -src0.w, src0.1, src0.0 30: BEGIN_TEX; 31: KIL temp[19]; Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[20].xyz, input[5].xy_w, 2D[2]; 2: TEX temp[22].xyz, input[4].xy__, 2D[3]; 3: TEX temp[24], input[6].xy__, 2D[4]; 4: TEX temp[30].xyz, input[7].xy__, 2D[5]; 5: src0.xyz = temp[24], src0.w = temp[24], src1.xyz = const[0], src1.w = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[25].w, src0.w, src1.w, src0.0 6: src0.w = const[1], src1.w = temp[25], srcp.w = (src1 - src0) MAD temp[26].xyz, srcp.www, src0.111, src0.000 MAD temp[26].w, srcp.w, src0.1, src0.0 7: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src0.1, src0.1, src0.0 8: src0.xyz = temp[20], src0.w = input[0] MAD temp[21].xyz, src0.xyz, src0.111, src0.000 RCP temp[10].w, src0.w 9: src0.xyz = input[0], src0.w = temp[10] MAD temp[11].xy, src0.xy_, src0.ww_, src0.000 10: src0.xyz = temp[11], src1.xyz = const[6], src2.xyz = const[7] MAD temp[12].xy, src0.xy_, src1.xy_, src2.xy_ 11: src0.xyz = temp[12], src1.xyz = const[4] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 12: src0.xyz = temp[12] MAD temp[0].x, src0.x__, src0.111, src0.000 13: src0.xyz = temp[0], src1.xyz = const[5] MAD temp[16].xy, src0.xy_, src1.xx_, src0.000 14: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = input[8] DP3 temp[13].x, src0.xyz, src0.xyz 16: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 17: src0.xyz = temp[14], src1.xyz = input[8] MAD temp[15].z, src0.__x, src1.__z, src0.000 18: src0.xyz = temp[15], src0.w = const[5], src1.xyz = const[5] MAD_SAT temp[27].x, src0.z__, src1.z__, -src0.w__ 19: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 20: src0.xyz = temp[28], src1.xyz = const[2] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[29], src1.xyz = temp[31], src2.xyz = temp[25] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 22: src0.xyz = temp[23], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[33], src1.xyz = input[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 25: BEGIN_TEX; 26: KIL temp[26]; 27: TEX temp[17].w, temp[16].xy__, 2D[0]; 28: src0.w = temp[17], src1.w = input[8], srcp.w = (src1 - src0) CMP temp[18].w, src0.0, src0.1, srcp.w 29: src0.w = temp[18] MAD temp[19].xyz, -src0.www, src0.111, src0.000 MAD temp[19].w, -src0.w, src0.1, src0.0 30: BEGIN_TEX; 31: KIL temp[19]; Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[2].xyz, input[4].xy_w, 2D[2]; 2: TEX temp[3].xyz, input[3].xy__, 2D[3]; 3: TEX temp[4], input[5].xy__, 2D[4]; 4: TEX temp[5].xyz, input[6].xy__, 2D[5]; 5: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = const[0], src1.w = const[0] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 6: src0.w = const[1], src1.w = temp[0], srcp.w = (src1 - src0) MAD temp[6].xyz, srcp.www, src0.111, src0.000 MAD temp[6].w, srcp.w, src0.1, src0.0 7: src0.xyz = temp[5] MAD temp[5].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src0.1, src0.1, src0.0 8: src0.xyz = temp[2], src0.w = input[8] MAD temp[2].xyz, src0.xyz, src0.111, src0.000 RCP temp[0].w, src0.w 9: src0.xyz = input[8], src0.w = temp[0] MAD temp[8].xy, src0.xy_, src0.ww_, src0.00_ 10: src0.xyz = temp[8], src1.xyz = const[6], src2.xyz = const[7] MAD temp[1].yz, src0._xy, src1._xy, src2._xy 11: src0.xyz = temp[1], src1.xyz = const[4] MAD temp[8].y, src0._z_, src1._x_, src1._y_ 12: src0.xyz = temp[1] MAD temp[8].x, src0.y__, src0.11_, src0.00_ 13: src0.xyz = temp[8], src1.xyz = const[5] MAD temp[8].xy, src0.xy_, src1.xx_, src0.00_ 14: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = input[7] DP3 temp[1].y, src0.xyz, src0.xyz 16: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 17: src0.xyz = temp[1], src1.xyz = input[7] MAD temp[1].y, src0._y_, src1._z_, src0._0_ 18: src0.xyz = temp[1], src0.w = const[5], src1.xyz = const[5] MAD_SAT temp[1].y, src0._y_, src1._z_, -src0._w_ 19: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._y_, src0._0_ 20: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[3].xyz, src0.yyy, src1.xyz, src0.000 21: src0.xyz = temp[3], src1.xyz = temp[5], src2.xyz = temp[4] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 22: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[2], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 25: BEGIN_TEX; 26: KIL temp[6]; 27: TEX temp[0].w, temp[8].xy__, 2D[0]; 28: src0.w = temp[0], src1.w = input[7], srcp.w = (src1 - src0) CMP temp[0].w, src0.0, src0.1, srcp.w 29: src0.w = temp[0] MAD temp[0].xyz, -src0.www, src0.111, src0.000 MAD temp[0].w, -src0.w, src0.1, src0.0 30: BEGIN_TEX; 31: KIL temp[0]; pc=25************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 19, tex_end: 3 (code_addr: 004604c0) TEX: TXP t2, t4, texture[2] (00019084) TEX t3, t3, texture[3] (000098c3) TEX t4, t5, texture[4] (0000a105) TEX t5, t6, texture[5] (0000a946) 0: xyz: t4 c0 t0 bias-> t4.xyz (03900804) w: t4 c0 t0 bias-> t0.w (00800804) xyz: t4.xyz c0.xyz 0.0 op: 80050200 NOP w: t4.w c0.w 0.0 op: 00040509 1: xyz: t0 t0 t0 bias-> t6.xyz (03980000) w: c1 t0 t0 sub-> t6.w (00980021) xyz: srcp.www 1.0 0.0 op: 00050a93 w: srcp.w 1.0 0.0 op: 0024088f 2: xyz: t5 t0 t0 bias-> t5.xyz (03940005) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t5.xyz 1.0 t5.xyz op: 00000a80 w: 1.0 1.0 0.0 op: 40040891 3: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t8 t0 t0 bias-> t0.w (00800008) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t8.w t2.x t2.x op: 05000009 4: xyz: t8 t0 t0 bias-> t8.xy (01a00008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t0.www 0.0 op: 00050600 w: t8.x t8.x t8.x op: 00000000 5: xyz: t8 c6 c7 bias-> t1.yz (03067988) w: t0 t0 t0 bias-> (00000000) xyz: t8.zxy c6.zxy c7.zxy op: 00070d9a w: t8.x t8.x t8.x op: 00000000 6: xyz: t1 c4 t0 bias-> t8.y (01200901) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz c4.xxx c4.xyz op: 00010283 w: t1.x t1.x t1.x op: 00000000 7: xyz: t1 t0 t0 bias-> t8.x (00a00001) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy 1.0 0.0 op: 00050a82 w: t1.x t1.x t1.x op: 00000000 8: xyz: t8 c5 t0 bias-> t8.xy (01a00948) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz c5.xxx 0.0 op: 00050280 w: t8.x t8.x t8.x op: 00000000 9: 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 10: xyz: t7 t0 t0 bias-> t1.y (01040007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t7.xyz t7.xxx op: 00804000 w: t7.x t7.x t7.x op: 00000000 11: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 12: xyz: t1 t7 t0 bias-> t1.y (010401c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t7.zzz 0.0 op: 00050380 w: t1.x t1.x t1.x op: 00000000 13: xyz: t1 c5 t0 bias-> t1.y (01040941) w: c5 t0 t0 bias-> (00000025) xyz: t1.xyz c5.zzz -c5.www op: 400b0380 w: t1.x t1.x t1.x op: 00000000 14: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 15: xyz: t1 c2 t0 bias-> t3.xyz (038c0881) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 16: xyz: t3 t5 t4 bias-> t3.xyz (038c4143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t4.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 17: 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 18: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz 0.0 op: 80050200 NOP w: t2.x t2.x t2.x op: 00000000 19: xyz: t0 c3 t1 sub-> o0.xyz (1c0018c0) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 20, tex_offset: 4, alu_end: 1, tex_end: 1 (code_addr: 00024054) TEX: KIL t0, t6, texture[0] (00010006) TEX t0, t8, texture[0] (00008008) 20: xyz: t0 t0 t0 bias-> (00000000) w: t0 t7 t0 sub-> t0.w (008001c0) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: 0.0 1.0 srcp.w op: 0323c890 21: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t0.www 1.0 0.0 op: 00050aac w: -t0.w 1.0 0.0 op: 000408a9 NODE 2: alu_offset: 22, tex_offset: 6, alu_end: 0, tex_end: 0 (code_addr: 00006016) TEX: KIL t0, t0, texture[0] (00010000) 22: 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], COLOR, 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 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT 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_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT 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_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT 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_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 pc=26************************************* 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: 40050a80 w: t0.w 1.0 0.0 op: 40040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[2], PERSPECTIVE DCL IN[4], GENERIC[4], PERSPECTIVE DCL IN[5], GENERIC[5], PERSPECTIVE DCL IN[6], GENERIC[6], PERSPECTIVE DCL IN[7], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL CONST[0] DCL CONST[4..7] DCL TEMP[0..12] IMM FLT32 { 1.0000, 0.0000, 0.5000, 2.0000} IMM FLT32 { -1.0000, 0.0000, 0.0000, 0.0000} 0: MAD TEMP[0].xy, IN[2], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[4], SAMP[0], 2D 2: MOV TEMP[2], IMM[0].xxxx 3: MUL_SAT TEMP[2], TEMP[2], IN[2].wwww 4: TEX TEMP[3], IN[2], SAMP[1], 2D 5: MOV TEMP[3].x, TEMP[3].wwww 6: MAD TEMP[3].xy, TEMP[3], IMM[0].wwww, IMM[1].xxxx 7: TEX TEMP[4], TEMP[0], SAMP[2], 2D 8: MOV TEMP[4].x, TEMP[4].wwww 9: MAD TEMP[4].xy, TEMP[4], IMM[0].wwww, IMM[1].xxxx 10: MAD TEMP[3].xy, TEMP[2].xxxx, TEMP[4], TEMP[3] 11: MOV TEMP[3].z, IMM[0].yyyy 12: DP3 TEMP[5].x, TEMP[3], TEMP[3] 13: ADD TEMP[5].x, IMM[0].xxxx, -TEMP[5].xxxx 14: RSQ TEMP[5].x, TEMP[5].xxxx 15: RCP TEMP[3].z, TEMP[5].xxxx 16: DP3 TEMP[6].x, IN[5], TEMP[3] 17: DP3 TEMP[6].y, IN[6], TEMP[3] 18: DP3 TEMP[6].z, IN[7], TEMP[3] 19: TEX TEMP[7], TEMP[6], SAMP[3], CUBE 20: MUL TEMP[7], TEMP[7], CONST[4] 21: TEX TEMP[8], TEMP[0], SAMP[4], 2D 22: ADD TEMP[8], TEMP[8], -IMM[0].zzzz 23: MAD TEMP[1], TEMP[2].xxxx, TEMP[8], TEMP[1] 24: MUL TEMP[9], TEMP[1], CONST[5] 25: MUL TEMP[9], TEMP[7], TEMP[9] 26: DP3 TEMP[5], IN[3], TEMP[6] 27: ADD TEMP[5], TEMP[5], TEMP[5] 28: MAD TEMP[10], -TEMP[6], TEMP[5].xxxx, IN[3] 29: TEX TEMP[7], TEMP[10], SAMP[5], CUBE 30: TEX TEMP[11], IN[4], SAMP[6], 2D 31: TEX TEMP[12], TEMP[0], SAMP[7], 2D 32: ADD TEMP[12], TEMP[12], -IMM[0].zzzz 33: MAD_SAT TEMP[11], TEMP[2].xxxx, TEMP[12], TEMP[11] 34: ADD TEMP[10], TEMP[11], TEMP[11] 35: MAD TEMP[9], TEMP[10], TEMP[7], TEMP[9] 36: MUL TEMP[9], CONST[6].xxxx, TEMP[9] 37: LRP TEMP[9].xyz, IN[1].xxxx, CONST[7], TEMP[9] 38: MUL OUT[0], TEMP[9], IN[0] 39: MOV OUT[0].w, CONST[6].yyyy 40: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[8].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].wwww, const[9].xxxx; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].wwww, const[9].xxxx; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[8].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[8].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[4]; 22: ADD temp[8], temp[8], -const[8].zzzz; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[5]; 30: TEX temp[11], input[4], 2D[6]; 31: TEX temp[12], temp[0], 2D[7]; 32: ADD temp[12], temp[12], -const[8].zzzz; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[8].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].wwww, const[9].xxxx; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].wwww, const[9].xxxx; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[8].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[8].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[4]; 22: ADD temp[8], temp[8], -const[8].zzzz; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[5]; 30: TEX temp[11], input[4], 2D[6]; 31: TEX temp[12], temp[0], 2D[7]; 32: ADD temp[12], temp[12], -const[8].zzzz; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[8].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].wwww, const[9].xxxx; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].wwww, const[9].xxxx; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[8].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[8].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[4]; 22: ADD temp[8], temp[8], -const[8].zzzz; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[5]; 30: TEX temp[11], input[4], 2D[6]; 31: TEX temp[12], temp[0], 2D[7]; 32: ADD temp[12], temp[12], -const[8].zzzz; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[8].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].wwww, const[9].xxxx; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].wwww, const[9].xxxx; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[8].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[8].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[4]; 22: ADD temp[8], temp[8], -const[8].zzzz; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[5]; 30: TEX temp[11], input[4], 2D[6]; 31: TEX temp[12], temp[0], 2D[7]; 32: ADD temp[12], temp[12], -const[8].zzzz; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[8].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].wwww, const[9].xxxx; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].wwww, const[9].xxxx; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[8].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[8].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[4]; 22: ADD temp[8], temp[8], -const[8].zzzz; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[5]; 30: TEX temp[11], input[4], 2D[6]; 31: TEX temp[12], temp[0], 2D[7]; 32: ADD temp[12], temp[12], -const[8].zzzz; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[8].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].wwww, const[9].xxxx; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].wwww, const[9].xxxx; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[8].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[8].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[4]; 22: ADD temp[8], temp[8], -const[8].zzzz; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[5]; 30: TEX temp[11], input[4], 2D[6]; 31: TEX temp[12], temp[0], 2D[7]; 32: ADD temp[12], temp[12], -const[8].zzzz; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL_SAT output[0], temp[9], input[0]; 39: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[8].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].wwww, const[9].xxxx; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].wwww, const[9].xxxx; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[8].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[8].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[4]; 22: ADD temp[8], temp[8], -const[8].zzzz; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[5]; 30: TEX temp[11], input[4], 2D[6]; 31: TEX temp[12], temp[0], 2D[7]; 32: ADD temp[12], temp[12], -const[8].zzzz; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL_SAT output[0], temp[9], input[0]; 39: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[8].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].wwww, const[9].xxxx; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].wwww, const[9].xxxx; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[8].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[8].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, |temp[5].xxxx|; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[4]; 22: ADD temp[8], temp[8], -const[8].zzzz; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[5]; 30: TEX temp[11], input[4], 2D[6]; 31: TEX temp[12], temp[0], 2D[7]; 32: ADD temp[12], temp[12], -const[8].zzzz; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: ADD temp[13].xyz, const[7], -temp[9]; 38: MAD temp[9].xyz, input[1].xxxx, temp[13], temp[9]; 39: MUL_SAT output[0], temp[9], input[0]; 40: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[4].xy__, 2D[0]; 2: MOV temp[2].x, const[8].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 4: TEX temp[3].yw, input[2].xy__, 2D[1]; 5: MOV temp[3].x, temp[3].w___; 6: MAD temp[3].xy, temp[3].xy__, const[8].ww__, const[9].xx__; 7: TEX temp[4].yw, temp[0].xy__, 2D[2]; 8: MOV temp[4].x, temp[4].w___; 9: MAD temp[4].xy, temp[4].xy__, const[8].ww__, const[9].xx__; 10: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 11: MOV temp[3].z, const[8].__y_; 12: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 13: ADD temp[5].x, const[8].x___, -temp[5].x___; 14: RSQ temp[5].x, |temp[5].x___|; 15: RCP temp[3].z, temp[5].x___; 16: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 17: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 18: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 19: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 20: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 21: TEX temp[8].xyz, temp[0].xy__, 2D[4]; 22: ADD temp[8].xyz, temp[8].xyz_, -const[8].zzz_; 23: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 24: MUL temp[9].xyz, temp[1].xyz_, const[5].xyz_; 25: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 26: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 27: ADD temp[5].x, temp[5].x___, temp[5].x___; 28: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 29: TEX temp[7].xyz, temp[10].xyz_, CUBE[5]; 30: TEX temp[11].xyz, input[4].xy__, 2D[6]; 31: TEX temp[12].xyz, temp[0].xy__, 2D[7]; 32: ADD temp[12].xyz, temp[12].xyz_, -const[8].zzz_; 33: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 34: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 35: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 36: MUL temp[9].xyz, const[6].xxx_, temp[9].xyz_; 37: ADD temp[13].xyz, const[7].xyz_, -temp[9].xyz_; 38: MAD temp[9].xyz, input[1].xxx_, temp[13].xyz_, temp[9].xyz_; 39: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[4].xy__, 2D[0]; 2: MOV temp[2].x, const[8].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 4: TEX temp[3].yw, input[2].xy__, 2D[1]; 5: MOV temp[3].x, temp[3].w___; 6: MAD temp[3].xy, temp[3].xy__, const[8].ww__, const[9].xx__; 7: TEX temp[4].yw, temp[0].xy__, 2D[2]; 8: MOV temp[4].x, temp[4].w___; 9: MAD temp[4].xy, temp[4].xy__, const[8].ww__, const[9].xx__; 10: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 11: MOV temp[3].z, const[8].__y_; 12: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 13: ADD temp[5].x, const[8].x___, -temp[5].x___; 14: RSQ temp[5].x, |temp[5].x___|; 15: RCP temp[3].z, temp[5].x___; 16: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 17: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 18: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 19: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 20: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 21: TEX temp[8].xyz, temp[0].xy__, 2D[4]; 22: ADD temp[8].xyz, temp[8].xyz_, -const[8].zzz_; 23: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 24: MUL temp[9].xyz, temp[1].xyz_, const[5].xyz_; 25: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 26: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 27: ADD temp[5].x, temp[5].x___, temp[5].x___; 28: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 29: TEX temp[7].xyz, temp[10].xyz_, CUBE[5]; 30: TEX temp[11].xyz, input[4].xy__, 2D[6]; 31: TEX temp[12].xyz, temp[0].xy__, 2D[7]; 32: ADD temp[12].xyz, temp[12].xyz_, -const[8].zzz_; 33: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 34: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 35: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 36: MUL temp[9].xyz, const[6].xxx_, temp[9].xyz_; 37: ADD temp[13].xyz, const[7].xyz_, -temp[9].xyz_; 38: MAD temp[9].xyz, input[1].xxx_, temp[13].xyz_, temp[9].xyz_; 39: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[4].xy__, 2D[0]; 2: MOV_SAT temp[2].x, input[2].w___; 3: TEX temp[3].yw, input[2].xy__, 2D[1]; 4: MOV temp[3].x, temp[3].w___; 5: MAD temp[3].xy, temp[3].xy__, const[8].ww__, none.-1-1__; 6: TEX temp[4].yw, temp[0].xy__, 2D[2]; 7: MOV temp[4].x, temp[4].w___; 8: MAD temp[4].xy, temp[4].xy__, const[8].ww__, none.-1-1__; 9: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[5].x, none.1___, -temp[5].x___; 13: RSQ temp[5].x, |temp[5].x___|; 14: RCP temp[3].z, temp[5].x___; 15: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 16: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 17: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 18: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 19: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 20: TEX temp[8].xyz, temp[0].xy__, 2D[4]; 21: ADD temp[8].xyz, temp[8].xyz_, -none.HHH_; 22: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 23: MUL temp[9].xyz, temp[1].xyz_, const[5].xyz_; 24: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 25: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 26: ADD temp[5].x, temp[5].x___, temp[5].x___; 27: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 28: TEX temp[7].xyz, temp[10].xyz_, CUBE[5]; 29: TEX temp[11].xyz, input[4].xy__, 2D[6]; 30: TEX temp[12].xyz, temp[0].xy__, 2D[7]; 31: ADD temp[12].xyz, temp[12].xyz_, -none.HHH_; 32: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 33: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 34: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 35: MUL temp[9].xyz, const[6].xxx_, temp[9].xyz_; 36: MAD temp[9].xyz, input[1].xxx_, (const[7] - temp[9]).xyz_, temp[9].xyz_; 37: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 38: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[2].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[4].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[2].w___; 5: TEX temp[3].yw, input[2].xy__, 2D[1]; 6: MOV temp[3].x, temp[3].w___; 7: MAD temp[3].xy, temp[3].xy__, const[8].ww__, none.-1-1__; 8: TEX temp[4].yw, temp[0].xy__, 2D[2]; 9: MOV temp[4].x, temp[4].w___; 10: MAD temp[4].xy, temp[4].xy__, const[8].ww__, none.-1-1__; 11: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 12: MOV temp[3].z, none.__0_; 13: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 14: ADD temp[5].x, none.1___, -temp[5].x___; 15: RSQ temp[5].x, |temp[5].x___|; 16: RCP temp[3].z, temp[5].x___; 17: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 18: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 19: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 20: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 21: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 22: TEX temp[8].xyz, temp[0].xy__, 2D[4]; 23: ADD temp[8].xyz, temp[8].xyz_, -none.HHH_; 24: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 25: MUL temp[9].xyz, temp[1].xyz_, const[5].xyz_; 26: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 27: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 28: ADD temp[5].x, temp[5].x___, temp[5].x___; 29: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 30: TEX temp[7].xyz, temp[10].xyz_, CUBE[5]; 31: TEX temp[11].xyz, input[4].xy__, 2D[6]; 32: TEX temp[12].xyz, temp[0].xy__, 2D[7]; 33: ADD temp[12].xyz, temp[12].xyz_, -none.HHH_; 34: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 35: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 36: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 37: MUL temp[9].xyz, const[6].xxx_, temp[9].xyz_; 38: MAD temp[9].xyz, input[1].xxx_, (const[7] - temp[9]).xyz_, temp[9].xyz_; 39: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[6].___y; CONST[5] = { 1.0000 0.0000 0.5000 2.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[2].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[4].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[2].w___; 5: TEX temp[3].yw, input[2].xy__, 2D[1]; 6: MOV temp[3].x, temp[3].w___; 7: MAD temp[3].xy, temp[3].xy__, const[5].ww__, none.-1-1__; 8: TEX temp[4].yw, temp[0].xy__, 2D[2]; 9: MOV temp[4].x, temp[4].w___; 10: MAD temp[4].xy, temp[4].xy__, const[5].ww__, none.-1-1__; 11: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 12: MOV temp[3].z, none.__0_; 13: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 14: ADD temp[5].x, none.1___, -temp[5].x___; 15: RSQ temp[5].x, |temp[5].x___|; 16: RCP temp[3].z, temp[5].x___; 17: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 18: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 19: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 20: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 21: MUL temp[7].xyz, temp[7].xyz_, const[1].xyz_; 22: TEX temp[8].xyz, temp[0].xy__, 2D[4]; 23: ADD temp[8].xyz, temp[8].xyz_, -none.HHH_; 24: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 25: MUL temp[9].xyz, temp[1].xyz_, const[2].xyz_; 26: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 27: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 28: ADD temp[5].x, temp[5].x___, temp[5].x___; 29: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 30: TEX temp[7].xyz, temp[10].xyz_, CUBE[5]; 31: TEX temp[11].xyz, input[4].xy__, 2D[6]; 32: TEX temp[12].xyz, temp[0].xy__, 2D[7]; 33: ADD temp[12].xyz, temp[12].xyz_, -none.HHH_; 34: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 35: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 36: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 37: MUL temp[9].xyz, const[3].xxx_, temp[9].xyz_; 38: MAD temp[9].xyz, input[1].xxx_, (const[4] - temp[9]).xyz_, temp[9].xyz_; 39: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[3].___y; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[14].xy, input[2].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[15].xyz, input[4].xy__, 2D[0]; 4: MOV_SAT temp[16].x, input[2].w___; 5: TEX temp[3].yw, input[2].xy__, 2D[1]; 6: MOV temp[3].x, temp[3].w___; 7: MAD temp[17].xy, temp[3].xy__, const[5].ww__, none.-1-1__; 8: TEX temp[4].yw, temp[14].xy__, 2D[2]; 9: MOV temp[4].x, temp[4].w___; 10: MAD temp[18].xy, temp[4].xy__, const[5].ww__, none.-1-1__; 11: MAD temp[3].xy, temp[16].xx__, temp[18].xy__, temp[17].xy__; 12: MOV temp[3].z, none.__0_; 13: DP3 temp[19].x, temp[3].xyz_, temp[3].xyz_; 14: ADD temp[20].x, none.1___, -temp[19].x___; 15: RSQ temp[21].x, |temp[20].x___|; 16: RCP temp[3].z, temp[21].x___; 17: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 18: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 19: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 20: TEX temp[22].xyz, temp[6].xyz_, CUBE[3]; 21: MUL temp[23].xyz, temp[22].xyz_, const[1].xyz_; 22: TEX temp[24].xyz, temp[14].xy__, 2D[4]; 23: ADD temp[25].xyz, temp[24].xyz_, -none.HHH_; 24: MAD temp[26].xyz, temp[16].xxx_, temp[25].xyz_, temp[15].xyz_; 25: MUL temp[27].xyz, temp[26].xyz_, const[2].xyz_; 26: MUL temp[28].xyz, temp[23].xyz_, temp[27].xyz_; 27: DP3 temp[29].x, input[3].xyz_, temp[6].xyz_; 28: ADD temp[30].x, temp[29].x___, temp[29].x___; 29: MAD temp[31].xyz, -temp[6].xyz_, temp[30].xxx_, input[3].xyz_; 30: TEX temp[32].xyz, temp[31].xyz_, CUBE[5]; 31: TEX temp[33].xyz, input[4].xy__, 2D[6]; 32: TEX temp[34].xyz, temp[14].xy__, 2D[7]; 33: ADD temp[35].xyz, temp[34].xyz_, -none.HHH_; 34: MAD_SAT temp[36].xyz, temp[16].xxx_, temp[35].xyz_, temp[33].xyz_; 35: ADD temp[37].xyz, temp[36].xyz_, temp[36].xyz_; 36: MAD temp[38].xyz, temp[37].xyz_, temp[32].xyz_, temp[28].xyz_; 37: MUL temp[39].xyz, const[3].xxx_, temp[38].xyz_; 38: MAD temp[40].xyz, input[1].xxx_, (const[4] - temp[39]).xyz_, temp[39].xyz_; 39: MUL_SAT output[0].xyz, temp[40].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[3].___y; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[15].xyz, input[4].xy__, 2D[0]; 4: src0.w = input[2] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 5: TEX temp[3].yw, input[2].xy__, 2D[1]; 6: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 7: src0.xyz = temp[3], src0.w = const[5] MAD temp[17].xy, src0.xy_, src0.ww_, -src0.11_ 8: TEX temp[4].yw, temp[14].xy__, 2D[2]; 9: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 10: src0.xyz = temp[4], src0.w = const[5] MAD temp[18].xy, src0.xy_, src0.ww_, -src0.11_ 11: src0.xyz = temp[16], src1.xyz = temp[18], src2.xyz = temp[17] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 12: MAD temp[3].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[3] DP3 temp[19].x, src0.xyz, src0.xyz 14: src0.xyz = temp[19] MAD temp[20].x, src0.1__, src0.111, -src0.x__ 15: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 16: src0.xyz = temp[21] REPL_ALPHA temp[3].z RCP, src0.x 17: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 18: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 19: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 20: TEX temp[22].xyz, temp[6].xyz_, CUBE[3]; 21: src0.xyz = temp[22], src1.xyz = const[1] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 22: TEX temp[24].xyz, temp[14].xy__, 2D[4]; 23: src0.xyz = temp[24] MAD temp[25].xyz, src0.xyz, src0.111, -src0.HHH 24: src0.xyz = temp[16], src1.xyz = temp[25], src2.xyz = temp[15] MAD temp[26].xyz, src0.xxx, src1.xyz, src2.xyz 25: src0.xyz = temp[26], src1.xyz = const[2] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 26: src0.xyz = temp[23], src1.xyz = temp[27] MAD temp[28].xyz, src0.xyz, src1.xyz, src0.000 27: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[29].x, src0.xyz, src1.xyz 28: src0.xyz = temp[29] MAD temp[30].x, src0.x__, src0.111, src0.x__ 29: src0.xyz = temp[6], src1.xyz = temp[30], src2.xyz = input[3] MAD temp[31].xyz, -src0.xyz, src1.xxx, src2.xyz 30: TEX temp[32].xyz, temp[31].xyz_, CUBE[5]; 31: TEX temp[33].xyz, input[4].xy__, 2D[6]; 32: TEX temp[34].xyz, temp[14].xy__, 2D[7]; 33: src0.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src0.111, -src0.HHH 34: src0.xyz = temp[16], src1.xyz = temp[35], src2.xyz = temp[33] MAD_SAT temp[36].xyz, src0.xxx, src1.xyz, src2.xyz 35: src0.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src0.111, src0.xyz 36: src0.xyz = temp[37], src1.xyz = temp[32], src2.xyz = temp[28] MAD temp[38].xyz, src0.xyz, src1.xyz, src2.xyz 37: src0.xyz = const[3], src1.xyz = temp[38] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 38: src0.xyz = temp[39], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[40].xyz, src2.xxx, srcp.xyz, src0.xyz 39: src0.xyz = temp[40], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = const[3] MAD_SAT color[0].w, src0.y, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[4].xy__, 2D[0]; 2: TEX temp[3].yw, input[2].xy__, 2D[1]; 3: TEX temp[33].xyz, input[4].xy__, 2D[6]; 4: src0.xyz = const[3], src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.y, src0.1, src0.0 5: src0.xyz = temp[3], src0.w = const[5] MAD temp[17].xy, src0.xy_, src0.ww_, -src0.11_ 6: MAD temp[3].z, src0.__0, src0.111, src0.000 7: src0.w = input[2] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 8: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 9: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 10: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 11: BEGIN_TEX; 12: TEX temp[34].xyz, temp[14].xy__, 2D[7]; 13: TEX temp[24].xyz, temp[14].xy__, 2D[4]; 14: TEX temp[4].yw, temp[14].xy__, 2D[2]; 15: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 16: src0.xyz = temp[4], src0.w = const[5] MAD temp[18].xy, src0.xy_, src0.ww_, -src0.11_ 17: src0.xyz = temp[16], src1.xyz = temp[18], src2.xyz = temp[17] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 18: src0.xyz = temp[3] DP3 temp[19].x, src0.xyz, src0.xyz 19: src0.xyz = temp[24], src1.xyz = temp[19] MAD temp[25].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[20].w, src0.1, src0.1, -src1.x 20: src0.xyz = temp[20], src0.w = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.w| 21: src0.xyz = temp[21] REPL_ALPHA temp[3].z RCP, src0.x 22: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 23: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 24: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 25: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[29].x, src0.xyz, src1.xyz 26: src0.xyz = temp[29] MAD temp[30].x, src0.x__, src0.111, src0.x__ 27: src0.xyz = temp[6], src1.xyz = temp[30], src2.xyz = input[3] MAD temp[31].xyz, -src0.xyz, src1.xxx, src2.xyz 28: src0.xyz = temp[16], src1.xyz = temp[25], src2.xyz = temp[15] MAD temp[26].xyz, src0.xxx, src1.xyz, src2.xyz 29: src0.xyz = temp[26], src1.xyz = const[2] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src0.111, -src0.HHH 31: src0.xyz = temp[16], src1.xyz = temp[35], src2.xyz = temp[33] MAD_SAT temp[36].xyz, src0.xxx, src1.xyz, src2.xyz 32: src0.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src0.111, src0.xyz 33: BEGIN_TEX; 34: TEX temp[22].xyz, temp[6].xyz_, CUBE[3]; 35: TEX temp[32].xyz, temp[31].xyz_, CUBE[5]; 36: src0.xyz = temp[22], src1.xyz = const[1] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = temp[23], src1.xyz = temp[27] MAD temp[28].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[37], src1.xyz = temp[32], src2.xyz = temp[28] MAD temp[38].xyz, src0.xyz, src1.xyz, src2.xyz 39: src0.xyz = const[3], src1.xyz = temp[38] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[39], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[40].xyz, src2.xxx, srcp.xyz, src0.xyz 41: src0.xyz = temp[40], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[4].xy__, 2D[0]; 2: TEX temp[3].yw, input[2].xy__, 2D[1]; 3: TEX temp[33].xyz, input[4].xy__, 2D[6]; 4: src0.xyz = const[3], src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.y, src0.1, src0.0 5: src0.xyz = temp[3], src0.w = const[5] MAD temp[17].xy, src0.xy_, src0.ww_, -src0.11_ 6: MAD temp[3].z, src0.__0, src0.111, src0.000 7: src0.w = input[2] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 8: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 9: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 10: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 11: BEGIN_TEX; 12: TEX temp[34].xyz, temp[14].xy__, 2D[7]; 13: TEX temp[24].xyz, temp[14].xy__, 2D[4]; 14: TEX temp[4].yw, temp[14].xy__, 2D[2]; 15: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 16: src0.xyz = temp[4], src0.w = const[5] MAD temp[18].xy, src0.xy_, src0.ww_, -src0.11_ 17: src0.xyz = temp[16], src1.xyz = temp[18], src2.xyz = temp[17] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 18: src0.xyz = temp[3] DP3 temp[19].x, src0.xyz, src0.xyz 19: src0.xyz = temp[24], src1.xyz = temp[19] MAD temp[25].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[20].w, src0.1, src0.1, -src1.x 20: src0.w = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.w| 21: src0.xyz = temp[21] REPL_ALPHA temp[3].z RCP, src0.x 22: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 23: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 24: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 25: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[29].x, src0.xyz, src1.xyz 26: src0.xyz = temp[29] MAD temp[30].x, src0.x__, src0.111, src0.x__ 27: src0.xyz = temp[6], src1.xyz = temp[30], src2.xyz = input[3] MAD temp[31].xyz, -src0.xyz, src1.xxx, src2.xyz 28: src0.xyz = temp[16], src1.xyz = temp[25], src2.xyz = temp[15] MAD temp[26].xyz, src0.xxx, src1.xyz, src2.xyz 29: src0.xyz = temp[26], src1.xyz = const[2] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src0.111, -src0.HHH 31: src0.xyz = temp[16], src1.xyz = temp[35], src2.xyz = temp[33] MAD_SAT temp[36].xyz, src0.xxx, src1.xyz, src2.xyz 32: src0.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src0.111, src0.xyz 33: BEGIN_TEX; 34: TEX temp[22].xyz, temp[6].xyz_, CUBE[3]; 35: TEX temp[32].xyz, temp[31].xyz_, CUBE[5]; 36: src0.xyz = temp[22], src1.xyz = const[1] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = temp[23], src1.xyz = temp[27] MAD temp[28].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[37], src1.xyz = temp[32], src2.xyz = temp[28] MAD temp[38].xyz, src0.xyz, src1.xyz, src2.xyz 39: src0.xyz = const[3], src1.xyz = temp[38] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[39], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[40].xyz, src2.xxx, srcp.xyz, src0.xyz 41: src0.xyz = temp[40], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].xyz, input[4].xy__, 2D[0]; 2: TEX temp[9].yw, input[2].xy__, 2D[1]; 3: TEX temp[4].xyz, input[4].xy__, 2D[6]; 4: src0.xyz = const[3], src0.w = temp[9] MAD temp[9].x, src0.w__, src0.11_, src0.00_ MAD_SAT color[0].w, src0.y, src0.1, src0.0 5: src0.xyz = temp[9], src0.w = const[5] MAD temp[9].xy, src0.xy_, src0.ww_, -src0.11_ 6: MAD temp[10].z, src0.__0, src0.111, src0.000 7: src0.w = input[2] MAD_SAT temp[1].y, src0._w_, src0._1_, src0._0_ 8: src0.w = const[0] MAD temp[11].y, src0._w_, src0.11_, src0.00_ 9: src0.xyz = const[0] MAD temp[11].x, src0.z__, src0.11_, src0.00_ 10: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[11] MAD temp[2].xy, src0.xy_, src1.xy_, src2.xy_ 11: BEGIN_TEX; 12: TEX temp[11].xyz, temp[2].xy__, 2D[7]; 13: TEX temp[12].xyz, temp[2].xy__, 2D[4]; 14: TEX temp[2].yw, temp[2].xy__, 2D[2]; 15: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.11_, src0.00_ 16: src0.xyz = temp[2], src0.w = const[5] MAD temp[2].xy, src0.xy_, src0.ww_, -src0.11_ 17: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[9] MAD temp[10].xy, src0.yy_, src1.xy_, src2.xy_ 18: src0.xyz = temp[10] DP3 temp[1].z, src0.xyz, src0.xyz 19: src0.xyz = temp[12], src1.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.1, src0.1, -src1.z 20: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 21: src0.xyz = temp[1] REPL_ALPHA temp[1].z RCP, src0.z 22: src0.xyz = input[5], src1.xyz = temp[10], src2.xyz = temp[1] DP3 temp[5].x, src0.xyz, src2.xyz 23: src0.xyz = input[6], src1.xyz = temp[10], src2.xyz = temp[1] DP3 temp[5].y, src0.xyz, src2.xyz 24: src0.xyz = input[7], src1.xyz = temp[10], src2.xyz = temp[1] DP3 temp[5].z, src0.xyz, src2.xyz 25: src0.xyz = input[3], src1.xyz = temp[5] DP3 temp[1].z, src0.xyz, src1.xyz 26: src0.xyz = temp[1] MAD temp[1].z, src0.__z, src0.__1, src0.__z 27: src0.xyz = temp[5], src1.xyz = temp[1], src2.xyz = input[3] MAD temp[3].xyz, -src0.xyz, src1.zzz, src2.xyz 28: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[8] MAD temp[2].xyz, src0.yyy, src1.xyz, src2.xyz 29: src0.xyz = temp[2], src1.xyz = const[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[11] MAD temp[6].xyz, src0.xyz, src0.111, -src0.HHH 31: src0.xyz = temp[1], src1.xyz = temp[6], src2.xyz = temp[4] MAD_SAT temp[4].xyz, src0.yyy, src1.xyz, src2.xyz 32: src0.xyz = temp[4] MAD temp[4].xyz, src0.xyz, src0.111, src0.xyz 33: BEGIN_TEX; 34: TEX temp[5].xyz, temp[5].xyz_, CUBE[3]; 35: TEX temp[3].xyz, temp[3].xyz_, CUBE[5]; 36: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = temp[5], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 39: src0.xyz = const[3], src1.xyz = temp[2] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[2], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xxx, srcp.xyz, src0.xyz 41: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 pc=27************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 6, tex_end: 2 (code_addr: 00440180) TEX: TEX t8, t4, texture[0] (00008204) TEX t9, t2, texture[1] (00008a42) TEX t4, t4, texture[6] (0000b104) 0: xyz: c3 t0 t0 bias-> t9.x (00a40023) w: t9 t0 t0 bias-> o0.w (01000009) xyz: t9.www 1.0 0.0 op: 00050a8c w: c3.y 1.0 0.0 op: 40040881 1: xyz: t9 t0 t0 bias-> t9.xy (01a40009) w: c5 t0 t0 bias-> (00000025) xyz: t9.xyz c5.www -1.0 op: 000d4600 w: t9.x t9.x t9.x op: 00000000 2: xyz: t0 t0 t0 bias-> t10.z (02280000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t0 t0 bias-> t1.y (01040000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 40050a8c w: t0.x t0.x t0.x op: 00000000 4: xyz: t0 t0 t0 bias-> t11.y (012c0000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 5: xyz: c0 t0 t0 bias-> t11.x (00ac0020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 6: xyz: t2 c0 t11 bias-> t2.xy (0188b802) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c0.xyz t11.xyz op: 00020200 w: t2.x t2.x t2.x op: 00000000 NODE 1: alu_offset: 7, tex_offset: 3, alu_end: 17, tex_end: 2 (code_addr: 00043447) TEX: TEX t11, t2, texture[7] (0000bac2) TEX t12, t2, texture[4] (0000a302) TEX t2, t2, texture[2] (00009082) 7: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 8: xyz: t2 t0 t0 bias-> t2.xy (01880002) w: c5 t0 t0 bias-> (00000025) xyz: t2.xyz c5.www -1.0 op: 000d4600 w: t2.x t2.x t2.x op: 00000000 9: xyz: t1 t2 t9 bias-> t10.xy (01a89081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz t9.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 10: xyz: t10 t0 t0 bias-> t1.z (0204000a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xyz t10.xyz t10.xxx op: 00804000 w: t10.x t10.x t10.x op: 00000000 11: xyz: t12 t1 t0 bias-> t2.xyz (0388004c) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t12.xyz 1.0 -0.5 op: 000d8a80 w: 1.0 1.0 -t1.z op: 00094891 12: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 13: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 14: xyz: t5 t10 t1 bias-> t5.x (00941285) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t1.xyz t5.xxx op: 00804400 w: t5.x t5.x t5.x op: 00000000 15: xyz: t6 t10 t1 bias-> t5.y (01141286) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t1.xyz t6.xxx op: 00804400 w: t6.x t6.x t6.x op: 00000000 16: xyz: t7 t10 t1 bias-> t5.z (02141287) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t1.xyz t7.xxx op: 00804400 w: t7.x t7.x t7.x op: 00000000 17: xyz: t3 t5 t0 bias-> t1.z (02040143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 18: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 t1.xyz op: 00000a80 w: t1.x t1.x t1.x op: 00000000 19: xyz: t5 t1 t3 bias-> t3.xyz (038c3045) w: t0 t0 t0 bias-> (00000000) xyz: -t5.xyz t1.zzz t3.xyz op: 000203a0 w: t5.x t5.x t5.x op: 00000000 20: xyz: t1 t2 t8 bias-> t2.xyz (03888081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz t8.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 21: xyz: t2 c2 t0 bias-> t2.xyz (03880882) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c2.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 22: xyz: t11 t0 t0 bias-> t6.xyz (0398000b) w: t0 t0 t0 bias-> (00000000) xyz: t11.xyz 1.0 -0.5 op: 000d8a80 w: t11.x t11.x t11.x op: 00000000 23: xyz: t1 t6 t4 bias-> t4.xyz (03904181) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t6.xyz t4.xyz op: 40020202 w: t1.x t1.x t1.x op: 00000000 24: xyz: t4 t0 t0 bias-> t4.xyz (03900004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz 1.0 t4.xyz op: 00000a80 w: t4.x t4.x t4.x op: 00000000 NODE 2: alu_offset: 25, tex_offset: 6, alu_end: 5, tex_end: 1 (code_addr: 00426159) TEX: TEX t5, t5, texture[3] (00009945) TEX t3, t3, texture[5] (0000a8c3) 25: xyz: t5 c1 t0 bias-> t5.xyz (03940845) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c1.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 26: xyz: t5 t2 t0 bias-> t2.xyz (03880085) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t2.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 27: xyz: t4 t3 t2 bias-> t2.xyz (038820c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t2.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 28: xyz: c3 t2 t0 bias-> t2.xyz (038800a3) w: t0 t0 t0 bias-> (00000000) xyz: c3.xxx t2.xyz 0.0 op: 80050201 NOP w: c3.x c3.x c3.x op: 00000000 29: xyz: t2 c4 t1 sub-> t1.xyz (03841902) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t2.xyz op: 00200789 w: t2.x t2.x t2.x op: 00000000 30: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.x t1.x t1.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[2], PERSPECTIVE DCL IN[4], GENERIC[4], PERSPECTIVE DCL IN[5], GENERIC[5], PERSPECTIVE DCL IN[6], GENERIC[6], PERSPECTIVE DCL IN[7], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL SAMP[8] DCL CONST[0] DCL CONST[4..7] DCL TEMP[0..12] IMM FLT32 { 2.0000, -1.0000, 0.0000, 1.0000} IMM FLT32 { 0.0000, 1.0000, 0.5000, 0.0000} 0: MAD TEMP[0].xy, IN[2], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[4], SAMP[0], 2D 2: TEX TEMP[2], IN[4], SAMP[1], 2D 3: MUL_SAT TEMP[2], TEMP[2], IN[2].wwww 4: TEX TEMP[3], IN[2], SAMP[2], 2D 5: MOV TEMP[3].x, TEMP[3].wwww 6: MAD TEMP[3].xy, TEMP[3], IMM[0].xxxx, IMM[0].yyyy 7: TEX TEMP[4], TEMP[0], SAMP[3], 2D 8: MOV TEMP[4].x, TEMP[4].wwww 9: MAD TEMP[4].xy, TEMP[4], IMM[0].xxxx, IMM[0].yyyy 10: MAD TEMP[3].xy, TEMP[2].xxxx, TEMP[4], TEMP[3] 11: MOV TEMP[3].z, IMM[1].xxxx 12: DP3 TEMP[5].x, TEMP[3], TEMP[3] 13: ADD TEMP[5].x, IMM[1].yyyy, -TEMP[5].xxxx 14: RSQ TEMP[5].x, TEMP[5].xxxx 15: RCP TEMP[3].z, TEMP[5].xxxx 16: DP3 TEMP[6].x, IN[5], TEMP[3] 17: DP3 TEMP[6].y, IN[6], TEMP[3] 18: DP3 TEMP[6].z, IN[7], TEMP[3] 19: TEX TEMP[7], TEMP[6], SAMP[4], CUBE 20: MUL TEMP[7], TEMP[7], CONST[4] 21: TEX TEMP[8], TEMP[0], SAMP[5], 2D 22: ADD TEMP[8], TEMP[8], -IMM[1].zzzz 23: MAD TEMP[1], TEMP[2].xxxx, TEMP[8], TEMP[1] 24: MUL TEMP[9], TEMP[1], CONST[5] 25: MUL TEMP[9], TEMP[7], TEMP[9] 26: DP3 TEMP[5], IN[3], TEMP[6] 27: ADD TEMP[5], TEMP[5], TEMP[5] 28: MAD TEMP[10], -TEMP[6], TEMP[5].xxxx, IN[3] 29: TEX TEMP[7], TEMP[10], SAMP[6], CUBE 30: TEX TEMP[11], IN[4], SAMP[7], 2D 31: TEX TEMP[12], TEMP[0], SAMP[8], 2D 32: ADD TEMP[12], TEMP[12], -IMM[1].zzzz 33: MAD_SAT TEMP[11], TEMP[2].xxxx, TEMP[12], TEMP[11] 34: ADD TEMP[10], TEMP[11], TEMP[11] 35: MAD TEMP[9], TEMP[10], TEMP[7], TEMP[9] 36: MUL TEMP[9], CONST[6].xxxx, TEMP[9] 37: LRP TEMP[9].xyz, IN[1].xxxx, CONST[7], TEMP[9] 38: MUL OUT[0], TEMP[9], IN[0] 39: MOV OUT[0].w, CONST[6].yyyy 40: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: TEX temp[2], input[4], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[2]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].xxxx, const[8].yyyy; 7: TEX temp[4], temp[0], 2D[3]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].xxxx, const[8].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, temp[0].0000; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, temp[0].1111, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[4]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[5]; 22: ADD temp[8], temp[8], -temp[0].HHHH; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[6]; 30: TEX temp[11], input[4], 2D[7]; 31: TEX temp[12], temp[0], 2D[8]; 32: ADD temp[12], temp[12], -temp[0].HHHH; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: TEX temp[2], input[4], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[2]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].xxxx, const[8].yyyy; 7: TEX temp[4], temp[0], 2D[3]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].xxxx, const[8].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, temp[0].0000; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, temp[0].1111, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[4]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[5]; 22: ADD temp[8], temp[8], -temp[0].HHHH; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[6]; 30: TEX temp[11], input[4], 2D[7]; 31: TEX temp[12], temp[0], 2D[8]; 32: ADD temp[12], temp[12], -temp[0].HHHH; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: TEX temp[2], input[4], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[2]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].xxxx, const[8].yyyy; 7: TEX temp[4], temp[0], 2D[3]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].xxxx, const[8].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, temp[0].0000; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, temp[0].1111, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[4]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[5]; 22: ADD temp[8], temp[8], -temp[0].HHHH; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[6]; 30: TEX temp[11], input[4], 2D[7]; 31: TEX temp[12], temp[0], 2D[8]; 32: ADD temp[12], temp[12], -temp[0].HHHH; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: TEX temp[2], input[4], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[2]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].xxxx, const[8].yyyy; 7: TEX temp[4], temp[0], 2D[3]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].xxxx, const[8].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, temp[0].0000; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, temp[0].1111, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[4]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[5]; 22: ADD temp[8], temp[8], -temp[0].HHHH; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[6]; 30: TEX temp[11], input[4], 2D[7]; 31: TEX temp[12], temp[0], 2D[8]; 32: ADD temp[12], temp[12], -temp[0].HHHH; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: TEX temp[2], input[4], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[2]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].xxxx, const[8].yyyy; 7: TEX temp[4], temp[0], 2D[3]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].xxxx, const[8].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, temp[0].0000; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, temp[0].1111, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[4]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[5]; 22: ADD temp[8], temp[8], -temp[0].HHHH; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[6]; 30: TEX temp[11], input[4], 2D[7]; 31: TEX temp[12], temp[0], 2D[8]; 32: ADD temp[12], temp[12], -temp[0].HHHH; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL output[0], temp[9], input[0]; 39: MOV output[0].w, const[6].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: TEX temp[2], input[4], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[2]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].xxxx, const[8].yyyy; 7: TEX temp[4], temp[0], 2D[3]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].xxxx, const[8].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, temp[0].0000; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, temp[0].1111, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[4]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[5]; 22: ADD temp[8], temp[8], -temp[0].HHHH; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[6]; 30: TEX temp[11], input[4], 2D[7]; 31: TEX temp[12], temp[0], 2D[8]; 32: ADD temp[12], temp[12], -temp[0].HHHH; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL_SAT output[0], temp[9], input[0]; 39: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: TEX temp[2], input[4], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[2]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].xxxx, const[8].yyyy; 7: TEX temp[4], temp[0], 2D[3]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].xxxx, const[8].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, temp[0].0000; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, temp[0].1111, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[4]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[5]; 22: ADD temp[8], temp[8], -temp[0].HHHH; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[6]; 30: TEX temp[11], input[4], 2D[7]; 31: TEX temp[12], temp[0], 2D[8]; 32: ADD temp[12], temp[12], -temp[0].HHHH; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: LRP temp[9].xyz, input[1].xxxx, const[7], temp[9]; 38: MUL_SAT output[0], temp[9], input[0]; 39: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: TEX temp[2], input[4], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[2]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[8].xxxx, const[8].yyyy; 7: TEX temp[4], temp[0], 2D[3]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[8].xxxx, const[8].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, temp[0].0000; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, temp[0].1111, -temp[5].xxxx; 14: RSQ temp[5].x, |temp[5].xxxx|; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[4]; 20: MUL temp[7], temp[7], const[4]; 21: TEX temp[8], temp[0], 2D[5]; 22: ADD temp[8], temp[8], -temp[0].HHHH; 23: MAD temp[1], temp[2].xxxx, temp[8], temp[1]; 24: MUL temp[9], temp[1], const[5]; 25: MUL temp[9], temp[7], temp[9]; 26: DP3 temp[5], input[3], temp[6]; 27: ADD temp[5], temp[5], temp[5]; 28: MAD temp[10], -temp[6], temp[5].xxxx, input[3]; 29: TEX temp[7], temp[10], CUBE[6]; 30: TEX temp[11], input[4], 2D[7]; 31: TEX temp[12], temp[0], 2D[8]; 32: ADD temp[12], temp[12], -temp[0].HHHH; 33: MAD_SAT temp[11], temp[2].xxxx, temp[12], temp[11]; 34: ADD temp[10], temp[11], temp[11]; 35: MAD temp[9], temp[10], temp[7], temp[9]; 36: MUL temp[9], const[6].xxxx, temp[9]; 37: ADD temp[13].xyz, const[7], -temp[9]; 38: MAD temp[9].xyz, input[1].xxxx, temp[13], temp[9]; 39: MUL_SAT output[0], temp[9], input[0]; 40: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[4].xy__, 2D[0]; 2: TEX temp[2].x, input[4].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 4: TEX temp[3].yw, input[2].xy__, 2D[2]; 5: MOV temp[3].x, temp[3].w___; 6: MAD temp[3].xy, temp[3].xy__, const[8].xx__, const[8].yy__; 7: TEX temp[4].yw, temp[0].xy__, 2D[3]; 8: MOV temp[4].x, temp[4].w___; 9: MAD temp[4].xy, temp[4].xy__, const[8].xx__, const[8].yy__; 10: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 11: MOV temp[3].z, temp[0].__0_; 12: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 13: ADD temp[5].x, temp[0].1___, -temp[5].x___; 14: RSQ temp[5].x, |temp[5].x___|; 15: RCP temp[3].z, temp[5].x___; 16: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 17: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 18: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 19: TEX temp[7].xyz, temp[6].xyz_, CUBE[4]; 20: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 21: TEX temp[8].xyz, temp[0].xy__, 2D[5]; 22: ADD temp[8].xyz, temp[8].xyz_, -temp[0].HHH_; 23: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 24: MUL temp[9].xyz, temp[1].xyz_, const[5].xyz_; 25: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 26: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 27: ADD temp[5].x, temp[5].x___, temp[5].x___; 28: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 29: TEX temp[7].xyz, temp[10].xyz_, CUBE[6]; 30: TEX temp[11].xyz, input[4].xy__, 2D[7]; 31: TEX temp[12].xyz, temp[0].xy__, 2D[8]; 32: ADD temp[12].xyz, temp[12].xyz_, -temp[0].HHH_; 33: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 34: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 35: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 36: MUL temp[9].xyz, const[6].xxx_, temp[9].xyz_; 37: ADD temp[13].xyz, const[7].xyz_, -temp[9].xyz_; 38: MAD temp[9].xyz, input[1].xxx_, temp[13].xyz_, temp[9].xyz_; 39: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[4].xy__, 2D[0]; 2: TEX temp[2].x, input[4].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 4: TEX temp[3].yw, input[2].xy__, 2D[2]; 5: MOV temp[3].x, temp[3].w___; 6: MAD temp[3].xy, temp[3].xy__, const[8].xx__, const[8].yy__; 7: TEX temp[4].yw, temp[0].xy__, 2D[3]; 8: MOV temp[4].x, temp[4].w___; 9: MAD temp[4].xy, temp[4].xy__, const[8].xx__, const[8].yy__; 10: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 11: MOV temp[3].z, temp[0].__0_; 12: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 13: ADD temp[5].x, temp[0].1___, -temp[5].x___; 14: RSQ temp[5].x, |temp[5].x___|; 15: RCP temp[3].z, temp[5].x___; 16: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 17: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 18: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 19: TEX temp[7].xyz, temp[6].xyz_, CUBE[4]; 20: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 21: TEX temp[8].xyz, temp[0].xy__, 2D[5]; 22: ADD temp[8].xyz, temp[8].xyz_, -temp[0].HHH_; 23: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 24: MUL temp[9].xyz, temp[1].xyz_, const[5].xyz_; 25: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 26: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 27: ADD temp[5].x, temp[5].x___, temp[5].x___; 28: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 29: TEX temp[7].xyz, temp[10].xyz_, CUBE[6]; 30: TEX temp[11].xyz, input[4].xy__, 2D[7]; 31: TEX temp[12].xyz, temp[0].xy__, 2D[8]; 32: ADD temp[12].xyz, temp[12].xyz_, -temp[0].HHH_; 33: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 34: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 35: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 36: MUL temp[9].xyz, const[6].xxx_, temp[9].xyz_; 37: ADD temp[13].xyz, const[7].xyz_, -temp[9].xyz_; 38: MAD temp[9].xyz, input[1].xxx_, temp[13].xyz_, temp[9].xyz_; 39: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[4].xy__, 2D[0]; 2: TEX temp[2].x, input[4].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 4: TEX temp[3].yw, input[2].xy__, 2D[2]; 5: MOV temp[3].x, temp[3].w___; 6: MAD temp[3].xy, temp[3].xy__, const[8].xx__, none.-1-1__; 7: TEX temp[4].yw, temp[0].xy__, 2D[3]; 8: MOV temp[4].x, temp[4].w___; 9: MAD temp[4].xy, temp[4].xy__, const[8].xx__, none.-1-1__; 10: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 11: MOV temp[3].z, none.__0_; 12: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 13: ADD temp[5].x, none.1___, -temp[5].x___; 14: RSQ temp[5].x, |temp[5].x___|; 15: RCP temp[3].z, temp[5].x___; 16: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 17: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 18: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 19: TEX temp[7].xyz, temp[6].xyz_, CUBE[4]; 20: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 21: TEX temp[8].xyz, temp[0].xy__, 2D[5]; 22: ADD temp[8].xyz, temp[8].xyz_, -none.HHH_; 23: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 24: MUL temp[9].xyz, temp[1].xyz_, const[5].xyz_; 25: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 26: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 27: ADD temp[5].x, temp[5].x___, temp[5].x___; 28: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 29: TEX temp[7].xyz, temp[10].xyz_, CUBE[6]; 30: TEX temp[11].xyz, input[4].xy__, 2D[7]; 31: TEX temp[12].xyz, temp[0].xy__, 2D[8]; 32: ADD temp[12].xyz, temp[12].xyz_, -none.HHH_; 33: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 34: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 35: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 36: MUL temp[9].xyz, const[6].xxx_, temp[9].xyz_; 37: MAD temp[9].xyz, input[1].xxx_, (const[7] - temp[9]).xyz_, temp[9].xyz_; 38: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 39: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[2].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[4].xy__, 2D[0]; 4: TEX temp[2].x, input[4].xy__, 2D[1]; 5: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 6: TEX temp[3].yw, input[2].xy__, 2D[2]; 7: MOV temp[3].x, temp[3].w___; 8: MAD temp[3].xy, temp[3].xy__, const[8].xx__, none.-1-1__; 9: TEX temp[4].yw, temp[0].xy__, 2D[3]; 10: MOV temp[4].x, temp[4].w___; 11: MAD temp[4].xy, temp[4].xy__, const[8].xx__, none.-1-1__; 12: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 13: MOV temp[3].z, none.__0_; 14: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 15: ADD temp[5].x, none.1___, -temp[5].x___; 16: RSQ temp[5].x, |temp[5].x___|; 17: RCP temp[3].z, temp[5].x___; 18: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 19: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 20: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 21: TEX temp[7].xyz, temp[6].xyz_, CUBE[4]; 22: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 23: TEX temp[8].xyz, temp[0].xy__, 2D[5]; 24: ADD temp[8].xyz, temp[8].xyz_, -none.HHH_; 25: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 26: MUL temp[9].xyz, temp[1].xyz_, const[5].xyz_; 27: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 28: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 29: ADD temp[5].x, temp[5].x___, temp[5].x___; 30: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 31: TEX temp[7].xyz, temp[10].xyz_, CUBE[6]; 32: TEX temp[11].xyz, input[4].xy__, 2D[7]; 33: TEX temp[12].xyz, temp[0].xy__, 2D[8]; 34: ADD temp[12].xyz, temp[12].xyz_, -none.HHH_; 35: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 36: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 37: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 38: MUL temp[9].xyz, const[6].xxx_, temp[9].xyz_; 39: MAD temp[9].xyz, input[1].xxx_, (const[7] - temp[9]).xyz_, temp[9].xyz_; 40: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 41: MOV_SAT output[0].w, const[6].___y; CONST[5] = { 2.0000 -1.0000 0.0000 1.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[2].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[4].xy__, 2D[0]; 4: TEX temp[2].x, input[4].xy__, 2D[1]; 5: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 6: TEX temp[3].yw, input[2].xy__, 2D[2]; 7: MOV temp[3].x, temp[3].w___; 8: MAD temp[3].xy, temp[3].xy__, const[5].xx__, none.-1-1__; 9: TEX temp[4].yw, temp[0].xy__, 2D[3]; 10: MOV temp[4].x, temp[4].w___; 11: MAD temp[4].xy, temp[4].xy__, const[5].xx__, none.-1-1__; 12: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 13: MOV temp[3].z, none.__0_; 14: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 15: ADD temp[5].x, none.1___, -temp[5].x___; 16: RSQ temp[5].x, |temp[5].x___|; 17: RCP temp[3].z, temp[5].x___; 18: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 19: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 20: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 21: TEX temp[7].xyz, temp[6].xyz_, CUBE[4]; 22: MUL temp[7].xyz, temp[7].xyz_, const[1].xyz_; 23: TEX temp[8].xyz, temp[0].xy__, 2D[5]; 24: ADD temp[8].xyz, temp[8].xyz_, -none.HHH_; 25: MAD temp[1].xyz, temp[2].xxx_, temp[8].xyz_, temp[1].xyz_; 26: MUL temp[9].xyz, temp[1].xyz_, const[2].xyz_; 27: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 28: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 29: ADD temp[5].x, temp[5].x___, temp[5].x___; 30: MAD temp[10].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 31: TEX temp[7].xyz, temp[10].xyz_, CUBE[6]; 32: TEX temp[11].xyz, input[4].xy__, 2D[7]; 33: TEX temp[12].xyz, temp[0].xy__, 2D[8]; 34: ADD temp[12].xyz, temp[12].xyz_, -none.HHH_; 35: MAD_SAT temp[11].xyz, temp[2].xxx_, temp[12].xyz_, temp[11].xyz_; 36: ADD temp[10].xyz, temp[11].xyz_, temp[11].xyz_; 37: MAD temp[9].xyz, temp[10].xyz_, temp[7].xyz_, temp[9].xyz_; 38: MUL temp[9].xyz, const[3].xxx_, temp[9].xyz_; 39: MAD temp[9].xyz, input[1].xxx_, (const[4] - temp[9]).xyz_, temp[9].xyz_; 40: MUL_SAT output[0].xyz, temp[9].xyz_, input[0].xyz_; 41: MOV_SAT output[0].w, const[3].___y; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[14].xy, input[2].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[15].xyz, input[4].xy__, 2D[0]; 4: TEX temp[16].x, input[4].xy__, 2D[1]; 5: MUL_SAT temp[17].x, temp[16].x___, input[2].w___; 6: TEX temp[3].yw, input[2].xy__, 2D[2]; 7: MOV temp[3].x, temp[3].w___; 8: MAD temp[18].xy, temp[3].xy__, const[5].xx__, none.-1-1__; 9: TEX temp[4].yw, temp[14].xy__, 2D[3]; 10: MOV temp[4].x, temp[4].w___; 11: MAD temp[19].xy, temp[4].xy__, const[5].xx__, none.-1-1__; 12: MAD temp[3].xy, temp[17].xx__, temp[19].xy__, temp[18].xy__; 13: MOV temp[3].z, none.__0_; 14: DP3 temp[20].x, temp[3].xyz_, temp[3].xyz_; 15: ADD temp[21].x, none.1___, -temp[20].x___; 16: RSQ temp[22].x, |temp[21].x___|; 17: RCP temp[3].z, temp[22].x___; 18: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 19: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 20: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 21: TEX temp[23].xyz, temp[6].xyz_, CUBE[4]; 22: MUL temp[24].xyz, temp[23].xyz_, const[1].xyz_; 23: TEX temp[25].xyz, temp[14].xy__, 2D[5]; 24: ADD temp[26].xyz, temp[25].xyz_, -none.HHH_; 25: MAD temp[27].xyz, temp[17].xxx_, temp[26].xyz_, temp[15].xyz_; 26: MUL temp[28].xyz, temp[27].xyz_, const[2].xyz_; 27: MUL temp[29].xyz, temp[24].xyz_, temp[28].xyz_; 28: DP3 temp[30].x, input[3].xyz_, temp[6].xyz_; 29: ADD temp[31].x, temp[30].x___, temp[30].x___; 30: MAD temp[32].xyz, -temp[6].xyz_, temp[31].xxx_, input[3].xyz_; 31: TEX temp[33].xyz, temp[32].xyz_, CUBE[6]; 32: TEX temp[34].xyz, input[4].xy__, 2D[7]; 33: TEX temp[35].xyz, temp[14].xy__, 2D[8]; 34: ADD temp[36].xyz, temp[35].xyz_, -none.HHH_; 35: MAD_SAT temp[37].xyz, temp[17].xxx_, temp[36].xyz_, temp[34].xyz_; 36: ADD temp[38].xyz, temp[37].xyz_, temp[37].xyz_; 37: MAD temp[39].xyz, temp[38].xyz_, temp[33].xyz_, temp[29].xyz_; 38: MUL temp[40].xyz, const[3].xxx_, temp[39].xyz_; 39: MAD temp[41].xyz, input[1].xxx_, (const[4] - temp[40]).xyz_, temp[40].xyz_; 40: MUL_SAT output[0].xyz, temp[41].xyz_, input[0].xyz_; 41: MOV_SAT output[0].w, const[3].___y; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[15].xyz, input[4].xy__, 2D[0]; 4: TEX temp[16].x, input[4].xy__, 2D[1]; 5: src0.xyz = temp[16], src0.w = input[2] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 6: TEX temp[3].yw, input[2].xy__, 2D[2]; 7: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[18].xy, src0.xy_, src1.xx_, -src0.11_ 9: TEX temp[4].yw, temp[14].xy__, 2D[3]; 10: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 11: src0.xyz = temp[4], src1.xyz = const[5] MAD temp[19].xy, src0.xy_, src1.xx_, -src0.11_ 12: src0.xyz = temp[17], src1.xyz = temp[19], src2.xyz = temp[18] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 13: MAD temp[3].z, src0.__0, src0.111, src0.000 14: src0.xyz = temp[3] DP3 temp[20].x, src0.xyz, src0.xyz 15: src0.xyz = temp[20] MAD temp[21].x, src0.1__, src0.111, -src0.x__ 16: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 17: src0.xyz = temp[22] REPL_ALPHA temp[3].z RCP, src0.x 18: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 19: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 20: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 21: TEX temp[23].xyz, temp[6].xyz_, CUBE[4]; 22: src0.xyz = temp[23], src1.xyz = const[1] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 23: TEX temp[25].xyz, temp[14].xy__, 2D[5]; 24: src0.xyz = temp[25] MAD temp[26].xyz, src0.xyz, src0.111, -src0.HHH 25: src0.xyz = temp[17], src1.xyz = temp[26], src2.xyz = temp[15] MAD temp[27].xyz, src0.xxx, src1.xyz, src2.xyz 26: src0.xyz = temp[27], src1.xyz = const[2] MAD temp[28].xyz, src0.xyz, src1.xyz, src0.000 27: src0.xyz = temp[24], src1.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[30].x, src0.xyz, src1.xyz 29: src0.xyz = temp[30] MAD temp[31].x, src0.x__, src0.111, src0.x__ 30: src0.xyz = temp[6], src1.xyz = temp[31], src2.xyz = input[3] MAD temp[32].xyz, -src0.xyz, src1.xxx, src2.xyz 31: TEX temp[33].xyz, temp[32].xyz_, CUBE[6]; 32: TEX temp[34].xyz, input[4].xy__, 2D[7]; 33: TEX temp[35].xyz, temp[14].xy__, 2D[8]; 34: src0.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src0.111, -src0.HHH 35: src0.xyz = temp[17], src1.xyz = temp[36], src2.xyz = temp[34] MAD_SAT temp[37].xyz, src0.xxx, src1.xyz, src2.xyz 36: src0.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src0.111, src0.xyz 37: src0.xyz = temp[38], src1.xyz = temp[33], src2.xyz = temp[29] MAD temp[39].xyz, src0.xyz, src1.xyz, src2.xyz 38: src0.xyz = const[3], src1.xyz = temp[39] MAD temp[40].xyz, src0.xxx, src1.xyz, src0.000 39: src0.xyz = temp[40], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[41].xyz, src2.xxx, srcp.xyz, src0.xyz 40: src0.xyz = temp[41], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = const[3] MAD_SAT color[0].w, src0.y, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[4].xy__, 2D[0]; 2: TEX temp[16].x, input[4].xy__, 2D[1]; 3: TEX temp[3].yw, input[2].xy__, 2D[2]; 4: TEX temp[34].xyz, input[4].xy__, 2D[7]; 5: src0.xyz = const[3], src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.y, src0.1, src0.0 6: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[18].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[16], src0.w = input[2] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 8: MAD temp[3].z, src0.__0, src0.111, src0.000 9: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 10: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 11: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 12: BEGIN_TEX; 13: TEX temp[35].xyz, temp[14].xy__, 2D[8]; 14: TEX temp[25].xyz, temp[14].xy__, 2D[5]; 15: TEX temp[4].yw, temp[14].xy__, 2D[3]; 16: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 17: src0.xyz = temp[4], src1.xyz = const[5] MAD temp[19].xy, src0.xy_, src1.xx_, -src0.11_ 18: src0.xyz = temp[17], src1.xyz = temp[19], src2.xyz = temp[18] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 19: src0.xyz = temp[3] DP3 temp[20].x, src0.xyz, src0.xyz 20: src0.xyz = temp[25], src1.xyz = temp[20] MAD temp[26].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[21].w, src0.1, src0.1, -src1.x 21: src0.xyz = temp[21], src0.w = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.w| 22: src0.xyz = temp[22] REPL_ALPHA temp[3].z RCP, src0.x 23: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 24: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 25: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 26: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[30].x, src0.xyz, src1.xyz 27: src0.xyz = temp[30] MAD temp[31].x, src0.x__, src0.111, src0.x__ 28: src0.xyz = temp[6], src1.xyz = temp[31], src2.xyz = input[3] MAD temp[32].xyz, -src0.xyz, src1.xxx, src2.xyz 29: src0.xyz = temp[17], src1.xyz = temp[26], src2.xyz = temp[15] MAD temp[27].xyz, src0.xxx, src1.xyz, src2.xyz 30: src0.xyz = temp[27], src1.xyz = const[2] MAD temp[28].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src0.111, -src0.HHH 32: src0.xyz = temp[17], src1.xyz = temp[36], src2.xyz = temp[34] MAD_SAT temp[37].xyz, src0.xxx, src1.xyz, src2.xyz 33: src0.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src0.111, src0.xyz 34: BEGIN_TEX; 35: TEX temp[23].xyz, temp[6].xyz_, CUBE[4]; 36: TEX temp[33].xyz, temp[32].xyz_, CUBE[6]; 37: src0.xyz = temp[23], src1.xyz = const[1] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[24], src1.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[38], src1.xyz = temp[33], src2.xyz = temp[29] MAD temp[39].xyz, src0.xyz, src1.xyz, src2.xyz 40: src0.xyz = const[3], src1.xyz = temp[39] MAD temp[40].xyz, src0.xxx, src1.xyz, src0.000 41: src0.xyz = temp[40], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[41].xyz, src2.xxx, srcp.xyz, src0.xyz 42: src0.xyz = temp[41], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[4].xy__, 2D[0]; 2: TEX temp[16].x, input[4].xy__, 2D[1]; 3: TEX temp[3].yw, input[2].xy__, 2D[2]; 4: TEX temp[34].xyz, input[4].xy__, 2D[7]; 5: src0.xyz = const[3], src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.y, src0.1, src0.0 6: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[18].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[16], src0.w = input[2] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 8: MAD temp[3].z, src0.__0, src0.111, src0.000 9: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 10: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 11: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 12: BEGIN_TEX; 13: TEX temp[35].xyz, temp[14].xy__, 2D[8]; 14: TEX temp[25].xyz, temp[14].xy__, 2D[5]; 15: TEX temp[4].yw, temp[14].xy__, 2D[3]; 16: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 17: src0.xyz = temp[4], src1.xyz = const[5] MAD temp[19].xy, src0.xy_, src1.xx_, -src0.11_ 18: src0.xyz = temp[17], src1.xyz = temp[19], src2.xyz = temp[18] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 19: src0.xyz = temp[3] DP3 temp[20].x, src0.xyz, src0.xyz 20: src0.xyz = temp[25], src1.xyz = temp[20] MAD temp[26].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[21].w, src0.1, src0.1, -src1.x 21: src0.w = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.w| 22: src0.xyz = temp[22] REPL_ALPHA temp[3].z RCP, src0.x 23: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 24: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 25: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 26: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[30].x, src0.xyz, src1.xyz 27: src0.xyz = temp[30] MAD temp[31].x, src0.x__, src0.111, src0.x__ 28: src0.xyz = temp[6], src1.xyz = temp[31], src2.xyz = input[3] MAD temp[32].xyz, -src0.xyz, src1.xxx, src2.xyz 29: src0.xyz = temp[17], src1.xyz = temp[26], src2.xyz = temp[15] MAD temp[27].xyz, src0.xxx, src1.xyz, src2.xyz 30: src0.xyz = temp[27], src1.xyz = const[2] MAD temp[28].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src0.111, -src0.HHH 32: src0.xyz = temp[17], src1.xyz = temp[36], src2.xyz = temp[34] MAD_SAT temp[37].xyz, src0.xxx, src1.xyz, src2.xyz 33: src0.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src0.111, src0.xyz 34: BEGIN_TEX; 35: TEX temp[23].xyz, temp[6].xyz_, CUBE[4]; 36: TEX temp[33].xyz, temp[32].xyz_, CUBE[6]; 37: src0.xyz = temp[23], src1.xyz = const[1] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[24], src1.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[38], src1.xyz = temp[33], src2.xyz = temp[29] MAD temp[39].xyz, src0.xyz, src1.xyz, src2.xyz 40: src0.xyz = const[3], src1.xyz = temp[39] MAD temp[40].xyz, src0.xxx, src1.xyz, src0.000 41: src0.xyz = temp[40], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[41].xyz, src2.xxx, srcp.xyz, src0.xyz 42: src0.xyz = temp[41], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].xyz, input[4].xy__, 2D[0]; 2: TEX temp[9].x, input[4].xy__, 2D[1]; 3: TEX temp[10].yw, input[2].xy__, 2D[2]; 4: TEX temp[4].xyz, input[4].xy__, 2D[7]; 5: src0.xyz = const[3], src0.w = temp[10] MAD temp[10].x, src0.w__, src0.11_, src0.00_ MAD_SAT color[0].w, src0.y, src0.1, src0.0 6: src0.xyz = temp[10], src1.xyz = const[5] MAD temp[10].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[9], src0.w = input[2] MAD_SAT temp[1].y, src0._x_, src0._w_, src0._0_ 8: MAD temp[9].z, src0.__0, src0.111, src0.000 9: src0.w = const[0] MAD temp[11].y, src0._w_, src0.11_, src0.00_ 10: src0.xyz = const[0] MAD temp[11].x, src0.z__, src0.11_, src0.00_ 11: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[11] MAD temp[2].xy, src0.xy_, src1.xy_, src2.xy_ 12: BEGIN_TEX; 13: TEX temp[11].xyz, temp[2].xy__, 2D[8]; 14: TEX temp[12].xyz, temp[2].xy__, 2D[5]; 15: TEX temp[2].yw, temp[2].xy__, 2D[3]; 16: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.11_, src0.00_ 17: src0.xyz = temp[2], src1.xyz = const[5] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 18: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[10] MAD temp[9].xy, src0.yy_, src1.xy_, src2.xy_ 19: src0.xyz = temp[9] DP3 temp[1].z, src0.xyz, src0.xyz 20: src0.xyz = temp[12], src1.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.1, src0.1, -src1.z 21: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 22: src0.xyz = temp[1] REPL_ALPHA temp[1].z RCP, src0.z 23: src0.xyz = input[5], src1.xyz = temp[9], src2.xyz = temp[1] DP3 temp[5].x, src0.xyz, src2.xyz 24: src0.xyz = input[6], src1.xyz = temp[9], src2.xyz = temp[1] DP3 temp[5].y, src0.xyz, src2.xyz 25: src0.xyz = input[7], src1.xyz = temp[9], src2.xyz = temp[1] DP3 temp[5].z, src0.xyz, src2.xyz 26: src0.xyz = input[3], src1.xyz = temp[5] DP3 temp[1].z, src0.xyz, src1.xyz 27: src0.xyz = temp[1] MAD temp[1].z, src0.__z, src0.__1, src0.__z 28: src0.xyz = temp[5], src1.xyz = temp[1], src2.xyz = input[3] MAD temp[3].xyz, -src0.xyz, src1.zzz, src2.xyz 29: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[8] MAD temp[2].xyz, src0.yyy, src1.xyz, src2.xyz 30: src0.xyz = temp[2], src1.xyz = const[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[11] MAD temp[6].xyz, src0.xyz, src0.111, -src0.HHH 32: src0.xyz = temp[1], src1.xyz = temp[6], src2.xyz = temp[4] MAD_SAT temp[4].xyz, src0.yyy, src1.xyz, src2.xyz 33: src0.xyz = temp[4] MAD temp[4].xyz, src0.xyz, src0.111, src0.xyz 34: BEGIN_TEX; 35: TEX temp[5].xyz, temp[5].xyz_, CUBE[4]; 36: TEX temp[3].xyz, temp[3].xyz_, CUBE[6]; 37: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[5], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 40: src0.xyz = const[3], src1.xyz = temp[2] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 41: src0.xyz = temp[2], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xxx, srcp.xyz, src0.xyz 42: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 pc=28************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 6, tex_end: 3 (code_addr: 00460180) TEX: TEX t8, t4, texture[0] (00008204) TEX t9, t4, texture[1] (00008a44) TEX t10, t2, texture[2] (00009282) TEX t4, t4, texture[7] (0000b904) 0: xyz: c3 t0 t0 bias-> t10.x (00a80023) w: t10 t0 t0 bias-> o0.w (0100000a) xyz: t10.www 1.0 0.0 op: 00050a8c w: c3.y 1.0 0.0 op: 40040881 1: xyz: t10 c5 t0 bias-> t10.xy (01a8094a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xyz c5.xxx -1.0 op: 000d4280 w: t10.x t10.x t10.x op: 00000000 2: xyz: t9 t0 t0 bias-> t1.y (01040009) w: t2 t0 t0 bias-> (00000002) xyz: t9.xxx t2.www 0.0 op: 40050601 w: t9.x t9.x t9.x op: 00000000 3: xyz: t0 t0 t0 bias-> t9.z (02240000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 4: xyz: t0 t0 t0 bias-> t11.y (012c0000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 5: xyz: c0 t0 t0 bias-> t11.x (00ac0020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 6: xyz: t2 c0 t11 bias-> t2.xy (0188b802) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c0.xyz t11.xyz op: 00020200 w: t2.x t2.x t2.x op: 00000000 NODE 1: alu_offset: 7, tex_offset: 4, alu_end: 17, tex_end: 2 (code_addr: 00044447) TEX: TEX t11, t2, texture[8] (0000c2c2) TEX t12, t2, texture[5] (0000ab02) TEX t2, t2, texture[3] (00009882) 7: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 8: xyz: t2 c5 t0 bias-> t2.xy (01880942) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c5.xxx -1.0 op: 000d4280 w: t2.x t2.x t2.x op: 00000000 9: xyz: t1 t2 t10 bias-> t9.xy (01a4a081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz t10.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 10: xyz: t9 t0 t0 bias-> t1.z (02040009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t9.xyz t9.xxx op: 00804000 w: t9.x t9.x t9.x op: 00000000 11: xyz: t12 t1 t0 bias-> t2.xyz (0388004c) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t12.xyz 1.0 -0.5 op: 000d8a80 w: 1.0 1.0 -t1.z op: 00094891 12: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 13: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 14: xyz: t5 t9 t1 bias-> t5.x (00941245) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t1.xyz t5.xxx op: 00804400 w: t5.x t5.x t5.x op: 00000000 15: xyz: t6 t9 t1 bias-> t5.y (01141246) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t1.xyz t6.xxx op: 00804400 w: t6.x t6.x t6.x op: 00000000 16: xyz: t7 t9 t1 bias-> t5.z (02141247) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t1.xyz t7.xxx op: 00804400 w: t7.x t7.x t7.x op: 00000000 17: xyz: t3 t5 t0 bias-> t1.z (02040143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 18: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 t1.xyz op: 00000a80 w: t1.x t1.x t1.x op: 00000000 19: xyz: t5 t1 t3 bias-> t3.xyz (038c3045) w: t0 t0 t0 bias-> (00000000) xyz: -t5.xyz t1.zzz t3.xyz op: 000203a0 w: t5.x t5.x t5.x op: 00000000 20: xyz: t1 t2 t8 bias-> t2.xyz (03888081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz t8.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 21: xyz: t2 c2 t0 bias-> t2.xyz (03880882) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c2.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 22: xyz: t11 t0 t0 bias-> t6.xyz (0398000b) w: t0 t0 t0 bias-> (00000000) xyz: t11.xyz 1.0 -0.5 op: 000d8a80 w: t11.x t11.x t11.x op: 00000000 23: xyz: t1 t6 t4 bias-> t4.xyz (03904181) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t6.xyz t4.xyz op: 40020202 w: t1.x t1.x t1.x op: 00000000 24: xyz: t4 t0 t0 bias-> t4.xyz (03900004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz 1.0 t4.xyz op: 00000a80 w: t4.x t4.x t4.x op: 00000000 NODE 2: alu_offset: 25, tex_offset: 7, alu_end: 5, tex_end: 1 (code_addr: 00427159) TEX: TEX t5, t5, texture[4] (0000a145) TEX t3, t3, texture[6] (0000b0c3) 25: xyz: t5 c1 t0 bias-> t5.xyz (03940845) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c1.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 26: xyz: t5 t2 t0 bias-> t2.xyz (03880085) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t2.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 27: xyz: t4 t3 t2 bias-> t2.xyz (038820c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t2.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 28: xyz: c3 t2 t0 bias-> t2.xyz (038800a3) w: t0 t0 t0 bias-> (00000000) xyz: c3.xxx t2.xyz 0.0 op: 80050201 NOP w: c3.x c3.x c3.x op: 00000000 29: xyz: t2 c4 t1 sub-> t1.xyz (03841902) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t2.xyz op: 00200789 w: t2.x t2.x t2.x op: 00000000 30: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.x t1.x t1.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, 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 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT 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_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT 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_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT 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_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 pc=29************************************* 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: 40050a80 w: t0.w 1.0 0.0 op: 40040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL CONST[0] DCL CONST[5..6] DCL TEMP[0..11] IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.5000} IMM FLT32 { 2.0000, -1.0000, 0.3000, 0.5900} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} 0: MAD TEMP[0].xy, IN[3], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[6], SAMP[0], 2D 2: MOV TEMP[2], IMM[0].xxxx 3: MUL_SAT TEMP[2], TEMP[2], IN[3].wwww 4: DP3 TEMP[3].x, IN[8], IN[8] 5: RSQ TEMP[3].x, TEMP[3].xxxx 6: MUL TEMP[3], TEMP[3].xxxx, IN[8] 7: DP3 TEMP[4].x, IN[2], IN[2] 8: RSQ TEMP[4].x, TEMP[4].xxxx 9: MUL TEMP[4], TEMP[4].xxxx, IN[2] 10: TEX TEMP[5], IN[3], SAMP[2], 2D 11: MOV TEMP[5].x, TEMP[5].wwww 12: MAD TEMP[5], TEMP[5], IMM[1].xxxx, IMM[1].yyyy 13: TEX TEMP[6], TEMP[0], SAMP[3], 2D 14: MOV TEMP[6].x, TEMP[6].wwww 15: MAD TEMP[6].xy, TEMP[6], IMM[1].xxxx, IMM[1].yyyy 16: MAD TEMP[5].xy, TEMP[2].xxxx, TEMP[6], TEMP[5] 17: MOV TEMP[5].z, IMM[2].wwww 18: DP3 TEMP[7].x, TEMP[5], TEMP[5] 19: ADD TEMP[7].x, IMM[0].xxxx, -TEMP[7].xxxx 20: RSQ TEMP[7].x, TEMP[7].xxxx 21: RCP TEMP[5].z, TEMP[7].xxxx 22: DP3_SAT TEMP[4].x, TEMP[4], TEMP[5] 23: TXP TEMP[7], IN[5], SAMP[4], 2D 24: MUL TEMP[4], TEMP[4].xxxx, TEMP[7] 25: TEX TEMP[7].x, IN[4], SAMP[5], 2D 26: MUL TEMP[4], TEMP[4], TEMP[7].xxxx 27: MUL TEMP[1], TEMP[1], IN[0] 28: MUL TEMP[8], TEMP[1], CONST[5] 29: DP3 TEMP[3].x, TEMP[3], TEMP[5] 30: MAD_SAT TEMP[7].x, TEMP[3].xxxx, IMM[0].yyyy, -IMM[0].zzzz 31: MUL TEMP[7].x, TEMP[7].xxxx, TEMP[7].xxxx 32: MUL TEMP[7], TEMP[7].xxxx, CONST[6] 33: TEX TEMP[9], IN[7], SAMP[6], 2D 34: ADD TEMP[9], TEMP[9], TEMP[9] 35: TEX TEMP[10], TEMP[0], SAMP[7], 2D 36: ADD TEMP[10], TEMP[10], -IMM[0].wwww 37: MAD TEMP[9], TEMP[2].xxxx, TEMP[10], TEMP[9] 38: MAD TEMP[8], TEMP[7], TEMP[9], TEMP[8] 39: MUL TEMP[11].xyz, TEMP[4], TEMP[8] 40: SUB TEMP[7].x, IMM[0].xxxx, IN[1].xxxx 41: MUL OUT[0].xyz, TEMP[11], TEMP[7].xxxx 42: MUL TEMP[7], TEMP[7], TEMP[9] 43: MUL TEMP[7], TEMP[7], TEMP[4] 44: DP3 OUT[0].w, TEMP[7], IMM[2] 45: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[7].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[8].xxxx, const[8].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[8].xxxx, const[8].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[9].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[7].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[7].yyyy, -const[7].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[7].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[7].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[9]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[7].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[8].xxxx, const[8].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[8].xxxx, const[8].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[9].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[7].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[7].yyyy, -const[7].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[7].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[7].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[9]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[7].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[8].xxxx, const[8].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[8].xxxx, const[8].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[9].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[7].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[7].yyyy, -const[7].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[7].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[7].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[9]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[7].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[8].xxxx, const[8].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[8].xxxx, const[8].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[9].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[7].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[7].yyyy, -const[7].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[7].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[7].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[9]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[7].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[8].xxxx, const[8].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[8].xxxx, const[8].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[9].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[7].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[7].yyyy, -const[7].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[7].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[7].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[9]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[7].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[8].xxxx, const[8].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[8].xxxx, const[8].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[9].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[7].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[7].yyyy, -const[7].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[7].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[7].xxxx, input[1].xxxx; 41: MUL_SAT output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3_SAT output[0].w, temp[7], const[9]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[7].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[8].xxxx, const[8].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[8].xxxx, const[8].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[9].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[7].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[5]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[7].yyyy, -const[7].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[6]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[7]; 37: ADD temp[10], temp[10], -const[7].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: SUB temp[7].x, const[7].xxxx, input[1].xxxx; 42: MUL_SAT output[0].xyz, temp[11], temp[7].xxxx; 43: MUL temp[7], temp[7], temp[9]; 44: MUL temp[7], temp[7], temp[4]; 45: DP3_SAT output[0].w, temp[7], const[9]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[7].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, |temp[3].xxxx|; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[8].xxxx, const[8].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[8].xxxx, const[8].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[9].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[7].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, |temp[7].xxxx|; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[5]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[7].yyyy, -const[7].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[6]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[7]; 37: ADD temp[10], temp[10], -const[7].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: ADD temp[7].x, const[7].xxxx, -input[1].xxxx; 42: MUL_SAT output[0].xyz, temp[11], temp[7].xxxx; 43: MUL temp[7], temp[7], temp[9]; 44: MUL temp[7], temp[7], temp[4]; 45: DP3_SAT output[0].w, temp[7], const[9]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: MOV temp[2].x, const[7].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[2]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[8].xx__, const[8].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[3]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[8].xx__, const[8].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[9].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[7].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[5]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[7].y___, -const[7].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[7].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: ADD temp[7].x, const[7].x___, -input[1].x___; 42: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 45: DP3_SAT output[0].w, temp[7].xyz_, const[9].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: MOV temp[2].x, const[7].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[2]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[8].xx__, const[8].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[3]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[8].xx__, const[8].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[9].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[7].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[5]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[7].y___, -const[7].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[7].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: ADD temp[7].x, const[7].x___, -input[1].x___; 42: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 45: DP3_SAT output[0].w, temp[7].xyz_, const[9].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: MOV_SAT temp[2].x, input[3].w___; 3: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 4: RSQ temp[3].x, |temp[3].x___|; 5: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 6: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 7: RSQ temp[4].x, |temp[4].x___|; 8: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 9: TEX temp[5].yw, input[3].xy__, 2D[2]; 10: MOV temp[5].x, temp[5].w___; 11: MAD temp[5].xy, temp[5].xy__, const[8].xx__, none.-1-1__; 12: TEX temp[6].yw, temp[0].xy__, 2D[3]; 13: MOV temp[6].x, temp[6].w___; 14: MAD temp[6].xy, temp[6].xy__, const[8].xx__, none.-1-1__; 15: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 16: MOV temp[5].z, none.__0_; 17: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 18: ADD temp[7].x, none.1___, -temp[7].x___; 19: RSQ temp[7].x, |temp[7].x___|; 20: RCP temp[5].z, temp[7].x___; 21: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 22: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 23: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 24: TEX temp[12].x, input[4].xy__, 2D[5]; 25: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 26: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 27: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 28: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 29: MAD_SAT temp[7].x, temp[3].x___, const[7].y___, -const[7].z___; 30: MUL temp[7].x, temp[7].x___, temp[7].x___; 31: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 32: TEX temp[9].xyz, input[7].xy__, 2D[6]; 33: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 34: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 35: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 36: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 37: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 38: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 39: ADD temp[7].x, none.1___, -input[1].x___; 40: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 41: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 42: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 43: DP3_SAT output[0].w, temp[7].xyz_, const[9].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[3].w___; 5: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[3].x, |temp[3].x___|; 7: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 8: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 9: RSQ temp[4].x, |temp[4].x___|; 10: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: MOV temp[5].x, temp[5].w___; 13: MAD temp[5].xy, temp[5].xy__, const[8].xx__, none.-1-1__; 14: TEX temp[6].yw, temp[0].xy__, 2D[3]; 15: MOV temp[6].x, temp[6].w___; 16: MAD temp[6].xy, temp[6].xy__, const[8].xx__, none.-1-1__; 17: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 18: MOV temp[5].z, none.__0_; 19: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 20: ADD temp[7].x, none.1___, -temp[7].x___; 21: RSQ temp[7].x, |temp[7].x___|; 22: RCP temp[5].z, temp[7].x___; 23: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 24: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 25: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 26: TEX temp[12].x, input[4].xy__, 2D[5]; 27: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[7].y___, -const[7].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: ADD temp[7].x, none.1___, -input[1].x___; 42: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 45: DP3_SAT output[0].w, temp[7].xyz_, const[9].xyz_; CONST[3] = { 1.0000 4.0000 3.0000 0.5000 } CONST[4] = { 2.0000 -1.0000 0.3000 0.5900 } CONST[5] = { 0.3000 0.5900 0.1100 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[3].w___; 5: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[3].x, |temp[3].x___|; 7: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 8: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 9: RSQ temp[4].x, |temp[4].x___|; 10: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: MOV temp[5].x, temp[5].w___; 13: MAD temp[5].xy, temp[5].xy__, const[4].xx__, none.-1-1__; 14: TEX temp[6].yw, temp[0].xy__, 2D[3]; 15: MOV temp[6].x, temp[6].w___; 16: MAD temp[6].xy, temp[6].xy__, const[4].xx__, none.-1-1__; 17: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 18: MOV temp[5].z, none.__0_; 19: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 20: ADD temp[7].x, none.1___, -temp[7].x___; 21: RSQ temp[7].x, |temp[7].x___|; 22: RCP temp[5].z, temp[7].x___; 23: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 24: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 25: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 26: TEX temp[12].x, input[4].xy__, 2D[5]; 27: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[1].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[3].y___, -const[3].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[2].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: ADD temp[7].x, none.1___, -input[1].x___; 42: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 45: DP3_SAT output[0].w, temp[7].xyz_, const[5].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[14].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: MOV_SAT temp[16].x, input[3].w___; 5: DP3 temp[17].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[18].x, |temp[17].x___|; 7: MUL temp[19].xyz, temp[18].xxx_, input[8].xyz_; 8: DP3 temp[20].x, input[2].xyz_, input[2].xyz_; 9: RSQ temp[21].x, |temp[20].x___|; 10: MUL temp[22].xyz, temp[21].xxx_, input[2].xyz_; 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: MOV temp[5].x, temp[5].w___; 13: MAD temp[23].xy, temp[5].xy__, const[4].xx__, none.-1-1__; 14: TEX temp[6].yw, temp[14].xy__, 2D[3]; 15: MOV temp[6].x, temp[6].w___; 16: MAD temp[24].xy, temp[6].xy__, const[4].xx__, none.-1-1__; 17: MAD temp[5].xy, temp[16].xx__, temp[24].xy__, temp[23].xy__; 18: MOV temp[5].z, none.__0_; 19: DP3 temp[25].x, temp[5].xyz_, temp[5].xyz_; 20: ADD temp[26].x, none.1___, -temp[25].x___; 21: RSQ temp[27].x, |temp[26].x___|; 22: RCP temp[5].z, temp[27].x___; 23: DP3_SAT temp[28].x, temp[22].xyz_, temp[5].xyz_; 24: TXP temp[29].xyz, input[5].xy_w, 2D[4]; 25: MUL temp[30].xyz, temp[28].xxx_, temp[29].xyz_; 26: TEX temp[31].x, input[4].xy__, 2D[5]; 27: MUL temp[32].xyz, temp[30].xyz_, temp[31].xxx_; 28: MUL temp[33].xyz, temp[15].xyz_, input[0].xyz_; 29: MUL temp[34].xyz, temp[33].xyz_, const[1].xyz_; 30: DP3 temp[35].x, temp[19].xyz_, temp[5].xyz_; 31: MAD_SAT temp[36].x, temp[35].x___, const[3].y___, -const[3].z___; 32: MUL temp[37].x, temp[36].x___, temp[36].x___; 33: MUL temp[7].xyz, temp[37].xxx_, const[2].xyz_; 34: TEX temp[38].xyz, input[7].xy__, 2D[6]; 35: ADD temp[39].xyz, temp[38].xyz_, temp[38].xyz_; 36: TEX temp[40].xyz, temp[14].xy__, 2D[7]; 37: ADD temp[41].xyz, temp[40].xyz_, -none.HHH_; 38: MAD temp[42].xyz, temp[16].xxx_, temp[41].xyz_, temp[39].xyz_; 39: MAD temp[43].xyz, temp[7].xyz_, temp[42].xyz_, temp[34].xyz_; 40: MUL temp[44].xyz, temp[32].xyz_, temp[43].xyz_; 41: ADD temp[7].x, none.1___, -input[1].x___; 42: MUL_SAT output[0].xyz, temp[44].xyz_, temp[7].xxx_; 43: MUL temp[45].xyz, temp[7].xyz_, temp[42].xyz_; 44: MUL temp[46].xyz, temp[45].xyz_, temp[32].xyz_; 45: DP3_SAT output[0].w, temp[46].xyz_, const[5].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: src0.w = input[3] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 5: src0.xyz = input[8] DP3 temp[17].x, src0.xyz, src0.xyz 6: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 7: src0.xyz = temp[18], src1.xyz = input[8] MAD temp[19].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = input[2] DP3 temp[20].x, src0.xyz, src0.xyz 9: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 10: src0.xyz = temp[21], src1.xyz = input[2] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 13: src0.xyz = temp[5], src1.xyz = const[4] MAD temp[23].xy, src0.xy_, src1.xx_, -src0.11_ 14: TEX temp[6].yw, temp[14].xy__, 2D[3]; 15: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 16: src0.xyz = temp[6], src1.xyz = const[4] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 17: src0.xyz = temp[16], src1.xyz = temp[24], src2.xyz = temp[23] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 18: MAD temp[5].z, src0.__0, src0.111, src0.000 19: src0.xyz = temp[5] DP3 temp[25].x, src0.xyz, src0.xyz 20: src0.xyz = temp[25] MAD temp[26].x, src0.1__, src0.111, -src0.x__ 21: src0.xyz = temp[26] REPL_ALPHA temp[27].x RSQ, |src0.x| 22: src0.xyz = temp[27] REPL_ALPHA temp[5].z RCP, src0.x 23: src0.xyz = temp[22], src1.xyz = temp[5] DP3_SAT temp[28].x, src0.xyz, src1.xyz 24: TXP temp[29].xyz, input[5].xy_w, 2D[4]; 25: src0.xyz = temp[28], src1.xyz = temp[29] MAD temp[30].xyz, src0.xxx, src1.xyz, src0.000 26: TEX temp[31].x, input[4].xy__, 2D[5]; 27: src0.xyz = temp[30], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 28: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 29: src0.xyz = temp[33], src1.xyz = const[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[19], src1.xyz = temp[5] DP3 temp[35].x, src0.xyz, src1.xyz 31: src0.xyz = temp[35], src1.xyz = const[3] MAD_SAT temp[36].x, src0.x__, src1.y__, -src1.z__ 32: src0.xyz = temp[36] MAD temp[37].x, src0.x__, src0.x__, src0.000 33: src0.xyz = temp[37], src1.xyz = const[2] MAD temp[7].xyz, src0.xxx, src1.xyz, src0.000 34: TEX temp[38].xyz, input[7].xy__, 2D[6]; 35: src0.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src0.111, src0.xyz 36: TEX temp[40].xyz, temp[14].xy__, 2D[7]; 37: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, -src0.HHH 38: src0.xyz = temp[16], src1.xyz = temp[41], src2.xyz = temp[39] MAD temp[42].xyz, src0.xxx, src1.xyz, src2.xyz 39: src0.xyz = temp[7], src1.xyz = temp[42], src2.xyz = temp[34] MAD temp[43].xyz, src0.xyz, src1.xyz, src2.xyz 40: src0.xyz = temp[32], src1.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = input[1] MAD temp[7].x, src0.1__, src0.111, -src0.x__ 42: src0.xyz = temp[44], src1.xyz = temp[7] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 43: src0.xyz = temp[7], src1.xyz = temp[42] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 44: src0.xyz = temp[45], src1.xyz = temp[32] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[46], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[5].yw, input[3].xy__, 2D[2]; 3: TXP temp[29].xyz, input[5].xy_w, 2D[4]; 4: TEX temp[31].x, input[4].xy__, 2D[5]; 5: TEX temp[38].xyz, input[7].xy__, 2D[6]; 6: src0.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[5], src1.xyz = const[4] MAD temp[23].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[33], src1.xyz = const[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[5].z, src0.__0, src0.111, src0.000 12: src0.xyz = input[2] DP3 temp[20].x, src0.xyz, src0.xyz 13: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 14: src0.xyz = temp[21], src1.xyz = input[2] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = input[8] DP3 temp[17].x, src0.xyz, src0.xyz 16: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 17: src0.xyz = temp[18], src1.xyz = input[8] MAD temp[19].xyz, src0.xxx, src1.xyz, src0.000 18: src0.w = input[3] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 19: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 20: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 21: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 22: BEGIN_TEX; 23: TEX temp[40].xyz, temp[14].xy__, 2D[7]; 24: TEX temp[6].yw, temp[14].xy__, 2D[3]; 25: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 26: src0.xyz = temp[6], src1.xyz = const[4] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 27: src0.xyz = temp[16], src1.xyz = temp[24], src2.xyz = temp[23] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 28: src0.xyz = temp[5] DP3 temp[25].x, src0.xyz, src0.xyz 29: src0.xyz = temp[40], src1.xyz = temp[25] MAD temp[41].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[26].w, src0.1, src0.1, -src1.x 30: src0.xyz = temp[26], src0.w = temp[26] REPL_ALPHA temp[27].x RSQ, |src0.w| 31: src0.xyz = temp[27] REPL_ALPHA temp[5].z RCP, src0.x 32: src0.xyz = temp[22], src1.xyz = temp[5] DP3_SAT temp[28].x, src0.xyz, src1.xyz 33: src0.xyz = temp[28], src1.xyz = temp[29] MAD temp[30].xyz, src0.xxx, src1.xyz, src0.000 34: src0.xyz = temp[30], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 35: src0.xyz = temp[19], src1.xyz = temp[5] DP3 temp[35].x, src0.xyz, src1.xyz 36: src0.xyz = temp[16], src1.xyz = temp[41], src2.xyz = temp[39] MAD temp[42].xyz, src0.xxx, src1.xyz, src2.xyz 37: src0.xyz = temp[35], src1.xyz = const[3] MAD_SAT temp[36].w, src0.x, src1.y, -src1.z 38: src0.xyz = temp[36], src0.w = temp[36] MAD temp[37].x, src0.w__, src0.w__, src0.000 39: src0.xyz = temp[37], src1.xyz = const[2] MAD temp[7].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[7], src1.xyz = temp[42], src2.xyz = temp[34] MAD temp[43].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[32], src1.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = input[1] MAD temp[7].x, src0.1__, src0.111, -src0.x__ 43: src0.xyz = temp[44], src1.xyz = temp[7] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[7], src1.xyz = temp[42] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[45], src1.xyz = temp[32] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[46], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[5].yw, input[3].xy__, 2D[2]; 3: TXP temp[29].xyz, input[5].xy_w, 2D[4]; 4: TEX temp[31].x, input[4].xy__, 2D[5]; 5: TEX temp[38].xyz, input[7].xy__, 2D[6]; 6: src0.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[5], src1.xyz = const[4] MAD temp[23].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[33], src1.xyz = const[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[5].z, src0.__0, src0.111, src0.000 12: src0.xyz = input[2] DP3 temp[20].x, src0.xyz, src0.xyz 13: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 14: src0.xyz = temp[21], src1.xyz = input[2] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 15: src0.xyz = input[8] DP3 temp[17].x, src0.xyz, src0.xyz 16: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 17: src0.xyz = temp[18], src1.xyz = input[8] MAD temp[19].xyz, src0.xxx, src1.xyz, src0.000 18: src0.w = input[3] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 19: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 20: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 21: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 22: BEGIN_TEX; 23: TEX temp[40].xyz, temp[14].xy__, 2D[7]; 24: TEX temp[6].yw, temp[14].xy__, 2D[3]; 25: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 26: src0.xyz = temp[6], src1.xyz = const[4] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 27: src0.xyz = temp[16], src1.xyz = temp[24], src2.xyz = temp[23] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 28: src0.xyz = temp[5] DP3 temp[25].x, src0.xyz, src0.xyz 29: src0.xyz = temp[40], src1.xyz = temp[25] MAD temp[41].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[26].w, src0.1, src0.1, -src1.x 30: src0.w = temp[26] REPL_ALPHA temp[27].x RSQ, |src0.w| 31: src0.xyz = temp[27] REPL_ALPHA temp[5].z RCP, src0.x 32: src0.xyz = temp[22], src1.xyz = temp[5] DP3_SAT temp[28].x, src0.xyz, src1.xyz 33: src0.xyz = temp[28], src1.xyz = temp[29] MAD temp[30].xyz, src0.xxx, src1.xyz, src0.000 34: src0.xyz = temp[30], src1.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xxx, src0.000 35: src0.xyz = temp[19], src1.xyz = temp[5] DP3 temp[35].x, src0.xyz, src1.xyz 36: src0.xyz = temp[16], src1.xyz = temp[41], src2.xyz = temp[39] MAD temp[42].xyz, src0.xxx, src1.xyz, src2.xyz 37: src0.xyz = temp[35], src1.xyz = const[3] MAD_SAT temp[36].w, src0.x, src1.y, -src1.z 38: src0.w = temp[36] MAD temp[37].x, src0.w__, src0.w__, src0.000 39: src0.xyz = temp[37], src1.xyz = const[2] MAD temp[7].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[7], src1.xyz = temp[42], src2.xyz = temp[34] MAD temp[43].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[32], src1.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = input[1] MAD temp[7].x, src0.1__, src0.111, -src0.x__ 43: src0.xyz = temp[44], src1.xyz = temp[7] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[7], src1.xyz = temp[42] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[45], src1.xyz = temp[32] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[46], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6].xyz, input[6].xy__, 2D[0]; 2: TEX temp[9].yw, input[3].xy__, 2D[2]; 3: TXP temp[5].xyz, input[5].xy_w, 2D[4]; 4: TEX temp[4].x, input[4].xy__, 2D[5]; 5: TEX temp[7].xyz, input[7].xy__, 2D[6]; 6: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 7: src0.w = temp[9] MAD temp[9].x, src0.w__, src0.11_, src0.00_ 8: src0.xyz = temp[9], src1.xyz = const[4] MAD temp[9].xy, src0.xy_, src1.xx_, -src0.11_ 9: src0.xyz = temp[6], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 10: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 11: MAD temp[6].z, src0.__0, src0.111, src0.000 12: src0.xyz = input[2] DP3 temp[1].y, src0.xyz, src0.xyz 13: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 14: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 15: src0.xyz = input[8] DP3 temp[1].y, src0.xyz, src0.xyz 16: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 17: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[8].xyz, src0.yyy, src1.xyz, src0.000 18: src0.w = input[3] MAD_SAT temp[1].y, src0._w_, src0._1_, src0._0_ 19: src0.w = const[0] MAD temp[10].y, src0._w_, src0.11_, src0.00_ 20: src0.xyz = const[0] MAD temp[10].x, src0.z__, src0.11_, src0.00_ 21: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[10] MAD temp[3].xy, src0.xy_, src1.xy_, src2.xy_ 22: BEGIN_TEX; 23: TEX temp[10].xyz, temp[3].xy__, 2D[7]; 24: TEX temp[3].yw, temp[3].xy__, 2D[3]; 25: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 26: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 27: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[9] MAD temp[6].xy, src0.yy_, src1.xy_, src2.xy_ 28: src0.xyz = temp[6] DP3 temp[1].z, src0.xyz, src0.xyz 29: src0.xyz = temp[10], src1.xyz = temp[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.1, src0.1, -src1.z 30: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 31: src0.xyz = temp[1] REPL_ALPHA temp[1].z RCP, src0.z 32: src0.xyz = temp[2], src1.xyz = temp[6], src2.xyz = temp[1] DP3_SAT temp[2].x, src0.xyz, src2.xyz 33: src0.xyz = temp[2], src1.xyz = temp[5] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 34: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 35: src0.xyz = temp[8], src1.xyz = temp[6], src2.xyz = temp[1] DP3 temp[1].z, src0.xyz, src2.xyz 36: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[7] MAD temp[3].xyz, src0.yyy, src1.xyz, src2.xyz 37: src0.xyz = temp[1], src1.xyz = const[3] MAD_SAT temp[0].w, src0.z, src1.y, -src1.z 38: src0.w = temp[0] MAD temp[1].y, src0._w_, src0._w_, src0._0_ 39: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 40: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = input[1] MAD temp[4].x, src0.1__, src0.111, -src0.x__ 43: src0.xyz = temp[0], src1.xyz = temp[4] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[4], src1.xyz = temp[3] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[0], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ pc=30************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 4 (code_addr: 000803c0) TEX: TEX t6, t6, texture[0] (00008186) TEX t9, t3, texture[2] (00009243) TXP t5, t5, texture[4] (0001a145) TEX t4, t4, texture[5] (0000a904) TEX t7, t7, texture[6] (0000b1c7) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 1: xyz: t0 t0 t0 bias-> t9.x (00a40000) w: t9 t0 t0 bias-> (00000009) xyz: t9.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t9 c4 t0 bias-> t9.xy (01a40909) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz c4.xxx -1.0 op: 000d4280 w: t9.x t9.x t9.x op: 00000000 3: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t0.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 4: xyz: t0 c1 t0 bias-> t0.xyz (03800840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t6.z (02180000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 6: xyz: t2 t0 t0 bias-> t1.y (01040002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 7: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 8: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 9: xyz: t8 t0 t0 bias-> t1.y (01040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 10: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 11: xyz: t1 t8 t0 bias-> t8.xyz (03a00201) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t8.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 12: xyz: t0 t0 t0 bias-> t1.y (01040000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 40050a8c w: t0.x t0.x t0.x op: 00000000 13: xyz: t0 t0 t0 bias-> t10.y (01280000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 14: xyz: c0 t0 t0 bias-> t10.x (00a80020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 15: xyz: t3 c0 t10 bias-> t3.xy (018ca803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz t10.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 16, tex_offset: 5, alu_end: 21, tex_end: 1 (code_addr: 00425550) TEX: TEX t10, t3, texture[7] (0000ba83) TEX t3, t3, texture[3] (000098c3) 16: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 17: xyz: t3 c4 t0 bias-> t3.xy (018c0903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 18: xyz: t1 t3 t9 bias-> t6.xy (019890c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t9.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 19: xyz: t6 t0 t0 bias-> t1.z (02040006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t6.xyz t6.xxx op: 00804000 w: t6.x t6.x t6.x op: 00000000 20: xyz: t10 t1 t0 bias-> t3.xyz (038c004a) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t10.xyz 1.0 -0.5 op: 000d8a80 w: 1.0 1.0 -t1.z op: 00094891 21: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 22: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 23: xyz: t2 t6 t1 bias-> t2.x (00881182) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t1.xyz t2.xxx op: 40804400 w: t2.x t2.x t2.x op: 00000000 24: xyz: t2 t5 t0 bias-> t2.xyz (03880142) w: t0 t0 t0 bias-> (00000000) xyz: t2.xxx t5.xyz 0.0 op: 00050201 w: t2.x t2.x t2.x op: 00000000 25: 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 26: xyz: t8 t6 t1 bias-> t1.z (02041188) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t1.xyz t8.xxx op: 00804400 w: t8.x t8.x t8.x op: 00000000 27: xyz: t1 t3 t7 bias-> t3.xyz (038c70c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t7.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 28: xyz: t1 c3 t0 bias-> (000008c1) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xxx t1.xxx t1.xxx op: 00004081 w: t1.z c3.y -c3.z op: 40094202 29: xyz: t32 t0 t0 bias-> t1.y (01040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t0.www 0.0 op: 0005060c w: t32.x t32.x t32.x op: 00000000 30: xyz: t1 c2 t0 bias-> t4.xyz (03900881) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 31: xyz: t4 t3 t0 bias-> t0.xyz (038000c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t0.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 32: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 33: xyz: t1 t0 t0 bias-> t4.x (00900001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 34: xyz: t0 t4 t0 bias-> o0.xyz (1c000100) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t4.xxx 0.0 op: 40050280 w: t0.x t0.x t0.x op: 00000000 35: xyz: t4 t3 t0 bias-> t0.xyz (038000c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 36: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 37: xyz: t0 c5 t0 bias-> (00000940) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c5.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL SAMP[8] DCL CONST[0] DCL CONST[5..6] DCL TEMP[0..11] IMM FLT32 { 2.0000, -1.0000, 1.0000, 4.0000} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.5000} 0: MAD TEMP[0].xy, IN[3], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[6], SAMP[0], 2D 2: TEX TEMP[2], IN[6], SAMP[1], 2D 3: MUL_SAT TEMP[2], TEMP[2], IN[3].wwww 4: DP3 TEMP[3].x, IN[8], IN[8] 5: RSQ TEMP[3].x, TEMP[3].xxxx 6: MUL TEMP[3], TEMP[3].xxxx, IN[8] 7: DP3 TEMP[4].x, IN[2], IN[2] 8: RSQ TEMP[4].x, TEMP[4].xxxx 9: MUL TEMP[4], TEMP[4].xxxx, IN[2] 10: TEX TEMP[5], IN[3], SAMP[3], 2D 11: MOV TEMP[5].x, TEMP[5].wwww 12: MAD TEMP[5], TEMP[5], IMM[0].xxxx, IMM[0].yyyy 13: TEX TEMP[6], TEMP[0], SAMP[4], 2D 14: MOV TEMP[6].x, TEMP[6].wwww 15: MAD TEMP[6].xy, TEMP[6], IMM[0].xxxx, IMM[0].yyyy 16: MAD TEMP[5].xy, TEMP[2].xxxx, TEMP[6], TEMP[5] 17: MOV TEMP[5].z, IMM[1].wwww 18: DP3 TEMP[7].x, TEMP[5], TEMP[5] 19: ADD TEMP[7].x, IMM[2].xxxx, -TEMP[7].xxxx 20: RSQ TEMP[7].x, TEMP[7].xxxx 21: RCP TEMP[5].z, TEMP[7].xxxx 22: DP3_SAT TEMP[4].x, TEMP[4], TEMP[5] 23: TXP TEMP[7], IN[5], SAMP[5], 2D 24: MUL TEMP[4], TEMP[4].xxxx, TEMP[7] 25: TEX TEMP[7].x, IN[4], SAMP[6], 2D 26: MUL TEMP[4], TEMP[4], TEMP[7].xxxx 27: MUL TEMP[1], TEMP[1], IN[0] 28: MUL TEMP[8], TEMP[1], CONST[5] 29: DP3 TEMP[3].x, TEMP[3], TEMP[5] 30: MAD_SAT TEMP[7].x, TEMP[3].xxxx, IMM[2].yyyy, -IMM[2].zzzz 31: MUL TEMP[7].x, TEMP[7].xxxx, TEMP[7].xxxx 32: MUL TEMP[7], TEMP[7].xxxx, CONST[6] 33: TEX TEMP[9], IN[7], SAMP[7], 2D 34: ADD TEMP[9], TEMP[9], TEMP[9] 35: TEX TEMP[10], TEMP[0], SAMP[8], 2D 36: ADD TEMP[10], TEMP[10], -IMM[2].wwww 37: MAD TEMP[9], TEMP[2].xxxx, TEMP[10], TEMP[9] 38: MAD TEMP[8], TEMP[7], TEMP[9], TEMP[8] 39: MUL TEMP[11].xyz, TEMP[4], TEMP[8] 40: SUB TEMP[7].x, IMM[2].xxxx, IN[1].xxxx 41: MUL OUT[0].xyz, TEMP[11], TEMP[7].xxxx 42: MUL TEMP[7], TEMP[7], TEMP[9] 43: MUL TEMP[7], TEMP[7], TEMP[4] 44: DP3 OUT[0].w, TEMP[7], IMM[1] 45: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[7].xxxx, const[7].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[7].xxxx, const[7].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[8].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[9].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[8]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[7].xxxx, const[7].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[7].xxxx, const[7].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[8].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[9].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[8]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[7].xxxx, const[7].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[7].xxxx, const[7].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[8].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[9].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[8]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[7].xxxx, const[7].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[7].xxxx, const[7].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[8].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[9].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[8]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[7].xxxx, const[7].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[7].xxxx, const[7].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[8].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[9].xxxx, input[1].xxxx; 41: MUL output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[8]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[7].xxxx, const[7].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[7].xxxx, const[7].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[8].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[9].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: SUB temp[7].x, const[9].xxxx, input[1].xxxx; 41: MUL_SAT output[0].xyz, temp[11], temp[7].xxxx; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3_SAT output[0].w, temp[7], const[8]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[7].xxxx, const[7].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[7].xxxx, const[7].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[8].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[6]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[7]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[8]; 37: ADD temp[10], temp[10], -const[9].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: SUB temp[7].x, const[9].xxxx, input[1].xxxx; 42: MUL_SAT output[0].xyz, temp[11], temp[7].xxxx; 43: MUL temp[7], temp[7], temp[9]; 44: MUL temp[7], temp[7], temp[4]; 45: DP3_SAT output[0].w, temp[7], const[8]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, |temp[3].xxxx|; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[7].xxxx, const[7].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[7].xxxx, const[7].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[8].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[9].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, |temp[7].xxxx|; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[6]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[9].yyyy, -const[9].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[7]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[8]; 37: ADD temp[10], temp[10], -const[9].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: ADD temp[7].x, const[9].xxxx, -input[1].xxxx; 42: MUL_SAT output[0].xyz, temp[11], temp[7].xxxx; 43: MUL temp[7], temp[7], temp[9]; 44: MUL temp[7], temp[7], temp[4]; 45: DP3_SAT output[0].w, temp[7], const[8]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: TEX temp[2].x, input[6].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[3]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[7].xx__, const[7].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[4]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[7].xx__, const[7].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[8].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[9].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[6]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[9].y___, -const[9].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[7]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[9].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: ADD temp[7].x, const[9].x___, -input[1].x___; 42: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 45: DP3_SAT output[0].w, temp[7].xyz_, const[8].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: TEX temp[2].x, input[6].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[3]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[7].xx__, const[7].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[4]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[7].xx__, const[7].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[8].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[9].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[6]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[9].y___, -const[9].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[7]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[9].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: ADD temp[7].x, const[9].x___, -input[1].x___; 42: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 45: DP3_SAT output[0].w, temp[7].xyz_, const[8].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: TEX temp[2].x, input[6].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[3]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[7].xx__, none.-1-1__; 13: TEX temp[6].yw, temp[0].xy__, 2D[4]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[7].xx__, none.-1-1__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, none.__0_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, none.1___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[6]; 26: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 27: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 28: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 29: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 30: MAD_SAT temp[7].x, temp[3].x___, const[9].y___, -const[9].z___; 31: MUL temp[7].x, temp[7].x___, temp[7].x___; 32: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 33: TEX temp[9].xyz, input[7].xy__, 2D[7]; 34: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 35: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 36: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 37: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 38: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 39: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 40: ADD temp[7].x, none.1___, -input[1].x___; 41: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 42: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 44: DP3_SAT output[0].w, temp[7].xyz_, const[8].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: TEX temp[2].x, input[6].xy__, 2D[1]; 5: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 6: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 7: RSQ temp[3].x, |temp[3].x___|; 8: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 9: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 10: RSQ temp[4].x, |temp[4].x___|; 11: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: MOV temp[5].x, temp[5].w___; 14: MAD temp[5].xy, temp[5].xy__, const[7].xx__, none.-1-1__; 15: TEX temp[6].yw, temp[0].xy__, 2D[4]; 16: MOV temp[6].x, temp[6].w___; 17: MAD temp[6].xy, temp[6].xy__, const[7].xx__, none.-1-1__; 18: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[7].x, none.1___, -temp[7].x___; 22: RSQ temp[7].x, |temp[7].x___|; 23: RCP temp[5].z, temp[7].x___; 24: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 25: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 26: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 27: TEX temp[12].x, input[4].xy__, 2D[6]; 28: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 29: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 30: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 31: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 32: MAD_SAT temp[7].x, temp[3].x___, const[9].y___, -const[9].z___; 33: MUL temp[7].x, temp[7].x___, temp[7].x___; 34: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 35: TEX temp[9].xyz, input[7].xy__, 2D[7]; 36: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 37: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 38: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 39: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 40: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 41: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 42: ADD temp[7].x, none.1___, -input[1].x___; 43: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 45: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[7].xyz_, const[8].xyz_; CONST[3] = { 2.0000 -1.0000 1.0000 4.0000 } CONST[4] = { 0.3000 0.5900 0.1100 0.0000 } CONST[5] = { 1.0000 4.0000 3.0000 0.5000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: TEX temp[2].x, input[6].xy__, 2D[1]; 5: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 6: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 7: RSQ temp[3].x, |temp[3].x___|; 8: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 9: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 10: RSQ temp[4].x, |temp[4].x___|; 11: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: MOV temp[5].x, temp[5].w___; 14: MAD temp[5].xy, temp[5].xy__, const[3].xx__, none.-1-1__; 15: TEX temp[6].yw, temp[0].xy__, 2D[4]; 16: MOV temp[6].x, temp[6].w___; 17: MAD temp[6].xy, temp[6].xy__, const[3].xx__, none.-1-1__; 18: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[7].x, none.1___, -temp[7].x___; 22: RSQ temp[7].x, |temp[7].x___|; 23: RCP temp[5].z, temp[7].x___; 24: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 25: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 26: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 27: TEX temp[12].x, input[4].xy__, 2D[6]; 28: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 29: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 30: MUL temp[8].xyz, temp[1].xyz_, const[1].xyz_; 31: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 32: MAD_SAT temp[7].x, temp[3].x___, const[5].y___, -const[5].z___; 33: MUL temp[7].x, temp[7].x___, temp[7].x___; 34: MUL temp[7].xyz, temp[7].xxx_, const[2].xyz_; 35: TEX temp[9].xyz, input[7].xy__, 2D[7]; 36: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 37: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 38: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 39: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 40: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 41: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 42: ADD temp[7].x, none.1___, -input[1].x___; 43: MUL_SAT output[0].xyz, temp[11].xyz_, temp[7].xxx_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 45: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[7].xyz_, const[4].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[14].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: TEX temp[16].x, input[6].xy__, 2D[1]; 5: MUL_SAT temp[17].x, temp[16].x___, input[3].w___; 6: DP3 temp[18].x, input[8].xyz_, input[8].xyz_; 7: RSQ temp[19].x, |temp[18].x___|; 8: MUL temp[20].xyz, temp[19].xxx_, input[8].xyz_; 9: DP3 temp[21].x, input[2].xyz_, input[2].xyz_; 10: RSQ temp[22].x, |temp[21].x___|; 11: MUL temp[23].xyz, temp[22].xxx_, input[2].xyz_; 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: MOV temp[5].x, temp[5].w___; 14: MAD temp[24].xy, temp[5].xy__, const[3].xx__, none.-1-1__; 15: TEX temp[6].yw, temp[14].xy__, 2D[4]; 16: MOV temp[6].x, temp[6].w___; 17: MAD temp[25].xy, temp[6].xy__, const[3].xx__, none.-1-1__; 18: MAD temp[5].xy, temp[17].xx__, temp[25].xy__, temp[24].xy__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[26].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[27].x, none.1___, -temp[26].x___; 22: RSQ temp[28].x, |temp[27].x___|; 23: RCP temp[5].z, temp[28].x___; 24: DP3_SAT temp[29].x, temp[23].xyz_, temp[5].xyz_; 25: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 26: MUL temp[31].xyz, temp[29].xxx_, temp[30].xyz_; 27: TEX temp[32].x, input[4].xy__, 2D[6]; 28: MUL temp[33].xyz, temp[31].xyz_, temp[32].xxx_; 29: MUL temp[34].xyz, temp[15].xyz_, input[0].xyz_; 30: MUL temp[35].xyz, temp[34].xyz_, const[1].xyz_; 31: DP3 temp[36].x, temp[20].xyz_, temp[5].xyz_; 32: MAD_SAT temp[37].x, temp[36].x___, const[5].y___, -const[5].z___; 33: MUL temp[38].x, temp[37].x___, temp[37].x___; 34: MUL temp[7].xyz, temp[38].xxx_, const[2].xyz_; 35: TEX temp[39].xyz, input[7].xy__, 2D[7]; 36: ADD temp[40].xyz, temp[39].xyz_, temp[39].xyz_; 37: TEX temp[41].xyz, temp[14].xy__, 2D[8]; 38: ADD temp[42].xyz, temp[41].xyz_, -none.HHH_; 39: MAD temp[43].xyz, temp[17].xxx_, temp[42].xyz_, temp[40].xyz_; 40: MAD temp[44].xyz, temp[7].xyz_, temp[43].xyz_, temp[35].xyz_; 41: MUL temp[45].xyz, temp[33].xyz_, temp[44].xyz_; 42: ADD temp[7].x, none.1___, -input[1].x___; 43: MUL_SAT output[0].xyz, temp[45].xyz_, temp[7].xxx_; 44: MUL temp[46].xyz, temp[7].xyz_, temp[43].xyz_; 45: MUL temp[47].xyz, temp[46].xyz_, temp[33].xyz_; 46: DP3_SAT output[0].w, temp[47].xyz_, const[4].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: TEX temp[16].x, input[6].xy__, 2D[1]; 5: src0.xyz = temp[16], src0.w = input[3] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 6: src0.xyz = input[8] DP3 temp[18].x, src0.xyz, src0.xyz 7: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 8: src0.xyz = temp[19], src1.xyz = input[8] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 9: src0.xyz = input[2] DP3 temp[21].x, src0.xyz, src0.xyz 10: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 11: src0.xyz = temp[22], src1.xyz = input[2] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 14: src0.xyz = temp[5], src1.xyz = const[3] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 15: TEX temp[6].yw, temp[14].xy__, 2D[4]; 16: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 17: src0.xyz = temp[6], src1.xyz = const[3] MAD temp[25].xy, src0.xy_, src1.xx_, -src0.11_ 18: src0.xyz = temp[17], src1.xyz = temp[25], src2.xyz = temp[24] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 19: MAD temp[5].z, src0.__0, src0.111, src0.000 20: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 21: src0.xyz = temp[26] MAD temp[27].x, src0.1__, src0.111, -src0.x__ 22: src0.xyz = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.x| 23: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 24: src0.xyz = temp[23], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 25: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 26: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 27: TEX temp[32].x, input[4].xy__, 2D[6]; 28: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[20], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 32: src0.xyz = temp[36], src1.xyz = const[5] MAD_SAT temp[37].x, src0.x__, src1.y__, -src1.z__ 33: src0.xyz = temp[37] MAD temp[38].x, src0.x__, src0.x__, src0.000 34: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[7].xyz, src0.xxx, src1.xyz, src0.000 35: TEX temp[39].xyz, input[7].xy__, 2D[7]; 36: src0.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, src0.xyz 37: TEX temp[41].xyz, temp[14].xy__, 2D[8]; 38: src0.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src0.111, -src0.HHH 39: src0.xyz = temp[17], src1.xyz = temp[42], src2.xyz = temp[40] MAD temp[43].xyz, src0.xxx, src1.xyz, src2.xyz 40: src0.xyz = temp[7], src1.xyz = temp[43], src2.xyz = temp[35] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[33], src1.xyz = temp[44] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = input[1] MAD temp[7].x, src0.1__, src0.111, -src0.x__ 43: src0.xyz = temp[45], src1.xyz = temp[7] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[7], src1.xyz = temp[43] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[46], src1.xyz = temp[33] MAD temp[47].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[47], src1.xyz = const[4] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[16].x, input[6].xy__, 2D[1]; 3: TEX temp[5].yw, input[3].xy__, 2D[3]; 4: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 5: TEX temp[32].x, input[4].xy__, 2D[6]; 6: TEX temp[39].xyz, input[7].xy__, 2D[7]; 7: src0.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[5], src1.xyz = const[3] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[16], src0.w = input[3] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 11: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 12: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 13: MAD temp[5].z, src0.__0, src0.111, src0.000 14: src0.xyz = input[2] DP3 temp[21].x, src0.xyz, src0.xyz 15: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 16: src0.xyz = temp[22], src1.xyz = input[2] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 17: src0.xyz = input[8] DP3 temp[18].x, src0.xyz, src0.xyz 18: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 19: src0.xyz = temp[19], src1.xyz = input[8] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 20: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 21: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 22: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[41].xyz, temp[14].xy__, 2D[8]; 25: TEX temp[6].yw, temp[14].xy__, 2D[4]; 26: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 27: src0.xyz = temp[6], src1.xyz = const[3] MAD temp[25].xy, src0.xy_, src1.xx_, -src0.11_ 28: src0.xyz = temp[17], src1.xyz = temp[25], src2.xyz = temp[24] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 29: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 30: src0.xyz = temp[41], src1.xyz = temp[26] MAD temp[42].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[27].w, src0.1, src0.1, -src1.x 31: src0.xyz = temp[27], src0.w = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.w| 32: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 33: src0.xyz = temp[23], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 34: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 36: src0.xyz = temp[20], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 37: src0.xyz = temp[17], src1.xyz = temp[42], src2.xyz = temp[40] MAD temp[43].xyz, src0.xxx, src1.xyz, src2.xyz 38: src0.xyz = temp[36], src1.xyz = const[5] MAD_SAT temp[37].w, src0.x, src1.y, -src1.z 39: src0.xyz = temp[37], src0.w = temp[37] MAD temp[38].x, src0.w__, src0.w__, src0.000 40: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[7].xyz, src0.xxx, src1.xyz, src0.000 41: src0.xyz = temp[7], src1.xyz = temp[43], src2.xyz = temp[35] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = temp[33], src1.xyz = temp[44] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = input[1] MAD temp[7].x, src0.1__, src0.111, -src0.x__ 44: src0.xyz = temp[45], src1.xyz = temp[7] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 45: src0.xyz = temp[7], src1.xyz = temp[43] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[46], src1.xyz = temp[33] MAD temp[47].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[47], src1.xyz = const[4] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[16].x, input[6].xy__, 2D[1]; 3: TEX temp[5].yw, input[3].xy__, 2D[3]; 4: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 5: TEX temp[32].x, input[4].xy__, 2D[6]; 6: TEX temp[39].xyz, input[7].xy__, 2D[7]; 7: src0.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[5], src1.xyz = const[3] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[16], src0.w = input[3] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 11: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 12: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 13: MAD temp[5].z, src0.__0, src0.111, src0.000 14: src0.xyz = input[2] DP3 temp[21].x, src0.xyz, src0.xyz 15: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 16: src0.xyz = temp[22], src1.xyz = input[2] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 17: src0.xyz = input[8] DP3 temp[18].x, src0.xyz, src0.xyz 18: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 19: src0.xyz = temp[19], src1.xyz = input[8] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 20: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 21: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 22: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[41].xyz, temp[14].xy__, 2D[8]; 25: TEX temp[6].yw, temp[14].xy__, 2D[4]; 26: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 27: src0.xyz = temp[6], src1.xyz = const[3] MAD temp[25].xy, src0.xy_, src1.xx_, -src0.11_ 28: src0.xyz = temp[17], src1.xyz = temp[25], src2.xyz = temp[24] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 29: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 30: src0.xyz = temp[41], src1.xyz = temp[26] MAD temp[42].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[27].w, src0.1, src0.1, -src1.x 31: src0.w = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.w| 32: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 33: src0.xyz = temp[23], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 34: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 36: src0.xyz = temp[20], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 37: src0.xyz = temp[17], src1.xyz = temp[42], src2.xyz = temp[40] MAD temp[43].xyz, src0.xxx, src1.xyz, src2.xyz 38: src0.xyz = temp[36], src1.xyz = const[5] MAD_SAT temp[37].w, src0.x, src1.y, -src1.z 39: src0.w = temp[37] MAD temp[38].x, src0.w__, src0.w__, src0.000 40: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[7].xyz, src0.xxx, src1.xyz, src0.000 41: src0.xyz = temp[7], src1.xyz = temp[43], src2.xyz = temp[35] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = temp[33], src1.xyz = temp[44] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = input[1] MAD temp[7].x, src0.1__, src0.111, -src0.x__ 44: src0.xyz = temp[45], src1.xyz = temp[7] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 45: src0.xyz = temp[7], src1.xyz = temp[43] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[46], src1.xyz = temp[33] MAD temp[47].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[47], src1.xyz = const[4] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[6].x, input[6].xy__, 2D[1]; 3: TEX temp[10].yw, input[3].xy__, 2D[3]; 4: TXP temp[5].xyz, input[5].xy_w, 2D[5]; 5: TEX temp[4].x, input[4].xy__, 2D[6]; 6: TEX temp[7].xyz, input[7].xy__, 2D[7]; 7: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[10] MAD temp[10].x, src0.w__, src0.11_, src0.00_ 9: src0.xyz = temp[10], src1.xyz = const[3] MAD temp[10].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[6], src0.w = input[3] MAD_SAT temp[1].y, src0._x_, src0._w_, src0._0_ 11: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 12: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 13: MAD temp[6].z, src0.__0, src0.111, src0.000 14: src0.xyz = input[2] DP3 temp[1].z, src0.xyz, src0.xyz 15: src0.xyz = temp[1] REPL_ALPHA temp[1].z RSQ, |src0.z| 16: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.zzz, src1.xyz, src0.000 17: src0.xyz = input[8] DP3 temp[1].z, src0.xyz, src0.xyz 18: src0.xyz = temp[1] REPL_ALPHA temp[1].z RSQ, |src0.z| 19: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[8].xyz, src0.zzz, src1.xyz, src0.000 20: src0.w = const[0] MAD temp[9].y, src0._w_, src0.11_, src0.00_ 21: src0.xyz = const[0] MAD temp[9].x, src0.z__, src0.11_, src0.00_ 22: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[9] MAD temp[3].xy, src0.xy_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[9].xyz, temp[3].xy__, 2D[8]; 25: TEX temp[3].yw, temp[3].xy__, 2D[4]; 26: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 27: src0.xyz = temp[3], src1.xyz = const[3] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 28: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[10] MAD temp[6].xy, src0.yy_, src1.xy_, src2.xy_ 29: src0.xyz = temp[6] DP3 temp[1].z, src0.xyz, src0.xyz 30: src0.xyz = temp[9], src1.xyz = temp[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.1, src0.1, -src1.z 31: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 32: src0.xyz = temp[1] REPL_ALPHA temp[1].z RCP, src0.z 33: src0.xyz = temp[2], src1.xyz = temp[6], src2.xyz = temp[1] DP3_SAT temp[2].x, src0.xyz, src2.xyz 34: src0.xyz = temp[2], src1.xyz = temp[5] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 36: src0.xyz = temp[8], src1.xyz = temp[6], src2.xyz = temp[1] DP3 temp[1].z, src0.xyz, src2.xyz 37: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[7] MAD temp[3].xyz, src0.yyy, src1.xyz, src2.xyz 38: src0.xyz = temp[1], src1.xyz = const[5] MAD_SAT temp[0].w, src0.z, src1.y, -src1.z 39: src0.w = temp[0] MAD temp[1].y, src0._w_, src0._w_, src0._0_ 40: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 41: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = input[1] MAD temp[4].x, src0.1__, src0.111, -src0.x__ 44: src0.xyz = temp[0], src1.xyz = temp[4] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 45: src0.xyz = temp[4], src1.xyz = temp[3] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[0], src1.xyz = const[4] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ pc=31************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 5 (code_addr: 000a03c0) TEX: TEX t9, t6, texture[0] (00008246) TEX t6, t6, texture[1] (00008986) TEX t10, t3, texture[3] (00009a83) TXP t5, t5, texture[5] (0001a945) TEX t4, t4, texture[6] (0000b104) TEX t7, t7, texture[7] (0000b9c7) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 1: xyz: t0 t0 t0 bias-> t10.x (00a80000) w: t10 t0 t0 bias-> (0000000a) xyz: t10.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t10 c3 t0 bias-> t10.xy (01a808ca) w: t0 t0 t0 bias-> (00000000) xyz: t10.xyz c3.xxx -1.0 op: 000d4280 w: t10.x t10.x t10.x op: 00000000 3: xyz: t6 t0 t0 bias-> t1.y (01040006) w: t3 t0 t0 bias-> (00000003) xyz: t6.xxx t3.www 0.0 op: 40050601 w: t6.x t6.x t6.x op: 00000000 4: xyz: t9 t0 t0 bias-> t0.xyz (03800009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t0.xyz 0.0 op: 00050200 w: t9.x t9.x t9.x op: 00000000 5: xyz: t0 c1 t0 bias-> t0.xyz (03800840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 t0 t0 bias-> t6.z (02180000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 7: xyz: t2 t0 t0 bias-> t1.z (02040002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 8: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.z| t1.x t1.x op: 05800042 9: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz t2.xyz 0.0 op: 00050203 w: t1.x t1.x t1.x op: 00000000 10: xyz: t8 t0 t0 bias-> t1.z (02040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 11: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.z| t1.x t1.x op: 05800042 12: xyz: t1 t8 t0 bias-> t8.xyz (03a00201) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz t8.xyz 0.0 op: 00050203 w: t1.x t1.x t1.x op: 00000000 13: xyz: t0 t0 t0 bias-> t9.y (01240000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 14: xyz: c0 t0 t0 bias-> t9.x (00a40020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 15: xyz: t3 c0 t9 bias-> t3.xy (018c9803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz t9.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 16, tex_offset: 6, alu_end: 21, tex_end: 1 (code_addr: 00426550) TEX: TEX t9, t3, texture[8] (0000c243) TEX t3, t3, texture[4] (0000a0c3) 16: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 17: xyz: t3 c3 t0 bias-> t3.xy (018c08c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c3.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 18: xyz: t1 t3 t10 bias-> t6.xy (0198a0c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t10.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 19: xyz: t6 t0 t0 bias-> t1.z (02040006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t6.xyz t6.xxx op: 00804000 w: t6.x t6.x t6.x op: 00000000 20: xyz: t9 t1 t0 bias-> t3.xyz (038c0049) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t9.xyz 1.0 -0.5 op: 000d8a80 w: 1.0 1.0 -t1.z op: 00094891 21: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 22: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 23: xyz: t2 t6 t1 bias-> t2.x (00881182) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t1.xyz t2.xxx op: 40804400 w: t2.x t2.x t2.x op: 00000000 24: xyz: t2 t5 t0 bias-> t2.xyz (03880142) w: t0 t0 t0 bias-> (00000000) xyz: t2.xxx t5.xyz 0.0 op: 00050201 w: t2.x t2.x t2.x op: 00000000 25: 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 26: xyz: t8 t6 t1 bias-> t1.z (02041188) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t1.xyz t8.xxx op: 00804400 w: t8.x t8.x t8.x op: 00000000 27: xyz: t1 t3 t7 bias-> t3.xyz (038c70c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t7.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 28: xyz: t1 c5 t0 bias-> (00000941) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xxx t1.xxx t1.xxx op: 00004081 w: t1.z c5.y -c5.z op: 40094202 29: xyz: t32 t0 t0 bias-> t1.y (01040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t0.www 0.0 op: 0005060c w: t32.x t32.x t32.x op: 00000000 30: xyz: t1 c2 t0 bias-> t4.xyz (03900881) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 31: xyz: t4 t3 t0 bias-> t0.xyz (038000c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t0.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 32: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 33: xyz: t1 t0 t0 bias-> t4.x (00900001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 34: xyz: t0 t4 t0 bias-> o0.xyz (1c000100) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t4.xxx 0.0 op: 40050280 w: t0.x t0.x t0.x op: 00000000 35: xyz: t4 t3 t0 bias-> t0.xyz (038000c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 36: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 37: xyz: t0 c4 t0 bias-> (00000900) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c4.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1] DCL TEMP[0..1] IMM FLT32 { 0.7500, 1.0000, 0.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IMM[0].xyzy 1: TEX TEMP[1], IN[1], SAMP[1], 2D 2: TEX TEMP[0], TEMP[0], SAMP[0], 2D 3: ADD TEMP[0], TEMP[0], -TEMP[1] 4: MAD TEMP[0], IN[0].xxxx, TEMP[0], TEMP[1] 5: MUL OUT[0], TEMP[0], CONST[1] 6: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], const[2].xyzy; 1: TEX temp[1], input[1], 2D[1]; 2: TEX temp[0], temp[0], 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL output[0], temp[0], const[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], const[2].xyzy; 1: TEX temp[1], input[1], 2D[1]; 2: TEX temp[0], temp[0], 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL output[0], temp[0], const[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], const[2].xyzy; 1: TEX temp[1], input[1], 2D[1]; 2: TEX temp[0], temp[0], 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL output[0], temp[0], const[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], const[2].xyzy; 1: TEX temp[1], input[1], 2D[1]; 2: TEX temp[0], temp[0], 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL output[0], temp[0], const[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], const[2].xyzy; 1: TEX temp[1], input[1], 2D[1]; 2: TEX temp[0], temp[0], 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL output[0], temp[0], const[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], const[2].xyzy; 1: TEX temp[1], input[1], 2D[1]; 2: TEX temp[0], temp[0], 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL_SAT output[0], temp[0], const[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], const[2].xyzy; 1: TEX temp[1], input[1], 2D[1]; 2: TEX temp[0], temp[0], 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL_SAT output[0], temp[0], const[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], const[2].xyzy; 1: TEX temp[1], input[1], 2D[1]; 2: TEX temp[0], temp[0], 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL_SAT output[0], temp[0], const[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, const[2].xy__; 1: TEX temp[1], input[1].xy__, 2D[1]; 2: TEX temp[0], temp[0].xy__, 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL_SAT output[0], temp[0], const[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, const[2].xy__; 1: TEX temp[1], input[1].xy__, 2D[1]; 2: TEX temp[0], temp[0].xy__, 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL_SAT output[0], temp[0], const[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, const[2].xy__; 1: TEX temp[1], input[1].xy__, 2D[1]; 2: TEX temp[0], temp[0].xy__, 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL_SAT output[0], temp[0], const[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, const[2].xy__; 1: TEX temp[1], input[1].xy__, 2D[1]; 2: TEX temp[0], temp[0].xy__, 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL_SAT output[0], temp[0], const[1]; CONST[1] = { 0.7500 1.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, const[1].xy__; 1: TEX temp[1], input[1].xy__, 2D[1]; 2: TEX temp[0], temp[0].xy__, 2D[0]; 3: ADD temp[0], temp[0], -temp[1]; 4: MAD temp[0], input[0].xxxx, temp[0], temp[1]; 5: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[2].xy, input[1].xy__, const[1].xy__; 1: TEX temp[3], input[1].xy__, 2D[1]; 2: TEX temp[4], temp[2].xy__, 2D[0]; 3: ADD temp[5], temp[4], -temp[3]; 4: MAD temp[6], input[0].xxxx, temp[5], temp[3]; 5: MUL_SAT output[0], temp[6], const[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[1] MAD temp[2].xy, src0.xy_, src0.111, src1.xy_ 1: TEX temp[3], input[1].xy__, 2D[1]; 2: TEX temp[4], temp[2].xy__, 2D[0]; 3: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[3], src1.w = temp[3] MAD temp[5].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[5].w, src0.w, src0.1, -src1.w 4: src0.xyz = input[0], src0.w = temp[5], src1.xyz = temp[5], src1.w = temp[3], src2.xyz = temp[3] MAD temp[6].xyz, src0.xxx, src1.xyz, src2.xyz MAD temp[6].w, src0.x, src0.w, src1.w 5: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[1].xy__, 2D[1]; 2: src0.xyz = input[1], src1.xyz = const[1] MAD temp[2].xy, src0.xy_, src0.111, src1.xy_ 3: BEGIN_TEX; 4: TEX temp[4], temp[2].xy__, 2D[0]; 5: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[3], src1.w = temp[3] MAD temp[5].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[5].w, src0.w, src0.1, -src1.w 6: src0.xyz = input[0], src0.w = temp[5], src1.xyz = temp[5], src1.w = temp[3], src2.xyz = temp[3] MAD temp[6].xyz, src0.xxx, src1.xyz, src2.xyz MAD temp[6].w, src0.x, src0.w, src1.w 7: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[1].xy__, 2D[1]; 2: src0.xyz = input[1], src1.xyz = const[1] MAD temp[2].xy, src0.xy_, src0.111, src1.xy_ 3: BEGIN_TEX; 4: TEX temp[4], temp[2].xy__, 2D[0]; 5: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[3], src1.w = temp[3] MAD temp[5].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[5].w, src0.w, src0.1, -src1.w 6: src0.xyz = input[0], src0.w = temp[5], src1.xyz = temp[5], src1.w = temp[3], src2.xyz = temp[3] MAD temp[6].xyz, src0.xxx, src1.xyz, src2.xyz MAD temp[6].w, src0.x, src0.w, src1.w 7: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[1].xy__, 2D[1]; 2: src0.xyz = input[1], src1.xyz = const[1] MAD temp[1].xy, src0.xy_, src0.11_, src1.xy_ 3: BEGIN_TEX; 4: TEX temp[1], temp[1].xy__, 2D[0]; 5: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[2], src1.w = temp[2] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[0].w, src0.w, src0.1, -src1.w 6: src0.xyz = input[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[2], src2.xyz = temp[2] MAD temp[0].xyz, src0.xxx, src1.xyz, src2.xyz MAD temp[0].w, src0.x, src0.w, src1.w 7: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=32************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00000000) TEX: TEX t2, t1, texture[1] (00008881) 0: xyz: t1 c1 t0 bias-> t1.xy (01840841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c1.xyz op: 00010a80 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 1, tex_offset: 1, alu_end: 2, tex_end: 0 (code_addr: 00401081) TEX: TEX t1, t1, texture[0] (00008041) 1: xyz: t1 t2 t0 bias-> t1.xyz (03840081) w: t1 t2 t0 bias-> t0.w (00800081) xyz: t1.xyz 1.0 -t2.xyz op: 00090a80 w: t1.w 1.0 -t2.w op: 000a8889 2: xyz: t0 t1 t2 bias-> t0.xyz (03802040) w: t0 t2 t0 bias-> t0.w (00800080) xyz: t0.xxx t1.xyz t2.xyz op: 00020201 w: t0.x t0.w t2.w op: 00028480 3: xyz: t0 c0 t0 bias-> o0.xyz (1c000800) w: t0 c0 t0 bias-> o0.w (01000800) xyz: t0.xyz c0.xyz 0.0 op: 40050200 w: t0.w c0.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[0..1] DCL TEMP[0..1] IMM FLT32 { 1.1500, 0.4000, 3.0000, 1.0000} 0: TEX TEMP[0], IN[2], SAMP[2], 2D 1: TEX TEMP[1].xyz, IN[3], SAMP[0], CUBE 2: MAD TEMP[1].xyz, TEMP[1], CONST[0], IN[0] 3: MUL TEMP[0].xyz, TEMP[0], IN[1] 4: MUL TEMP[0].xyz, TEMP[0], TEMP[1] 5: ADD TEMP[1].xyz, -TEMP[0], CONST[1] 6: MUL TEMP[1].xyz, IN[4].xxxx, TEMP[1] 7: ADD OUT[0].xyz, TEMP[0], TEMP[1] 8: MUL TEMP[0].xy, IN[2], IMM[0].zzzz 9: TEX TEMP[1].w, TEMP[0], SAMP[1], 2D 10: SLT TEMP[0].x, TEMP[0].wwww, IMM[0].yyyy 11: SLT TEMP[0].y, IN[0].wwww, TEMP[1].wwww 12: MUL OUT[0].w, TEMP[0], IMM[0].xxxx 13: KIL -TEMP[0].xxxx 14: KIL -TEMP[0].yyyy 15: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[2]; 1: TEX temp[1].xyz, input[3], CUBE[0]; 2: MAD temp[1].xyz, temp[1], const[0], input[0]; 3: MUL temp[0].xyz, temp[0], input[1]; 4: MUL temp[0].xyz, temp[0], temp[1]; 5: ADD temp[1].xyz, -temp[0], const[1]; 6: MUL temp[1].xyz, input[4].xxxx, temp[1]; 7: ADD output[0].xyz, temp[0], temp[1]; 8: MUL temp[0].xy, input[2], const[2].zzzz; 9: TEX temp[1].w, temp[0], 2D[1]; 10: SLT temp[0].x, temp[0].wwww, const[2].yyyy; 11: SLT temp[0].y, input[0].wwww, temp[1].wwww; 12: MUL output[0].w, temp[0], const[2].xxxx; 13: KIL -temp[0].xxxx; 14: KIL -temp[0].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[2]; 1: TEX temp[1].xyz, input[3], CUBE[0]; 2: MAD temp[1].xyz, temp[1], const[0], input[0]; 3: MUL temp[0].xyz, temp[0], input[1]; 4: MUL temp[0].xyz, temp[0], temp[1]; 5: ADD temp[1].xyz, -temp[0], const[1]; 6: MUL temp[1].xyz, input[4].xxxx, temp[1]; 7: ADD output[0].xyz, temp[0], temp[1]; 8: MUL temp[0].xy, input[2], const[2].zzzz; 9: TEX temp[1].w, temp[0], 2D[1]; 10: SLT temp[0].x, temp[0].wwww, const[2].yyyy; 11: SLT temp[0].y, input[0].wwww, temp[1].wwww; 12: MUL output[0].w, temp[0], const[2].xxxx; 13: KIL -temp[0].xxxx; 14: KIL -temp[0].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[2]; 1: TEX temp[1].xyz, input[3], CUBE[0]; 2: MAD temp[1].xyz, temp[1], const[0], input[0]; 3: MUL temp[0].xyz, temp[0], input[1]; 4: MUL temp[0].xyz, temp[0], temp[1]; 5: ADD temp[1].xyz, -temp[0], const[1]; 6: MUL temp[1].xyz, input[4].xxxx, temp[1]; 7: ADD output[0].xyz, temp[0], temp[1]; 8: MUL temp[0].xy, input[2], const[2].zzzz; 9: TEX temp[1].w, temp[0], 2D[1]; 10: SLT temp[0].x, temp[0].wwww, const[2].yyyy; 11: SLT temp[0].y, input[0].wwww, temp[1].wwww; 12: MUL output[0].w, temp[0], const[2].xxxx; 13: KIL -temp[0].xxxx; 14: KIL -temp[0].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[2]; 1: TEX temp[1].xyz, input[3], CUBE[0]; 2: MAD temp[1].xyz, temp[1], const[0], input[0]; 3: MUL temp[0].xyz, temp[0], input[1]; 4: MUL temp[0].xyz, temp[0], temp[1]; 5: ADD temp[1].xyz, -temp[0], const[1]; 6: MUL temp[1].xyz, input[4].xxxx, temp[1]; 7: ADD output[0].xyz, temp[0], temp[1]; 8: MUL temp[0].xy, input[2], const[2].zzzz; 9: TEX temp[1].w, temp[0], 2D[1]; 10: SLT temp[0].x, temp[0].wwww, const[2].yyyy; 11: SLT temp[0].y, input[0].wwww, temp[1].wwww; 12: MUL output[0].w, temp[0], const[2].xxxx; 13: KIL -temp[0].xxxx; 14: KIL -temp[0].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[2]; 1: TEX temp[1].xyz, input[3], CUBE[0]; 2: MAD temp[1].xyz, temp[1], const[0], input[0]; 3: MUL temp[0].xyz, temp[0], input[1]; 4: MUL temp[0].xyz, temp[0], temp[1]; 5: ADD temp[1].xyz, -temp[0], const[1]; 6: MUL temp[1].xyz, input[4].xxxx, temp[1]; 7: ADD output[0].xyz, temp[0], temp[1]; 8: MUL temp[0].xy, input[2], const[2].zzzz; 9: TEX temp[1].w, temp[0], 2D[1]; 10: SLT temp[0].x, temp[0].wwww, const[2].yyyy; 11: SLT temp[0].y, input[0].wwww, temp[1].wwww; 12: MUL output[0].w, temp[0], const[2].xxxx; 13: KIL -temp[0].xxxx; 14: KIL -temp[0].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[2]; 1: TEX temp[1].xyz, input[3], CUBE[0]; 2: MAD temp[1].xyz, temp[1], const[0], input[0]; 3: MUL temp[0].xyz, temp[0], input[1]; 4: MUL temp[0].xyz, temp[0], temp[1]; 5: ADD temp[1].xyz, -temp[0], const[1]; 6: MUL temp[1].xyz, input[4].xxxx, temp[1]; 7: ADD_SAT output[0].xyz, temp[0], temp[1]; 8: MUL temp[0].xy, input[2], const[2].zzzz; 9: TEX temp[1].w, temp[0], 2D[1]; 10: SLT temp[0].x, temp[0].wwww, const[2].yyyy; 11: SLT temp[0].y, input[0].wwww, temp[1].wwww; 12: MUL_SAT output[0].w, temp[0], const[2].xxxx; 13: KIL -temp[0].xxxx; 14: KIL -temp[0].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[2]; 1: TEX temp[2], input[3], CUBE[0]; 2: MOV temp[1].xyz, temp[2]; 3: MAD temp[1].xyz, temp[1], const[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[1]; 5: MUL temp[0].xyz, temp[0], temp[1]; 6: ADD temp[1].xyz, -temp[0], const[1]; 7: MUL temp[1].xyz, input[4].xxxx, temp[1]; 8: ADD_SAT output[0].xyz, temp[0], temp[1]; 9: MUL temp[0].xy, input[2], const[2].zzzz; 10: TEX temp[3], temp[0], 2D[1]; 11: MOV temp[1].w, temp[3]; 12: SLT temp[0].x, temp[0].wwww, const[2].yyyy; 13: SLT temp[0].y, input[0].wwww, temp[1].wwww; 14: MUL_SAT output[0].w, temp[0], const[2].xxxx; 15: KIL -temp[0].xxxx; 16: KIL -temp[0].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[2]; 1: TEX temp[2], input[3], CUBE[0]; 2: MOV temp[1].xyz, temp[2]; 3: MAD temp[1].xyz, temp[1], const[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[1]; 5: MUL temp[0].xyz, temp[0], temp[1]; 6: ADD temp[1].xyz, -temp[0], const[1]; 7: MUL temp[1].xyz, input[4].xxxx, temp[1]; 8: ADD_SAT output[0].xyz, temp[0], temp[1]; 9: MUL temp[0].xy, input[2], const[2].zzzz; 10: TEX temp[3], temp[0], 2D[1]; 11: MOV temp[1].w, temp[3]; 12: ADD temp[4].x, temp[0].wwww, -const[2].yyyy; 13: CMP temp[0].x, temp[4], none.1111, none.0000; 14: ADD temp[0].y, input[0].wwww, -temp[1].wwww; 15: CMP temp[0].y, temp[0], none.1111, none.0000; 16: MUL_SAT output[0].w, temp[0], const[2].xxxx; 17: KIL -temp[0].xxxx; 18: KIL -temp[0].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[2]; 1: TEX temp[2].xyz, input[3].xyz_, CUBE[0]; 2: MOV temp[1].xyz, temp[2].xyz_; 3: MAD temp[1].xyz, temp[1].xyz_, const[0].xyz_, input[0].xyz_; 4: MUL temp[0].xyz, temp[0].xyz_, input[1].xyz_; 5: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 6: ADD temp[1].xyz, -temp[0].xyz_, const[1].xyz_; 7: MUL temp[1].xyz, input[4].xxx_, temp[1].xyz_; 8: ADD_SAT output[0].xyz, temp[0].xyz_, temp[1].xyz_; 9: MUL temp[0].xy, input[2].xy__, const[2].zz__; 10: TEX temp[3].w, temp[0].xy__, 2D[1]; 11: MOV temp[1].w, temp[3].___w; 12: ADD temp[4].x, temp[0].w___, -const[2].y___; 13: CMP temp[0].x, temp[4].x___, none.1___, none.0___; 14: ADD temp[0].y, input[0]._w__, -temp[1]._w__; 15: CMP temp[0].y, temp[0]._y__, none._1__, none._0__; 16: MUL_SAT output[0].w, temp[0].___w, const[2].___x; 17: KIL -temp[0].xxxx; 18: KIL -temp[0].yyyy; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[2]; 1: TEX temp[2].xyz, input[3].xyz_, CUBE[0]; 2: MOV temp[1].xyz, temp[2].xyz_; 3: MAD temp[1].xyz, temp[1].xyz_, const[0].xyz_, input[0].xyz_; 4: MUL temp[0].xyz, temp[0].xyz_, input[1].xyz_; 5: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 6: ADD temp[1].xyz, -temp[0].xyz_, const[1].xyz_; 7: MUL temp[1].xyz, input[4].xxx_, temp[1].xyz_; 8: ADD_SAT output[0].xyz, temp[0].xyz_, temp[1].xyz_; 9: MUL temp[0].xy, input[2].xy__, const[2].zz__; 10: TEX temp[3].w, temp[0].xy__, 2D[1]; 11: MOV temp[1].w, temp[3].___w; 12: ADD temp[4].x, temp[0].w___, -const[2].y___; 13: CMP temp[0].x, temp[4].x___, none.1___, none.0___; 14: ADD temp[0].y, input[0]._w__, -temp[1]._w__; 15: CMP temp[0].y, temp[0]._y__, none._1__, none._0__; 16: MUL_SAT output[0].w, temp[0].___w, const[2].___x; 17: KIL -temp[0].xxxx; 18: KIL -temp[0].yyyy; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[2]; 1: TEX temp[2].xyz, input[3].xyz_, CUBE[0]; 2: MAD temp[1].xyz, temp[2].xyz_, const[0].xyz_, input[0].xyz_; 3: MUL temp[0].xyz, temp[0].xyz_, input[1].xyz_; 4: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 5: MUL temp[1].xyz, input[4].xxx_, (const[1] - temp[0]).xyz_; 6: ADD_SAT output[0].xyz, temp[0].xyz_, temp[1].xyz_; 7: MUL temp[0].xy, input[2].xy__, const[2].zz__; 8: TEX temp[3].w, temp[0].xy__, 2D[1]; 9: ADD temp[4].x, temp[0].w___, -const[2].y___; 10: CMP temp[0].x, temp[4].x___, none.1___, none.0___; 11: CMP temp[0].y, (input[0] - temp[3])._w__, none._1__, none._0__; 12: MUL_SAT output[0].w, temp[0].___w, const[2].___x; 13: KIL -temp[0].xxxx; 14: KIL -temp[0].yyyy; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[2]; 1: TEX temp[2].xyz, input[3].xyz_, CUBE[0]; 2: MAD temp[1].xyz, temp[2].xyz_, const[0].xyz_, input[0].xyz_; 3: MUL temp[0].xyz, temp[0].xyz_, input[1].xyz_; 4: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 5: MUL temp[1].xyz, input[4].xxx_, (const[1] - temp[0]).xyz_; 6: ADD_SAT output[0].xyz, temp[0].xyz_, temp[1].xyz_; 7: MUL temp[0].xy, input[2].xy__, const[2].zz__; 8: TEX temp[3].w, temp[0].xy__, 2D[1]; 9: ADD temp[4].x, temp[0].w___, -const[2].y___; 10: CMP temp[0].x, temp[4].x___, none.1___, none.0___; 11: CMP temp[0].y, (input[0] - temp[3])._w__, none._1__, none._0__; 12: MUL_SAT output[0].w, temp[0].___w, const[2].___x; 13: MOV temp[5], -temp[0].xxxx; 14: KIL temp[5]; 15: MOV temp[6], -temp[0].yyyy; 16: KIL temp[6]; CONST[2] = { 1.1500 0.4000 3.0000 1.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[2]; 1: TEX temp[2].xyz, input[3].xyz_, CUBE[0]; 2: MAD temp[1].xyz, temp[2].xyz_, const[0].xyz_, input[0].xyz_; 3: MUL temp[0].xyz, temp[0].xyz_, input[1].xyz_; 4: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 5: MUL temp[1].xyz, input[4].xxx_, (const[1] - temp[0]).xyz_; 6: ADD_SAT output[0].xyz, temp[0].xyz_, temp[1].xyz_; 7: MUL temp[0].xy, input[2].xy__, const[2].zz__; 8: TEX temp[3].w, temp[0].xy__, 2D[1]; 9: ADD temp[4].x, temp[0].w___, -const[2].y___; 10: CMP temp[0].x, temp[4].x___, none.1___, none.0___; 11: CMP temp[0].y, (input[0] - temp[3])._w__, none._1__, none._0__; 12: MUL_SAT output[0].w, temp[0].___w, const[2].___x; 13: MOV temp[5], -temp[0].xxxx; 14: KIL temp[5]; 15: MOV temp[6], -temp[0].yyyy; 16: KIL temp[6]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[7], input[2].xy__, 2D[2]; 1: TEX temp[8].xyz, input[3].xyz_, CUBE[0]; 2: MAD temp[9].xyz, temp[8].xyz_, const[0].xyz_, input[0].xyz_; 3: MUL temp[10].xyz, temp[7].xyz_, input[1].xyz_; 4: MUL temp[11].xyz, temp[10].xyz_, temp[9].xyz_; 5: MUL temp[12].xyz, input[4].xxx_, (const[1] - temp[11]).xyz_; 6: ADD_SAT output[0].xyz, temp[11].xyz_, temp[12].xyz_; 7: MUL temp[13].xy, input[2].xy__, const[2].zz__; 8: TEX temp[14].w, temp[13].xy__, 2D[1]; 9: ADD temp[15].x, temp[7].w___, -const[2].y___; 10: CMP temp[16].x, temp[15].x___, none.1___, none.0___; 11: CMP temp[17].y, (input[0] - temp[14])._w__, none._1__, none._0__; 12: MUL_SAT output[0].w, temp[7].___w, const[2].___x; 13: MOV temp[18], -temp[16].xxxx; 14: KIL temp[18]; 15: MOV temp[19], -temp[17].yyyy; 16: KIL temp[19]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[7], input[2].xy__, 2D[2]; 1: TEX temp[8].xyz, input[3].xyz_, CUBE[0]; 2: src0.xyz = temp[8], src1.xyz = const[0], src2.xyz = input[0] MAD temp[9].xyz, src0.xyz, src1.xyz, src2.xyz 3: src0.xyz = temp[7], src1.xyz = input[1] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 4: src0.xyz = temp[10], src1.xyz = temp[9] MAD temp[11].xyz, src0.xyz, src1.xyz, src0.000 5: src0.xyz = temp[11], src1.xyz = const[1], src2.xyz = input[4], srcp.xyz = (src1 - src0) MAD temp[12].xyz, src2.xxx, srcp.xyz, src0.000 6: src0.xyz = temp[11], src1.xyz = temp[12] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz 7: src0.xyz = input[2], src1.xyz = const[2] MAD temp[13].xy, src0.xy_, src1.zz_, src0.000 8: TEX temp[14].w, temp[13].xy__, 2D[1]; 9: src0.xyz = const[2], src0.w = temp[7] MAD temp[15].x, src0.w__, src0.111, -src0.y__ 10: src0.xyz = temp[15] CMP temp[16].x, src0.0__, src0.1__, src0.x__ 11: src0.w = temp[14], src1.w = input[0], srcp.w = (src1 - src0) CMP temp[17].y, src0._0_, src0._1_, srcp._w_ 12: src0.xyz = const[2], src0.w = temp[7] MAD_SAT color[0].w, src0.w, src0.x, src0.0 13: src0.xyz = temp[16] MAD temp[18].xyz, -src0.xxx, src0.111, src0.000 MAD temp[18].w, -src0.x, src0.1, src0.0 14: KIL temp[18]; 15: src0.xyz = temp[17] MAD temp[19].xyz, -src0.yyy, src0.111, src0.000 MAD temp[19].w, -src0.y, src0.1, src0.0 16: KIL temp[19]; Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[7], input[2].xy__, 2D[2]; 2: TEX temp[8].xyz, input[3].xyz_, CUBE[0]; 3: src0.xyz = const[2], src0.w = temp[7] MAD temp[15].x, src0.w__, src0.111, -src0.y__ MAD_SAT color[0].w, src0.w, src0.x, src0.0 4: src0.xyz = temp[15] CMP temp[16].x, src0.0__, src0.1__, src0.x__ 5: src0.xyz = temp[16] MAD temp[18].xyz, -src0.xxx, src0.111, src0.000 MAD temp[18].w, -src0.x, src0.1, src0.0 6: src0.xyz = temp[8], src1.xyz = const[0], src2.xyz = input[0] MAD temp[9].xyz, src0.xyz, src1.xyz, src2.xyz 7: src0.xyz = temp[7], src1.xyz = input[1] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[10], src1.xyz = temp[9] MAD temp[11].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[11], src1.xyz = const[1], src2.xyz = input[4], srcp.xyz = (src1 - src0) MAD temp[12].xyz, src2.xxx, srcp.xyz, src0.000 10: src0.xyz = temp[11], src1.xyz = temp[12] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz 11: src0.xyz = input[2], src1.xyz = const[2] MAD temp[13].xy, src0.xy_, src1.zz_, src0.000 12: BEGIN_TEX; 13: KIL temp[18]; 14: TEX temp[14].w, temp[13].xy__, 2D[1]; 15: src0.w = temp[14], src1.w = input[0], srcp.w = (src1 - src0) CMP temp[17].y, src0._0_, src0._1_, srcp._w_ 16: src0.xyz = temp[17] MAD temp[19].xyz, -src0.yyy, src0.111, src0.000 MAD temp[19].w, -src0.y, src0.1, src0.0 17: BEGIN_TEX; 18: KIL temp[19]; Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[7], input[2].xy__, 2D[2]; 2: TEX temp[8].xyz, input[3].xyz_, CUBE[0]; 3: src0.xyz = const[2], src0.w = temp[7] MAD temp[15].x, src0.w__, src0.111, -src0.y__ MAD_SAT color[0].w, src0.w, src0.x, src0.0 4: src0.xyz = temp[15] CMP temp[16].x, src0.0__, src0.1__, src0.x__ 5: src0.xyz = temp[16] MAD temp[18].xyz, -src0.xxx, src0.111, src0.000 MAD temp[18].w, -src0.x, src0.1, src0.0 6: src0.xyz = temp[8], src1.xyz = const[0], src2.xyz = input[0] MAD temp[9].xyz, src0.xyz, src1.xyz, src2.xyz 7: src0.xyz = temp[7], src1.xyz = input[1] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[10], src1.xyz = temp[9] MAD temp[11].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[11], src1.xyz = const[1], src2.xyz = input[4], srcp.xyz = (src1 - src0) MAD temp[12].xyz, src2.xxx, srcp.xyz, src0.000 10: src0.xyz = temp[11], src1.xyz = temp[12] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz 11: src0.xyz = input[2], src1.xyz = const[2] MAD temp[13].xy, src0.xy_, src1.zz_, src0.000 12: BEGIN_TEX; 13: KIL temp[18]; 14: TEX temp[14].w, temp[13].xy__, 2D[1]; 15: src0.w = temp[14], src1.w = input[0], srcp.w = (src1 - src0) CMP temp[17].y, src0._0_, src0._1_, srcp._w_ 16: src0.xyz = temp[17] MAD temp[19].xyz, -src0.yyy, src0.111, src0.000 MAD temp[19].w, -src0.y, src0.1, src0.0 17: BEGIN_TEX; 18: KIL temp[19]; Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], input[2].xy__, 2D[2]; 2: TEX temp[3].xyz, input[3].xyz_, CUBE[0]; 3: src0.xyz = const[2], src0.w = temp[5] MAD temp[2].z, src0.__w, src0.__1, -src0.__y MAD_SAT color[0].w, src0.w, src0.x, src0.0 4: src0.xyz = temp[2] CMP temp[2].z, src0.__0, src0.__1, src0.__z 5: src0.xyz = temp[2] MAD temp[6].xyz, -src0.zzz, src0.111, src0.000 MAD temp[6].w, -src0.z, src0.1, src0.0 6: src0.xyz = temp[3], src1.xyz = const[0], src2.xyz = input[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 7: src0.xyz = temp[5], src1.xyz = input[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[1], src1.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[1], src1.xyz = const[1], src2.xyz = input[4], srcp.xyz = (src1 - src0) MAD temp[3].xyz, src2.xxx, srcp.xyz, src0.000 10: src0.xyz = temp[1], src1.xyz = temp[3] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz 11: src0.xyz = input[2], src1.xyz = const[2] MAD temp[1].xy, src0.xy_, src1.zz_, src0.00_ 12: BEGIN_TEX; 13: KIL temp[6]; 14: TEX temp[1].w, temp[1].xy__, 2D[1]; 15: src0.w = temp[1], src1.w = input[0], srcp.w = (src1 - src0) CMP temp[0].x, src0.0__, src0.1__, srcp.w__ 16: src0.xyz = temp[0] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 17: BEGIN_TEX; 18: KIL temp[0]; pc=33************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 8, tex_end: 1 (code_addr: 00420200) TEX: TEX t5, t2, texture[2] (00009142) TEX t3, t3, texture[0] (000080c3) 0: xyz: c2 t0 t0 bias-> t2.z (02080022) w: t5 t0 t0 bias-> o0.w (01000005) xyz: t5.www 1.0 -c2.yyy op: 00088a8c w: t5.w c2.x 0.0 op: 40040009 1: xyz: t2 t0 t0 bias-> t2.z (02080002) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 t2.xyz op: 04000a94 w: t2.x t2.x t2.x op: 00000000 2: xyz: t2 t0 t0 bias-> t6.xyz (03980002) w: t0 t0 t0 bias-> t6.w (00980000) xyz: -t2.zzz 1.0 0.0 op: 00050aa3 w: -t2.z 1.0 0.0 op: 000408a2 3: xyz: t3 c0 t0 bias-> t3.xyz (038c0803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz t0.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 4: xyz: t5 t1 t0 bias-> t1.xyz (03840045) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t1.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 5: xyz: t1 t3 t0 bias-> t1.xyz (038400c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t3.xyz 0.0 op: 80050200 NOP w: t1.x t1.x t1.x op: 00000000 6: xyz: t1 c1 t4 sub-> t3.xyz (038c4841) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx srcp.xyz 0.0 op: 00250789 w: t1.x t1.x t1.x op: 00000000 7: xyz: t1 t3 t0 bias-> o0.xyz (1c0000c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 t3.xyz op: 40010a80 w: t1.x t1.x t1.x op: 00000000 8: xyz: t2 c2 t0 bias-> t1.xy (01840882) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c2.zzz 0.0 op: 00050380 w: t2.x t2.x t2.x op: 00000000 NODE 1: alu_offset: 9, tex_offset: 2, alu_end: 1, tex_end: 1 (code_addr: 00022049) TEX: KIL t0, t6, texture[0] (00010006) TEX t1, t1, texture[1] (00008841) 9: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t1 t0 t0 sub-> (00000001) xyz: 0.0 1.0 srcp.www op: 0404ca94 w: t0.x t0.x t0.x op: 00200000 10: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t0.xxx 1.0 0.0 op: 00050aa1 w: -t0.x 1.0 0.0 op: 000408a0 NODE 2: alu_offset: 11, tex_offset: 4, alu_end: 0, tex_end: 0 (code_addr: 0000400b) TEX: KIL t0, t0, texture[0] (00010000) 11: 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], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[1] DCL TEMP[0] IMM FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: SUB TEMP[0], TEMP[0], IMM[0].xxxx 2: MUL TEMP[0], TEMP[0], IN[0] 3: MAD OUT[0].xyz, TEMP[0], CONST[1], IMM[0].xxxx 4: MOV OUT[0].w, IMM[0].xxxx 5: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MUL temp[0], temp[0], input[0]; 3: MAD output[0].xyz, temp[0], const[1], temp[0].1111; 4: MOV output[0].w, temp[0].1111; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MUL temp[0], temp[0], input[0]; 3: MAD output[0].xyz, temp[0], const[1], temp[0].1111; 4: MOV output[0].w, temp[0].1111; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MUL temp[0], temp[0], input[0]; 3: MAD output[0].xyz, temp[0], const[1], temp[0].1111; 4: MOV output[0].w, temp[0].1111; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MUL temp[0], temp[0], input[0]; 3: MAD output[0].xyz, temp[0], const[1], temp[0].1111; 4: MOV output[0].w, temp[0].1111; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MUL temp[0], temp[0], input[0]; 3: MAD output[0].xyz, temp[0], const[1], temp[0].1111; 4: MOV output[0].w, temp[0].1111; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MUL temp[0], temp[0], input[0]; 3: MAD_SAT output[0].xyz, temp[0], const[1], temp[0].1111; 4: MOV_SAT output[0].w, temp[0].1111; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: SUB temp[0], temp[0], temp[0].1111; 2: MUL temp[0], temp[0], input[0]; 3: MAD_SAT output[0].xyz, temp[0], const[1], temp[0].1111; 4: MOV_SAT output[0].w, temp[0].1111; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: ADD temp[0], temp[0], -temp[0].1111; 2: MUL temp[0], temp[0], input[0]; 3: MAD_SAT output[0].xyz, temp[0], const[1], temp[0].1111; 4: MOV_SAT output[0].w, temp[0].1111; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -temp[0].111_; 2: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 3: MAD_SAT output[0].xyz, temp[0].xyz_, const[1].xyz_, temp[0].111_; 4: MOV_SAT output[0].w, temp[0].___1; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -temp[0].111_; 2: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 3: MAD_SAT output[0].xyz, temp[0].xyz_, const[1].xyz_, temp[0].111_; 4: MOV_SAT output[0].w, temp[0].___1; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -none.111_; 2: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 3: MAD_SAT output[0].xyz, temp[0].xyz_, const[1].xyz_, none.111_; 4: MOV_SAT output[0].w, none.___1; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -none.111_; 2: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 3: MAD_SAT output[0].xyz, temp[0].xyz_, const[1].xyz_, none.111_; 4: MOV_SAT output[0].w, none.___1; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[1].xy__, 2D[0]; 1: ADD temp[0].xyz, temp[0].xyz_, -none.111_; 2: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 3: MAD_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_, none.111_; 4: MOV_SAT output[0].w, none.___1; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: ADD temp[2].xyz, temp[1].xyz_, -none.111_; 2: MUL temp[3].xyz, temp[2].xyz_, input[0].xyz_; 3: MAD_SAT output[0].xyz, temp[3].xyz_, const[0].xyz_, none.111_; 4: MOV_SAT output[0].w, none.___1; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1].xyz, input[1].xy__, 2D[0]; 1: src0.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.111 2: src0.xyz = temp[2], src1.xyz = input[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = temp[3], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.111 4: MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.111 MAD_SAT color[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[2], src1.xyz = input[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 4: src0.xyz = temp[3], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.111 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.111 MAD_SAT color[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[2], src1.xyz = input[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 4: src0.xyz = temp[3], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.111 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src0.111, -src0.111 MAD_SAT color[0].w, src0.1, src0.1, src0.0 3: src0.xyz = temp[1], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 4: src0.xyz = temp[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.111 pc=34************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 2, tex_end: 0 (code_addr: 00400080) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t1.xyz 1.0 -1.0 op: 000d4a80 w: 1.0 1.0 0.0 op: 40040891 1: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 2: xyz: t0 c0 t0 bias-> o0.xyz (1c000800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz 1.0 op: 40054200 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], COLOR, LINEAR DCL IN[2], COLOR[1], LINEAR DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL IN[5], GENERIC[4], PERSPECTIVE DCL IN[6], GENERIC[5], PERSPECTIVE DCL IN[7], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[4..5] DCL CONST[1..3] DCL TEMP[0..2] IMM FLT32 { 2.0000, 1.0000, 0.5000, 0.0625} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[5].xxxx, CONST[5].yyyy 2: TEX TEMP[1], IN[4], SAMP[1], 2D 3: MUL TEMP[1].xyz, TEMP[1], IMM[0].xxxx 4: ADD TEMP[1].xyz, TEMP[1], -IMM[0].yyyy 5: MUL TEMP[2].xyz, IN[6], TEMP[1].yyyy 6: MAD TEMP[2].xyz, IN[5], -TEMP[1].xxxx, TEMP[2] 7: MAD TEMP[1].xyz, IN[7], TEMP[1].zzzz, TEMP[2] 8: DP3 TEMP[2].x, TEMP[1], TEMP[1] 9: RSQ TEMP[2].x, TEMP[2].xxxx 10: MUL TEMP[2].xyz, TEMP[2].xxxx, TEMP[1] 11: TEX TEMP[1].xyz, TEMP[2], SAMP[2], CUBE 12: DP3 TEMP[2].x, TEMP[2], CONST[1] 13: MAX TEMP[1].w, TEMP[2].xxxx, TEMP[1] 14: MUL TEMP[1].xyz, TEMP[1], CONST[2].xxxx 15: MAD TEMP[2].xyz, TEMP[1].wwww, CONST[3], TEMP[1] 16: TEX TEMP[1], IN[3], SAMP[1], 2D 17: MUL TEMP[1].xyz, TEMP[1], TEMP[2] 18: ADD TEMP[2].xyz, -TEMP[1], CONST[4] 19: MUL TEMP[2].xyz, IN[2].xxxx, TEMP[2] 20: ADD OUT[0].xyz, TEMP[1], TEMP[2] 21: MAD TEMP[1].xy, TEMP[0], IMM[0].wwww, IMM[0].wwww 22: TEX TEMP[2].w, TEMP[1], SAMP[0], 2D 23: SLT TEMP[1].x, TEMP[1].wwww, IMM[0].zzzz 24: SLT TEMP[1].y, IN[1].wwww, TEMP[2].wwww 25: MOV OUT[0].w, TEMP[1] 26: KIL -TEMP[1].xxxx 27: KIL -TEMP[1].yyyy 28: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[3].w, input[0].wwww; 1: MUL temp[3].xyz, input[0], temp[3].wwww; 2: MAD temp[3].xyz, temp[3].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[3]; 4: MAD temp[0].y, temp[3], const[5].xxxx, const[5].yyyy; 5: TEX temp[1], input[4], 2D[1]; 6: MUL temp[1].xyz, temp[1], const[6].xxxx; 7: ADD temp[1].xyz, temp[1], -const[6].yyyy; 8: MUL temp[2].xyz, input[6], temp[1].yyyy; 9: MAD temp[2].xyz, input[5], -temp[1].xxxx, temp[2]; 10: MAD temp[1].xyz, input[7], temp[1].zzzz, temp[2]; 11: DP3 temp[2].x, temp[1], temp[1]; 12: RSQ temp[2].x, temp[2].xxxx; 13: MUL temp[2].xyz, temp[2].xxxx, temp[1]; 14: TEX temp[1].xyz, temp[2], CUBE[2]; 15: DP3 temp[2].x, temp[2], const[1]; 16: MAX temp[1].w, temp[2].xxxx, temp[1]; 17: MUL temp[1].xyz, temp[1], const[2].xxxx; 18: MAD temp[2].xyz, temp[1].wwww, const[3], temp[1]; 19: TEX temp[1], input[3], 2D[1]; 20: MUL temp[1].xyz, temp[1], temp[2]; 21: ADD temp[2].xyz, -temp[1], const[4]; 22: MUL temp[2].xyz, input[2].xxxx, temp[2]; 23: ADD output[0].xyz, temp[1], temp[2]; 24: MAD temp[1].xy, temp[0], const[6].wwww, const[6].wwww; 25: TEX temp[2].w, temp[1], 2D[0]; 26: SLT temp[1].x, temp[1].wwww, const[6].zzzz; 27: SLT temp[1].y, input[1].wwww, temp[2].wwww; 28: MOV output[0].w, temp[1]; 29: KIL -temp[1].xxxx; 30: KIL -temp[1].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[3].w, input[0].wwww; 1: MUL temp[3].xyz, input[0], temp[3].wwww; 2: MAD temp[3].xyz, temp[3].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[3]; 4: MAD temp[0].y, temp[3], const[5].xxxx, const[5].yyyy; 5: TEX temp[1], input[4], 2D[1]; 6: MUL temp[1].xyz, temp[1], const[6].xxxx; 7: ADD temp[1].xyz, temp[1], -const[6].yyyy; 8: MUL temp[2].xyz, input[6], temp[1].yyyy; 9: MAD temp[2].xyz, input[5], -temp[1].xxxx, temp[2]; 10: MAD temp[1].xyz, input[7], temp[1].zzzz, temp[2]; 11: DP3 temp[2].x, temp[1], temp[1]; 12: RSQ temp[2].x, temp[2].xxxx; 13: MUL temp[2].xyz, temp[2].xxxx, temp[1]; 14: TEX temp[1].xyz, temp[2], CUBE[2]; 15: DP3 temp[2].x, temp[2], const[1]; 16: MAX temp[1].w, temp[2].xxxx, temp[1]; 17: MUL temp[1].xyz, temp[1], const[2].xxxx; 18: MAD temp[2].xyz, temp[1].wwww, const[3], temp[1]; 19: TEX temp[1], input[3], 2D[1]; 20: MUL temp[1].xyz, temp[1], temp[2]; 21: ADD temp[2].xyz, -temp[1], const[4]; 22: MUL temp[2].xyz, input[2].xxxx, temp[2]; 23: ADD output[0].xyz, temp[1], temp[2]; 24: MAD temp[1].xy, temp[0], const[6].wwww, const[6].wwww; 25: TEX temp[2].w, temp[1], 2D[0]; 26: SLT temp[1].x, temp[1].wwww, const[6].zzzz; 27: SLT temp[1].y, input[1].wwww, temp[2].wwww; 28: MOV output[0].w, temp[1]; 29: KIL -temp[1].xxxx; 30: KIL -temp[1].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[3].w, input[0].wwww; 1: MUL temp[3].xyz, input[0], temp[3].wwww; 2: MAD temp[3].xyz, temp[3].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[3]; 4: MAD temp[0].y, temp[3], const[5].xxxx, const[5].yyyy; 5: TEX temp[1], input[4], 2D[1]; 6: MUL temp[1].xyz, temp[1], const[6].xxxx; 7: ADD temp[1].xyz, temp[1], -const[6].yyyy; 8: MUL temp[2].xyz, input[6], temp[1].yyyy; 9: MAD temp[2].xyz, input[5], -temp[1].xxxx, temp[2]; 10: MAD temp[1].xyz, input[7], temp[1].zzzz, temp[2]; 11: DP3 temp[2].x, temp[1], temp[1]; 12: RSQ temp[2].x, temp[2].xxxx; 13: MUL temp[2].xyz, temp[2].xxxx, temp[1]; 14: TEX temp[1].xyz, temp[2], CUBE[2]; 15: DP3 temp[2].x, temp[2], const[1]; 16: MAX temp[1].w, temp[2].xxxx, temp[1]; 17: MUL temp[1].xyz, temp[1], const[2].xxxx; 18: MAD temp[2].xyz, temp[1].wwww, const[3], temp[1]; 19: TEX temp[1], input[3], 2D[1]; 20: MUL temp[1].xyz, temp[1], temp[2]; 21: ADD temp[2].xyz, -temp[1], const[4]; 22: MUL temp[2].xyz, input[2].xxxx, temp[2]; 23: ADD output[0].xyz, temp[1], temp[2]; 24: MAD temp[1].xy, temp[0], const[6].wwww, const[6].wwww; 25: TEX temp[2].w, temp[1], 2D[0]; 26: SLT temp[1].x, temp[1].wwww, const[6].zzzz; 27: SLT temp[1].y, input[1].wwww, temp[2].wwww; 28: MOV output[0].w, temp[1]; 29: KIL -temp[1].xxxx; 30: KIL -temp[1].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[3].w, input[0].wwww; 1: MUL temp[3].xyz, input[0], temp[3].wwww; 2: MAD temp[3].xyz, temp[3].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[3]; 4: MAD temp[0].y, temp[3], const[5].xxxx, const[5].yyyy; 5: TEX temp[1], input[4], 2D[1]; 6: MUL temp[1].xyz, temp[1], const[6].xxxx; 7: ADD temp[1].xyz, temp[1], -const[6].yyyy; 8: MUL temp[2].xyz, input[6], temp[1].yyyy; 9: MAD temp[2].xyz, input[5], -temp[1].xxxx, temp[2]; 10: MAD temp[1].xyz, input[7], temp[1].zzzz, temp[2]; 11: DP3 temp[2].x, temp[1], temp[1]; 12: RSQ temp[2].x, temp[2].xxxx; 13: MUL temp[2].xyz, temp[2].xxxx, temp[1]; 14: TEX temp[1].xyz, temp[2], CUBE[2]; 15: DP3 temp[2].x, temp[2], const[1]; 16: MAX temp[1].w, temp[2].xxxx, temp[1]; 17: MUL temp[1].xyz, temp[1], const[2].xxxx; 18: MAD temp[2].xyz, temp[1].wwww, const[3], temp[1]; 19: TEX temp[1], input[3], 2D[1]; 20: MUL temp[1].xyz, temp[1], temp[2]; 21: ADD temp[2].xyz, -temp[1], const[4]; 22: MUL temp[2].xyz, input[2].xxxx, temp[2]; 23: ADD output[0].xyz, temp[1], temp[2]; 24: MAD temp[1].xy, temp[0], const[6].wwww, const[6].wwww; 25: TEX temp[2].w, temp[1], 2D[0]; 26: SLT temp[1].x, temp[1].wwww, const[6].zzzz; 27: SLT temp[1].y, input[1].wwww, temp[2].wwww; 28: MOV output[0].w, temp[1]; 29: KIL -temp[1].xxxx; 30: KIL -temp[1].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[3].w, input[0].wwww; 1: MUL temp[3].xyz, input[0], temp[3].wwww; 2: MAD temp[3].xyz, temp[3].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[3]; 4: MAD temp[0].y, temp[3], const[5].xxxx, const[5].yyyy; 5: TEX temp[1], input[4], 2D[1]; 6: MUL temp[1].xyz, temp[1], const[6].xxxx; 7: ADD temp[1].xyz, temp[1], -const[6].yyyy; 8: MUL temp[2].xyz, input[6], temp[1].yyyy; 9: MAD temp[2].xyz, input[5], -temp[1].xxxx, temp[2]; 10: MAD temp[1].xyz, input[7], temp[1].zzzz, temp[2]; 11: DP3 temp[2].x, temp[1], temp[1]; 12: RSQ temp[2].x, temp[2].xxxx; 13: MUL temp[2].xyz, temp[2].xxxx, temp[1]; 14: TEX temp[1].xyz, temp[2], CUBE[2]; 15: DP3 temp[2].x, temp[2], const[1]; 16: MAX temp[1].w, temp[2].xxxx, temp[1]; 17: MUL temp[1].xyz, temp[1], const[2].xxxx; 18: MAD temp[2].xyz, temp[1].wwww, const[3], temp[1]; 19: TEX temp[1], input[3], 2D[1]; 20: MUL temp[1].xyz, temp[1], temp[2]; 21: ADD temp[2].xyz, -temp[1], const[4]; 22: MUL temp[2].xyz, input[2].xxxx, temp[2]; 23: ADD output[0].xyz, temp[1], temp[2]; 24: MAD temp[1].xy, temp[0], const[6].wwww, const[6].wwww; 25: TEX temp[2].w, temp[1], 2D[0]; 26: SLT temp[1].x, temp[1].wwww, const[6].zzzz; 27: SLT temp[1].y, input[1].wwww, temp[2].wwww; 28: MOV output[0].w, temp[1]; 29: KIL -temp[1].xxxx; 30: KIL -temp[1].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: RCP temp[3].w, input[0].wwww; 1: MUL temp[3].xyz, input[0], temp[3].wwww; 2: MAD temp[3].xyz, temp[3].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[3]; 4: MAD temp[0].y, temp[3], const[5].xxxx, const[5].yyyy; 5: TEX temp[1], input[4], 2D[1]; 6: MUL temp[1].xyz, temp[1], const[6].xxxx; 7: ADD temp[1].xyz, temp[1], -const[6].yyyy; 8: MUL temp[2].xyz, input[6], temp[1].yyyy; 9: MAD temp[2].xyz, input[5], -temp[1].xxxx, temp[2]; 10: MAD temp[1].xyz, input[7], temp[1].zzzz, temp[2]; 11: DP3 temp[2].x, temp[1], temp[1]; 12: RSQ temp[2].x, temp[2].xxxx; 13: MUL temp[2].xyz, temp[2].xxxx, temp[1]; 14: TEX temp[1].xyz, temp[2], CUBE[2]; 15: DP3 temp[2].x, temp[2], const[1]; 16: MAX temp[1].w, temp[2].xxxx, temp[1]; 17: MUL temp[1].xyz, temp[1], const[2].xxxx; 18: MAD temp[2].xyz, temp[1].wwww, const[3], temp[1]; 19: TEX temp[1], input[3], 2D[1]; 20: MUL temp[1].xyz, temp[1], temp[2]; 21: ADD temp[2].xyz, -temp[1], const[4]; 22: MUL temp[2].xyz, input[2].xxxx, temp[2]; 23: ADD_SAT output[0].xyz, temp[1], temp[2]; 24: MAD temp[1].xy, temp[0], const[6].wwww, const[6].wwww; 25: TEX temp[2].w, temp[1], 2D[0]; 26: SLT temp[1].x, temp[1].wwww, const[6].zzzz; 27: SLT temp[1].y, input[1].wwww, temp[2].wwww; 28: MOV_SAT output[0].w, temp[1]; 29: KIL -temp[1].xxxx; 30: KIL -temp[1].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[3].w, input[0].wwww; 1: MUL temp[3].xyz, input[0], temp[3].wwww; 2: MAD temp[3].xyz, temp[3].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[3]; 4: MAD temp[0].y, temp[3], const[5].xxxx, const[5].yyyy; 5: TEX temp[1], input[4], 2D[1]; 6: MUL temp[1].xyz, temp[1], const[6].xxxx; 7: ADD temp[1].xyz, temp[1], -const[6].yyyy; 8: MUL temp[2].xyz, input[6], temp[1].yyyy; 9: MAD temp[2].xyz, input[5], -temp[1].xxxx, temp[2]; 10: MAD temp[1].xyz, input[7], temp[1].zzzz, temp[2]; 11: DP3 temp[2].x, temp[1], temp[1]; 12: RSQ temp[2].x, temp[2].xxxx; 13: MUL temp[2].xyz, temp[2].xxxx, temp[1]; 14: TEX temp[4], temp[2], CUBE[2]; 15: MOV temp[1].xyz, temp[4]; 16: DP3 temp[2].x, temp[2], const[1]; 17: MAX temp[1].w, temp[2].xxxx, temp[1]; 18: MUL temp[1].xyz, temp[1], const[2].xxxx; 19: MAD temp[2].xyz, temp[1].wwww, const[3], temp[1]; 20: TEX temp[1], input[3], 2D[1]; 21: MUL temp[1].xyz, temp[1], temp[2]; 22: ADD temp[2].xyz, -temp[1], const[4]; 23: MUL temp[2].xyz, input[2].xxxx, temp[2]; 24: ADD_SAT output[0].xyz, temp[1], temp[2]; 25: MAD temp[1].xy, temp[0], const[6].wwww, const[6].wwww; 26: TEX temp[5], temp[1], 2D[0]; 27: MOV temp[2].w, temp[5]; 28: SLT temp[1].x, temp[1].wwww, const[6].zzzz; 29: SLT temp[1].y, input[1].wwww, temp[2].wwww; 30: MOV_SAT output[0].w, temp[1]; 31: KIL -temp[1].xxxx; 32: KIL -temp[1].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[3].w, input[0].wwww; 1: MUL temp[3].xyz, input[0], temp[3].wwww; 2: MAD temp[3].xyz, temp[3].xyz0, const[7].xyz0, const[8].xyz0; 3: MOV temp[0], temp[3]; 4: MAD temp[0].y, temp[3], const[5].xxxx, const[5].yyyy; 5: TEX temp[1], input[4], 2D[1]; 6: MUL temp[1].xyz, temp[1], const[6].xxxx; 7: ADD temp[1].xyz, temp[1], -const[6].yyyy; 8: MUL temp[2].xyz, input[6], temp[1].yyyy; 9: MAD temp[2].xyz, input[5], -temp[1].xxxx, temp[2]; 10: MAD temp[1].xyz, input[7], temp[1].zzzz, temp[2]; 11: DP3 temp[2].x, temp[1], temp[1]; 12: RSQ temp[2].x, |temp[2].xxxx|; 13: MUL temp[2].xyz, temp[2].xxxx, temp[1]; 14: TEX temp[4], temp[2], CUBE[2]; 15: MOV temp[1].xyz, temp[4]; 16: DP3 temp[2].x, temp[2], const[1]; 17: MAX temp[1].w, temp[2].xxxx, temp[1]; 18: MUL temp[1].xyz, temp[1], const[2].xxxx; 19: MAD temp[2].xyz, temp[1].wwww, const[3], temp[1]; 20: TEX temp[1], input[3], 2D[1]; 21: MUL temp[1].xyz, temp[1], temp[2]; 22: ADD temp[2].xyz, -temp[1], const[4]; 23: MUL temp[2].xyz, input[2].xxxx, temp[2]; 24: ADD_SAT output[0].xyz, temp[1], temp[2]; 25: MAD temp[1].xy, temp[0], const[6].wwww, const[6].wwww; 26: TEX temp[5], temp[1], 2D[0]; 27: MOV temp[2].w, temp[5]; 28: ADD temp[6].x, temp[1].wwww, -const[6].zzzz; 29: CMP temp[1].x, temp[6], none.1111, none.0000; 30: ADD temp[1].y, input[1].wwww, -temp[2].wwww; 31: CMP temp[1].y, temp[1], none.1111, none.0000; 32: MOV_SAT output[0].w, temp[1]; 33: KIL -temp[1].xxxx; 34: KIL -temp[1].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[3].w, input[0].w___; 1: MUL temp[3].xy, input[0].xy__, temp[3].ww__; 2: MAD temp[3].xy, temp[3].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[3].x___; 4: MAD temp[0].y, temp[3]._y__, const[5]._x__, const[5]._y__; 5: TEX temp[1], input[4].xy__, 2D[1]; 6: MUL temp[1].xyz, temp[1].xyz_, const[6].xxx_; 7: ADD temp[1].xyz, temp[1].xyz_, -const[6].yyy_; 8: MUL temp[2].xyz, input[6].xyz_, temp[1].yyy_; 9: MAD temp[2].xyz, input[5].xyz_, -temp[1].xxx_, temp[2].xyz_; 10: MAD temp[1].xyz, input[7].xyz_, temp[1].zzz_, temp[2].xyz_; 11: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 12: RSQ temp[2].x, |temp[2].x___|; 13: MUL temp[2].xyz, temp[2].xxx_, temp[1].xyz_; 14: TEX temp[4].xyz, temp[2].xyz_, CUBE[2]; 15: MOV temp[1].xyz, temp[4].xyz_; 16: DP3 temp[2].x, temp[2].xyz_, const[1].xyz_; 17: MAX temp[1].w, temp[2].___x, temp[1].___w; 18: MUL temp[1].xyz, temp[1].xyz_, const[2].xxx_; 19: MAD temp[2].xyz, temp[1].www_, const[3].xyz_, temp[1].xyz_; 20: TEX temp[1], input[3].xy__, 2D[1]; 21: MUL temp[1].xyz, temp[1].xyz_, temp[2].xyz_; 22: ADD temp[2].xyz, -temp[1].xyz_, const[4].xyz_; 23: MUL temp[2].xyz, input[2].xxx_, temp[2].xyz_; 24: ADD_SAT output[0].xyz, temp[1].xyz_, temp[2].xyz_; 25: MAD temp[1].xy, temp[0].xy__, const[6].ww__, const[6].ww__; 26: TEX temp[5].w, temp[1].xy__, 2D[0]; 27: MOV temp[2].w, temp[5].___w; 28: ADD temp[6].x, temp[1].w___, -const[6].z___; 29: CMP temp[1].x, temp[6].x___, none.1___, none.0___; 30: ADD temp[1].y, input[1]._w__, -temp[2]._w__; 31: CMP temp[1].y, temp[1]._y__, none._1__, none._0__; 32: MOV_SAT output[0].w, temp[1].___w; 33: KIL -temp[1].xxxx; 34: KIL -temp[1].yyyy; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[3].w, input[0].w___; 1: MUL temp[3].xy, input[0].xy__, temp[3].ww__; 2: MAD temp[3].xy, temp[3].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[3].x___; 4: MAD temp[0].y, temp[3]._y__, const[5]._x__, const[5]._y__; 5: TEX temp[1], input[4].xy__, 2D[1]; 6: MUL temp[1].xyz, temp[1].xyz_, const[6].xxx_; 7: ADD temp[1].xyz, temp[1].xyz_, -const[6].yyy_; 8: MUL temp[2].xyz, input[6].xyz_, temp[1].yyy_; 9: MAD temp[2].xyz, input[5].xyz_, -temp[1].xxx_, temp[2].xyz_; 10: MAD temp[1].xyz, input[7].xyz_, temp[1].zzz_, temp[2].xyz_; 11: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 12: RSQ temp[2].x, |temp[2].x___|; 13: MUL temp[2].xyz, temp[2].xxx_, temp[1].xyz_; 14: TEX temp[4].xyz, temp[2].xyz_, CUBE[2]; 15: MOV temp[1].xyz, temp[4].xyz_; 16: DP3 temp[2].x, temp[2].xyz_, const[1].xyz_; 17: MAX temp[1].w, temp[2].___x, temp[1].___w; 18: MUL temp[1].xyz, temp[1].xyz_, const[2].xxx_; 19: MAD temp[2].xyz, temp[1].www_, const[3].xyz_, temp[1].xyz_; 20: TEX temp[1], input[3].xy__, 2D[1]; 21: MUL temp[1].xyz, temp[1].xyz_, temp[2].xyz_; 22: ADD temp[2].xyz, -temp[1].xyz_, const[4].xyz_; 23: MUL temp[2].xyz, input[2].xxx_, temp[2].xyz_; 24: ADD_SAT output[0].xyz, temp[1].xyz_, temp[2].xyz_; 25: MAD temp[1].xy, temp[0].xy__, const[6].ww__, const[6].ww__; 26: TEX temp[5].w, temp[1].xy__, 2D[0]; 27: MOV temp[2].w, temp[5].___w; 28: ADD temp[6].x, temp[1].w___, -const[6].z___; 29: CMP temp[1].x, temp[6].x___, none.1___, none.0___; 30: ADD temp[1].y, input[1]._w__, -temp[2]._w__; 31: CMP temp[1].y, temp[1]._y__, none._1__, none._0__; 32: MOV_SAT output[0].w, temp[1].___w; 33: KIL -temp[1].xxxx; 34: KIL -temp[1].yyyy; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[3].w, input[0].w___; 1: MUL temp[3].xy, input[0].xy__, temp[3].ww__; 2: MAD temp[3].xy, temp[3].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[3].x___; 4: MAD temp[0].y, temp[3]._y__, const[5]._x__, const[5]._y__; 5: TEX temp[1], input[4].xy__, 2D[1]; 6: MUL temp[1].xyz, temp[1].xyz_, const[6].xxx_; 7: ADD temp[1].xyz, temp[1].xyz_, -none.111_; 8: MUL temp[2].xyz, input[6].xyz_, temp[1].yyy_; 9: MAD temp[2].xyz, input[5].xyz_, -temp[1].xxx_, temp[2].xyz_; 10: MAD temp[1].xyz, input[7].xyz_, temp[1].zzz_, temp[2].xyz_; 11: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 12: RSQ temp[2].x, |temp[2].x___|; 13: MUL temp[2].xyz, temp[2].xxx_, temp[1].xyz_; 14: TEX temp[4].xyz, temp[2].xyz_, CUBE[2]; 15: DP3 temp[2].x, temp[2].xyz_, const[1].xyz_; 16: MAX temp[1].w, temp[2].___x, temp[1].___w; 17: MUL temp[1].xyz, temp[4].xyz_, const[2].xxx_; 18: MAD temp[2].xyz, temp[1].www_, const[3].xyz_, temp[1].xyz_; 19: TEX temp[1], input[3].xy__, 2D[1]; 20: MUL temp[1].xyz, temp[1].xyz_, temp[2].xyz_; 21: MUL temp[2].xyz, input[2].xxx_, (const[4] - temp[1]).xyz_; 22: ADD_SAT output[0].xyz, temp[1].xyz_, temp[2].xyz_; 23: MAD temp[1].xy, temp[0].xy__, const[6].ww__, const[6].ww__; 24: TEX temp[5].w, temp[1].xy__, 2D[0]; 25: ADD temp[6].x, temp[1].w___, -none.H___; 26: CMP temp[1].x, temp[6].x___, none.1___, none.0___; 27: CMP temp[1].y, (input[1] - temp[5])._w__, none._1__, none._0__; 28: MOV_SAT output[0].w, temp[1].___w; 29: KIL -temp[1].xxxx; 30: KIL -temp[1].yyyy; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[3].w, input[0].w___; 1: MUL temp[3].xy, input[0].xy__, temp[3].ww__; 2: MAD temp[3].xy, temp[3].xy__, const[7].xy__, const[8].xy__; 3: MOV temp[0].x, temp[3].x___; 4: MAD temp[0].y, temp[3]._y__, const[5]._x__, const[5]._y__; 5: TEX temp[1], input[4].xy__, 2D[1]; 6: MUL temp[1].xyz, temp[1].xyz_, const[6].xxx_; 7: ADD temp[1].xyz, temp[1].xyz_, -none.111_; 8: MUL temp[2].xyz, input[6].xyz_, temp[1].yyy_; 9: MAD temp[2].xyz, input[5].xyz_, -temp[1].xxx_, temp[2].xyz_; 10: MAD temp[1].xyz, input[7].xyz_, temp[1].zzz_, temp[2].xyz_; 11: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 12: RSQ temp[2].x, |temp[2].x___|; 13: MUL temp[2].xyz, temp[2].xxx_, temp[1].xyz_; 14: TEX temp[4].xyz, temp[2].xyz_, CUBE[2]; 15: DP3 temp[2].x, temp[2].xyz_, const[1].xyz_; 16: MAX temp[1].w, temp[2].___x, temp[1].___w; 17: MUL temp[1].xyz, temp[4].xyz_, const[2].xxx_; 18: MAD temp[2].xyz, temp[1].www_, const[3].xyz_, temp[1].xyz_; 19: TEX temp[1], input[3].xy__, 2D[1]; 20: MUL temp[1].xyz, temp[1].xyz_, temp[2].xyz_; 21: MUL temp[2].xyz, input[2].xxx_, (const[4] - temp[1]).xyz_; 22: ADD_SAT output[0].xyz, temp[1].xyz_, temp[2].xyz_; 23: MAD temp[1].xy, temp[0].xy__, const[6].ww__, const[6].ww__; 24: TEX temp[5].w, temp[1].xy__, 2D[0]; 25: ADD temp[6].x, temp[1].w___, -none.H___; 26: CMP temp[1].x, temp[6].x___, none.1___, none.0___; 27: CMP temp[1].y, (input[1] - temp[5])._w__, none._1__, none._0__; 28: MOV_SAT output[0].w, temp[1].___w; 29: MOV temp[7], -temp[1].xxxx; 30: KIL temp[7]; 31: MOV temp[8], -temp[1].yyyy; 32: KIL temp[8]; CONST[5] = { 2.0000 1.0000 0.5000 0.0625 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[3].w, input[0].w___; 1: MUL temp[3].xy, input[0].xy__, temp[3].ww__; 2: MAD temp[3].xy, temp[3].xy__, const[6].xy__, const[7].xy__; 3: MOV temp[0].x, temp[3].x___; 4: MAD temp[0].y, temp[3]._y__, const[4]._x__, const[4]._y__; 5: TEX temp[1], input[4].xy__, 2D[1]; 6: MUL temp[1].xyz, temp[1].xyz_, const[5].xxx_; 7: ADD temp[1].xyz, temp[1].xyz_, -none.111_; 8: MUL temp[2].xyz, input[6].xyz_, temp[1].yyy_; 9: MAD temp[2].xyz, input[5].xyz_, -temp[1].xxx_, temp[2].xyz_; 10: MAD temp[1].xyz, input[7].xyz_, temp[1].zzz_, temp[2].xyz_; 11: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 12: RSQ temp[2].x, |temp[2].x___|; 13: MUL temp[2].xyz, temp[2].xxx_, temp[1].xyz_; 14: TEX temp[4].xyz, temp[2].xyz_, CUBE[2]; 15: DP3 temp[2].x, temp[2].xyz_, const[0].xyz_; 16: MAX temp[1].w, temp[2].___x, temp[1].___w; 17: MUL temp[1].xyz, temp[4].xyz_, const[1].xxx_; 18: MAD temp[2].xyz, temp[1].www_, const[2].xyz_, temp[1].xyz_; 19: TEX temp[1], input[3].xy__, 2D[1]; 20: MUL temp[1].xyz, temp[1].xyz_, temp[2].xyz_; 21: MUL temp[2].xyz, input[2].xxx_, (const[3] - temp[1]).xyz_; 22: ADD_SAT output[0].xyz, temp[1].xyz_, temp[2].xyz_; 23: MAD temp[1].xy, temp[0].xy__, const[5].ww__, const[5].ww__; 24: TEX temp[5].w, temp[1].xy__, 2D[0]; 25: ADD temp[6].x, temp[1].w___, -none.H___; 26: CMP temp[1].x, temp[6].x___, none.1___, none.0___; 27: CMP temp[1].y, (input[1] - temp[5])._w__, none._1__, none._0__; 28: MOV_SAT output[0].w, temp[1].___w; 29: MOV temp[7], -temp[1].xxxx; 30: KIL temp[7]; 31: MOV temp[8], -temp[1].yyyy; 32: KIL temp[8]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[9].w, input[0].w___; 1: MUL temp[10].xy, input[0].xy__, temp[9].ww__; 2: MAD temp[11].xy, temp[10].xy__, const[6].xy__, const[7].xy__; 3: MOV temp[0].x, temp[11].x___; 4: MAD temp[0].y, temp[11]._y__, const[4]._x__, const[4]._y__; 5: TEX temp[12], input[4].xy__, 2D[1]; 6: MUL temp[13].xyz, temp[12].xyz_, const[5].xxx_; 7: ADD temp[14].xyz, temp[13].xyz_, -none.111_; 8: MUL temp[15].xyz, input[6].xyz_, temp[14].yyy_; 9: MAD temp[16].xyz, input[5].xyz_, -temp[14].xxx_, temp[15].xyz_; 10: MAD temp[17].xyz, input[7].xyz_, temp[14].zzz_, temp[16].xyz_; 11: DP3 temp[18].x, temp[17].xyz_, temp[17].xyz_; 12: RSQ temp[19].x, |temp[18].x___|; 13: MUL temp[20].xyz, temp[19].xxx_, temp[17].xyz_; 14: TEX temp[21].xyz, temp[20].xyz_, CUBE[2]; 15: DP3 temp[22].x, temp[20].xyz_, const[0].xyz_; 16: MAX temp[23].w, temp[22].___x, temp[12].___w; 17: MUL temp[24].xyz, temp[21].xyz_, const[1].xxx_; 18: MAD temp[25].xyz, temp[23].www_, const[2].xyz_, temp[24].xyz_; 19: TEX temp[26], input[3].xy__, 2D[1]; 20: MUL temp[27].xyz, temp[26].xyz_, temp[25].xyz_; 21: MUL temp[28].xyz, input[2].xxx_, (const[3] - temp[27]).xyz_; 22: ADD_SAT output[0].xyz, temp[27].xyz_, temp[28].xyz_; 23: MAD temp[29].xy, temp[0].xy__, const[5].ww__, const[5].ww__; 24: TEX temp[30].w, temp[29].xy__, 2D[0]; 25: ADD temp[31].x, temp[26].w___, -none.H___; 26: CMP temp[32].x, temp[31].x___, none.1___, none.0___; 27: CMP temp[33].y, (input[1] - temp[30])._w__, none._1__, none._0__; 28: MOV_SAT output[0].w, temp[26].___w; 29: MOV temp[34], -temp[32].xxxx; 30: KIL temp[34]; 31: MOV temp[35], -temp[33].yyyy; 32: KIL temp[35]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[9].w, src0.w 1: src0.xyz = input[0], src0.w = temp[9] MAD temp[10].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[10], src1.xyz = const[6], src2.xyz = const[7] MAD temp[11].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[11] MAD temp[0].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[11], src1.xyz = const[4] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 5: TEX temp[12], input[4].xy__, 2D[1]; 6: src0.xyz = temp[12], src1.xyz = const[5] MAD temp[13].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = temp[13] MAD temp[14].xyz, src0.xyz, src0.111, -src0.111 8: src0.xyz = input[6], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.yyy, src0.000 9: src0.xyz = input[5], src1.xyz = temp[14], src2.xyz = temp[15] MAD temp[16].xyz, src0.xyz, -src1.xxx, src2.xyz 10: src0.xyz = input[7], src1.xyz = temp[14], src2.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src1.zzz, src2.xyz 11: src0.xyz = temp[17] DP3 temp[18].x, src0.xyz, src0.xyz 12: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 13: src0.xyz = temp[19], src1.xyz = temp[17] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 14: TEX temp[21].xyz, temp[20].xyz_, CUBE[2]; 15: src0.xyz = temp[20], src1.xyz = const[0] DP3 temp[22].x, src0.xyz, src1.xyz 16: src0.xyz = temp[22], src0.w = temp[12] MAX temp[23].w, src0.x, src0.w 17: src0.xyz = temp[21], src1.xyz = const[1] MAD temp[24].xyz, src0.xyz, src1.xxx, src0.000 18: src0.xyz = const[2], src0.w = temp[23], src1.xyz = temp[24] MAD temp[25].xyz, src0.www, src0.xyz, src1.xyz 19: TEX temp[26], input[3].xy__, 2D[1]; 20: src0.xyz = temp[26], src1.xyz = temp[25] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 21: src0.xyz = temp[27], src1.xyz = const[3], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD temp[28].xyz, src2.xxx, srcp.xyz, src0.000 22: src0.xyz = temp[27], src1.xyz = temp[28] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz 23: src0.xyz = temp[0], src0.w = const[5] MAD temp[29].xy, src0.xy_, src0.ww_, src0.ww_ 24: TEX temp[30].w, temp[29].xy__, 2D[0]; 25: src0.w = temp[26] MAD temp[31].x, src0.w__, src0.111, -src0.H__ 26: src0.xyz = temp[31] CMP temp[32].x, src0.0__, src0.1__, src0.x__ 27: src0.w = temp[30], src1.w = input[1], srcp.w = (src1 - src0) CMP temp[33].y, src0._0_, src0._1_, srcp._w_ 28: src0.w = temp[26] MAD_SAT color[0].w, src0.w, src0.1, src0.0 29: src0.xyz = temp[32] MAD temp[34].xyz, -src0.xxx, src0.111, src0.000 MAD temp[34].w, -src0.x, src0.1, src0.0 30: KIL temp[34]; 31: src0.xyz = temp[33] MAD temp[35].xyz, -src0.yyy, src0.111, src0.000 MAD temp[35].w, -src0.y, src0.1, src0.0 32: KIL temp[35]; Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[12], input[4].xy__, 2D[1]; 2: TEX temp[26], input[3].xy__, 2D[1]; 3: src0.w = temp[26] MAD temp[31].x, src0.w__, src0.111, -src0.H__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[31], src0.w = input[0] CMP temp[32].x, src0.0__, src0.1__, src0.x__ RCP temp[9].w, src0.w 5: src0.xyz = temp[32] MAD temp[34].xyz, -src0.xxx, src0.111, src0.000 MAD temp[34].w, -src0.x, src0.1, src0.0 6: src0.xyz = input[0], src0.w = temp[9] MAD temp[10].xy, src0.xy_, src0.ww_, src0.000 7: src0.xyz = temp[10], src1.xyz = const[6], src2.xyz = const[7] MAD temp[11].xy, src0.xy_, src1.xy_, src2.xy_ 8: src0.xyz = temp[11], src1.xyz = const[4] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 9: src0.xyz = temp[11] MAD temp[0].x, src0.x__, src0.111, src0.000 10: src0.xyz = temp[0], src0.w = const[5] MAD temp[29].xy, src0.xy_, src0.ww_, src0.ww_ 11: src0.xyz = temp[12], src1.xyz = const[5] MAD temp[13].xyz, src0.xyz, src1.xxx, src0.000 12: src0.xyz = temp[13] MAD temp[14].xyz, src0.xyz, src0.111, -src0.111 13: src0.xyz = input[6], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.yyy, src0.000 14: src0.xyz = input[5], src1.xyz = temp[14], src2.xyz = temp[15] MAD temp[16].xyz, src0.xyz, -src1.xxx, src2.xyz 15: src0.xyz = input[7], src1.xyz = temp[14], src2.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src1.zzz, src2.xyz 16: src0.xyz = temp[17] DP3 temp[18].x, src0.xyz, src0.xyz 17: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 18: src0.xyz = temp[19], src1.xyz = temp[17] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[20], src1.xyz = const[0] DP3 temp[22].x, src0.xyz, src1.xyz 20: src0.xyz = temp[22], src0.w = temp[12] MAX temp[23].w, src0.x, src0.w 21: BEGIN_TEX; 22: KIL temp[34]; 23: TEX temp[30].w, temp[29].xy__, 2D[0]; 24: TEX temp[21].xyz, temp[20].xyz_, CUBE[2]; 25: src0.xyz = temp[21], src1.xyz = const[1] MAD temp[24].xyz, src0.xyz, src1.xxx, src0.000 26: src0.xyz = const[2], src0.w = temp[23], src1.xyz = temp[24] MAD temp[25].xyz, src0.www, src0.xyz, src1.xyz 27: src0.xyz = temp[26], src1.xyz = temp[25] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[27], src1.xyz = const[3], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD temp[28].xyz, src2.xxx, srcp.xyz, src0.000 29: src0.xyz = temp[27], src1.xyz = temp[28] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz 30: src0.w = temp[30], src1.w = input[1], srcp.w = (src1 - src0) CMP temp[33].y, src0._0_, src0._1_, srcp._w_ 31: src0.xyz = temp[33] MAD temp[35].xyz, -src0.yyy, src0.111, src0.000 MAD temp[35].w, -src0.y, src0.1, src0.0 32: BEGIN_TEX; 33: KIL temp[35]; Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[12], input[4].xy__, 2D[1]; 2: TEX temp[26], input[3].xy__, 2D[1]; 3: src0.w = temp[26] MAD temp[31].x, src0.w__, src0.111, -src0.H__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[31], src0.w = input[0] CMP temp[32].x, src0.0__, src0.1__, src0.x__ RCP temp[9].w, src0.w 5: src0.xyz = temp[32] MAD temp[34].xyz, -src0.xxx, src0.111, src0.000 MAD temp[34].w, -src0.x, src0.1, src0.0 6: src0.xyz = input[0], src0.w = temp[9] MAD temp[10].xy, src0.xy_, src0.ww_, src0.000 7: src0.xyz = temp[10], src1.xyz = const[6], src2.xyz = const[7] MAD temp[11].xy, src0.xy_, src1.xy_, src2.xy_ 8: src0.xyz = temp[11], src1.xyz = const[4] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 9: src0.xyz = temp[11] MAD temp[0].x, src0.x__, src0.111, src0.000 10: src0.xyz = temp[0], src0.w = const[5] MAD temp[29].xy, src0.xy_, src0.ww_, src0.ww_ 11: src0.xyz = temp[12], src1.xyz = const[5] MAD temp[13].xyz, src0.xyz, src1.xxx, src0.000 12: src0.xyz = temp[13] MAD temp[14].xyz, src0.xyz, src0.111, -src0.111 13: src0.xyz = input[6], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.yyy, src0.000 14: src0.xyz = input[5], src1.xyz = temp[14], src2.xyz = temp[15] MAD temp[16].xyz, src0.xyz, -src1.xxx, src2.xyz 15: src0.xyz = input[7], src1.xyz = temp[14], src2.xyz = temp[16] MAD temp[17].xyz, src0.xyz, src1.zzz, src2.xyz 16: src0.xyz = temp[17] DP3 temp[18].x, src0.xyz, src0.xyz 17: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 18: src0.xyz = temp[19], src1.xyz = temp[17] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[20], src1.xyz = const[0] DP3 temp[22].x, src0.xyz, src1.xyz 20: src0.xyz = temp[22], src0.w = temp[12] MAX temp[23].w, src0.x, src0.w 21: BEGIN_TEX; 22: KIL temp[34]; 23: TEX temp[30].w, temp[29].xy__, 2D[0]; 24: TEX temp[21].xyz, temp[20].xyz_, CUBE[2]; 25: src0.xyz = temp[21], src1.xyz = const[1] MAD temp[24].xyz, src0.xyz, src1.xxx, src0.000 26: src0.xyz = const[2], src0.w = temp[23], src1.xyz = temp[24] MAD temp[25].xyz, src0.www, src0.xyz, src1.xyz 27: src0.xyz = temp[26], src1.xyz = temp[25] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[27], src1.xyz = const[3], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD temp[28].xyz, src2.xxx, srcp.xyz, src0.000 29: src0.xyz = temp[27], src1.xyz = temp[28] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz 30: src0.w = temp[30], src1.w = input[1], srcp.w = (src1 - src0) CMP temp[33].y, src0._0_, src0._1_, srcp._w_ 31: src0.xyz = temp[33] MAD temp[35].xyz, -src0.yyy, src0.111, src0.000 MAD temp[35].w, -src0.y, src0.1, src0.0 32: BEGIN_TEX; 33: KIL temp[35]; Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[3].xy__, 2D[1]; 2: TEX temp[2], input[2].xy__, 2D[1]; 3: src0.w = temp[2] MAD temp[0].x, src0.w__, src0.1__, -src0.H__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[0], src0.w = input[7] CMP temp[0].x, src0.0__, src0.1__, src0.x__ RCP temp[1].w, src0.w 5: src0.xyz = temp[0] MAD temp[8].xyz, -src0.xxx, src0.111, src0.000 MAD temp[8].w, -src0.x, src0.1, src0.0 6: src0.xyz = input[7], src0.w = temp[1] MAD temp[0].xy, src0.xy_, src0.ww_, src0.00_ 7: src0.xyz = temp[0], src1.xyz = const[6], src2.xyz = const[7] MAD temp[0].xy, src0.xy_, src1.xy_, src2.xy_ 8: src0.xyz = temp[0], src1.xyz = const[4] MAD temp[7].y, src0._y_, src1._x_, src1._y_ 9: src0.xyz = temp[0] MAD temp[7].x, src0.x__, src0.11_, src0.00_ 10: src0.xyz = temp[7], src0.w = const[5] MAD temp[0].xy, src0.xy_, src0.ww_, src0.ww_ 11: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[7].xyz, src0.xyz, src1.xxx, src0.000 12: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, -src0.111 13: src0.xyz = input[5], src1.xyz = temp[7] MAD temp[5].xyz, src0.xyz, src1.yyy, src0.000 14: src0.xyz = input[4], src1.xyz = temp[7], src2.xyz = temp[5] MAD temp[4].xyz, src0.xyz, -src1.xxx, src2.xyz 15: src0.xyz = input[6], src1.xyz = temp[7], src2.xyz = temp[4] MAD temp[4].xyz, src0.xyz, src1.zzz, src2.xyz 16: src0.xyz = temp[4] DP3 temp[0].z, src0.xyz, src0.xyz 17: src0.xyz = temp[0] REPL_ALPHA temp[0].z RSQ, |src0.z| 18: src0.xyz = temp[0], src1.xyz = temp[4] MAD temp[4].xyz, src0.zzz, src1.xyz, src0.000 19: src0.xyz = temp[4], src1.xyz = const[0] DP3 temp[0].z, src0.xyz, src1.xyz 20: src0.xyz = temp[0], src0.w = temp[3] MAX temp[1].w, src0.z, src0.w 21: BEGIN_TEX; 22: KIL temp[8]; 23: TEX temp[3].w, temp[0].xy__, 2D[0]; 24: TEX temp[4].xyz, temp[4].xyz_, CUBE[2]; 25: src0.xyz = temp[4], src1.xyz = const[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 26: src0.xyz = const[2], src0.w = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz 27: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xxx, srcp.xyz, src0.000 29: src0.xyz = temp[0], src1.xyz = temp[1] MAD_SAT color[0].xyz, src0.xyz, src0.111, src1.xyz 30: src0.w = temp[3], src1.w = input[0], srcp.w = (src1 - src0) CMP temp[0].x, src0.0__, src0.1__, srcp.w__ 31: src0.xyz = temp[0] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 32: BEGIN_TEX; 33: KIL temp[0]; pc=35************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 17, tex_end: 1 (code_addr: 00420440) TEX: TEX t3, t3, texture[1] (000088c3) TEX t2, t2, texture[1] (00008882) 0: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t2 t0 t0 bias-> o0.w (01000002) xyz: t2.www 1.0 -0.5 op: 000d8a8c w: t2.w 1.0 0.0 op: 40040889 1: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t7 t0 t0 bias-> t1.w (00840007) xyz: 0.0 1.0 t0.xyz op: 04000a94 w: t7.w t0.x t0.x op: 05000009 2: xyz: t0 t0 t0 bias-> t8.xyz (03a00000) w: t0 t0 t0 bias-> t8.w (00a00000) xyz: -t0.xxx 1.0 0.0 op: 00050aa1 w: -t0.x 1.0 0.0 op: 000408a0 3: xyz: t7 t0 t0 bias-> t0.xy (01800007) w: t1 t0 t0 bias-> (00000001) xyz: t7.xyz t1.www 0.0 op: 00050600 w: t7.x t7.x t7.x op: 00000000 4: 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 5: xyz: t0 c4 t0 bias-> t7.y (011c0900) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c4.xxx c4.xyz op: 00010280 w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 t0 t0 bias-> t7.x (009c0000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 7: xyz: t7 t0 t0 bias-> t0.xy (01800007) w: c5 t0 t0 bias-> (00000025) xyz: t7.xyz c5.www c5.www op: 00030600 w: t7.x t7.x t7.x op: 00000000 8: xyz: t3 c5 t0 bias-> t7.xyz (039c0943) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c5.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 9: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 -1.0 op: 000d4a80 w: t7.x t7.x t7.x op: 00000000 10: xyz: t5 t7 t0 bias-> t5.xyz (039401c5) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t7.yyy 0.0 op: 00050300 w: t5.x t5.x t5.x op: 00000000 11: xyz: t4 t7 t5 bias-> t4.xyz (039051c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz -t7.xxx t5.xyz op: 00021280 w: t4.x t4.x t4.x op: 00000000 12: xyz: t6 t7 t4 bias-> t4.xyz (039041c6) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t7.zzz t4.xyz op: 00020380 w: t6.x t6.x t6.x op: 00000000 13: xyz: t4 t0 t0 bias-> t0.z (02000004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t4.xyz t4.xxx op: 00804000 w: t4.x t4.x t4.x op: 00000000 14: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.z| t0.x t0.x op: 05800042 15: xyz: t0 t4 t0 bias-> t4.xyz (03900100) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz t4.xyz 0.0 op: 00050203 w: t0.x t0.x t0.x op: 00000000 16: xyz: t4 c0 t0 bias-> t0.z (02000804) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c0.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 17: xyz: t0 t0 t0 bias-> (00000000) w: t3 t0 t0 bias-> t1.w (00840003) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.z t3.w t0.x op: 01800482 NODE 1: alu_offset: 18, tex_offset: 2, alu_end: 6, tex_end: 2 (code_addr: 00442192) TEX: KIL t0, t8, texture[0] (00010008) TEX t3, t0, texture[0] (000080c0) TEX t4, t4, texture[2] (00009104) 18: xyz: t4 c1 t0 bias-> t0.xyz (03800844) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c1.xxx 0.0 op: 00050280 w: t4.x t4.x t4.x op: 00000000 19: xyz: c2 t0 t0 bias-> t0.xyz (03800022) w: t1 t0 t0 bias-> (00000001) xyz: t1.www c2.xyz t0.xyz op: 0001000c w: c2.x c2.x c2.x op: 00000000 20: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz 0.0 op: 80050200 NOP w: t2.x t2.x t2.x op: 00000000 21: xyz: t0 c3 t1 sub-> t1.xyz (038418c0) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz 0.0 op: 00250789 w: t0.x t0.x t0.x op: 00000000 22: xyz: t0 t1 t0 bias-> o0.xyz (1c000040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 t1.xyz op: 40010a80 w: t0.x t0.x t0.x op: 00000000 23: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t3 t0 t0 sub-> (00000003) xyz: 0.0 1.0 srcp.www op: 0404ca94 w: t0.x t0.x t0.x op: 00200000 24: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t0.xxx 1.0 0.0 op: 00050aa1 w: -t0.x 1.0 0.0 op: 000408a0 NODE 2: alu_offset: 25, tex_offset: 5, alu_end: 0, tex_end: 0 (code_addr: 00005019) TEX: KIL t0, t0, texture[0] (00010000) 25: 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], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL TEMP[0..1] 0: TEX TEMP[0], IN[2], SAMP[1], 2D 1: TEX TEMP[1], IN[1], SAMP[0], 2D 2: MUL TEMP[1], TEMP[1], TEMP[0] 3: MUL OUT[0], TEMP[1], IN[0] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: TEX temp[1], input[1], 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL output[0], temp[1], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: TEX temp[1], input[1], 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL output[0], temp[1], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: TEX temp[1], input[1], 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL output[0], temp[1], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: TEX temp[1], input[1], 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL output[0], temp[1], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: TEX temp[1], input[1], 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL output[0], temp[1], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: TEX temp[1], input[1], 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: TEX temp[1], input[1], 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: TEX temp[1], input[1], 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: MUL temp[1], temp[1], temp[0]; 3: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[2], input[2].xy__, 2D[1]; 1: TEX temp[3], input[1].xy__, 2D[0]; 2: MUL temp[4], temp[3], temp[2]; 3: MUL_SAT output[0], temp[4], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[2], input[2].xy__, 2D[1]; 1: TEX temp[3], input[1].xy__, 2D[0]; 2: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[2], src1.w = temp[2] 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], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[2].xy__, 2D[1]; 2: TEX temp[3], input[1].xy__, 2D[0]; 3: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[2], src1.w = temp[2] 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], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[2].xy__, 2D[1]; 2: TEX temp[3], input[1].xy__, 2D[0]; 3: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[2], src1.w = temp[2] 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], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[2].xy__, 2D[1]; 2: TEX temp[1], input[1].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[2], src1.w = temp[2] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=36************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 1 (code_addr: 00420040) TEX: TEX t2, t2, texture[1] (00008882) TEX t1, t1, texture[0] (00008041) 0: xyz: t1 t2 t0 bias-> t1.xyz (03840081) w: t1 t2 t0 bias-> t1.w (00840081) xyz: t1.xyz t2.xyz 0.0 op: 00050200 w: t1.w t2.w 0.0 op: 00040509 1: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.w t0.w 0.0 op: 40040509 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], CUBE 1: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX output[0], input[0], CUBE[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX output[0], input[0], CUBE[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX output[0], input[0], CUBE[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX output[0], input[0], CUBE[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX output[0], input[0], CUBE[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[1], input[0], CUBE[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[1], input[0], CUBE[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[1], input[0].xyz_, CUBE[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[1], input[0].xyz_, CUBE[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xyz_, CUBE[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xyz_, CUBE[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xyz_, CUBE[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[0].xyz_, CUBE[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[0].xyz_, CUBE[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].xyz_, CUBE[0]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xyz_, CUBE[0]; 2: 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 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xyz_, CUBE[0]; 2: 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: 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 IN[1], GENERIC[2], PERSPECTIVE DCL IN[2], GENERIC[3], PERSPECTIVE DCL IN[3], GENERIC[4], PERSPECTIVE DCL IN[4], GENERIC[5], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..4] IMM FLT32 { 2.0000, 1.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[0], SAMP[0], 2D 1: MOV TEMP[0].x, TEMP[0].wwww 2: MAD TEMP[1], TEMP[0], IMM[0].xxxx, -IMM[0].yyyy 3: MOV TEMP[1].z, IMM[0].zzzz 4: DP3 TEMP[0].x, TEMP[1], TEMP[1] 5: ADD TEMP[0].x, IMM[0].yyyy, -TEMP[0].xxxx 6: RSQ TEMP[0].x, TEMP[0].xxxx 7: RCP TEMP[1].z, TEMP[0].xxxx 8: DP3 TEMP[0].x, TEMP[1], IN[2] 9: DP3 TEMP[0].y, TEMP[1], IN[3] 10: DP3 TEMP[0].z, TEMP[1], IN[4] 11: DP3 TEMP[2].w, IN[1], IN[1] 12: RSQ TEMP[2].w, TEMP[2].wwww 13: MUL TEMP[2], IN[1], TEMP[2].wwww 14: DP3 TEMP[1], TEMP[2], TEMP[0] 15: MUL TEMP[1], TEMP[1], IMM[0].xxxx 16: MAD TEMP[3], -TEMP[0], TEMP[1].xxxx, TEMP[2] 17: DP3_SAT TEMP[0], -TEMP[2], TEMP[0] 18: SUB TEMP[0], IMM[0].yyyy, TEMP[0] 19: POW TEMP[4], TEMP[0].xxxx, CONST[1].xxxx 20: TEX TEMP[3], TEMP[3], SAMP[1], CUBE 21: MUL TEMP[3], TEMP[3], TEMP[3] 22: MUL OUT[0], TEMP[3], CONST[1].yyyy 23: ADD TEMP[4].w, TEMP[4], CONST[1].zzzz 24: MUL OUT[0].w, CONST[2].wwww, TEMP[4].wwww 25: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[3].xxxx, -const[3].yyyy; 3: MOV temp[1].z, const[3].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[3].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[3].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[3].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: MUL temp[3], temp[3], temp[3]; 22: MUL output[0], temp[3], const[1].yyyy; 23: ADD temp[4].w, temp[4], const[1].zzzz; 24: MUL output[0].w, const[2].wwww, temp[4].wwww; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[3].xxxx, -const[3].yyyy; 3: MOV temp[1].z, const[3].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[3].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[3].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[3].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: MUL temp[3], temp[3], temp[3]; 22: MUL output[0], temp[3], const[1].yyyy; 23: ADD temp[4].w, temp[4], const[1].zzzz; 24: MUL output[0].w, const[2].wwww, temp[4].wwww; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[3].xxxx, -const[3].yyyy; 3: MOV temp[1].z, const[3].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[3].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[3].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[3].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: MUL temp[3], temp[3], temp[3]; 22: MUL output[0], temp[3], const[1].yyyy; 23: ADD temp[4].w, temp[4], const[1].zzzz; 24: MUL output[0].w, const[2].wwww, temp[4].wwww; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[3].xxxx, -const[3].yyyy; 3: MOV temp[1].z, const[3].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[3].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[3].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[3].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: MUL temp[3], temp[3], temp[3]; 22: MUL output[0], temp[3], const[1].yyyy; 23: ADD temp[4].w, temp[4], const[1].zzzz; 24: MUL output[0].w, const[2].wwww, temp[4].wwww; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[3].xxxx, -const[3].yyyy; 3: MOV temp[1].z, const[3].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[3].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[3].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[3].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: MUL temp[3], temp[3], temp[3]; 22: MUL output[0], temp[3], const[1].yyyy; 23: ADD temp[4].w, temp[4], const[1].zzzz; 24: MUL output[0].w, const[2].wwww, temp[4].wwww; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[3].xxxx, -const[3].yyyy; 3: MOV temp[1].z, const[3].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[3].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[3].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[3].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: MUL temp[3], temp[3], temp[3]; 22: MUL_SAT output[0], temp[3], const[1].yyyy; 23: ADD temp[4].w, temp[4], const[1].zzzz; 24: MUL_SAT output[0].w, const[2].wwww, temp[4].wwww; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[3].xxxx, -const[3].yyyy; 3: MOV temp[1].z, const[3].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[3].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[3].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[3].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: MUL temp[3], temp[3], temp[3]; 22: MUL_SAT output[0], temp[3], const[1].yyyy; 23: ADD temp[4].w, temp[4], const[1].zzzz; 24: MUL_SAT output[0].w, const[2].wwww, temp[4].wwww; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[3].xxxx, -const[3].yyyy; 3: MOV temp[1].z, const[3].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[3].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, |temp[0].xxxx|; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, |temp[2].wwww|; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[3].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: ADD temp[0], const[3].yyyy, -temp[0]; 19: LG2 temp[4].w, temp[0].xxxx; 20: MUL temp[4].w, temp[4].wwww, const[1].xxxx; 21: EX2 temp[4], temp[4].wwww; 22: TEX temp[3], temp[3], CUBE[1]; 23: MUL temp[3], temp[3], temp[3]; 24: MUL_SAT output[0], temp[3], const[1].yyyy; 25: ADD temp[4].w, temp[4], const[1].zzzz; 26: MUL_SAT output[0].w, const[2].wwww, temp[4].wwww; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[3].xx__, -const[3].yy__; 3: MOV temp[1].z, const[3].__z_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, const[3].y___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[3].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, const[3].y___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[1].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[1].yyy_; 25: ADD temp[4].w, temp[4].___w, const[1].___z; 26: MUL_SAT output[0].w, const[2].___w, temp[4].___w; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[3].xx__, -const[3].yy__; 3: MOV temp[1].z, const[3].__z_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, const[3].y___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[3].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, const[3].y___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[1].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[1].yyy_; 25: ADD temp[4].w, temp[4].___w, const[1].___z; 26: MUL_SAT output[0].w, const[2].___w, temp[4].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[3].xx__, -none.11__; 3: MOV temp[1].z, none.__0_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, none.1___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[3].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, none.1___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[1].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[1].yyy_; 25: ADD temp[4].w, temp[4].___w, const[1].___z; 26: MUL_SAT output[0].w, const[2].___w, temp[4].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[3].xx__, -none.11__; 3: MOV temp[1].z, none.__0_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, none.1___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[3].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, none.1___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[1].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[1].yyy_; 25: ADD temp[4].w, temp[4].___w, const[1].___z; 26: MUL_SAT output[0].w, const[2].___w, temp[4].___w; CONST[2] = { 2.0000 1.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[2].xx__, -none.11__; 3: MOV temp[1].z, none.__0_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, none.1___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[2].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, none.1___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[0].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: MUL temp[3].xyz, temp[3].xyz_, temp[3].xyz_; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[0].yyy_; 25: ADD temp[4].w, temp[4].___w, const[0].___z; 26: MUL_SAT output[0].w, const[1].___w, temp[4].___w; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[2].xx__, -none.11__; 3: MOV temp[1].z, none.__0_; 4: DP3 temp[5].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[6].x, none.1___, -temp[5].x___; 6: RSQ temp[7].x, |temp[6].x___|; 7: RCP temp[1].z, temp[7].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[8].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[9].w, |temp[8].w___|; 13: MUL temp[10].xyz, input[1].xyz_, temp[9].www_; 14: DP3 temp[11].x, temp[10].xyz_, temp[0].xyz_; 15: MUL temp[12].x, temp[11].x___, const[2].x___; 16: MAD temp[13].xyz, -temp[0].xyz_, temp[12].xxx_, temp[10].xyz_; 17: DP3_SAT temp[14].x, -temp[10].xyz_, temp[0].xyz_; 18: ADD temp[15].x, none.1___, -temp[14].x___; 19: LG2 temp[16].w, temp[15].x___; 20: MUL temp[17].w, temp[16].___w, const[0].___x; 21: EX2 temp[18].w, temp[17].w___; 22: TEX temp[19].xyz, temp[13].xyz_, CUBE[1]; 23: MUL temp[20].xyz, temp[19].xyz_, temp[19].xyz_; 24: MUL_SAT output[0].xyz, temp[20].xyz_, const[0].yyy_; 25: ADD temp[21].w, temp[18].___w, const[0].___z; 26: MUL_SAT output[0].w, const[1].___w, temp[21].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: src0.w = temp[0] MAD temp[0].x, src0.w__, src0.111, src0.000 2: src0.xyz = temp[0], src1.xyz = const[2] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 3: MAD temp[1].z, src0.__0, src0.111, src0.000 4: src0.xyz = temp[1] DP3 temp[5].x, src0.xyz, src0.xyz 5: src0.xyz = temp[5] MAD temp[6].x, src0.1__, src0.111, -src0.x__ 6: src0.xyz = temp[6] REPL_ALPHA temp[7].x RSQ, |src0.x| 7: src0.xyz = temp[7] REPL_ALPHA temp[1].z RCP, src0.x 8: src0.xyz = temp[1], src1.xyz = input[2] DP3 temp[0].x, src0.xyz, src1.xyz 9: src0.xyz = temp[1], src1.xyz = input[3] DP3 temp[0].y, src0.xyz, src1.xyz 10: src0.xyz = temp[1], src1.xyz = input[4] DP3 temp[0].z, src0.xyz, src1.xyz 11: src0.xyz = input[1] DP3, src0.xyz, src0.xyz DP3 temp[8].w, src0._, src0._ 12: src0.w = temp[8] RSQ temp[9].w, |src0.w| 13: src0.xyz = input[1], src0.w = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 14: src0.xyz = temp[10], src1.xyz = temp[0] DP3 temp[11].x, src0.xyz, src1.xyz 15: src0.xyz = temp[11], src1.xyz = const[2] MAD temp[12].x, src0.x__, src1.x__, src0.000 16: src0.xyz = temp[0], src1.xyz = temp[12], src2.xyz = temp[10] MAD temp[13].xyz, -src0.xyz, src1.xxx, src2.xyz 17: src0.xyz = temp[10], src1.xyz = temp[0] DP3_SAT temp[14].x, -src0.xyz, src1.xyz 18: src0.xyz = temp[14] MAD temp[15].x, src0.1__, src0.111, -src0.x__ 19: src0.xyz = temp[15] LG2 temp[16].w, src0.x 20: src0.xyz = const[0], src0.w = temp[16] MAD temp[17].w, src0.w, src0.x, src0.0 21: src0.w = temp[17] EX2 temp[18].w, src0.w 22: TEX temp[19].xyz, temp[13].xyz_, CUBE[1]; 23: src0.xyz = temp[19] MAD temp[20].xyz, src0.xyz, src0.xyz, src0.000 24: src0.xyz = temp[20], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.yyy, src0.000 25: src0.xyz = const[0], src0.w = temp[18] MAD temp[21].w, src0.w, src0.1, src0.z 26: src0.w = const[1], src1.w = temp[21] MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].yw, input[0].xy__, 2D[0]; 2: src0.xyz = input[1] DP3, src0.xyz, src0.xyz DP3 temp[8].w, src0._, src0._ 3: src0.w = temp[0], src1.w = temp[8] MAD temp[0].x, src0.w__, src0.111, src0.000 RSQ temp[9].w, |src1.w| 4: src0.xyz = input[1], src0.w = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 5: src0.xyz = temp[0], src1.xyz = const[2] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 6: MAD temp[1].z, src0.__0, src0.111, src0.000 7: src0.xyz = temp[1] DP3 temp[5].x, src0.xyz, src0.xyz 8: src0.xyz = temp[5] MAD temp[6].x, src0.1__, src0.111, -src0.x__ 9: src0.xyz = temp[6] REPL_ALPHA temp[7].x RSQ, |src0.x| 10: src0.xyz = temp[7] REPL_ALPHA temp[1].z RCP, src0.x 11: src0.xyz = temp[1], src1.xyz = input[2] DP3 temp[0].x, src0.xyz, src1.xyz 12: src0.xyz = temp[1], src1.xyz = input[3] DP3 temp[0].y, src0.xyz, src1.xyz 13: src0.xyz = temp[1], src1.xyz = input[4] DP3 temp[0].z, src0.xyz, src1.xyz 14: src0.xyz = temp[10], src1.xyz = temp[0] DP3 temp[11].x, src0.xyz, src1.xyz 15: src0.xyz = temp[11], src1.xyz = const[2] MAD temp[12].x, src0.x__, src1.x__, src0.000 16: src0.xyz = temp[0], src1.xyz = temp[12], src2.xyz = temp[10] MAD temp[13].xyz, -src0.xyz, src1.xxx, src2.xyz 17: src0.xyz = temp[10], src1.xyz = temp[0] DP3_SAT temp[14].x, -src0.xyz, src1.xyz 18: src0.xyz = temp[14] MAD temp[15].x, src0.1__, src0.111, -src0.x__ 19: src0.xyz = temp[15] LG2 temp[16].w, src0.x 20: src0.xyz = const[0], src0.w = temp[16] MAD temp[17].w, src0.w, src0.x, src0.0 21: src0.w = temp[17] EX2 temp[18].w, src0.w 22: src0.xyz = const[0], src0.w = temp[18] MAD temp[21].w, src0.w, src0.1, src0.z 23: src0.w = const[1], src1.w = temp[21] MAD_SAT color[0].w, src0.w, src1.w, src0.0 24: BEGIN_TEX; 25: TEX temp[19].xyz, temp[13].xyz_, CUBE[1]; 26: src0.xyz = temp[19] MAD temp[20].xyz, src0.xyz, src0.xyz, src0.000 27: src0.xyz = temp[20], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.yyy, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].yw, input[0].xy__, 2D[0]; 2: src0.xyz = input[1] DP3, src0.xyz, src0.xyz DP3 temp[8].w, src0._, src0._ 3: src0.w = temp[0], src1.w = temp[8] MAD temp[0].x, src0.w__, src0.111, src0.000 RSQ temp[9].w, |src1.w| 4: src0.xyz = input[1], src0.w = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 5: src0.xyz = temp[0], src1.xyz = const[2] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 6: MAD temp[1].z, src0.__0, src0.111, src0.000 7: src0.xyz = temp[1] DP3 temp[5].x, src0.xyz, src0.xyz 8: src0.xyz = temp[5] MAD temp[6].x, src0.1__, src0.111, -src0.x__ 9: src0.xyz = temp[6] REPL_ALPHA temp[7].x RSQ, |src0.x| 10: src0.xyz = temp[7] REPL_ALPHA temp[1].z RCP, src0.x 11: src0.xyz = temp[1], src1.xyz = input[2] DP3 temp[0].x, src0.xyz, src1.xyz 12: src0.xyz = temp[1], src1.xyz = input[3] DP3 temp[0].y, src0.xyz, src1.xyz 13: src0.xyz = temp[1], src1.xyz = input[4] DP3 temp[0].z, src0.xyz, src1.xyz 14: src0.xyz = temp[10], src1.xyz = temp[0] DP3 temp[11].x, src0.xyz, src1.xyz 15: src0.xyz = temp[11], src1.xyz = const[2] MAD temp[12].x, src0.x__, src1.x__, src0.000 16: src0.xyz = temp[0], src1.xyz = temp[12], src2.xyz = temp[10] MAD temp[13].xyz, -src0.xyz, src1.xxx, src2.xyz 17: src0.xyz = temp[10], src1.xyz = temp[0] DP3_SAT temp[14].x, -src0.xyz, src1.xyz 18: src0.xyz = temp[14] MAD temp[15].x, src0.1__, src0.111, -src0.x__ 19: src0.xyz = temp[15] LG2 temp[16].w, src0.x 20: src0.xyz = const[0], src0.w = temp[16] MAD temp[17].w, src0.w, src0.x, src0.0 21: src0.w = temp[17] EX2 temp[18].w, src0.w 22: src0.xyz = const[0], src0.w = temp[18] MAD temp[21].w, src0.w, src0.1, src0.z 23: src0.w = const[1], src1.w = temp[21] MAD_SAT color[0].w, src0.w, src1.w, src0.0 24: BEGIN_TEX; 25: TEX temp[19].xyz, temp[13].xyz_, CUBE[1]; 26: src0.xyz = temp[19] MAD temp[20].xyz, src0.xyz, src0.xyz, src0.000 27: src0.xyz = temp[20], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.yyy, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].yw, input[0].xy__, 2D[0]; 2: src0.xyz = input[1] DP3, src0.xyz, src0.xyz DP3 temp[1].w, src0._, src0._ 3: src0.w = temp[0], src1.w = temp[1] MAD temp[0].x, src0.w__, src0.11_, src0.00_ RSQ temp[1].w, |src1.w| 4: src0.xyz = input[1], src0.w = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 5: src0.xyz = temp[0], src1.xyz = const[2] MAD temp[0].xy, src0.xy_, src1.xx_, -src0.11_ 6: MAD temp[0].z, src0.__0, src0.111, src0.000 7: src0.xyz = temp[0] DP3 temp[5].x, src0.xyz, src0.xyz 8: src0.xyz = temp[5] MAD temp[5].x, src0.1__, src0.1__, -src0.x__ 9: src0.xyz = temp[5] REPL_ALPHA temp[5].x RSQ, |src0.x| 10: src0.xyz = temp[5] REPL_ALPHA temp[0].z RCP, src0.x 11: src0.xyz = temp[0], src1.xyz = input[2] DP3 temp[2].x, src0.xyz, src1.xyz 12: src0.xyz = temp[0], src1.xyz = input[3] DP3 temp[2].y, src0.xyz, src1.xyz 13: src0.xyz = temp[0], src1.xyz = input[4] DP3 temp[2].z, src0.xyz, src1.xyz 14: src0.xyz = temp[1], src1.xyz = temp[2] DP3 temp[0].x, src0.xyz, src1.xyz 15: src0.xyz = temp[0], src1.xyz = const[2] MAD temp[0].x, src0.x__, src1.x__, src0.0__ 16: src0.xyz = temp[2], src1.xyz = temp[0], src2.xyz = temp[1] MAD temp[0].xyz, -src0.xyz, src1.xxx, src2.xyz 17: src0.xyz = temp[1], src1.xyz = temp[2] DP3_SAT temp[1].x, -src0.xyz, src1.xyz 18: src0.xyz = temp[1] MAD temp[1].x, src0.1__, src0.1__, -src0.x__ 19: src0.xyz = temp[1] LG2 temp[0].w, src0.x 20: src0.xyz = const[0], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 21: src0.w = temp[0] EX2 temp[0].w, src0.w 22: src0.xyz = const[0], src0.w = temp[0] MAD temp[0].w, src0.w, src0.1, src0.z 23: src0.w = const[1], src1.w = temp[0] MAD_SAT color[0].w, src0.w, src1.w, src0.0 24: BEGIN_TEX; 25: TEX temp[0].xyz, temp[0].xyz_, CUBE[1]; 26: src0.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.xyz, src0.000 27: src0.xyz = temp[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.yyy, src0.000 pc=38************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 21, tex_end: 0 (code_addr: 00400540) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t1 t0 t0 bias-> (00000001) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz t1.xyz t1.xxx op: 00804000 w: 1.0 1.0 t1.x op: 00800891 1: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t1 t0 bias-> t1.w (00840040) xyz: t0.www 1.0 0.0 op: 00050a8c w: |t1.w| t0.x t0.x op: 0580004a 2: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t1 t0 t0 bias-> (00000001) xyz: t1.xyz t1.www 0.0 op: 00050600 w: t1.x t1.x t1.x op: 00000000 3: xyz: t0 c2 t0 bias-> t0.xy (01800880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c2.xxx -1.0 op: 000d4280 w: t0.x t0.x t0.x op: 00000000 4: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t5.x (00940000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz t0.xxx op: 00804000 w: t0.x t0.x t0.x op: 00000000 6: xyz: t5 t0 t0 bias-> t5.x (00940005) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t5.xyz op: 00080a95 w: t5.x t5.x t5.x op: 00000000 7: xyz: t5 t0 t0 bias-> t5.x (00940005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xxx t5.xxx t5.xxx op: 05004081 w: |t5.x| t5.x t5.x op: 05800040 8: xyz: t5 t0 t0 bias-> t0.z (02000005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xxx t5.xxx t5.xxx op: 05004081 w: t5.x t5.x t5.x op: 05000000 9: xyz: t0 t2 t0 bias-> t2.x (00880080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz t0.xxx op: 00804200 w: t0.x t0.x t0.x op: 00000000 10: xyz: t0 t3 t0 bias-> t2.y (010800c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t3.xyz t0.xxx op: 00804200 w: t0.x t0.x t0.x op: 00000000 11: xyz: t0 t4 t0 bias-> t2.z (02080100) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t4.xyz t0.xxx op: 00804200 w: t0.x t0.x t0.x op: 00000000 12: xyz: t1 t2 t0 bias-> t0.x (00800081) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t2.xyz t1.xxx op: 00804200 w: t1.x t1.x t1.x op: 00000000 13: xyz: t0 c2 t0 bias-> t0.x (00800880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 14: xyz: t2 t0 t1 bias-> t0.xyz (03801002) w: t0 t0 t0 bias-> (00000000) xyz: -t2.xyz t0.xxx t1.xyz op: 000202a0 w: t2.x t2.x t2.x op: 00000000 15: xyz: t1 t2 t0 bias-> t1.x (00840081) w: t0 t0 t0 bias-> (00000000) xyz: -t1.xyz t2.xyz t1.xxx op: 40804220 w: t1.x t1.x t1.x op: 00000000 16: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 17: 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 t1.x t1.x op: 04800000 18: 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 19: 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 t0.x t0.x op: 04000009 20: 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 1.0 c0.z op: 00008889 21: xyz: t0 t0 t0 bias-> (00000000) w: c1 t0 t0 bias-> o0.w (01000021) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: c1.w t0.w 0.0 op: 40040509 NODE 1: alu_offset: 22, tex_offset: 1, alu_end: 1, tex_end: 0 (code_addr: 00401056) TEX: TEX t0, t0, texture[1] (00008800) 22: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz 0.0 op: 00050000 w: t0.x t0.x t0.x op: 00000000 23: xyz: t0 c0 t0 bias-> o0.xyz (1c000800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.yyy 0.0 op: 40050300 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[2], PERSPECTIVE DCL IN[4], GENERIC[4], PERSPECTIVE DCL IN[5], GENERIC[5], PERSPECTIVE DCL IN[6], GENERIC[6], PERSPECTIVE DCL IN[7], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL CONST[0..1] DCL CONST[5..8] DCL TEMP[0..11] IMM FLT32 { 1.0000, 0.0000, 0.5000, 2.0000} IMM FLT32 { -1.0000, 0.0000, 0.0000, 0.0000} 0: MAD TEMP[0].xy, IN[2], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[4], SAMP[0], 2D 2: SUB TEMP[1].w, TEMP[1].wwww, CONST[1] 3: KIL TEMP[1].wwww 4: MOV TEMP[2], IMM[0].xxxx 5: MUL_SAT TEMP[2], TEMP[2], IN[2].wwww 6: TEX TEMP[3], IN[2], SAMP[1], 2D 7: MOV TEMP[3].x, TEMP[3].wwww 8: MAD TEMP[3].xy, TEMP[3], IMM[0].wwww, IMM[1].xxxx 9: TEX TEMP[4], TEMP[0], SAMP[2], 2D 10: MOV TEMP[4].x, TEMP[4].wwww 11: MAD TEMP[4].xy, TEMP[4], IMM[0].wwww, IMM[1].xxxx 12: MAD TEMP[3].xy, TEMP[2].xxxx, TEMP[4], TEMP[3] 13: MOV TEMP[3].z, IMM[0].yyyy 14: DP3 TEMP[5].x, TEMP[3], TEMP[3] 15: ADD TEMP[5].x, IMM[0].xxxx, -TEMP[5].xxxx 16: RSQ TEMP[5].x, TEMP[5].xxxx 17: RCP TEMP[3].z, TEMP[5].xxxx 18: DP3 TEMP[6].x, IN[5], TEMP[3] 19: DP3 TEMP[6].y, IN[6], TEMP[3] 20: DP3 TEMP[6].z, IN[7], TEMP[3] 21: TEX TEMP[7], TEMP[6], SAMP[3], CUBE 22: MUL TEMP[7], TEMP[7], CONST[5] 23: MUL TEMP[8], TEMP[1], CONST[6] 24: MUL TEMP[8], TEMP[7], TEMP[8] 25: DP3 TEMP[5], IN[3], TEMP[6] 26: ADD TEMP[5], TEMP[5], TEMP[5] 27: MAD TEMP[9], -TEMP[6], TEMP[5].xxxx, IN[3] 28: TEX TEMP[7], TEMP[9], SAMP[4], CUBE 29: TEX TEMP[10], IN[4], SAMP[5], 2D 30: TEX TEMP[11], TEMP[0], SAMP[6], 2D 31: ADD TEMP[11], TEMP[11], -IMM[0].zzzz 32: MAD_SAT TEMP[10], TEMP[2].xxxx, TEMP[11], TEMP[10] 33: ADD TEMP[9], TEMP[10], TEMP[10] 34: MAD TEMP[8], TEMP[9], TEMP[7], TEMP[8] 35: MUL TEMP[8], CONST[7].xxxx, TEMP[8] 36: LRP TEMP[8].xyz, IN[1].xxxx, CONST[8], TEMP[8] 37: MUL OUT[0], TEMP[8], IN[0] 38: MOV OUT[0].w, CONST[7].yyyy 39: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: SUB temp[1].w, temp[1].wwww, const[1]; 3: KIL temp[1].wwww; 4: MOV temp[2], const[9].xxxx; 5: MUL_SAT temp[2], temp[2], input[2].wwww; 6: TEX temp[3], input[2], 2D[1]; 7: MOV temp[3].x, temp[3].wwww; 8: MAD temp[3].xy, temp[3], const[9].wwww, const[10].xxxx; 9: TEX temp[4], temp[0], 2D[2]; 10: MOV temp[4].x, temp[4].wwww; 11: MAD temp[4].xy, temp[4], const[9].wwww, const[10].xxxx; 12: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 13: MOV temp[3].z, const[9].yyyy; 14: DP3 temp[5].x, temp[3], temp[3]; 15: ADD temp[5].x, const[9].xxxx, -temp[5].xxxx; 16: RSQ temp[5].x, temp[5].xxxx; 17: RCP temp[3].z, temp[5].xxxx; 18: DP3 temp[6].x, input[5], temp[3]; 19: DP3 temp[6].y, input[6], temp[3]; 20: DP3 temp[6].z, input[7], temp[3]; 21: TEX temp[7], temp[6], CUBE[3]; 22: MUL temp[7], temp[7], const[5]; 23: MUL temp[8], temp[1], const[6]; 24: MUL temp[8], temp[7], temp[8]; 25: DP3 temp[5], input[3], temp[6]; 26: ADD temp[5], temp[5], temp[5]; 27: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 28: TEX temp[7], temp[9], CUBE[4]; 29: TEX temp[10], input[4], 2D[5]; 30: TEX temp[11], temp[0], 2D[6]; 31: ADD temp[11], temp[11], -const[9].zzzz; 32: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 33: ADD temp[9], temp[10], temp[10]; 34: MAD temp[8], temp[9], temp[7], temp[8]; 35: MUL temp[8], const[7].xxxx, temp[8]; 36: LRP temp[8].xyz, input[1].xxxx, const[8], temp[8]; 37: MUL output[0], temp[8], input[0]; 38: MOV output[0].w, const[7].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: SUB temp[1].w, temp[1].wwww, const[1]; 3: KIL temp[1].wwww; 4: MOV temp[2], const[9].xxxx; 5: MUL_SAT temp[2], temp[2], input[2].wwww; 6: TEX temp[3], input[2], 2D[1]; 7: MOV temp[3].x, temp[3].wwww; 8: MAD temp[3].xy, temp[3], const[9].wwww, const[10].xxxx; 9: TEX temp[4], temp[0], 2D[2]; 10: MOV temp[4].x, temp[4].wwww; 11: MAD temp[4].xy, temp[4], const[9].wwww, const[10].xxxx; 12: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 13: MOV temp[3].z, const[9].yyyy; 14: DP3 temp[5].x, temp[3], temp[3]; 15: ADD temp[5].x, const[9].xxxx, -temp[5].xxxx; 16: RSQ temp[5].x, temp[5].xxxx; 17: RCP temp[3].z, temp[5].xxxx; 18: DP3 temp[6].x, input[5], temp[3]; 19: DP3 temp[6].y, input[6], temp[3]; 20: DP3 temp[6].z, input[7], temp[3]; 21: TEX temp[7], temp[6], CUBE[3]; 22: MUL temp[7], temp[7], const[5]; 23: MUL temp[8], temp[1], const[6]; 24: MUL temp[8], temp[7], temp[8]; 25: DP3 temp[5], input[3], temp[6]; 26: ADD temp[5], temp[5], temp[5]; 27: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 28: TEX temp[7], temp[9], CUBE[4]; 29: TEX temp[10], input[4], 2D[5]; 30: TEX temp[11], temp[0], 2D[6]; 31: ADD temp[11], temp[11], -const[9].zzzz; 32: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 33: ADD temp[9], temp[10], temp[10]; 34: MAD temp[8], temp[9], temp[7], temp[8]; 35: MUL temp[8], const[7].xxxx, temp[8]; 36: LRP temp[8].xyz, input[1].xxxx, const[8], temp[8]; 37: MUL output[0], temp[8], input[0]; 38: MOV output[0].w, const[7].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: SUB temp[1].w, temp[1].wwww, const[1]; 3: KIL temp[1].wwww; 4: MOV temp[2], const[9].xxxx; 5: MUL_SAT temp[2], temp[2], input[2].wwww; 6: TEX temp[3], input[2], 2D[1]; 7: MOV temp[3].x, temp[3].wwww; 8: MAD temp[3].xy, temp[3], const[9].wwww, const[10].xxxx; 9: TEX temp[4], temp[0], 2D[2]; 10: MOV temp[4].x, temp[4].wwww; 11: MAD temp[4].xy, temp[4], const[9].wwww, const[10].xxxx; 12: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 13: MOV temp[3].z, const[9].yyyy; 14: DP3 temp[5].x, temp[3], temp[3]; 15: ADD temp[5].x, const[9].xxxx, -temp[5].xxxx; 16: RSQ temp[5].x, temp[5].xxxx; 17: RCP temp[3].z, temp[5].xxxx; 18: DP3 temp[6].x, input[5], temp[3]; 19: DP3 temp[6].y, input[6], temp[3]; 20: DP3 temp[6].z, input[7], temp[3]; 21: TEX temp[7], temp[6], CUBE[3]; 22: MUL temp[7], temp[7], const[5]; 23: MUL temp[8], temp[1], const[6]; 24: MUL temp[8], temp[7], temp[8]; 25: DP3 temp[5], input[3], temp[6]; 26: ADD temp[5], temp[5], temp[5]; 27: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 28: TEX temp[7], temp[9], CUBE[4]; 29: TEX temp[10], input[4], 2D[5]; 30: TEX temp[11], temp[0], 2D[6]; 31: ADD temp[11], temp[11], -const[9].zzzz; 32: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 33: ADD temp[9], temp[10], temp[10]; 34: MAD temp[8], temp[9], temp[7], temp[8]; 35: MUL temp[8], const[7].xxxx, temp[8]; 36: LRP temp[8].xyz, input[1].xxxx, const[8], temp[8]; 37: MUL output[0], temp[8], input[0]; 38: MOV output[0].w, const[7].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: SUB temp[1].w, temp[1].wwww, const[1]; 3: KIL temp[1].wwww; 4: MOV temp[2], const[9].xxxx; 5: MUL_SAT temp[2], temp[2], input[2].wwww; 6: TEX temp[3], input[2], 2D[1]; 7: MOV temp[3].x, temp[3].wwww; 8: MAD temp[3].xy, temp[3], const[9].wwww, const[10].xxxx; 9: TEX temp[4], temp[0], 2D[2]; 10: MOV temp[4].x, temp[4].wwww; 11: MAD temp[4].xy, temp[4], const[9].wwww, const[10].xxxx; 12: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 13: MOV temp[3].z, const[9].yyyy; 14: DP3 temp[5].x, temp[3], temp[3]; 15: ADD temp[5].x, const[9].xxxx, -temp[5].xxxx; 16: RSQ temp[5].x, temp[5].xxxx; 17: RCP temp[3].z, temp[5].xxxx; 18: DP3 temp[6].x, input[5], temp[3]; 19: DP3 temp[6].y, input[6], temp[3]; 20: DP3 temp[6].z, input[7], temp[3]; 21: TEX temp[7], temp[6], CUBE[3]; 22: MUL temp[7], temp[7], const[5]; 23: MUL temp[8], temp[1], const[6]; 24: MUL temp[8], temp[7], temp[8]; 25: DP3 temp[5], input[3], temp[6]; 26: ADD temp[5], temp[5], temp[5]; 27: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 28: TEX temp[7], temp[9], CUBE[4]; 29: TEX temp[10], input[4], 2D[5]; 30: TEX temp[11], temp[0], 2D[6]; 31: ADD temp[11], temp[11], -const[9].zzzz; 32: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 33: ADD temp[9], temp[10], temp[10]; 34: MAD temp[8], temp[9], temp[7], temp[8]; 35: MUL temp[8], const[7].xxxx, temp[8]; 36: LRP temp[8].xyz, input[1].xxxx, const[8], temp[8]; 37: MUL output[0], temp[8], input[0]; 38: MOV output[0].w, const[7].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: SUB temp[1].w, temp[1].wwww, const[1]; 3: KIL temp[1].wwww; 4: MOV temp[2], const[9].xxxx; 5: MUL_SAT temp[2], temp[2], input[2].wwww; 6: TEX temp[3], input[2], 2D[1]; 7: MOV temp[3].x, temp[3].wwww; 8: MAD temp[3].xy, temp[3], const[9].wwww, const[10].xxxx; 9: TEX temp[4], temp[0], 2D[2]; 10: MOV temp[4].x, temp[4].wwww; 11: MAD temp[4].xy, temp[4], const[9].wwww, const[10].xxxx; 12: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 13: MOV temp[3].z, const[9].yyyy; 14: DP3 temp[5].x, temp[3], temp[3]; 15: ADD temp[5].x, const[9].xxxx, -temp[5].xxxx; 16: RSQ temp[5].x, temp[5].xxxx; 17: RCP temp[3].z, temp[5].xxxx; 18: DP3 temp[6].x, input[5], temp[3]; 19: DP3 temp[6].y, input[6], temp[3]; 20: DP3 temp[6].z, input[7], temp[3]; 21: TEX temp[7], temp[6], CUBE[3]; 22: MUL temp[7], temp[7], const[5]; 23: MUL temp[8], temp[1], const[6]; 24: MUL temp[8], temp[7], temp[8]; 25: DP3 temp[5], input[3], temp[6]; 26: ADD temp[5], temp[5], temp[5]; 27: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 28: TEX temp[7], temp[9], CUBE[4]; 29: TEX temp[10], input[4], 2D[5]; 30: TEX temp[11], temp[0], 2D[6]; 31: ADD temp[11], temp[11], -const[9].zzzz; 32: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 33: ADD temp[9], temp[10], temp[10]; 34: MAD temp[8], temp[9], temp[7], temp[8]; 35: MUL temp[8], const[7].xxxx, temp[8]; 36: LRP temp[8].xyz, input[1].xxxx, const[8], temp[8]; 37: MUL output[0], temp[8], input[0]; 38: MOV output[0].w, const[7].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: SUB temp[1].w, temp[1].wwww, const[1]; 3: KIL temp[1].wwww; 4: MOV temp[2], const[9].xxxx; 5: MUL_SAT temp[2], temp[2], input[2].wwww; 6: TEX temp[3], input[2], 2D[1]; 7: MOV temp[3].x, temp[3].wwww; 8: MAD temp[3].xy, temp[3], const[9].wwww, const[10].xxxx; 9: TEX temp[4], temp[0], 2D[2]; 10: MOV temp[4].x, temp[4].wwww; 11: MAD temp[4].xy, temp[4], const[9].wwww, const[10].xxxx; 12: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 13: MOV temp[3].z, const[9].yyyy; 14: DP3 temp[5].x, temp[3], temp[3]; 15: ADD temp[5].x, const[9].xxxx, -temp[5].xxxx; 16: RSQ temp[5].x, temp[5].xxxx; 17: RCP temp[3].z, temp[5].xxxx; 18: DP3 temp[6].x, input[5], temp[3]; 19: DP3 temp[6].y, input[6], temp[3]; 20: DP3 temp[6].z, input[7], temp[3]; 21: TEX temp[7], temp[6], CUBE[3]; 22: MUL temp[7], temp[7], const[5]; 23: MUL temp[8], temp[1], const[6]; 24: MUL temp[8], temp[7], temp[8]; 25: DP3 temp[5], input[3], temp[6]; 26: ADD temp[5], temp[5], temp[5]; 27: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 28: TEX temp[7], temp[9], CUBE[4]; 29: TEX temp[10], input[4], 2D[5]; 30: TEX temp[11], temp[0], 2D[6]; 31: ADD temp[11], temp[11], -const[9].zzzz; 32: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 33: ADD temp[9], temp[10], temp[10]; 34: MAD temp[8], temp[9], temp[7], temp[8]; 35: MUL temp[8], const[7].xxxx, temp[8]; 36: LRP temp[8].xyz, input[1].xxxx, const[8], temp[8]; 37: MUL_SAT output[0], temp[8], input[0]; 38: MOV_SAT output[0].w, const[7].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: SUB temp[1].w, temp[1].wwww, const[1]; 3: KIL temp[1].wwww; 4: MOV temp[2], const[9].xxxx; 5: MUL_SAT temp[2], temp[2], input[2].wwww; 6: TEX temp[3], input[2], 2D[1]; 7: MOV temp[3].x, temp[3].wwww; 8: MAD temp[3].xy, temp[3], const[9].wwww, const[10].xxxx; 9: TEX temp[4], temp[0], 2D[2]; 10: MOV temp[4].x, temp[4].wwww; 11: MAD temp[4].xy, temp[4], const[9].wwww, const[10].xxxx; 12: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 13: MOV temp[3].z, const[9].yyyy; 14: DP3 temp[5].x, temp[3], temp[3]; 15: ADD temp[5].x, const[9].xxxx, -temp[5].xxxx; 16: RSQ temp[5].x, temp[5].xxxx; 17: RCP temp[3].z, temp[5].xxxx; 18: DP3 temp[6].x, input[5], temp[3]; 19: DP3 temp[6].y, input[6], temp[3]; 20: DP3 temp[6].z, input[7], temp[3]; 21: TEX temp[7], temp[6], CUBE[3]; 22: MUL temp[7], temp[7], const[5]; 23: MUL temp[8], temp[1], const[6]; 24: MUL temp[8], temp[7], temp[8]; 25: DP3 temp[5], input[3], temp[6]; 26: ADD temp[5], temp[5], temp[5]; 27: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 28: TEX temp[7], temp[9], CUBE[4]; 29: TEX temp[10], input[4], 2D[5]; 30: TEX temp[11], temp[0], 2D[6]; 31: ADD temp[11], temp[11], -const[9].zzzz; 32: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 33: ADD temp[9], temp[10], temp[10]; 34: MAD temp[8], temp[9], temp[7], temp[8]; 35: MUL temp[8], const[7].xxxx, temp[8]; 36: LRP temp[8].xyz, input[1].xxxx, const[8], temp[8]; 37: MUL_SAT output[0], temp[8], input[0]; 38: MOV_SAT output[0].w, const[7].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: ADD temp[1].w, temp[1].wwww, -const[1]; 3: KIL temp[1].wwww; 4: MOV temp[2], const[9].xxxx; 5: MUL_SAT temp[2], temp[2], input[2].wwww; 6: TEX temp[3], input[2], 2D[1]; 7: MOV temp[3].x, temp[3].wwww; 8: MAD temp[3].xy, temp[3], const[9].wwww, const[10].xxxx; 9: TEX temp[4], temp[0], 2D[2]; 10: MOV temp[4].x, temp[4].wwww; 11: MAD temp[4].xy, temp[4], const[9].wwww, const[10].xxxx; 12: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 13: MOV temp[3].z, const[9].yyyy; 14: DP3 temp[5].x, temp[3], temp[3]; 15: ADD temp[5].x, const[9].xxxx, -temp[5].xxxx; 16: RSQ temp[5].x, |temp[5].xxxx|; 17: RCP temp[3].z, temp[5].xxxx; 18: DP3 temp[6].x, input[5], temp[3]; 19: DP3 temp[6].y, input[6], temp[3]; 20: DP3 temp[6].z, input[7], temp[3]; 21: TEX temp[7], temp[6], CUBE[3]; 22: MUL temp[7], temp[7], const[5]; 23: MUL temp[8], temp[1], const[6]; 24: MUL temp[8], temp[7], temp[8]; 25: DP3 temp[5], input[3], temp[6]; 26: ADD temp[5], temp[5], temp[5]; 27: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 28: TEX temp[7], temp[9], CUBE[4]; 29: TEX temp[10], input[4], 2D[5]; 30: TEX temp[11], temp[0], 2D[6]; 31: ADD temp[11], temp[11], -const[9].zzzz; 32: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 33: ADD temp[9], temp[10], temp[10]; 34: MAD temp[8], temp[9], temp[7], temp[8]; 35: MUL temp[8], const[7].xxxx, temp[8]; 36: ADD temp[12].xyz, const[8], -temp[8]; 37: MAD temp[8].xyz, input[1].xxxx, temp[12], temp[8]; 38: MUL_SAT output[0], temp[8], input[0]; 39: MOV_SAT output[0].w, const[7].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1], input[4].xy__, 2D[0]; 2: ADD temp[1].w, temp[1].___w, -const[1].___w; 3: KIL temp[1].wwww; 4: MOV temp[2].x, const[9].x___; 5: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 6: TEX temp[3].yw, input[2].xy__, 2D[1]; 7: MOV temp[3].x, temp[3].w___; 8: MAD temp[3].xy, temp[3].xy__, const[9].ww__, const[10].xx__; 9: TEX temp[4].yw, temp[0].xy__, 2D[2]; 10: MOV temp[4].x, temp[4].w___; 11: MAD temp[4].xy, temp[4].xy__, const[9].ww__, const[10].xx__; 12: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 13: MOV temp[3].z, const[9].__y_; 14: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 15: ADD temp[5].x, const[9].x___, -temp[5].x___; 16: RSQ temp[5].x, |temp[5].x___|; 17: RCP temp[3].z, temp[5].x___; 18: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 19: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 20: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 21: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 22: MUL temp[7].xyz, temp[7].xyz_, const[5].xyz_; 23: MUL temp[8].xyz, temp[1].xyz_, const[6].xyz_; 24: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 25: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 26: ADD temp[5].x, temp[5].x___, temp[5].x___; 27: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 28: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 29: TEX temp[10].xyz, input[4].xy__, 2D[5]; 30: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 31: ADD temp[11].xyz, temp[11].xyz_, -const[9].zzz_; 32: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 33: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 34: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 35: MUL temp[8].xyz, const[7].xxx_, temp[8].xyz_; 36: ADD temp[12].xyz, const[8].xyz_, -temp[8].xyz_; 37: MAD temp[8].xyz, input[1].xxx_, temp[12].xyz_, temp[8].xyz_; 38: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 39: MOV_SAT output[0].w, const[7].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1], input[4].xy__, 2D[0]; 2: ADD temp[1].w, temp[1].___w, -const[1].___w; 3: KIL temp[1].wwww; 4: MOV temp[2].x, const[9].x___; 5: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 6: TEX temp[3].yw, input[2].xy__, 2D[1]; 7: MOV temp[3].x, temp[3].w___; 8: MAD temp[3].xy, temp[3].xy__, const[9].ww__, const[10].xx__; 9: TEX temp[4].yw, temp[0].xy__, 2D[2]; 10: MOV temp[4].x, temp[4].w___; 11: MAD temp[4].xy, temp[4].xy__, const[9].ww__, const[10].xx__; 12: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 13: MOV temp[3].z, const[9].__y_; 14: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 15: ADD temp[5].x, const[9].x___, -temp[5].x___; 16: RSQ temp[5].x, |temp[5].x___|; 17: RCP temp[3].z, temp[5].x___; 18: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 19: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 20: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 21: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 22: MUL temp[7].xyz, temp[7].xyz_, const[5].xyz_; 23: MUL temp[8].xyz, temp[1].xyz_, const[6].xyz_; 24: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 25: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 26: ADD temp[5].x, temp[5].x___, temp[5].x___; 27: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 28: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 29: TEX temp[10].xyz, input[4].xy__, 2D[5]; 30: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 31: ADD temp[11].xyz, temp[11].xyz_, -const[9].zzz_; 32: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 33: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 34: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 35: MUL temp[8].xyz, const[7].xxx_, temp[8].xyz_; 36: ADD temp[12].xyz, const[8].xyz_, -temp[8].xyz_; 37: MAD temp[8].xyz, input[1].xxx_, temp[12].xyz_, temp[8].xyz_; 38: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 39: MOV_SAT output[0].w, const[7].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1], input[4].xy__, 2D[0]; 2: ADD temp[1].w, temp[1].___w, -const[1].___w; 3: KIL temp[1].wwww; 4: MOV_SAT temp[2].x, input[2].w___; 5: TEX temp[3].yw, input[2].xy__, 2D[1]; 6: MOV temp[3].x, temp[3].w___; 7: MAD temp[3].xy, temp[3].xy__, const[9].ww__, none.-1-1__; 8: TEX temp[4].yw, temp[0].xy__, 2D[2]; 9: MOV temp[4].x, temp[4].w___; 10: MAD temp[4].xy, temp[4].xy__, const[9].ww__, none.-1-1__; 11: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 12: MOV temp[3].z, none.__0_; 13: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 14: ADD temp[5].x, none.1___, -temp[5].x___; 15: RSQ temp[5].x, |temp[5].x___|; 16: RCP temp[3].z, temp[5].x___; 17: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 18: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 19: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 20: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 21: MUL temp[7].xyz, temp[7].xyz_, const[5].xyz_; 22: MUL temp[8].xyz, temp[1].xyz_, const[6].xyz_; 23: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 24: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 25: ADD temp[5].x, temp[5].x___, temp[5].x___; 26: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 27: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 28: TEX temp[10].xyz, input[4].xy__, 2D[5]; 29: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 30: ADD temp[11].xyz, temp[11].xyz_, -none.HHH_; 31: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 32: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 33: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 34: MUL temp[8].xyz, const[7].xxx_, temp[8].xyz_; 35: MAD temp[8].xyz, input[1].xxx_, (const[8] - temp[8]).xyz_, temp[8].xyz_; 36: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 37: MOV_SAT output[0].w, const[7].___y; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[12].x, const[0].z___; 1: MOV temp[12].y, const[0]._w__; 2: MAD temp[0].xy, input[2].xy__, const[0].xy__, temp[12].xy__; 3: TEX temp[1], input[4].xy__, 2D[0]; 4: ADD temp[1].w, temp[1].___w, -const[1].___w; 5: MOV temp[13], temp[1].wwww; 6: KIL temp[13]; 7: MOV_SAT temp[2].x, input[2].w___; 8: TEX temp[3].yw, input[2].xy__, 2D[1]; 9: MOV temp[3].x, temp[3].w___; 10: MAD temp[3].xy, temp[3].xy__, const[9].ww__, none.-1-1__; 11: TEX temp[4].yw, temp[0].xy__, 2D[2]; 12: MOV temp[4].x, temp[4].w___; 13: MAD temp[4].xy, temp[4].xy__, const[9].ww__, none.-1-1__; 14: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 15: MOV temp[3].z, none.__0_; 16: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 17: ADD temp[5].x, none.1___, -temp[5].x___; 18: RSQ temp[5].x, |temp[5].x___|; 19: RCP temp[3].z, temp[5].x___; 20: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 21: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 22: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 23: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 24: MUL temp[7].xyz, temp[7].xyz_, const[5].xyz_; 25: MUL temp[8].xyz, temp[1].xyz_, const[6].xyz_; 26: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 27: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 28: ADD temp[5].x, temp[5].x___, temp[5].x___; 29: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 30: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 31: TEX temp[10].xyz, input[4].xy__, 2D[5]; 32: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 33: ADD temp[11].xyz, temp[11].xyz_, -none.HHH_; 34: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 35: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 36: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 37: MUL temp[8].xyz, const[7].xxx_, temp[8].xyz_; 38: MAD temp[8].xyz, input[1].xxx_, (const[8] - temp[8]).xyz_, temp[8].xyz_; 39: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[7].___y; CONST[6] = { 1.0000 0.0000 0.5000 2.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[12].x, const[0].z___; 1: MOV temp[12].y, const[0]._w__; 2: MAD temp[0].xy, input[2].xy__, const[0].xy__, temp[12].xy__; 3: TEX temp[1], input[4].xy__, 2D[0]; 4: ADD temp[1].w, temp[1].___w, -const[1].___w; 5: MOV temp[13], temp[1].wwww; 6: KIL temp[13]; 7: MOV_SAT temp[2].x, input[2].w___; 8: TEX temp[3].yw, input[2].xy__, 2D[1]; 9: MOV temp[3].x, temp[3].w___; 10: MAD temp[3].xy, temp[3].xy__, const[6].ww__, none.-1-1__; 11: TEX temp[4].yw, temp[0].xy__, 2D[2]; 12: MOV temp[4].x, temp[4].w___; 13: MAD temp[4].xy, temp[4].xy__, const[6].ww__, none.-1-1__; 14: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 15: MOV temp[3].z, none.__0_; 16: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 17: ADD temp[5].x, none.1___, -temp[5].x___; 18: RSQ temp[5].x, |temp[5].x___|; 19: RCP temp[3].z, temp[5].x___; 20: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 21: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 22: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 23: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 24: MUL temp[7].xyz, temp[7].xyz_, const[2].xyz_; 25: MUL temp[8].xyz, temp[1].xyz_, const[3].xyz_; 26: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 27: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 28: ADD temp[5].x, temp[5].x___, temp[5].x___; 29: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 30: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 31: TEX temp[10].xyz, input[4].xy__, 2D[5]; 32: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 33: ADD temp[11].xyz, temp[11].xyz_, -none.HHH_; 34: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 35: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 36: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 37: MUL temp[8].xyz, const[4].xxx_, temp[8].xyz_; 38: MAD temp[8].xyz, input[1].xxx_, (const[5] - temp[8]).xyz_, temp[8].xyz_; 39: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[4].___y; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[12].x, const[0].z___; 1: MOV temp[12].y, const[0]._w__; 2: MAD temp[14].xy, input[2].xy__, const[0].xy__, temp[12].xy__; 3: TEX temp[15], input[4].xy__, 2D[0]; 4: ADD temp[16].w, temp[15].___w, -const[1].___w; 5: MOV temp[17], temp[16].wwww; 6: KIL temp[17]; 7: MOV_SAT temp[18].x, input[2].w___; 8: TEX temp[3].yw, input[2].xy__, 2D[1]; 9: MOV temp[3].x, temp[3].w___; 10: MAD temp[19].xy, temp[3].xy__, const[6].ww__, none.-1-1__; 11: TEX temp[4].yw, temp[14].xy__, 2D[2]; 12: MOV temp[4].x, temp[4].w___; 13: MAD temp[20].xy, temp[4].xy__, const[6].ww__, none.-1-1__; 14: MAD temp[3].xy, temp[18].xx__, temp[20].xy__, temp[19].xy__; 15: MOV temp[3].z, none.__0_; 16: DP3 temp[21].x, temp[3].xyz_, temp[3].xyz_; 17: ADD temp[22].x, none.1___, -temp[21].x___; 18: RSQ temp[23].x, |temp[22].x___|; 19: RCP temp[3].z, temp[23].x___; 20: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 21: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 22: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 23: TEX temp[24].xyz, temp[6].xyz_, CUBE[3]; 24: MUL temp[25].xyz, temp[24].xyz_, const[2].xyz_; 25: MUL temp[26].xyz, temp[15].xyz_, const[3].xyz_; 26: MUL temp[27].xyz, temp[25].xyz_, temp[26].xyz_; 27: DP3 temp[28].x, input[3].xyz_, temp[6].xyz_; 28: ADD temp[29].x, temp[28].x___, temp[28].x___; 29: MAD temp[30].xyz, -temp[6].xyz_, temp[29].xxx_, input[3].xyz_; 30: TEX temp[31].xyz, temp[30].xyz_, CUBE[4]; 31: TEX temp[32].xyz, input[4].xy__, 2D[5]; 32: TEX temp[33].xyz, temp[14].xy__, 2D[6]; 33: ADD temp[34].xyz, temp[33].xyz_, -none.HHH_; 34: MAD_SAT temp[35].xyz, temp[18].xxx_, temp[34].xyz_, temp[32].xyz_; 35: ADD temp[36].xyz, temp[35].xyz_, temp[35].xyz_; 36: MAD temp[37].xyz, temp[36].xyz_, temp[31].xyz_, temp[27].xyz_; 37: MUL temp[38].xyz, const[4].xxx_, temp[37].xyz_; 38: MAD temp[39].xyz, input[1].xxx_, (const[5] - temp[38]).xyz_, temp[38].xyz_; 39: MUL_SAT output[0].xyz, temp[39].xyz_, input[0].xyz_; 40: MOV_SAT output[0].w, const[4].___y; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[12].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[12].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[12] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[15], input[4].xy__, 2D[0]; 4: src0.w = temp[15], src1.w = const[1] MAD temp[16].w, src0.w, src0.1, -src1.w 5: src0.w = temp[16] MAD temp[17].xyz, src0.www, src0.111, src0.000 MAD temp[17].w, src0.w, src0.1, src0.0 6: KIL temp[17]; 7: src0.w = input[2] MAD_SAT temp[18].x, src0.w__, src0.111, src0.000 8: TEX temp[3].yw, input[2].xy__, 2D[1]; 9: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 10: src0.xyz = temp[3], src0.w = const[6] MAD temp[19].xy, src0.xy_, src0.ww_, -src0.11_ 11: TEX temp[4].yw, temp[14].xy__, 2D[2]; 12: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 13: src0.xyz = temp[4], src0.w = const[6] MAD temp[20].xy, src0.xy_, src0.ww_, -src0.11_ 14: src0.xyz = temp[18], src1.xyz = temp[20], src2.xyz = temp[19] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 15: MAD temp[3].z, src0.__0, src0.111, src0.000 16: src0.xyz = temp[3] DP3 temp[21].x, src0.xyz, src0.xyz 17: src0.xyz = temp[21] MAD temp[22].x, src0.1__, src0.111, -src0.x__ 18: src0.xyz = temp[22] REPL_ALPHA temp[23].x RSQ, |src0.x| 19: src0.xyz = temp[23] REPL_ALPHA temp[3].z RCP, src0.x 20: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 21: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 22: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 23: TEX temp[24].xyz, temp[6].xyz_, CUBE[3]; 24: src0.xyz = temp[24], src1.xyz = const[2] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = temp[15], src1.xyz = const[3] MAD temp[26].xyz, src0.xyz, src1.xyz, src0.000 26: src0.xyz = temp[25], src1.xyz = temp[26] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 27: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[28].x, src0.xyz, src1.xyz 28: src0.xyz = temp[28] MAD temp[29].x, src0.x__, src0.111, src0.x__ 29: src0.xyz = temp[6], src1.xyz = temp[29], src2.xyz = input[3] MAD temp[30].xyz, -src0.xyz, src1.xxx, src2.xyz 30: TEX temp[31].xyz, temp[30].xyz_, CUBE[4]; 31: TEX temp[32].xyz, input[4].xy__, 2D[5]; 32: TEX temp[33].xyz, temp[14].xy__, 2D[6]; 33: src0.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src0.111, -src0.HHH 34: src0.xyz = temp[18], src1.xyz = temp[34], src2.xyz = temp[32] MAD_SAT temp[35].xyz, src0.xxx, src1.xyz, src2.xyz 35: src0.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src0.111, src0.xyz 36: src0.xyz = temp[36], src1.xyz = temp[31], src2.xyz = temp[27] MAD temp[37].xyz, src0.xyz, src1.xyz, src2.xyz 37: src0.xyz = const[4], src1.xyz = temp[37] MAD temp[38].xyz, src0.xxx, src1.xyz, src0.000 38: src0.xyz = temp[38], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[39].xyz, src2.xxx, srcp.xyz, src0.xyz 39: src0.xyz = temp[39], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = const[4] MAD_SAT color[0].w, src0.y, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15], input[4].xy__, 2D[0]; 2: TEX temp[3].yw, input[2].xy__, 2D[1]; 3: TEX temp[32].xyz, input[4].xy__, 2D[5]; 4: src0.w = temp[3], src1.w = temp[15], src2.w = const[1] MAD temp[3].x, src0.w__, src0.111, src0.000 MAD temp[16].w, src1.w, src0.1, -src2.w 5: src0.w = temp[16] MAD temp[17].xyz, src0.www, src0.111, src0.000 MAD temp[17].w, src0.w, src0.1, src0.0 6: src0.xyz = temp[3], src0.w = const[6], src1.xyz = const[4] MAD temp[19].xy, src0.xy_, src0.ww_, -src0.11_ MAD_SAT color[0].w, src1.y, src0.1, src0.0 7: src0.xyz = temp[15], src1.xyz = const[3] MAD temp[26].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[3].z, src0.__0, src0.111, src0.000 9: src0.w = input[2] MAD_SAT temp[18].x, src0.w__, src0.111, src0.000 10: src0.w = const[0] MAD temp[12].y, src0._w_, src0.111, src0.000 11: src0.xyz = const[0] MAD temp[12].x, src0.z__, src0.111, src0.000 12: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[12] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 13: BEGIN_TEX; 14: KIL temp[17]; 15: TEX temp[33].xyz, temp[14].xy__, 2D[6]; 16: TEX temp[4].yw, temp[14].xy__, 2D[2]; 17: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 18: src0.xyz = temp[4], src0.w = const[6] MAD temp[20].xy, src0.xy_, src0.ww_, -src0.11_ 19: src0.xyz = temp[18], src1.xyz = temp[20], src2.xyz = temp[19] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 20: src0.xyz = temp[3] DP3 temp[21].x, src0.xyz, src0.xyz 21: src0.xyz = temp[33], src1.xyz = temp[21] MAD temp[34].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[22].w, src0.1, src0.1, -src1.x 22: src0.xyz = temp[22], src0.w = temp[22] REPL_ALPHA temp[23].x RSQ, |src0.w| 23: src0.xyz = temp[23] REPL_ALPHA temp[3].z RCP, src0.x 24: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 25: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 26: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 27: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[28].x, src0.xyz, src1.xyz 28: src0.xyz = temp[28] MAD temp[29].x, src0.x__, src0.111, src0.x__ 29: src0.xyz = temp[6], src1.xyz = temp[29], src2.xyz = input[3] MAD temp[30].xyz, -src0.xyz, src1.xxx, src2.xyz 30: src0.xyz = temp[18], src1.xyz = temp[34], src2.xyz = temp[32] MAD_SAT temp[35].xyz, src0.xxx, src1.xyz, src2.xyz 31: src0.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src0.111, src0.xyz 32: BEGIN_TEX; 33: TEX temp[24].xyz, temp[6].xyz_, CUBE[3]; 34: TEX temp[31].xyz, temp[30].xyz_, CUBE[4]; 35: src0.xyz = temp[24], src1.xyz = const[2] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[25], src1.xyz = temp[26] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = temp[36], src1.xyz = temp[31], src2.xyz = temp[27] MAD temp[37].xyz, src0.xyz, src1.xyz, src2.xyz 38: src0.xyz = const[4], src1.xyz = temp[37] MAD temp[38].xyz, src0.xxx, src1.xyz, src0.000 39: src0.xyz = temp[38], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[39].xyz, src2.xxx, srcp.xyz, src0.xyz 40: src0.xyz = temp[39], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15], input[4].xy__, 2D[0]; 2: TEX temp[3].yw, input[2].xy__, 2D[1]; 3: TEX temp[32].xyz, input[4].xy__, 2D[5]; 4: src0.w = temp[3], src1.w = temp[15], src2.w = const[1] MAD temp[3].x, src0.w__, src0.111, src0.000 MAD temp[16].w, src1.w, src0.1, -src2.w 5: src0.w = temp[16] MAD temp[17].xyz, src0.www, src0.111, src0.000 MAD temp[17].w, src0.w, src0.1, src0.0 6: src0.xyz = temp[3], src0.w = const[6], src1.xyz = const[4] MAD temp[19].xy, src0.xy_, src0.ww_, -src0.11_ MAD_SAT color[0].w, src1.y, src0.1, src0.0 7: src0.xyz = temp[15], src1.xyz = const[3] MAD temp[26].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[3].z, src0.__0, src0.111, src0.000 9: src0.w = input[2] MAD_SAT temp[18].x, src0.w__, src0.111, src0.000 10: src0.w = const[0] MAD temp[12].y, src0._w_, src0.111, src0.000 11: src0.xyz = const[0] MAD temp[12].x, src0.z__, src0.111, src0.000 12: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[12] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 13: BEGIN_TEX; 14: KIL temp[17]; 15: TEX temp[33].xyz, temp[14].xy__, 2D[6]; 16: TEX temp[4].yw, temp[14].xy__, 2D[2]; 17: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 18: src0.xyz = temp[4], src0.w = const[6] MAD temp[20].xy, src0.xy_, src0.ww_, -src0.11_ 19: src0.xyz = temp[18], src1.xyz = temp[20], src2.xyz = temp[19] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 20: src0.xyz = temp[3] DP3 temp[21].x, src0.xyz, src0.xyz 21: src0.xyz = temp[33], src1.xyz = temp[21] MAD temp[34].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[22].w, src0.1, src0.1, -src1.x 22: src0.w = temp[22] REPL_ALPHA temp[23].x RSQ, |src0.w| 23: src0.xyz = temp[23] REPL_ALPHA temp[3].z RCP, src0.x 24: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 25: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 26: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 27: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[28].x, src0.xyz, src1.xyz 28: src0.xyz = temp[28] MAD temp[29].x, src0.x__, src0.111, src0.x__ 29: src0.xyz = temp[6], src1.xyz = temp[29], src2.xyz = input[3] MAD temp[30].xyz, -src0.xyz, src1.xxx, src2.xyz 30: src0.xyz = temp[18], src1.xyz = temp[34], src2.xyz = temp[32] MAD_SAT temp[35].xyz, src0.xxx, src1.xyz, src2.xyz 31: src0.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src0.111, src0.xyz 32: BEGIN_TEX; 33: TEX temp[24].xyz, temp[6].xyz_, CUBE[3]; 34: TEX temp[31].xyz, temp[30].xyz_, CUBE[4]; 35: src0.xyz = temp[24], src1.xyz = const[2] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[25], src1.xyz = temp[26] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = temp[36], src1.xyz = temp[31], src2.xyz = temp[27] MAD temp[37].xyz, src0.xyz, src1.xyz, src2.xyz 38: src0.xyz = const[4], src1.xyz = temp[37] MAD temp[38].xyz, src0.xxx, src1.xyz, src0.000 39: src0.xyz = temp[38], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[39].xyz, src2.xxx, srcp.xyz, src0.xyz 40: src0.xyz = temp[39], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8], input[4].xy__, 2D[0]; 2: TEX temp[9].yw, input[2].xy__, 2D[1]; 3: TEX temp[4].xyz, input[4].xy__, 2D[5]; 4: src0.w = temp[9], src1.w = temp[8], src2.w = const[1] MAD temp[9].x, src0.w__, src0.11_, src0.00_ MAD temp[0].w, src1.w, src0.1, -src2.w 5: src0.w = temp[0] MAD temp[10].xyz, src0.www, src0.111, src0.000 MAD temp[10].w, src0.w, src0.1, src0.0 6: src0.xyz = temp[9], src0.w = const[6], src1.xyz = const[4] MAD temp[9].xy, src0.xy_, src0.ww_, -src0.11_ MAD_SAT color[0].w, src1.y, src0.1, src0.0 7: src0.xyz = temp[8], src1.xyz = const[3] MAD temp[8].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[11].z, src0.__0, src0.111, src0.000 9: src0.w = input[2] MAD_SAT temp[1].y, src0._w_, src0._1_, src0._0_ 10: src0.w = const[0] MAD temp[12].y, src0._w_, src0.11_, src0.00_ 11: src0.xyz = const[0] MAD temp[12].x, src0.z__, src0.11_, src0.00_ 12: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[12] MAD temp[2].xy, src0.xy_, src1.xy_, src2.xy_ 13: BEGIN_TEX; 14: KIL temp[10]; 15: TEX temp[10].xyz, temp[2].xy__, 2D[6]; 16: TEX temp[2].yw, temp[2].xy__, 2D[2]; 17: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.11_, src0.00_ 18: src0.xyz = temp[2], src0.w = const[6] MAD temp[2].xy, src0.xy_, src0.ww_, -src0.11_ 19: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[9] MAD temp[11].xy, src0.yy_, src1.xy_, src2.xy_ 20: src0.xyz = temp[11] DP3 temp[1].z, src0.xyz, src0.xyz 21: src0.xyz = temp[10], src1.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.1, src0.1, -src1.z 22: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 23: src0.xyz = temp[1] REPL_ALPHA temp[1].z RCP, src0.z 24: src0.xyz = input[5], src1.xyz = temp[11], src2.xyz = temp[1] DP3 temp[5].x, src0.xyz, src2.xyz 25: src0.xyz = input[6], src1.xyz = temp[11], src2.xyz = temp[1] DP3 temp[5].y, src0.xyz, src2.xyz 26: src0.xyz = input[7], src1.xyz = temp[11], src2.xyz = temp[1] DP3 temp[5].z, src0.xyz, src2.xyz 27: src0.xyz = input[3], src1.xyz = temp[5] DP3 temp[1].z, src0.xyz, src1.xyz 28: src0.xyz = temp[1] MAD temp[1].z, src0.__z, src0.__1, src0.__z 29: src0.xyz = temp[5], src1.xyz = temp[1], src2.xyz = input[3] MAD temp[3].xyz, -src0.xyz, src1.zzz, src2.xyz 30: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[4] MAD_SAT temp[2].xyz, src0.yyy, src1.xyz, src2.xyz 31: src0.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, src0.xyz 32: BEGIN_TEX; 33: TEX temp[4].xyz, temp[5].xyz_, CUBE[3]; 34: TEX temp[3].xyz, temp[3].xyz_, CUBE[4]; 35: src0.xyz = temp[4], src1.xyz = const[2] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[4], src1.xyz = temp[8] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = temp[2], src1.xyz = temp[3], src2.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 38: src0.xyz = const[4], src1.xyz = temp[2] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 39: src0.xyz = temp[2], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xxx, srcp.xyz, src0.xyz 40: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 pc=39************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 8, tex_end: 2 (code_addr: 00440200) TEX: TEX t8, t4, texture[0] (00008204) TEX t9, t2, texture[1] (00008a42) TEX t4, t4, texture[5] (0000a904) 0: xyz: t0 t0 t0 bias-> t9.x (00a40000) w: t9 t8 c1 bias-> t0.w (00821209) xyz: t9.www 1.0 0.0 op: 00050a8c w: t8.w 1.0 -c1.w op: 000ac88a 1: xyz: t0 t0 t0 bias-> t10.xyz (03a80000) w: t0 t0 t0 bias-> t10.w (00a80000) xyz: t0.www 1.0 0.0 op: 00050a8c w: t0.w 1.0 0.0 op: 00040889 2: xyz: t9 c4 t0 bias-> t9.xy (01a40909) w: c6 t0 t0 bias-> o0.w (01000026) xyz: t9.xyz c6.www -1.0 op: 000d4600 w: c4.y 1.0 0.0 op: 40040884 3: xyz: t8 c3 t0 bias-> t8.xyz (03a008c8) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz c3.xyz 0.0 op: 00050200 w: t8.x t8.x t8.x op: 00000000 4: xyz: t0 t0 t0 bias-> t11.z (022c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t1.y (01040000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 40050a8c w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 t0 t0 bias-> t12.y (01300000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 7: xyz: c0 t0 t0 bias-> t12.x (00b00020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 8: xyz: t2 c0 t12 bias-> t2.xy (0188c802) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c0.xyz t12.xyz op: 00020200 w: t2.x t2.x t2.x op: 00000000 NODE 1: alu_offset: 9, tex_offset: 3, alu_end: 14, tex_end: 2 (code_addr: 00043389) TEX: KIL t0, t10, texture[0] (0001000a) TEX t10, t2, texture[6] (0000b282) TEX t2, t2, texture[2] (00009082) 9: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 10: xyz: t2 t0 t0 bias-> t2.xy (01880002) w: c6 t0 t0 bias-> (00000026) xyz: t2.xyz c6.www -1.0 op: 000d4600 w: t2.x t2.x t2.x op: 00000000 11: xyz: t1 t2 t9 bias-> t11.xy (01ac9081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz t9.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 12: xyz: t11 t0 t0 bias-> t1.z (0204000b) w: t0 t0 t0 bias-> (00000000) xyz: t11.xyz t11.xyz t11.xxx op: 00804000 w: t11.x t11.x t11.x op: 00000000 13: xyz: t10 t1 t0 bias-> t2.xyz (0388004a) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t10.xyz 1.0 -0.5 op: 000d8a80 w: 1.0 1.0 -t1.z op: 00094891 14: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 15: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 16: xyz: t5 t11 t1 bias-> t5.x (009412c5) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t1.xyz t5.xxx op: 00804400 w: t5.x t5.x t5.x op: 00000000 17: xyz: t6 t11 t1 bias-> t5.y (011412c6) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t1.xyz t6.xxx op: 00804400 w: t6.x t6.x t6.x op: 00000000 18: xyz: t7 t11 t1 bias-> t5.z (021412c7) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t1.xyz t7.xxx op: 00804400 w: t7.x t7.x t7.x op: 00000000 19: xyz: t3 t5 t0 bias-> t1.z (02040143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 20: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 t1.xyz op: 00000a80 w: t1.x t1.x t1.x op: 00000000 21: xyz: t5 t1 t3 bias-> t3.xyz (038c3045) w: t0 t0 t0 bias-> (00000000) xyz: -t5.xyz t1.zzz t3.xyz op: 000203a0 w: t5.x t5.x t5.x op: 00000000 22: xyz: t1 t2 t4 bias-> t2.xyz (03884081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz t4.xyz op: 40020202 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 1.0 t2.xyz op: 00000a80 w: t2.x t2.x t2.x op: 00000000 NODE 2: alu_offset: 24, tex_offset: 6, alu_end: 5, tex_end: 1 (code_addr: 00426158) TEX: TEX t4, t5, texture[3] (00009905) TEX t3, t3, texture[4] (0000a0c3) 24: xyz: t4 c2 t0 bias-> t4.xyz (03900884) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c2.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 25: xyz: t4 t8 t0 bias-> t4.xyz (03900204) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t8.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 26: xyz: t2 t3 t4 bias-> t2.xyz (038840c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t4.xyz op: 00020200 w: t2.x t2.x t2.x op: 00000000 27: xyz: c4 t2 t0 bias-> t2.xyz (038800a4) w: t0 t0 t0 bias-> (00000000) xyz: c4.xxx t2.xyz 0.0 op: 80050201 NOP w: c4.x c4.x c4.x op: 00000000 28: xyz: t2 c5 t1 sub-> t1.xyz (03841942) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t2.xyz op: 00200789 w: t2.x t2.x t2.x op: 00000000 29: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.x t1.x t1.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL TEMP[0..1] 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: TEX TEMP[1], IN[2], SAMP[1], 2D 2: MUL TEMP[0], IN[0], TEMP[0] 3: MUL OUT[0], TEMP[1], TEMP[0] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL output[0], temp[1], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL output[0], temp[1], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL output[0], temp[1], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL output[0], temp[1], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL output[0], temp[1], temp[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT output[0], temp[1], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT output[0], temp[1], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: TEX temp[1], input[2], 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT output[0], temp[1], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT output[0], temp[1], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT output[0], temp[1], temp[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT output[0], temp[1], temp[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT output[0], temp[1], temp[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: TEX temp[1], input[2].xy__, 2D[1]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT output[0], temp[1], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[2], input[1].xy__, 2D[0]; 1: TEX temp[3], input[2].xy__, 2D[1]; 2: MUL temp[4], input[0], temp[2]; 3: MUL_SAT output[0], temp[3], temp[4]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[2], input[1].xy__, 2D[0]; 1: TEX temp[3], input[2].xy__, 2D[1]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[2], src1.w = temp[2] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[4].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[4], src1.w = temp[4] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[1].xy__, 2D[0]; 2: TEX temp[3], input[2].xy__, 2D[1]; 3: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[2], src1.w = temp[2] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[4].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[4], src1.w = temp[4] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[1].xy__, 2D[0]; 2: TEX temp[3], input[2].xy__, 2D[1]; 3: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[2], src1.w = temp[2] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[4].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[4], src1.w = temp[4] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: TEX temp[2], input[2].xy__, 2D[1]; 3: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[1], src1.w = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = temp[0], src1.w = temp[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=40************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 1 (code_addr: 00420040) TEX: TEX t1, t1, texture[0] (00008041) TEX t2, t2, texture[1] (00008882) 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: t2 t0 t0 bias-> o0.xyz (1c000002) w: t2 t0 t0 bias-> o0.w (01000002) xyz: t2.xyz t0.xyz 0.0 op: 40050200 w: t2.w t0.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL IN[1], COLOR, LINEAR DCL IN[2], COLOR[1], LINEAR DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL CONST[9..10] DCL CONST[0] DCL CONST[2..8] DCL TEMP[0..10] IMM FLT32 { 2.0000, 1.0000, 0.0001, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[10].xxxx, CONST[10].yyyy 2: TEX TEMP[1], IN[3], SAMP[0], 2D 3: TEX TEMP[2], IN[3], SAMP[1], 2D 4: LRP TEMP[3], CONST[0], TEMP[2], TEMP[1] 5: MOV TEMP[3].x, TEMP[3].wwww 6: MAD TEMP[3], TEMP[3], IMM[0].xxxx, -IMM[0].yyyy 7: MUL TEMP[3].xy, TEMP[3], CONST[2].zzzz 8: MUL_SAT TEMP[1].w, IN[4].wwww, IMM[0].zzzz 9: SUB TEMP[2], IMM[0].wwww, TEMP[3] 10: MAD TEMP[3], TEMP[3], TEMP[1].wwww, TEMP[2] 11: MOV TEMP[3].z, IMM[0].wwww 12: DP3 TEMP[4].x, TEMP[3], TEMP[3] 13: ADD TEMP[4].x, IMM[0].yyyy, -TEMP[4].xxxx 14: RSQ TEMP[4].x, TEMP[4].xxxx 15: RCP TEMP[3].z, TEMP[4].xxxx 16: DP3 TEMP[2].x, TEMP[3], IN[5] 17: DP3 TEMP[2].y, TEMP[3], IN[6] 18: DP3 TEMP[2].z, TEMP[3], IN[7] 19: MUL TEMP[5], CONST[2], CONST[3] 20: MUL TEMP[5], TEMP[5], IN[1].xxxx 21: MAD TEMP[5], TEMP[5], TEMP[2], TEMP[0] 22: DP3 TEMP[6].w, IN[4], IN[4] 23: RSQ TEMP[6].w, TEMP[6].wwww 24: MUL TEMP[6], IN[4], TEMP[6].wwww 25: DP3 TEMP[3], TEMP[6], TEMP[2] 26: MUL TEMP[3], TEMP[3], IMM[0].xxxx 27: MAD TEMP[7], -TEMP[2], TEMP[3].xxxx, TEMP[6] 28: DP3_SAT TEMP[1], TEMP[7], CONST[4] 29: TEX TEMP[8], TEMP[1], SAMP[2], 2D 30: MUL TEMP[8], TEMP[8], CONST[5] 31: MUL TEMP[8], TEMP[8], CONST[6] 32: MUL TEMP[8], TEMP[8], IN[1].xxxx 33: DP3 TEMP[2], -TEMP[6], TEMP[2] 34: ADD TEMP[2], TEMP[2], IMM[0].yyyy 35: POW TEMP[2], TEMP[2].xxxx, CONST[7].xxxx 36: RCP_SAT TEMP[9], TEMP[2].xxxx 37: MUL TEMP[9], TEMP[9], IN[1].xxxx 38: TEX TEMP[2], TEMP[5], SAMP[3], RECT 39: MUL TEMP[2], TEMP[2], CONST[8] 40: TEX TEMP[3], TEMP[7], SAMP[4], CUBE 41: SUB TEMP[5], TEMP[3], TEMP[2] 42: MAD TEMP[5], TEMP[5], TEMP[9], TEMP[2] 43: ADD TEMP[10], TEMP[5], TEMP[8] 44: ADD OUT[0].w, TEMP[8].xxxx, TEMP[8].yyyy 45: LRP OUT[0].xyz, IN[2].xxxx, CONST[9], TEMP[10] 46: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[11].w, input[0].wwww; 1: MUL temp[11].xyz, input[0], temp[11].wwww; 2: MAD temp[11].xyz, temp[11].xyz0, const[12].xyz0, const[13].xyz0; 3: MOV temp[0], temp[11]; 4: MAD temp[0].y, temp[11], const[10].xxxx, const[10].yyyy; 5: TEX temp[1], input[3], 2D[0]; 6: TEX temp[2], input[3], 2D[1]; 7: LRP temp[3], const[0], temp[2], temp[1]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[11].xxxx, -const[11].yyyy; 10: MUL temp[3].xy, temp[3], const[2].zzzz; 11: MUL_SAT temp[1].w, input[4].wwww, const[11].zzzz; 12: SUB temp[2], const[11].wwww, temp[3]; 13: MAD temp[3], temp[3], temp[1].wwww, temp[2]; 14: MOV temp[3].z, const[11].wwww; 15: DP3 temp[4].x, temp[3], temp[3]; 16: ADD temp[4].x, const[11].yyyy, -temp[4].xxxx; 17: RSQ temp[4].x, temp[4].xxxx; 18: RCP temp[3].z, temp[4].xxxx; 19: DP3 temp[2].x, temp[3], input[5]; 20: DP3 temp[2].y, temp[3], input[6]; 21: DP3 temp[2].z, temp[3], input[7]; 22: MUL temp[5], const[2], const[3]; 23: MUL temp[5], temp[5], input[1].xxxx; 24: MAD temp[5], temp[5], temp[2], temp[0]; 25: DP3 temp[6].w, input[4], input[4]; 26: RSQ temp[6].w, temp[6].wwww; 27: MUL temp[6], input[4], temp[6].wwww; 28: DP3 temp[3], temp[6], temp[2]; 29: MUL temp[3], temp[3], const[11].xxxx; 30: MAD temp[7], -temp[2], temp[3].xxxx, temp[6]; 31: DP3_SAT temp[1], temp[7], const[4]; 32: TEX temp[8], temp[1], 2D[2]; 33: MUL temp[8], temp[8], const[5]; 34: MUL temp[8], temp[8], const[6]; 35: MUL temp[8], temp[8], input[1].xxxx; 36: DP3 temp[2], -temp[6], temp[2]; 37: ADD temp[2], temp[2], const[11].yyyy; 38: POW temp[2], temp[2].xxxx, const[7].xxxx; 39: RCP_SAT temp[9], temp[2].xxxx; 40: MUL temp[9], temp[9], input[1].xxxx; 41: TEX temp[2], temp[5], RECT[3]; 42: MUL temp[2], temp[2], const[8]; 43: TEX temp[3], temp[7], CUBE[4]; 44: SUB temp[5], temp[3], temp[2]; 45: MAD temp[5], temp[5], temp[9], temp[2]; 46: ADD temp[10], temp[5], temp[8]; 47: ADD output[0].w, temp[8].xxxx, temp[8].yyyy; 48: LRP output[0].xyz, input[2].xxxx, const[9], temp[10]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[11].w, input[0].wwww; 1: MUL temp[11].xyz, input[0], temp[11].wwww; 2: MAD temp[11].xyz, temp[11].xyz0, const[12].xyz0, const[13].xyz0; 3: MOV temp[0], temp[11]; 4: MAD temp[0].y, temp[11], const[10].xxxx, const[10].yyyy; 5: TEX temp[1], input[3], 2D[0]; 6: TEX temp[2], input[3], 2D[1]; 7: LRP temp[3], const[0], temp[2], temp[1]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[11].xxxx, -const[11].yyyy; 10: MUL temp[3].xy, temp[3], const[2].zzzz; 11: MUL_SAT temp[1].w, input[4].wwww, const[11].zzzz; 12: SUB temp[2], const[11].wwww, temp[3]; 13: MAD temp[3], temp[3], temp[1].wwww, temp[2]; 14: MOV temp[3].z, const[11].wwww; 15: DP3 temp[4].x, temp[3], temp[3]; 16: ADD temp[4].x, const[11].yyyy, -temp[4].xxxx; 17: RSQ temp[4].x, temp[4].xxxx; 18: RCP temp[3].z, temp[4].xxxx; 19: DP3 temp[2].x, temp[3], input[5]; 20: DP3 temp[2].y, temp[3], input[6]; 21: DP3 temp[2].z, temp[3], input[7]; 22: MUL temp[5], const[2], const[3]; 23: MUL temp[5], temp[5], input[1].xxxx; 24: MAD temp[5], temp[5], temp[2], temp[0]; 25: DP3 temp[6].w, input[4], input[4]; 26: RSQ temp[6].w, temp[6].wwww; 27: MUL temp[6], input[4], temp[6].wwww; 28: DP3 temp[3], temp[6], temp[2]; 29: MUL temp[3], temp[3], const[11].xxxx; 30: MAD temp[7], -temp[2], temp[3].xxxx, temp[6]; 31: DP3_SAT temp[1], temp[7], const[4]; 32: TEX temp[8], temp[1], 2D[2]; 33: MUL temp[8], temp[8], const[5]; 34: MUL temp[8], temp[8], const[6]; 35: MUL temp[8], temp[8], input[1].xxxx; 36: DP3 temp[2], -temp[6], temp[2]; 37: ADD temp[2], temp[2], const[11].yyyy; 38: POW temp[2], temp[2].xxxx, const[7].xxxx; 39: RCP_SAT temp[9], temp[2].xxxx; 40: MUL temp[9], temp[9], input[1].xxxx; 41: TEX temp[2], temp[5], RECT[3]; 42: MUL temp[2], temp[2], const[8]; 43: TEX temp[3], temp[7], CUBE[4]; 44: SUB temp[5], temp[3], temp[2]; 45: MAD temp[5], temp[5], temp[9], temp[2]; 46: ADD temp[10], temp[5], temp[8]; 47: ADD output[0].w, temp[8].xxxx, temp[8].yyyy; 48: LRP output[0].xyz, input[2].xxxx, const[9], temp[10]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[11].w, input[0].wwww; 1: MUL temp[11].xyz, input[0], temp[11].wwww; 2: MAD temp[11].xyz, temp[11].xyz0, const[12].xyz0, const[13].xyz0; 3: MOV temp[0], temp[11]; 4: MAD temp[0].y, temp[11], const[10].xxxx, const[10].yyyy; 5: TEX temp[1], input[3], 2D[0]; 6: TEX temp[2], input[3], 2D[1]; 7: LRP temp[3], const[0], temp[2], temp[1]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[11].xxxx, -const[11].yyyy; 10: MUL temp[3].xy, temp[3], const[2].zzzz; 11: MUL_SAT temp[1].w, input[4].wwww, const[11].zzzz; 12: SUB temp[2], const[11].wwww, temp[3]; 13: MAD temp[3], temp[3], temp[1].wwww, temp[2]; 14: MOV temp[3].z, const[11].wwww; 15: DP3 temp[4].x, temp[3], temp[3]; 16: ADD temp[4].x, const[11].yyyy, -temp[4].xxxx; 17: RSQ temp[4].x, temp[4].xxxx; 18: RCP temp[3].z, temp[4].xxxx; 19: DP3 temp[2].x, temp[3], input[5]; 20: DP3 temp[2].y, temp[3], input[6]; 21: DP3 temp[2].z, temp[3], input[7]; 22: MUL temp[5], const[2], const[3]; 23: MUL temp[5], temp[5], input[1].xxxx; 24: MAD temp[5], temp[5], temp[2], temp[0]; 25: DP3 temp[6].w, input[4], input[4]; 26: RSQ temp[6].w, temp[6].wwww; 27: MUL temp[6], input[4], temp[6].wwww; 28: DP3 temp[3], temp[6], temp[2]; 29: MUL temp[3], temp[3], const[11].xxxx; 30: MAD temp[7], -temp[2], temp[3].xxxx, temp[6]; 31: DP3_SAT temp[1], temp[7], const[4]; 32: TEX temp[8], temp[1], 2D[2]; 33: MUL temp[8], temp[8], const[5]; 34: MUL temp[8], temp[8], const[6]; 35: MUL temp[8], temp[8], input[1].xxxx; 36: DP3 temp[2], -temp[6], temp[2]; 37: ADD temp[2], temp[2], const[11].yyyy; 38: POW temp[2], temp[2].xxxx, const[7].xxxx; 39: RCP_SAT temp[9], temp[2].xxxx; 40: MUL temp[9], temp[9], input[1].xxxx; 41: TEX temp[2], temp[5], RECT[3]; 42: MUL temp[2], temp[2], const[8]; 43: TEX temp[3], temp[7], CUBE[4]; 44: SUB temp[5], temp[3], temp[2]; 45: MAD temp[5], temp[5], temp[9], temp[2]; 46: ADD temp[10], temp[5], temp[8]; 47: ADD output[0].w, temp[8].xxxx, temp[8].yyyy; 48: LRP output[0].xyz, input[2].xxxx, const[9], temp[10]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[11].w, input[0].wwww; 1: MUL temp[11].xyz, input[0], temp[11].wwww; 2: MAD temp[11].xyz, temp[11].xyz0, const[12].xyz0, const[13].xyz0; 3: MOV temp[0], temp[11]; 4: MAD temp[0].y, temp[11], const[10].xxxx, const[10].yyyy; 5: TEX temp[1], input[3], 2D[0]; 6: TEX temp[2], input[3], 2D[1]; 7: LRP temp[3], const[0], temp[2], temp[1]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[11].xxxx, -const[11].yyyy; 10: MUL temp[3].xy, temp[3], const[2].zzzz; 11: MUL_SAT temp[1].w, input[4].wwww, const[11].zzzz; 12: SUB temp[2], const[11].wwww, temp[3]; 13: MAD temp[3], temp[3], temp[1].wwww, temp[2]; 14: MOV temp[3].z, const[11].wwww; 15: DP3 temp[4].x, temp[3], temp[3]; 16: ADD temp[4].x, const[11].yyyy, -temp[4].xxxx; 17: RSQ temp[4].x, temp[4].xxxx; 18: RCP temp[3].z, temp[4].xxxx; 19: DP3 temp[2].x, temp[3], input[5]; 20: DP3 temp[2].y, temp[3], input[6]; 21: DP3 temp[2].z, temp[3], input[7]; 22: MUL temp[5], const[2], const[3]; 23: MUL temp[5], temp[5], input[1].xxxx; 24: MAD temp[5], temp[5], temp[2], temp[0]; 25: DP3 temp[6].w, input[4], input[4]; 26: RSQ temp[6].w, temp[6].wwww; 27: MUL temp[6], input[4], temp[6].wwww; 28: DP3 temp[3], temp[6], temp[2]; 29: MUL temp[3], temp[3], const[11].xxxx; 30: MAD temp[7], -temp[2], temp[3].xxxx, temp[6]; 31: DP3_SAT temp[1], temp[7], const[4]; 32: TEX temp[8], temp[1], 2D[2]; 33: MUL temp[8], temp[8], const[5]; 34: MUL temp[8], temp[8], const[6]; 35: MUL temp[8], temp[8], input[1].xxxx; 36: DP3 temp[2], -temp[6], temp[2]; 37: ADD temp[2], temp[2], const[11].yyyy; 38: POW temp[2], temp[2].xxxx, const[7].xxxx; 39: RCP_SAT temp[9], temp[2].xxxx; 40: MUL temp[9], temp[9], input[1].xxxx; 41: TEX temp[2], temp[5], RECT[3]; 42: MUL temp[2], temp[2], const[8]; 43: TEX temp[3], temp[7], CUBE[4]; 44: SUB temp[5], temp[3], temp[2]; 45: MAD temp[5], temp[5], temp[9], temp[2]; 46: ADD temp[10], temp[5], temp[8]; 47: ADD output[0].w, temp[8].xxxx, temp[8].yyyy; 48: LRP output[0].xyz, input[2].xxxx, const[9], temp[10]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[11].w, input[0].wwww; 1: MUL temp[11].xyz, input[0], temp[11].wwww; 2: MAD temp[11].xyz, temp[11].xyz0, const[12].xyz0, const[13].xyz0; 3: MOV temp[0], temp[11]; 4: MAD temp[0].y, temp[11], const[10].xxxx, const[10].yyyy; 5: TEX temp[1], input[3], 2D[0]; 6: TEX temp[2], input[3], 2D[1]; 7: LRP temp[3], const[0], temp[2], temp[1]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[11].xxxx, -const[11].yyyy; 10: MUL temp[3].xy, temp[3], const[2].zzzz; 11: MUL_SAT temp[1].w, input[4].wwww, const[11].zzzz; 12: SUB temp[2], const[11].wwww, temp[3]; 13: MAD temp[3], temp[3], temp[1].wwww, temp[2]; 14: MOV temp[3].z, const[11].wwww; 15: DP3 temp[4].x, temp[3], temp[3]; 16: ADD temp[4].x, const[11].yyyy, -temp[4].xxxx; 17: RSQ temp[4].x, temp[4].xxxx; 18: RCP temp[3].z, temp[4].xxxx; 19: DP3 temp[2].x, temp[3], input[5]; 20: DP3 temp[2].y, temp[3], input[6]; 21: DP3 temp[2].z, temp[3], input[7]; 22: MUL temp[5], const[2], const[3]; 23: MUL temp[5], temp[5], input[1].xxxx; 24: MAD temp[5], temp[5], temp[2], temp[0]; 25: DP3 temp[6].w, input[4], input[4]; 26: RSQ temp[6].w, temp[6].wwww; 27: MUL temp[6], input[4], temp[6].wwww; 28: DP3 temp[3], temp[6], temp[2]; 29: MUL temp[3], temp[3], const[11].xxxx; 30: MAD temp[7], -temp[2], temp[3].xxxx, temp[6]; 31: DP3_SAT temp[1], temp[7], const[4]; 32: TEX temp[8], temp[1], 2D[2]; 33: MUL temp[8], temp[8], const[5]; 34: MUL temp[8], temp[8], const[6]; 35: MUL temp[8], temp[8], input[1].xxxx; 36: DP3 temp[2], -temp[6], temp[2]; 37: ADD temp[2], temp[2], const[11].yyyy; 38: POW temp[2], temp[2].xxxx, const[7].xxxx; 39: RCP_SAT temp[9], temp[2].xxxx; 40: MUL temp[9], temp[9], input[1].xxxx; 41: TEX temp[2], temp[5], RECT[3]; 42: MUL temp[2], temp[2], const[8]; 43: TEX temp[3], temp[7], CUBE[4]; 44: SUB temp[5], temp[3], temp[2]; 45: MAD temp[5], temp[5], temp[9], temp[2]; 46: ADD temp[10], temp[5], temp[8]; 47: ADD output[0].w, temp[8].xxxx, temp[8].yyyy; 48: LRP output[0].xyz, input[2].xxxx, const[9], temp[10]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: RCP temp[11].w, input[0].wwww; 1: MUL temp[11].xyz, input[0], temp[11].wwww; 2: MAD temp[11].xyz, temp[11].xyz0, const[12].xyz0, const[13].xyz0; 3: MOV temp[0], temp[11]; 4: MAD temp[0].y, temp[11], const[10].xxxx, const[10].yyyy; 5: TEX temp[1], input[3], 2D[0]; 6: TEX temp[2], input[3], 2D[1]; 7: LRP temp[3], const[0], temp[2], temp[1]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[11].xxxx, -const[11].yyyy; 10: MUL temp[3].xy, temp[3], const[2].zzzz; 11: MUL_SAT temp[1].w, input[4].wwww, const[11].zzzz; 12: SUB temp[2], const[11].wwww, temp[3]; 13: MAD temp[3], temp[3], temp[1].wwww, temp[2]; 14: MOV temp[3].z, const[11].wwww; 15: DP3 temp[4].x, temp[3], temp[3]; 16: ADD temp[4].x, const[11].yyyy, -temp[4].xxxx; 17: RSQ temp[4].x, temp[4].xxxx; 18: RCP temp[3].z, temp[4].xxxx; 19: DP3 temp[2].x, temp[3], input[5]; 20: DP3 temp[2].y, temp[3], input[6]; 21: DP3 temp[2].z, temp[3], input[7]; 22: MUL temp[5], const[2], const[3]; 23: MUL temp[5], temp[5], input[1].xxxx; 24: MAD temp[5], temp[5], temp[2], temp[0]; 25: DP3 temp[6].w, input[4], input[4]; 26: RSQ temp[6].w, temp[6].wwww; 27: MUL temp[6], input[4], temp[6].wwww; 28: DP3 temp[3], temp[6], temp[2]; 29: MUL temp[3], temp[3], const[11].xxxx; 30: MAD temp[7], -temp[2], temp[3].xxxx, temp[6]; 31: DP3_SAT temp[1], temp[7], const[4]; 32: TEX temp[8], temp[1], 2D[2]; 33: MUL temp[8], temp[8], const[5]; 34: MUL temp[8], temp[8], const[6]; 35: MUL temp[8], temp[8], input[1].xxxx; 36: DP3 temp[2], -temp[6], temp[2]; 37: ADD temp[2], temp[2], const[11].yyyy; 38: POW temp[2], temp[2].xxxx, const[7].xxxx; 39: RCP_SAT temp[9], temp[2].xxxx; 40: MUL temp[9], temp[9], input[1].xxxx; 41: TEX temp[2], temp[5], RECT[3]; 42: MUL temp[2], temp[2], const[8]; 43: TEX temp[3], temp[7], CUBE[4]; 44: SUB temp[5], temp[3], temp[2]; 45: MAD temp[5], temp[5], temp[9], temp[2]; 46: ADD temp[10], temp[5], temp[8]; 47: ADD_SAT output[0].w, temp[8].xxxx, temp[8].yyyy; 48: LRP_SAT output[0].xyz, input[2].xxxx, const[9], temp[10]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[11].w, input[0].wwww; 1: MUL temp[11].xyz, input[0], temp[11].wwww; 2: MAD temp[11].xyz, temp[11].xyz0, const[12].xyz0, const[13].xyz0; 3: MOV temp[0], temp[11]; 4: MAD temp[0].y, temp[11], const[10].xxxx, const[10].yyyy; 5: TEX temp[1], input[3], 2D[0]; 6: TEX temp[2], input[3], 2D[1]; 7: LRP temp[3], const[0], temp[2], temp[1]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[11].xxxx, -const[11].yyyy; 10: MUL temp[3].xy, temp[3], const[2].zzzz; 11: MUL_SAT temp[1].w, input[4].wwww, const[11].zzzz; 12: SUB temp[2], const[11].wwww, temp[3]; 13: MAD temp[3], temp[3], temp[1].wwww, temp[2]; 14: MOV temp[3].z, const[11].wwww; 15: DP3 temp[4].x, temp[3], temp[3]; 16: ADD temp[4].x, const[11].yyyy, -temp[4].xxxx; 17: RSQ temp[4].x, temp[4].xxxx; 18: RCP temp[3].z, temp[4].xxxx; 19: DP3 temp[2].x, temp[3], input[5]; 20: DP3 temp[2].y, temp[3], input[6]; 21: DP3 temp[2].z, temp[3], input[7]; 22: MUL temp[5], const[2], const[3]; 23: MUL temp[5], temp[5], input[1].xxxx; 24: MAD temp[5], temp[5], temp[2], temp[0]; 25: DP3 temp[6].w, input[4], input[4]; 26: RSQ temp[6].w, temp[6].wwww; 27: MUL temp[6], input[4], temp[6].wwww; 28: DP3 temp[3], temp[6], temp[2]; 29: MUL temp[3], temp[3], const[11].xxxx; 30: MAD temp[7], -temp[2], temp[3].xxxx, temp[6]; 31: DP3_SAT temp[1], temp[7], const[4]; 32: TEX temp[8], temp[1], 2D[2]; 33: MUL temp[8], temp[8], const[5]; 34: MUL temp[8], temp[8], const[6]; 35: MUL temp[8], temp[8], input[1].xxxx; 36: DP3 temp[2], -temp[6], temp[2]; 37: ADD temp[2], temp[2], const[11].yyyy; 38: POW temp[2], temp[2].xxxx, const[7].xxxx; 39: RCP_SAT temp[9], temp[2].xxxx; 40: MUL temp[9], temp[9], input[1].xxxx; 41: MUL temp[12], temp[5], const[14]; 42: TEX temp[2], temp[12], 2D[3]; 43: MUL temp[2], temp[2], const[8]; 44: TEX temp[3], temp[7], CUBE[4]; 45: SUB temp[5], temp[3], temp[2]; 46: MAD temp[5], temp[5], temp[9], temp[2]; 47: ADD temp[10], temp[5], temp[8]; 48: ADD_SAT output[0].w, temp[8].xxxx, temp[8].yyyy; 49: LRP_SAT output[0].xyz, input[2].xxxx, const[9], temp[10]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[11].w, input[0].wwww; 1: MUL temp[11].xyz, input[0], temp[11].wwww; 2: MAD temp[11].xyz, temp[11].xyz0, const[12].xyz0, const[13].xyz0; 3: MOV temp[0], temp[11]; 4: MAD temp[0].y, temp[11], const[10].xxxx, const[10].yyyy; 5: TEX temp[1], input[3], 2D[0]; 6: TEX temp[2], input[3], 2D[1]; 7: ADD temp[3], temp[2], -temp[1]; 8: MAD temp[3], const[0], temp[3], temp[1]; 9: MOV temp[3].x, temp[3].wwww; 10: MAD temp[3], temp[3], const[11].xxxx, -const[11].yyyy; 11: MUL temp[3].xy, temp[3], const[2].zzzz; 12: MUL_SAT temp[1].w, input[4].wwww, const[11].zzzz; 13: ADD temp[2], const[11].wwww, -temp[3]; 14: MAD temp[3], temp[3], temp[1].wwww, temp[2]; 15: MOV temp[3].z, const[11].wwww; 16: DP3 temp[4].x, temp[3], temp[3]; 17: ADD temp[4].x, const[11].yyyy, -temp[4].xxxx; 18: RSQ temp[4].x, |temp[4].xxxx|; 19: RCP temp[3].z, temp[4].xxxx; 20: DP3 temp[2].x, temp[3], input[5]; 21: DP3 temp[2].y, temp[3], input[6]; 22: DP3 temp[2].z, temp[3], input[7]; 23: MUL temp[5], const[2], const[3]; 24: MUL temp[5], temp[5], input[1].xxxx; 25: MAD temp[5], temp[5], temp[2], temp[0]; 26: DP3 temp[6].w, input[4], input[4]; 27: RSQ temp[6].w, |temp[6].wwww|; 28: MUL temp[6], input[4], temp[6].wwww; 29: DP3 temp[3], temp[6], temp[2]; 30: MUL temp[3], temp[3], const[11].xxxx; 31: MAD temp[7], -temp[2], temp[3].xxxx, temp[6]; 32: DP3_SAT temp[1], temp[7], const[4]; 33: TEX temp[8], temp[1], 2D[2]; 34: MUL temp[8], temp[8], const[5]; 35: MUL temp[8], temp[8], const[6]; 36: MUL temp[8], temp[8], input[1].xxxx; 37: DP3 temp[2], -temp[6], temp[2]; 38: ADD temp[2], temp[2], const[11].yyyy; 39: LG2 temp[13].w, temp[2].xxxx; 40: MUL temp[13].w, temp[13].wwww, const[7].xxxx; 41: EX2 temp[2], temp[13].wwww; 42: RCP_SAT temp[9], temp[2].xxxx; 43: MUL temp[9], temp[9], input[1].xxxx; 44: MUL temp[12], temp[5], const[14]; 45: TEX temp[2], temp[12], 2D[3]; 46: MUL temp[2], temp[2], const[8]; 47: TEX temp[3], temp[7], CUBE[4]; 48: ADD temp[5], temp[3], -temp[2]; 49: MAD temp[5], temp[5], temp[9], temp[2]; 50: ADD temp[10], temp[5], temp[8]; 51: ADD_SAT output[0].w, temp[8].xxxx, temp[8].yyyy; 52: ADD temp[14].xyz, const[9], -temp[10]; 53: MAD_SAT output[0].xyz, input[2].xxxx, temp[14], temp[10]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[11].w, input[0].w___; 1: MUL temp[11].xy, input[0].xy__, temp[11].ww__; 2: MAD temp[11].xy, temp[11].xy__, const[12].xy__, const[13].xy__; 3: MOV temp[0].x, temp[11].x___; 4: MAD temp[0].y, temp[11]._y__, const[10]._x__, const[10]._y__; 5: TEX temp[1].yw, input[3].xy__, 2D[0]; 6: TEX temp[2].yw, input[3].xy__, 2D[1]; 7: ADD temp[3].yw, temp[2]._y_w, -temp[1]._y_w; 8: MAD temp[3].yw, const[0]._y_w, temp[3]._y_w, temp[1]._y_w; 9: MOV temp[3].x, temp[3].w___; 10: MAD temp[3].xy, temp[3].xy__, const[11].xx__, -const[11].yy__; 11: MUL temp[3].xy, temp[3].xy__, const[2].zz__; 12: MUL_SAT temp[1].w, input[4].___w, const[11].___z; 13: ADD temp[2].xy, const[11].ww__, -temp[3].xy__; 14: MAD temp[3].xy, temp[3].xy__, temp[1].ww__, temp[2].xy__; 15: MOV temp[3].z, const[11].__w_; 16: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 17: ADD temp[4].x, const[11].y___, -temp[4].x___; 18: RSQ temp[4].x, |temp[4].x___|; 19: RCP temp[3].z, temp[4].x___; 20: DP3 temp[2].x, temp[3].xyz_, input[5].xyz_; 21: DP3 temp[2].y, temp[3].xyz_, input[6].xyz_; 22: DP3 temp[2].z, temp[3].xyz_, input[7].xyz_; 23: MUL temp[5].xy, const[2].xy__, const[3].xy__; 24: MUL temp[5].xy, temp[5].xy__, input[1].xx__; 25: MAD temp[5].xy, temp[5].xy__, temp[2].xy__, temp[0].xy__; 26: DP3 temp[6].w, input[4].xyz_, input[4].xyz_; 27: RSQ temp[6].w, |temp[6].w___|; 28: MUL temp[6].xyz, input[4].xyz_, temp[6].www_; 29: DP3 temp[3].x, temp[6].xyz_, temp[2].xyz_; 30: MUL temp[3].x, temp[3].x___, const[11].x___; 31: MAD temp[7].xyz, -temp[2].xyz_, temp[3].xxx_, temp[6].xyz_; 32: DP3_SAT temp[1].xy, temp[7].xyz_, const[4].xyz_; 33: TEX temp[8].xyz, temp[1].xy__, 2D[2]; 34: MUL temp[8].xyz, temp[8].xyz_, const[5].xyz_; 35: MUL temp[8].xyz, temp[8].xyz_, const[6].xyz_; 36: MUL temp[8].xyz, temp[8].xyz_, input[1].xxx_; 37: DP3 temp[2].x, -temp[6].xyz_, temp[2].xyz_; 38: ADD temp[2].x, temp[2].x___, const[11].y___; 39: LG2 temp[13].w, temp[2].x___; 40: MUL temp[13].w, temp[13].___w, const[7].___x; 41: EX2 temp[2].x, temp[13].w___; 42: RCP_SAT temp[9].xyz, temp[2].x___; 43: MUL temp[9].xyz, temp[9].xyz_, input[1].xxx_; 44: MUL temp[12].xy, temp[5].xy__, const[14].xy__; 45: TEX temp[2].xyz, temp[12].xy__, 2D[3]; 46: MUL temp[2].xyz, temp[2].xyz_, const[8].xyz_; 47: TEX temp[3].xyz, temp[7].xyz_, CUBE[4]; 48: ADD temp[5].xyz, temp[3].xyz_, -temp[2].xyz_; 49: MAD temp[5].xyz, temp[5].xyz_, temp[9].xyz_, temp[2].xyz_; 50: ADD temp[10].xyz, temp[5].xyz_, temp[8].xyz_; 51: ADD_SAT output[0].w, temp[8].___x, temp[8].___y; 52: ADD temp[14].xyz, const[9].xyz_, -temp[10].xyz_; 53: MAD_SAT output[0].xyz, input[2].xxx_, temp[14].xyz_, temp[10].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[11].w, input[0].w___; 1: MUL temp[11].xy, input[0].xy__, temp[11].ww__; 2: MAD temp[11].xy, temp[11].xy__, const[12].xy__, const[13].xy__; 3: MOV temp[0].x, temp[11].x___; 4: MAD temp[0].y, temp[11]._y__, const[10]._x__, const[10]._y__; 5: TEX temp[1].yw, input[3].xy__, 2D[0]; 6: TEX temp[2].yw, input[3].xy__, 2D[1]; 7: ADD temp[3].yw, temp[2]._y_w, -temp[1]._y_w; 8: MAD temp[3].yw, const[0]._y_w, temp[3]._y_w, temp[1]._y_w; 9: MOV temp[3].x, temp[3].w___; 10: MAD temp[3].xy, temp[3].xy__, const[11].xx__, -const[11].yy__; 11: MUL temp[3].xy, temp[3].xy__, const[2].zz__; 12: MUL_SAT temp[1].w, input[4].___w, const[11].___z; 13: ADD temp[2].xy, const[11].ww__, -temp[3].xy__; 14: MAD temp[3].xy, temp[3].xy__, temp[1].ww__, temp[2].xy__; 15: MOV temp[3].z, const[11].__w_; 16: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 17: ADD temp[4].x, const[11].y___, -temp[4].x___; 18: RSQ temp[4].x, |temp[4].x___|; 19: RCP temp[3].z, temp[4].x___; 20: DP3 temp[2].x, temp[3].xyz_, input[5].xyz_; 21: DP3 temp[2].y, temp[3].xyz_, input[6].xyz_; 22: DP3 temp[2].z, temp[3].xyz_, input[7].xyz_; 23: MUL temp[5].xy, const[2].xy__, const[3].xy__; 24: MUL temp[5].xy, temp[5].xy__, input[1].xx__; 25: MAD temp[5].xy, temp[5].xy__, temp[2].xy__, temp[0].xy__; 26: DP3 temp[6].w, input[4].xyz_, input[4].xyz_; 27: RSQ temp[6].w, |temp[6].w___|; 28: MUL temp[6].xyz, input[4].xyz_, temp[6].www_; 29: DP3 temp[3].x, temp[6].xyz_, temp[2].xyz_; 30: MUL temp[3].x, temp[3].x___, const[11].x___; 31: MAD temp[7].xyz, -temp[2].xyz_, temp[3].xxx_, temp[6].xyz_; 32: DP3_SAT temp[1].xy, temp[7].xyz_, const[4].xyz_; 33: TEX temp[8].xyz, temp[1].xy__, 2D[2]; 34: MUL temp[8].xyz, temp[8].xyz_, const[5].xyz_; 35: MUL temp[8].xyz, temp[8].xyz_, const[6].xyz_; 36: MUL temp[8].xyz, temp[8].xyz_, input[1].xxx_; 37: DP3 temp[2].x, -temp[6].xyz_, temp[2].xyz_; 38: ADD temp[2].x, temp[2].x___, const[11].y___; 39: LG2 temp[13].w, temp[2].x___; 40: MUL temp[13].w, temp[13].___w, const[7].___x; 41: EX2 temp[2].x, temp[13].w___; 42: RCP_SAT temp[9].xyz, temp[2].x___; 43: MUL temp[9].xyz, temp[9].xyz_, input[1].xxx_; 44: MUL temp[12].xy, temp[5].xy__, const[14].xy__; 45: TEX temp[2].xyz, temp[12].xy__, 2D[3]; 46: MUL temp[2].xyz, temp[2].xyz_, const[8].xyz_; 47: TEX temp[3].xyz, temp[7].xyz_, CUBE[4]; 48: ADD temp[5].xyz, temp[3].xyz_, -temp[2].xyz_; 49: MAD temp[5].xyz, temp[5].xyz_, temp[9].xyz_, temp[2].xyz_; 50: ADD temp[10].xyz, temp[5].xyz_, temp[8].xyz_; 51: ADD_SAT output[0].w, temp[8].___x, temp[8].___y; 52: ADD temp[14].xyz, const[9].xyz_, -temp[10].xyz_; 53: MAD_SAT output[0].xyz, input[2].xxx_, temp[14].xyz_, temp[10].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[11].w, input[0].w___; 1: MUL temp[11].xy, input[0].xy__, temp[11].ww__; 2: MAD temp[11].xy, temp[11].xy__, const[12].xy__, const[13].xy__; 3: MOV temp[0].x, temp[11].x___; 4: MAD temp[0].y, temp[11]._y__, const[10]._x__, const[10]._y__; 5: TEX temp[1].yw, input[3].xy__, 2D[0]; 6: TEX temp[2].yw, input[3].xy__, 2D[1]; 7: MAD temp[3].yw, const[0]._y_w, (temp[2] - temp[1])._y_w, temp[1]._y_w; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[11].xx__, -none.11__; 10: MUL temp[3].xy, temp[3].xy__, const[2].zz__; 11: MUL_SAT temp[1].w, input[4].___w, const[11].___z; 12: MAD temp[3].xy, temp[3].xy__, temp[1].ww__, temp[3].-x-y__; 13: MOV temp[3].z, none.__0_; 14: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 15: ADD temp[4].x, none.1___, -temp[4].x___; 16: RSQ temp[4].x, |temp[4].x___|; 17: RCP temp[3].z, temp[4].x___; 18: DP3 temp[2].x, temp[3].xyz_, input[5].xyz_; 19: DP3 temp[2].y, temp[3].xyz_, input[6].xyz_; 20: DP3 temp[2].z, temp[3].xyz_, input[7].xyz_; 21: MUL temp[5].xy, const[2].xy__, const[3].xy__; 22: MUL temp[5].xy, temp[5].xy__, input[1].xx__; 23: MAD temp[5].xy, temp[5].xy__, temp[2].xy__, temp[0].xy__; 24: DP3 temp[6].w, input[4].xyz_, input[4].xyz_; 25: RSQ temp[6].w, |temp[6].w___|; 26: MUL temp[6].xyz, input[4].xyz_, temp[6].www_; 27: DP3 temp[3].x, temp[6].xyz_, temp[2].xyz_; 28: MUL temp[3].x, temp[3].x___, const[11].x___; 29: MAD temp[7].xyz, -temp[2].xyz_, temp[3].xxx_, temp[6].xyz_; 30: DP3_SAT temp[1].xy, temp[7].xyz_, const[4].xyz_; 31: TEX temp[8].xyz, temp[1].xy__, 2D[2]; 32: MUL temp[8].xyz, temp[8].xyz_, const[5].xyz_; 33: MUL temp[8].xyz, temp[8].xyz_, const[6].xyz_; 34: MUL temp[8].xyz, temp[8].xyz_, input[1].xxx_; 35: DP3 temp[2].x, -temp[6].xyz_, temp[2].xyz_; 36: ADD temp[2].x, temp[2].x___, none.1___; 37: LG2 temp[13].w, temp[2].x___; 38: MUL temp[13].w, temp[13].___w, const[7].___x; 39: EX2 temp[2].x, temp[13].w___; 40: RCP_SAT temp[9].xyz, temp[2].x___; 41: MUL temp[9].xyz, temp[9].xyz_, input[1].xxx_; 42: MUL temp[12].xy, temp[5].xy__, const[14].xy__; 43: TEX temp[2].xyz, temp[12].xy__, 2D[3]; 44: MUL temp[2].xyz, temp[2].xyz_, const[8].xyz_; 45: TEX temp[3].xyz, temp[7].xyz_, CUBE[4]; 46: MAD temp[5].xyz, (temp[3] - temp[2]).xyz_, temp[9].xyz_, temp[2].xyz_; 47: ADD temp[10].xyz, temp[5].xyz_, temp[8].xyz_; 48: ADD_SAT output[0].w, temp[8].___x, temp[8].___y; 49: MAD_SAT output[0].xyz, input[2].xxx_, (const[9] - temp[10]).xyz_, temp[10].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[11].w, input[0].w___; 1: MUL temp[11].xy, input[0].xy__, temp[11].ww__; 2: MAD temp[11].xy, temp[11].xy__, const[12].xy__, const[13].xy__; 3: MOV temp[0].x, temp[11].x___; 4: MAD temp[0].y, temp[11]._y__, const[10]._x__, const[10]._y__; 5: TEX temp[1].yw, input[3].xy__, 2D[0]; 6: TEX temp[2].yw, input[3].xy__, 2D[1]; 7: MAD temp[3].yw, const[0]._y_w, (temp[2] - temp[1])._y_w, temp[1]._y_w; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[11].xx__, -none.11__; 10: MUL temp[3].xy, temp[3].xy__, const[2].zz__; 11: MUL_SAT temp[1].w, input[4].___w, const[11].___z; 12: MAD temp[3].xy, temp[3].xy__, temp[1].ww__, temp[3].-x-y__; 13: MOV temp[3].z, none.__0_; 14: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 15: ADD temp[4].x, none.1___, -temp[4].x___; 16: RSQ temp[4].x, |temp[4].x___|; 17: RCP temp[3].z, temp[4].x___; 18: DP3 temp[2].x, temp[3].xyz_, input[5].xyz_; 19: DP3 temp[2].y, temp[3].xyz_, input[6].xyz_; 20: DP3 temp[2].z, temp[3].xyz_, input[7].xyz_; 21: MUL temp[5].xy, const[2].xy__, const[3].xy__; 22: MUL temp[5].xy, temp[5].xy__, input[1].xx__; 23: MAD temp[5].xy, temp[5].xy__, temp[2].xy__, temp[0].xy__; 24: DP3 temp[6].w, input[4].xyz_, input[4].xyz_; 25: RSQ temp[6].w, |temp[6].w___|; 26: MUL temp[6].xyz, input[4].xyz_, temp[6].www_; 27: DP3 temp[3].x, temp[6].xyz_, temp[2].xyz_; 28: MUL temp[3].x, temp[3].x___, const[11].x___; 29: MAD temp[7].xyz, -temp[2].xyz_, temp[3].xxx_, temp[6].xyz_; 30: DP3_SAT temp[1].xy, temp[7].xyz_, const[4].xyz_; 31: TEX temp[8].xyz, temp[1].xy__, 2D[2]; 32: MUL temp[8].xyz, temp[8].xyz_, const[5].xyz_; 33: MUL temp[8].xyz, temp[8].xyz_, const[6].xyz_; 34: MUL temp[8].xyz, temp[8].xyz_, input[1].xxx_; 35: DP3 temp[2].x, -temp[6].xyz_, temp[2].xyz_; 36: ADD temp[2].x, temp[2].x___, none.1___; 37: LG2 temp[13].w, temp[2].x___; 38: MUL temp[13].w, temp[13].___w, const[7].___x; 39: EX2 temp[2].x, temp[13].w___; 40: RCP_SAT temp[9].xyz, temp[2].x___; 41: MUL temp[9].xyz, temp[9].xyz_, input[1].xxx_; 42: MUL temp[12].xy, temp[5].xy__, const[14].xy__; 43: TEX temp[2].xyz, temp[12].xy__, 2D[3]; 44: MUL temp[2].xyz, temp[2].xyz_, const[8].xyz_; 45: TEX temp[3].xyz, temp[7].xyz_, CUBE[4]; 46: MAD temp[5].xyz, (temp[3] - temp[2]).xyz_, temp[9].xyz_, temp[2].xyz_; 47: ADD temp[10].xyz, temp[5].xyz_, temp[8].xyz_; 48: ADD_SAT output[0].w, temp[8].___x, temp[8].___y; 49: MAD_SAT output[0].xyz, input[2].xxx_, (const[9] - temp[10]).xyz_, temp[10].xyz_; CONST[10] = { 2.0000 1.0000 0.0001 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[11].w, input[0].w___; 1: MUL temp[11].xy, input[0].xy__, temp[11].ww__; 2: MAD temp[11].xy, temp[11].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[0].x, temp[11].x___; 4: MAD temp[0].y, temp[11]._y__, const[9]._x__, const[9]._y__; 5: TEX temp[1].yw, input[3].xy__, 2D[0]; 6: TEX temp[2].yw, input[3].xy__, 2D[1]; 7: MAD temp[3].yw, const[0]._y_w, (temp[2] - temp[1])._y_w, temp[1]._y_w; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[10].xx__, -none.11__; 10: MUL temp[3].xy, temp[3].xy__, const[1].zz__; 11: MUL_SAT temp[1].w, input[4].___w, const[10].___z; 12: MAD temp[3].xy, temp[3].xy__, temp[1].ww__, temp[3].-x-y__; 13: MOV temp[3].z, none.__0_; 14: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 15: ADD temp[4].x, none.1___, -temp[4].x___; 16: RSQ temp[4].x, |temp[4].x___|; 17: RCP temp[3].z, temp[4].x___; 18: DP3 temp[2].x, temp[3].xyz_, input[5].xyz_; 19: DP3 temp[2].y, temp[3].xyz_, input[6].xyz_; 20: DP3 temp[2].z, temp[3].xyz_, input[7].xyz_; 21: MUL temp[5].xy, const[1].xy__, const[2].xy__; 22: MUL temp[5].xy, temp[5].xy__, input[1].xx__; 23: MAD temp[5].xy, temp[5].xy__, temp[2].xy__, temp[0].xy__; 24: DP3 temp[6].w, input[4].xyz_, input[4].xyz_; 25: RSQ temp[6].w, |temp[6].w___|; 26: MUL temp[6].xyz, input[4].xyz_, temp[6].www_; 27: DP3 temp[3].x, temp[6].xyz_, temp[2].xyz_; 28: MUL temp[3].x, temp[3].x___, const[10].x___; 29: MAD temp[7].xyz, -temp[2].xyz_, temp[3].xxx_, temp[6].xyz_; 30: DP3_SAT temp[1].xy, temp[7].xyz_, const[3].xyz_; 31: TEX temp[8].xyz, temp[1].xy__, 2D[2]; 32: MUL temp[8].xyz, temp[8].xyz_, const[4].xyz_; 33: MUL temp[8].xyz, temp[8].xyz_, const[5].xyz_; 34: MUL temp[8].xyz, temp[8].xyz_, input[1].xxx_; 35: DP3 temp[2].x, -temp[6].xyz_, temp[2].xyz_; 36: ADD temp[2].x, temp[2].x___, none.1___; 37: LG2 temp[13].w, temp[2].x___; 38: MUL temp[13].w, temp[13].___w, const[6].___x; 39: EX2 temp[2].x, temp[13].w___; 40: RCP_SAT temp[9].xyz, temp[2].x___; 41: MUL temp[9].xyz, temp[9].xyz_, input[1].xxx_; 42: MUL temp[12].xy, temp[5].xy__, const[13].xy__; 43: TEX temp[2].xyz, temp[12].xy__, 2D[3]; 44: MUL temp[2].xyz, temp[2].xyz_, const[7].xyz_; 45: TEX temp[3].xyz, temp[7].xyz_, CUBE[4]; 46: MAD temp[5].xyz, (temp[3] - temp[2]).xyz_, temp[9].xyz_, temp[2].xyz_; 47: ADD temp[10].xyz, temp[5].xyz_, temp[8].xyz_; 48: ADD_SAT output[0].w, temp[8].___x, temp[8].___y; 49: MAD_SAT output[0].xyz, input[2].xxx_, (const[8] - temp[10]).xyz_, temp[10].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[14].w, input[0].w___; 1: MUL temp[15].xy, input[0].xy__, temp[14].ww__; 2: MAD temp[16].xy, temp[15].xy__, const[11].xy__, const[12].xy__; 3: MOV temp[0].x, temp[16].x___; 4: MAD temp[0].y, temp[16]._y__, const[9]._x__, const[9]._y__; 5: TEX temp[17].yw, input[3].xy__, 2D[0]; 6: TEX temp[18].yw, input[3].xy__, 2D[1]; 7: MAD temp[3].yw, const[0]._y_w, (temp[18] - temp[17])._y_w, temp[17]._y_w; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[19].xy, temp[3].xy__, const[10].xx__, -none.11__; 10: MUL temp[20].xy, temp[19].xy__, const[1].zz__; 11: MUL_SAT temp[21].w, input[4].___w, const[10].___z; 12: MAD temp[3].xy, temp[20].xy__, temp[21].ww__, temp[20].-x-y__; 13: MOV temp[3].z, none.__0_; 14: DP3 temp[22].x, temp[3].xyz_, temp[3].xyz_; 15: ADD temp[23].x, none.1___, -temp[22].x___; 16: RSQ temp[24].x, |temp[23].x___|; 17: RCP temp[3].z, temp[24].x___; 18: DP3 temp[2].x, temp[3].xyz_, input[5].xyz_; 19: DP3 temp[2].y, temp[3].xyz_, input[6].xyz_; 20: DP3 temp[2].z, temp[3].xyz_, input[7].xyz_; 21: MUL temp[25].xy, const[1].xy__, const[2].xy__; 22: MUL temp[26].xy, temp[25].xy__, input[1].xx__; 23: MAD temp[27].xy, temp[26].xy__, temp[2].xy__, temp[0].xy__; 24: DP3 temp[28].w, input[4].xyz_, input[4].xyz_; 25: RSQ temp[29].w, |temp[28].w___|; 26: MUL temp[30].xyz, input[4].xyz_, temp[29].www_; 27: DP3 temp[31].x, temp[30].xyz_, temp[2].xyz_; 28: MUL temp[32].x, temp[31].x___, const[10].x___; 29: MAD temp[33].xyz, -temp[2].xyz_, temp[32].xxx_, temp[30].xyz_; 30: DP3_SAT temp[34].xy, temp[33].xyz_, const[3].xyz_; 31: TEX temp[35].xyz, temp[34].xy__, 2D[2]; 32: MUL temp[36].xyz, temp[35].xyz_, const[4].xyz_; 33: MUL temp[37].xyz, temp[36].xyz_, const[5].xyz_; 34: MUL temp[38].xyz, temp[37].xyz_, input[1].xxx_; 35: DP3 temp[39].x, -temp[30].xyz_, temp[2].xyz_; 36: ADD temp[40].x, temp[39].x___, none.1___; 37: LG2 temp[41].w, temp[40].x___; 38: MUL temp[42].w, temp[41].___w, const[6].___x; 39: EX2 temp[43].x, temp[42].w___; 40: RCP_SAT temp[44].xyz, temp[43].x___; 41: MUL temp[45].xyz, temp[44].xyz_, input[1].xxx_; 42: MUL temp[46].xy, temp[27].xy__, const[13].xy__; 43: TEX temp[47].xyz, temp[46].xy__, 2D[3]; 44: MUL temp[48].xyz, temp[47].xyz_, const[7].xyz_; 45: TEX temp[49].xyz, temp[33].xyz_, CUBE[4]; 46: MAD temp[50].xyz, (temp[49] - temp[48]).xyz_, temp[45].xyz_, temp[48].xyz_; 47: ADD temp[51].xyz, temp[50].xyz_, temp[38].xyz_; 48: ADD_SAT output[0].w, temp[38].___x, temp[38].___y; 49: MAD_SAT output[0].xyz, input[2].xxx_, (const[8] - temp[51]).xyz_, temp[51].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[14].w, src0.w 1: src0.xyz = input[0], src0.w = temp[14] MAD temp[15].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[15], src1.xyz = const[11], src2.xyz = const[12] MAD temp[16].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[16] MAD temp[0].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[16], src1.xyz = const[9] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 5: TEX temp[17].yw, input[3].xy__, 2D[0]; 6: TEX temp[18].yw, input[3].xy__, 2D[1]; 7: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[18], src1.w = temp[18], src2.xyz = const[0], src2.w = const[0], srcp.xyz = (src1 - src0), srcp.w = (src1 - src0) MAD temp[3].y, src2._y_, srcp._y_, src0._y_ MAD temp[3].w, src2.w, srcp.w, src0.w 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[10] MAD temp[19].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[19], src1.xyz = const[1] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 11: src0.xyz = const[10], src0.w = input[4] MAD_SAT temp[21].w, src0.w, src0.z, src0.0 12: src0.xyz = temp[20], src0.w = temp[21] MAD temp[3].xy, src0.xy_, src0.ww_, -src0.xy_ 13: MAD temp[3].z, src0.__0, src0.111, src0.000 14: src0.xyz = temp[3] DP3 temp[22].x, src0.xyz, src0.xyz 15: src0.xyz = temp[22] MAD temp[23].x, src0.1__, src0.111, -src0.x__ 16: src0.xyz = temp[23] REPL_ALPHA temp[24].x RSQ, |src0.x| 17: src0.xyz = temp[24] REPL_ALPHA temp[3].z RCP, src0.x 18: src0.xyz = temp[3], src1.xyz = input[5] DP3 temp[2].x, src0.xyz, src1.xyz 19: src0.xyz = temp[3], src1.xyz = input[6] DP3 temp[2].y, src0.xyz, src1.xyz 20: src0.xyz = temp[3], src1.xyz = input[7] DP3 temp[2].z, src0.xyz, src1.xyz 21: src0.xyz = const[1], src1.xyz = const[2] MAD temp[25].xy, src0.xy_, src1.xy_, src0.000 22: src0.xyz = temp[25], src1.xyz = input[1] MAD temp[26].xy, src0.xy_, src1.xx_, src0.000 23: src0.xyz = temp[26], src1.xyz = temp[2], src2.xyz = temp[0] MAD temp[27].xy, src0.xy_, src1.xy_, src2.xy_ 24: src0.xyz = input[4] DP3, src0.xyz, src0.xyz DP3 temp[28].w, src0._, src0._ 25: src0.w = temp[28] RSQ temp[29].w, |src0.w| 26: src0.xyz = input[4], src0.w = temp[29] MAD temp[30].xyz, src0.xyz, src0.www, src0.000 27: src0.xyz = temp[30], src1.xyz = temp[2] DP3 temp[31].x, src0.xyz, src1.xyz 28: src0.xyz = temp[31], src1.xyz = const[10] MAD temp[32].x, src0.x__, src1.x__, src0.000 29: src0.xyz = temp[2], src1.xyz = temp[32], src2.xyz = temp[30] MAD temp[33].xyz, -src0.xyz, src1.xxx, src2.xyz 30: src0.xyz = temp[33], src1.xyz = const[3] DP3_SAT temp[34].xy, src0.xyz, src1.xyz 31: TEX temp[35].xyz, temp[34].xy__, 2D[2]; 32: src0.xyz = temp[35], src1.xyz = const[4] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 33: src0.xyz = temp[36], src1.xyz = const[5] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[37], src1.xyz = input[1] MAD temp[38].xyz, src0.xyz, src1.xxx, src0.000 35: src0.xyz = temp[30], src1.xyz = temp[2] DP3 temp[39].x, -src0.xyz, src1.xyz 36: src0.xyz = temp[39] MAD temp[40].x, src0.x__, src0.111, src0.1__ 37: src0.xyz = temp[40] LG2 temp[41].w, src0.x 38: src0.xyz = const[6], src0.w = temp[41] MAD temp[42].w, src0.w, src0.x, src0.0 39: src0.w = temp[42] REPL_ALPHA temp[43].x EX2, src0.w 40: src0.xyz = temp[43] REPL_ALPHA_SAT temp[44].xyz RCP_SAT, src0.x 41: src0.xyz = temp[44], src1.xyz = input[1] MAD temp[45].xyz, src0.xyz, src1.xxx, src0.000 42: src0.xyz = temp[27], src1.xyz = const[13] MAD temp[46].xy, src0.xy_, src1.xy_, src0.000 43: TEX temp[47].xyz, temp[46].xy__, 2D[3]; 44: src0.xyz = temp[47], src1.xyz = const[7] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 45: TEX temp[49].xyz, temp[33].xyz_, CUBE[4]; 46: src0.xyz = temp[48], src1.xyz = temp[49], src2.xyz = temp[45], srcp.xyz = (src1 - src0) MAD temp[50].xyz, srcp.xyz, src2.xyz, src0.xyz 47: src0.xyz = temp[50], src1.xyz = temp[38] MAD temp[51].xyz, src0.xyz, src0.111, src1.xyz 48: src0.xyz = temp[38] MAD_SAT color[0].w, src0.x, src0.1, src0.y 49: src0.xyz = temp[51], src1.xyz = const[8], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[17].yw, input[3].xy__, 2D[0]; 2: TEX temp[18].yw, input[3].xy__, 2D[1]; 3: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[18], src1.w = temp[18], src2.xyz = const[0], src2.w = const[0], srcp.xyz = (src1 - src0), srcp.w = (src1 - src0) MAD temp[3].y, src2._y_, srcp._y_, src0._y_ MAD temp[3].w, src2.w, srcp.w, src0.w 4: src0.xyz = input[4] DP3, src0.xyz, src0.xyz DP3 temp[28].w, src0._, src0._ 5: src0.w = temp[3], src1.w = temp[28] MAD temp[3].x, src0.w__, src0.111, src0.000 RSQ temp[29].w, |src1.w| 6: src0.xyz = input[4], src0.w = temp[29], src1.xyz = const[10], src1.w = input[4] MAD temp[30].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[21].w, src1.w, src1.z, src0.0 7: src0.xyz = temp[3], src0.w = input[0], src1.xyz = const[10] MAD temp[19].xy, src0.xy_, src1.xx_, -src0.11_ RCP temp[14].w, src0.w 8: src0.xyz = input[0], src0.w = temp[14] MAD temp[15].xy, src0.xy_, src0.ww_, src0.000 9: src0.xyz = temp[15], src1.xyz = const[11], src2.xyz = const[12] MAD temp[16].xy, src0.xy_, src1.xy_, src2.xy_ 10: src0.xyz = temp[16], src1.xyz = const[9] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 11: src0.xyz = temp[16] MAD temp[0].x, src0.x__, src0.111, src0.000 12: src0.xyz = temp[19], src1.xyz = const[1] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 13: src0.xyz = temp[20], src0.w = temp[21] MAD temp[3].xy, src0.xy_, src0.ww_, -src0.xy_ 14: src0.xyz = const[1], src1.xyz = const[2] MAD temp[25].xy, src0.xy_, src1.xy_, src0.000 15: src0.xyz = temp[25], src1.xyz = input[1] MAD temp[26].xy, src0.xy_, src1.xx_, src0.000 16: MAD temp[3].z, src0.__0, src0.111, src0.000 17: src0.xyz = temp[3] DP3 temp[22].x, src0.xyz, src0.xyz 18: src0.xyz = temp[22] MAD temp[23].x, src0.1__, src0.111, -src0.x__ 19: src0.xyz = temp[23] REPL_ALPHA temp[24].x RSQ, |src0.x| 20: src0.xyz = temp[24] REPL_ALPHA temp[3].z RCP, src0.x 21: src0.xyz = temp[3], src1.xyz = input[5] DP3 temp[2].x, src0.xyz, src1.xyz 22: src0.xyz = temp[3], src1.xyz = input[6] DP3 temp[2].y, src0.xyz, src1.xyz 23: src0.xyz = temp[26], src1.xyz = temp[2], src2.xyz = temp[0] MAD temp[27].xy, src0.xy_, src1.xy_, src2.xy_ 24: src0.xyz = temp[27], src1.xyz = const[13] MAD temp[46].xy, src0.xy_, src1.xy_, src0.000 25: src0.xyz = temp[3], src1.xyz = input[7] DP3 temp[2].z, src0.xyz, src1.xyz 26: src0.xyz = temp[30], src1.xyz = temp[2] DP3 temp[31].x, src0.xyz, src1.xyz 27: src0.xyz = temp[31], src1.xyz = const[10] MAD temp[32].x, src0.x__, src1.x__, src0.000 28: src0.xyz = temp[2], src1.xyz = temp[32], src2.xyz = temp[30] MAD temp[33].xyz, -src0.xyz, src1.xxx, src2.xyz 29: src0.xyz = temp[33], src1.xyz = const[3] DP3_SAT temp[34].xy, src0.xyz, src1.xyz 30: src0.xyz = temp[30], src1.xyz = temp[2] DP3 temp[39].x, -src0.xyz, src1.xyz 31: src0.xyz = temp[39] MAD temp[40].x, src0.x__, src0.111, src0.1__ 32: src0.xyz = temp[40] LG2 temp[41].w, src0.x 33: src0.xyz = const[6], src0.w = temp[41] MAD temp[42].w, src0.w, src0.x, src0.0 34: src0.w = temp[42] REPL_ALPHA temp[43].x EX2, src0.w 35: src0.xyz = temp[43] REPL_ALPHA_SAT temp[44].xyz RCP_SAT, src0.x 36: src0.xyz = temp[44], src1.xyz = input[1] MAD temp[45].xyz, src0.xyz, src1.xxx, src0.000 37: BEGIN_TEX; 38: TEX temp[47].xyz, temp[46].xy__, 2D[3]; 39: TEX temp[49].xyz, temp[33].xyz_, CUBE[4]; 40: TEX temp[35].xyz, temp[34].xy__, 2D[2]; 41: src0.xyz = temp[35], src1.xyz = const[4] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[36], src1.xyz = const[5] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = temp[37], src1.xyz = input[1] MAD temp[38].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[47], src1.xyz = const[7], src2.xyz = temp[38] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src2.x, src0.1, src2.y 45: src0.xyz = temp[48], src1.xyz = temp[49], src2.xyz = temp[45], srcp.xyz = (src1 - src0) MAD temp[50].xyz, srcp.xyz, src2.xyz, src0.xyz 46: src0.xyz = temp[50], src1.xyz = temp[38] MAD temp[51].xyz, src0.xyz, src0.111, src1.xyz 47: src0.xyz = temp[51], src1.xyz = const[8], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[17].yw, input[3].xy__, 2D[0]; 2: TEX temp[18].yw, input[3].xy__, 2D[1]; 3: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[18], src1.w = temp[18], src2.xyz = const[0], src2.w = const[0], srcp.xyz = (src1 - src0), srcp.w = (src1 - src0) MAD temp[3].y, src2._y_, srcp._y_, src0._y_ MAD temp[3].w, src2.w, srcp.w, src0.w 4: src0.xyz = input[4] DP3, src0.xyz, src0.xyz DP3 temp[28].w, src0._, src0._ 5: src0.w = temp[3], src1.w = temp[28] MAD temp[3].x, src0.w__, src0.111, src0.000 RSQ temp[29].w, |src1.w| 6: src0.xyz = input[4], src0.w = temp[29], src1.xyz = const[10], src1.w = input[4] MAD temp[30].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[21].w, src1.w, src1.z, src0.0 7: src0.xyz = temp[3], src0.w = input[0], src1.xyz = const[10] MAD temp[19].xy, src0.xy_, src1.xx_, -src0.11_ RCP temp[14].w, src0.w 8: src0.xyz = input[0], src0.w = temp[14] MAD temp[15].xy, src0.xy_, src0.ww_, src0.000 9: src0.xyz = temp[15], src1.xyz = const[11], src2.xyz = const[12] MAD temp[16].xy, src0.xy_, src1.xy_, src2.xy_ 10: src0.xyz = temp[16], src1.xyz = const[9] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 11: src0.xyz = temp[16] MAD temp[0].x, src0.x__, src0.111, src0.000 12: src0.xyz = temp[19], src1.xyz = const[1] MAD temp[20].xy, src0.xy_, src1.zz_, src0.000 13: src0.xyz = temp[20], src0.w = temp[21] MAD temp[3].xy, src0.xy_, src0.ww_, -src0.xy_ 14: src0.xyz = const[1], src1.xyz = const[2] MAD temp[25].xy, src0.xy_, src1.xy_, src0.000 15: src0.xyz = temp[25], src1.xyz = input[1] MAD temp[26].xy, src0.xy_, src1.xx_, src0.000 16: MAD temp[3].z, src0.__0, src0.111, src0.000 17: src0.xyz = temp[3] DP3 temp[22].x, src0.xyz, src0.xyz 18: src0.xyz = temp[22] MAD temp[23].x, src0.1__, src0.111, -src0.x__ 19: src0.xyz = temp[23] REPL_ALPHA temp[24].x RSQ, |src0.x| 20: src0.xyz = temp[24] REPL_ALPHA temp[3].z RCP, src0.x 21: src0.xyz = temp[3], src1.xyz = input[5] DP3 temp[2].x, src0.xyz, src1.xyz 22: src0.xyz = temp[3], src1.xyz = input[6] DP3 temp[2].y, src0.xyz, src1.xyz 23: src0.xyz = temp[26], src1.xyz = temp[2], src2.xyz = temp[0] MAD temp[27].xy, src0.xy_, src1.xy_, src2.xy_ 24: src0.xyz = temp[27], src1.xyz = const[13] MAD temp[46].xy, src0.xy_, src1.xy_, src0.000 25: src0.xyz = temp[3], src1.xyz = input[7] DP3 temp[2].z, src0.xyz, src1.xyz 26: src0.xyz = temp[30], src1.xyz = temp[2] DP3 temp[31].x, src0.xyz, src1.xyz 27: src0.xyz = temp[31], src1.xyz = const[10] MAD temp[32].x, src0.x__, src1.x__, src0.000 28: src0.xyz = temp[2], src1.xyz = temp[32], src2.xyz = temp[30] MAD temp[33].xyz, -src0.xyz, src1.xxx, src2.xyz 29: src0.xyz = temp[33], src1.xyz = const[3] DP3_SAT temp[34].xy, src0.xyz, src1.xyz 30: src0.xyz = temp[30], src1.xyz = temp[2] DP3 temp[39].x, -src0.xyz, src1.xyz 31: src0.xyz = temp[39] MAD temp[40].x, src0.x__, src0.111, src0.1__ 32: src0.xyz = temp[40] LG2 temp[41].w, src0.x 33: src0.xyz = const[6], src0.w = temp[41] MAD temp[42].w, src0.w, src0.x, src0.0 34: src0.w = temp[42] REPL_ALPHA temp[43].x EX2, src0.w 35: src0.xyz = temp[43] REPL_ALPHA_SAT temp[44].xyz RCP_SAT, src0.x 36: src0.xyz = temp[44], src1.xyz = input[1] MAD temp[45].xyz, src0.xyz, src1.xxx, src0.000 37: BEGIN_TEX; 38: TEX temp[47].xyz, temp[46].xy__, 2D[3]; 39: TEX temp[49].xyz, temp[33].xyz_, CUBE[4]; 40: TEX temp[35].xyz, temp[34].xy__, 2D[2]; 41: src0.xyz = temp[35], src1.xyz = const[4] MAD temp[36].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[36], src1.xyz = const[5] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = temp[37], src1.xyz = input[1] MAD temp[38].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[47], src1.xyz = const[7], src2.xyz = temp[38] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src2.x, src0.1, src2.y 45: src0.xyz = temp[48], src1.xyz = temp[49], src2.xyz = temp[45], srcp.xyz = (src1 - src0) MAD temp[50].xyz, srcp.xyz, src2.xyz, src0.xyz 46: src0.xyz = temp[50], src1.xyz = temp[38] MAD temp[51].xyz, src0.xyz, src0.111, src1.xyz 47: src0.xyz = temp[51], src1.xyz = const[8], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].yw, input[2].xy__, 2D[0]; 2: TEX temp[2].yw, input[2].xy__, 2D[1]; 3: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = temp[2], src1.w = temp[2], src2.xyz = const[0], src2.w = const[0], srcp.xyz = (src1 - src0), srcp.w = (src1 - src0) MAD temp[2].y, src2._y_, srcp._y_, src0._y_ MAD temp[0].w, src2.w, srcp.w, src0.w 4: src0.xyz = input[3] DP3, src0.xyz, src0.xyz DP3 temp[1].w, src0._, src0._ 5: src0.w = temp[0], src1.w = temp[1] MAD temp[2].x, src0.w__, src0.11_, src0.00_ RSQ temp[0].w, |src1.w| 6: src0.xyz = input[3], src0.w = temp[0], src1.xyz = const[10], src1.w = input[3] MAD temp[3].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[0].w, src1.w, src1.z, src0.0 7: src0.xyz = temp[2], src0.w = input[7], src1.xyz = const[10] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ RCP temp[1].w, src0.w 8: src0.xyz = input[7], src0.w = temp[1] MAD temp[7].xy, src0.xy_, src0.ww_, src0.00_ 9: src0.xyz = temp[7], src1.xyz = const[11], src2.xyz = const[12] MAD temp[0].yz, src0._xy, src1._xy, src2._xy 10: src0.xyz = temp[0], src1.xyz = const[9] MAD temp[7].y, src0._z_, src1._x_, src1._y_ 11: src0.xyz = temp[0] MAD temp[7].x, src0.y__, src0.11_, src0.00_ 12: src0.xyz = temp[2], src1.xyz = const[1] MAD temp[2].xy, src0.xy_, src1.zz_, src0.00_ 13: src0.xyz = temp[2], src0.w = temp[0] MAD temp[2].xy, src0.xy_, src0.ww_, -src0.xy_ 14: src0.xyz = const[1], src1.xyz = const[2] MAD temp[8].xy, src0.xy_, src1.xy_, src0.00_ 15: src0.xyz = temp[8], src1.xyz = input[0] MAD temp[8].xy, src0.xy_, src1.xx_, src0.00_ 16: MAD temp[2].z, src0.__0, src0.111, src0.000 17: src0.xyz = temp[2] DP3 temp[0].y, src0.xyz, src0.xyz 18: src0.xyz = temp[0] MAD temp[0].y, src0._1_, src0._1_, -src0._y_ 19: src0.xyz = temp[0] REPL_ALPHA temp[0].y RSQ, |src0.y| 20: src0.xyz = temp[0] REPL_ALPHA temp[2].z RCP, src0.y 21: src0.xyz = temp[2], src1.xyz = input[4] DP3 temp[4].x, src0.xyz, src1.xyz 22: src0.xyz = temp[2], src1.xyz = input[5] DP3 temp[4].y, src0.xyz, src1.xyz 23: src0.xyz = temp[8], src1.xyz = temp[4], src2.xyz = temp[7] MAD temp[5].xy, src0.xy_, src1.xy_, src2.xy_ 24: src0.xyz = temp[5], src1.xyz = const[13] MAD temp[5].xy, src0.xy_, src1.xy_, src0.00_ 25: src0.xyz = temp[2], src1.xyz = input[6] DP3 temp[4].z, src0.xyz, src1.xyz 26: src0.xyz = temp[3], src1.xyz = temp[4] DP3 temp[0].y, src0.xyz, src1.xyz 27: src0.xyz = temp[0], src1.xyz = const[10] MAD temp[0].y, src0._y_, src1._x_, src0._0_ 28: src0.xyz = temp[4], src1.xyz = temp[0], src2.xyz = temp[3] MAD temp[2].xyz, -src0.xyz, src1.yyy, src2.xyz 29: src0.xyz = temp[2], src1.xyz = const[3] DP3_SAT temp[6].xy, src0.xyz, src1.xyz 30: src0.xyz = temp[3], src1.xyz = temp[4] DP3 temp[0].y, -src0.xyz, src1.xyz 31: src0.xyz = temp[0] MAD temp[0].y, src0._y_, src0._1_, src0._1_ 32: src0.xyz = temp[0] LG2 temp[0].w, src0.y 33: src0.xyz = const[6], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 34: src0.w = temp[0] REPL_ALPHA temp[0].y EX2, src0.w 35: src0.xyz = temp[0] REPL_ALPHA_SAT temp[3].xyz RCP_SAT, src0.y 36: src0.xyz = temp[3], src1.xyz = input[0] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 37: BEGIN_TEX; 38: TEX temp[4].xyz, temp[5].xy__, 2D[3]; 39: TEX temp[2].xyz, temp[2].xyz_, CUBE[4]; 40: TEX temp[5].xyz, temp[6].xy__, 2D[2]; 41: src0.xyz = temp[5], src1.xyz = const[4] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[5], src1.xyz = const[5] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = temp[5], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 44: src0.xyz = temp[4], src1.xyz = const[7], src2.xyz = temp[0] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src2.x, src0.1, src2.y 45: src0.xyz = temp[4], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD temp[2].xyz, srcp.xyz, src2.xyz, src0.xyz 46: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src1.xyz 47: src0.xyz = temp[0], src1.xyz = const[8], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz pc=41************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 33, tex_end: 1 (code_addr: 00020840) TEX: TEX t8, t2, texture[0] (00008202) TEX t2, t2, texture[1] (00008882) 0: xyz: t8 t2 c0 sub-> t2.y (010a0088) w: t8 t2 c0 sub-> t0.w (00820088) xyz: c0.xyz srcp.xyz t8.xyz op: 00200788 w: c0.w srcp.w t8.w op: 0022478b 1: xyz: t3 t0 t0 bias-> (00000003) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: 1.0 1.0 t3.x op: 00800891 2: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t0.www 1.0 0.0 op: 00050a8c w: |t1.w| t0.x t0.x op: 0580004a 3: xyz: t3 c10 t0 bias-> t3.xyz (038c0a83) w: t0 t3 t0 bias-> t0.w (008000c0) xyz: t3.xyz t0.www 0.0 op: 00050600 w: t3.w c10.z 0.0 op: 4004028a 4: xyz: t2 c10 t0 bias-> t2.xy (01880a82) w: t7 t0 t0 bias-> t1.w (00840007) xyz: t2.xyz c10.xxx -1.0 op: 000d4280 w: t7.w t2.x t2.x op: 05000009 5: xyz: t7 t0 t0 bias-> t7.xy (019c0007) w: t1 t0 t0 bias-> (00000001) xyz: t7.xyz t1.www 0.0 op: 00050600 w: t7.x t7.x t7.x op: 00000000 6: xyz: t7 c11 c12 bias-> t0.yz (0302cac7) w: t0 t0 t0 bias-> (00000000) xyz: t7.zxy c11.zxy c12.zxy op: 00070d9a w: t7.x t7.x t7.x op: 00000000 7: xyz: t0 c9 t0 bias-> t7.y (011c0a40) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz c9.xxx c9.xyz op: 00010283 w: t0.x t0.x t0.x op: 00000000 8: xyz: t0 t0 t0 bias-> t7.x (009c0000) w: t0 t0 t0 bias-> (00000000) xyz: t0.yyy 1.0 0.0 op: 00050a82 w: t0.x t0.x t0.x op: 00000000 9: xyz: t2 c1 t0 bias-> t2.xy (01880842) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c1.zzz 0.0 op: 00050380 w: t2.x t2.x t2.x op: 00000000 10: xyz: t2 t0 t0 bias-> t2.xy (01880002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.www -t2.xyz op: 00080600 w: t2.x t2.x t2.x op: 00000000 11: xyz: c1 c2 t0 bias-> t8.xy (01a008a1) w: t0 t0 t0 bias-> (00000000) xyz: c1.xyz c2.xyz 0.0 op: 00050200 w: c1.x c1.x c1.x op: 00000000 12: xyz: t8 t0 t0 bias-> t8.xy (01a00008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t0.xxx 0.0 op: 00050280 w: t8.x t8.x t8.x op: 00000000 13: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 14: xyz: t2 t0 t0 bias-> t0.y (01000002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 15: xyz: t0 t0 t0 bias-> t0.y (01000000) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t0.xyz op: 00080a95 w: t0.x t0.x t0.x op: 00000000 16: xyz: t0 t0 t0 bias-> t0.y (01000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.y| t0.x t0.x op: 05800041 17: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t0.y t0.x t0.x op: 05000001 18: xyz: t2 t4 t0 bias-> t4.x (00900102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.xyz t2.xxx op: 00804200 w: t2.x t2.x t2.x op: 00000000 19: xyz: t2 t5 t0 bias-> t4.y (01100142) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t5.xyz t2.xxx op: 00804200 w: t2.x t2.x t2.x op: 00000000 20: xyz: t8 t4 t7 bias-> t5.xy (01947108) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t4.xyz t7.xyz op: 00020200 w: t8.x t8.x t8.x op: 00000000 21: xyz: t5 c13 t0 bias-> t5.xy (01940b45) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c13.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 22: xyz: t2 t6 t0 bias-> t4.z (02100182) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t6.xyz t2.xxx op: 00804200 w: t2.x t2.x t2.x op: 00000000 23: xyz: t3 t4 t0 bias-> t0.y (01000103) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t4.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 24: xyz: t0 c10 t0 bias-> t0.y (01000a80) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c10.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 25: xyz: t4 t0 t3 bias-> t2.xyz (03883004) w: t0 t0 t0 bias-> (00000000) xyz: -t4.xyz t0.yyy t3.xyz op: 00020320 w: t4.x t4.x t4.x op: 00000000 26: xyz: t2 c3 t0 bias-> t6.xy (019808c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 27: xyz: t3 t4 t0 bias-> t0.y (01000103) w: t0 t0 t0 bias-> (00000000) xyz: -t3.xyz t4.xyz t3.xxx op: 00804220 w: t3.x t3.x t3.x op: 00000000 28: xyz: t0 t0 t0 bias-> t0.y (01000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 1.0 op: 00054a80 w: t0.x t0.x t0.x op: 00000000 29: 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.y t0.x t0.x op: 04800001 30: xyz: c6 t0 t0 bias-> (00000026) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c6.xxx c6.xxx c6.xxx op: 00004081 w: t0.w c6.x 0.0 op: 00040009 31: xyz: t0 t0 t0 bias-> t0.y (01000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t0.w t0.x t0.x op: 04000009 32: xyz: t0 t0 t0 bias-> t3.xyz (038c0000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 45004081 w: t0.y t0.x t0.x op: 45000001 33: 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 NODE 1: alu_offset: 34, tex_offset: 2, alu_end: 6, tex_end: 2 (code_addr: 004421a2) TEX: TEX t4, t5, texture[3] (00009905) TEX t2, t2, texture[4] (0000a082) TEX t5, t6, texture[2] (00009146) 34: xyz: t5 c4 t0 bias-> t5.xyz (03940905) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c4.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 35: xyz: t5 c5 t0 bias-> t5.xyz (03940945) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c5.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 36: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t0.xxx 0.0 op: 00050280 w: t5.x t5.x t5.x op: 00000000 37: xyz: t4 c7 t0 bias-> t4.xyz (039009c4) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t4.xyz c7.xyz 0.0 op: 80050200 NOP w: t0.x 1.0 t0.y op: 4001c886 38: xyz: t4 t2 t3 sub-> t2.xyz (03883084) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz t3.xyz t4.xyz op: 0020040f w: t4.x t4.x t4.x op: 00000000 39: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 t0.xyz op: 80010a80 NOP w: t2.x t2.x t2.x op: 00000000 40: xyz: t0 c8 t1 sub-> o0.xyz (1c001a00) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[2], PERSPECTIVE DCL OUT[0], COLOR DCL CONST[0] DCL TEMP[0] IMM FLT32 { 2.7183, 1.0000, 0.0000, 0.0000} 0: DP3 TEMP[0].x, IN[0], IN[0] 1: RSQ TEMP[0].x, TEMP[0].xxxx 2: RCP TEMP[0].x, TEMP[0].xxxx 3: MUL TEMP[0].x, TEMP[0], CONST[0].wwww 4: MUL TEMP[0].x, TEMP[0], TEMP[0] 5: POW TEMP[0].x, IMM[0].xxxx, -TEMP[0].xxxx 6: MOV OUT[0].xyz, CONST[0] 7: ADD OUT[0].w, -TEMP[0].xxxx, IMM[0].yyyy 8: END Fragment Program: before compilation # Radeon Compiler Program 0: DP3 temp[0].x, input[0], input[0]; 1: RSQ temp[0].x, temp[0].xxxx; 2: RCP temp[0].x, temp[0].xxxx; 3: MUL temp[0].x, temp[0], const[0].wwww; 4: MUL temp[0].x, temp[0], temp[0]; 5: POW temp[0].x, const[1].xxxx, -temp[0].xxxx; 6: MOV output[0].xyz, const[0]; 7: ADD output[0].w, -temp[0].xxxx, const[1].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: DP3 temp[0].x, input[0], input[0]; 1: RSQ temp[0].x, temp[0].xxxx; 2: RCP temp[0].x, temp[0].xxxx; 3: MUL temp[0].x, temp[0], const[0].wwww; 4: MUL temp[0].x, temp[0], temp[0]; 5: POW temp[0].x, const[1].xxxx, -temp[0].xxxx; 6: MOV output[0].xyz, const[0]; 7: ADD output[0].w, -temp[0].xxxx, const[1].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: DP3 temp[0].x, input[0], input[0]; 1: RSQ temp[0].x, temp[0].xxxx; 2: RCP temp[0].x, temp[0].xxxx; 3: MUL temp[0].x, temp[0], const[0].wwww; 4: MUL temp[0].x, temp[0], temp[0]; 5: POW temp[0].x, const[1].xxxx, -temp[0].xxxx; 6: MOV output[0].xyz, const[0]; 7: ADD output[0].w, -temp[0].xxxx, const[1].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: DP3 temp[0].x, input[0], input[0]; 1: RSQ temp[0].x, temp[0].xxxx; 2: RCP temp[0].x, temp[0].xxxx; 3: MUL temp[0].x, temp[0], const[0].wwww; 4: MUL temp[0].x, temp[0], temp[0]; 5: POW temp[0].x, const[1].xxxx, -temp[0].xxxx; 6: MOV output[0].xyz, const[0]; 7: ADD output[0].w, -temp[0].xxxx, const[1].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: DP3 temp[0].x, input[0], input[0]; 1: RSQ temp[0].x, temp[0].xxxx; 2: RCP temp[0].x, temp[0].xxxx; 3: MUL temp[0].x, temp[0], const[0].wwww; 4: MUL temp[0].x, temp[0], temp[0]; 5: POW temp[0].x, const[1].xxxx, -temp[0].xxxx; 6: MOV output[0].xyz, const[0]; 7: ADD output[0].w, -temp[0].xxxx, const[1].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: DP3 temp[0].x, input[0], input[0]; 1: RSQ temp[0].x, temp[0].xxxx; 2: RCP temp[0].x, temp[0].xxxx; 3: MUL temp[0].x, temp[0], const[0].wwww; 4: MUL temp[0].x, temp[0], temp[0]; 5: POW temp[0].x, const[1].xxxx, -temp[0].xxxx; 6: MOV_SAT output[0].xyz, const[0]; 7: ADD_SAT output[0].w, -temp[0].xxxx, const[1].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: DP3 temp[0].x, input[0], input[0]; 1: RSQ temp[0].x, temp[0].xxxx; 2: RCP temp[0].x, temp[0].xxxx; 3: MUL temp[0].x, temp[0], const[0].wwww; 4: MUL temp[0].x, temp[0], temp[0]; 5: POW temp[0].x, const[1].xxxx, -temp[0].xxxx; 6: MOV_SAT output[0].xyz, const[0]; 7: ADD_SAT output[0].w, -temp[0].xxxx, const[1].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: DP3 temp[0].x, input[0], input[0]; 1: RSQ temp[0].x, |temp[0].xxxx|; 2: RCP temp[0].x, temp[0].xxxx; 3: MUL temp[0].x, temp[0], const[0].wwww; 4: MUL temp[0].x, temp[0], temp[0]; 5: LG2 temp[1].w, const[1].xxxx; 6: MUL temp[1].w, temp[1].wwww, -temp[0].xxxx; 7: EX2 temp[0].x, temp[1].wwww; 8: MOV_SAT output[0].xyz, const[0]; 9: ADD_SAT output[0].w, -temp[0].xxxx, const[1].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: DP3 temp[0].x, input[0].xyz_, input[0].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: RCP temp[0].x, temp[0].x___; 3: MUL temp[0].x, temp[0].x___, const[0].w___; 4: MUL temp[0].x, temp[0].x___, temp[0].x___; 5: LG2 temp[1].w, const[1].x___; 6: MUL temp[1].w, temp[1].___w, -temp[0].___x; 7: EX2 temp[0].x, temp[1].w___; 8: MOV_SAT output[0].xyz, const[0].xyz_; 9: ADD_SAT output[0].w, -temp[0].___x, const[1].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: DP3 temp[0].x, input[0].xyz_, input[0].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: RCP temp[0].x, temp[0].x___; 3: MUL temp[0].x, temp[0].x___, const[0].w___; 4: MUL temp[0].x, temp[0].x___, temp[0].x___; 5: LG2 temp[1].w, const[1].x___; 6: MUL temp[1].w, temp[1].___w, -temp[0].___x; 7: EX2 temp[0].x, temp[1].w___; 8: MOV_SAT output[0].xyz, const[0].xyz_; 9: ADD_SAT output[0].w, -temp[0].___x, const[1].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: DP3 temp[0].x, input[0].xyz_, input[0].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: RCP temp[0].x, temp[0].x___; 3: MUL temp[0].x, temp[0].x___, const[0].w___; 4: MUL temp[0].x, temp[0].x___, temp[0].x___; 5: LG2 temp[1].w, const[1].x___; 6: MUL temp[1].w, temp[1].___w, -temp[0].___x; 7: EX2 temp[0].x, temp[1].w___; 8: MOV_SAT output[0].xyz, const[0].xyz_; 9: ADD_SAT output[0].w, -temp[0].___x, none.___1; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: DP3 temp[0].x, input[0].xyz_, input[0].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: RCP temp[0].x, temp[0].x___; 3: MUL temp[0].x, temp[0].x___, const[0].w___; 4: MUL temp[0].x, temp[0].x___, temp[0].x___; 5: LG2 temp[1].w, const[1].x___; 6: MUL temp[1].w, temp[1].___w, -temp[0].___x; 7: EX2 temp[0].x, temp[1].w___; 8: MOV_SAT output[0].xyz, const[0].xyz_; 9: ADD_SAT output[0].w, -temp[0].___x, none.___1; CONST[1] = { 2.7183 1.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: DP3 temp[0].x, input[0].xyz_, input[0].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: RCP temp[0].x, temp[0].x___; 3: MUL temp[0].x, temp[0].x___, const[0].w___; 4: MUL temp[0].x, temp[0].x___, temp[0].x___; 5: LG2 temp[1].w, const[1].x___; 6: MUL temp[1].w, temp[1].___w, -temp[0].___x; 7: EX2 temp[0].x, temp[1].w___; 8: MOV_SAT output[0].xyz, const[0].xyz_; 9: ADD_SAT output[0].w, -temp[0].___x, none.___1; Fragment Program: after 'register rename' # Radeon Compiler Program 0: DP3 temp[2].x, input[0].xyz_, input[0].xyz_; 1: RSQ temp[3].x, |temp[2].x___|; 2: RCP temp[4].x, temp[3].x___; 3: MUL temp[5].x, temp[4].x___, const[0].w___; 4: MUL temp[6].x, temp[5].x___, temp[5].x___; 5: LG2 temp[7].w, const[1].x___; 6: MUL temp[8].w, temp[7].___w, -temp[6].___x; 7: EX2 temp[9].x, temp[8].w___; 8: MOV_SAT output[0].xyz, const[0].xyz_; 9: ADD_SAT output[0].w, -temp[9].___x, none.___1; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0] DP3 temp[2].x, src0.xyz, src0.xyz 1: src0.xyz = temp[2] REPL_ALPHA temp[3].x RSQ, |src0.x| 2: src0.xyz = temp[3] REPL_ALPHA temp[4].x RCP, src0.x 3: src0.xyz = temp[4], src0.w = const[0] MAD temp[5].x, src0.x__, src0.w__, src0.000 4: src0.xyz = temp[5] MAD temp[6].x, src0.x__, src0.x__, src0.000 5: src0.xyz = const[1] LG2 temp[7].w, src0.x 6: src0.xyz = temp[6], src0.w = temp[7] MAD temp[8].w, src0.w, -src0.x, src0.0 7: src0.w = temp[8] REPL_ALPHA temp[9].x EX2, src0.w 8: src0.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 9: src0.xyz = temp[9] MAD_SAT color[0].w, -src0.x, src0.1, src0.1 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[0], src1.xyz = const[1] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 LG2 temp[7].w, src1.x 1: src0.xyz = input[0] DP3 temp[2].x, src0.xyz, src0.xyz 2: src0.xyz = temp[2] REPL_ALPHA temp[3].x RSQ, |src0.x| 3: src0.xyz = temp[3] REPL_ALPHA temp[4].x RCP, src0.x 4: src0.xyz = temp[4], src0.w = const[0] MAD temp[5].x, src0.x__, src0.w__, src0.000 5: src0.xyz = temp[5] MAD temp[6].x, src0.x__, src0.x__, src0.000 6: src0.xyz = temp[6], src0.w = temp[7] MAD temp[8].w, src0.w, -src0.x, src0.0 7: src0.w = temp[8] REPL_ALPHA temp[9].x EX2, src0.w 8: src0.xyz = temp[9] MAD_SAT color[0].w, -src0.x, src0.1, src0.1 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[0], src1.xyz = const[1] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 LG2 temp[7].w, src1.x 1: src0.xyz = input[0] DP3 temp[2].x, src0.xyz, src0.xyz 2: src0.xyz = temp[2] REPL_ALPHA temp[3].x RSQ, |src0.x| 3: src0.xyz = temp[3] REPL_ALPHA temp[4].x RCP, src0.x 4: src0.xyz = temp[4], src0.w = const[0] MAD temp[5].x, src0.x__, src0.w__, src0.000 5: src0.xyz = temp[5] MAD temp[6].x, src0.x__, src0.x__, src0.000 6: src0.xyz = temp[6], src0.w = temp[7] MAD temp[8].w, src0.w, -src0.x, src0.0 7: src0.w = temp[8] REPL_ALPHA temp[9].x EX2, src0.w 8: src0.xyz = temp[9] MAD_SAT color[0].w, -src0.x, src0.1, src0.1 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[0], src1.xyz = const[1] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 LG2 temp[0].w, src1.x 1: src0.xyz = input[0] DP3 temp[0].x, src0.xyz, src0.xyz 2: src0.xyz = temp[0] REPL_ALPHA temp[0].x RSQ, |src0.x| 3: src0.xyz = temp[0] REPL_ALPHA temp[0].x RCP, src0.x 4: src0.xyz = temp[0], src0.w = const[0] MAD temp[0].x, src0.x__, src0.w__, src0.0__ 5: src0.xyz = temp[0] MAD temp[0].x, src0.x__, src0.x__, src0.0__ 6: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].w, src0.w, -src0.x, src0.0 7: src0.w = temp[0] REPL_ALPHA temp[0].x EX2, src0.w 8: src0.xyz = temp[0] MAD_SAT color[0].w, -src0.x, src0.1, src0.1 pc=42************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 8, tex_end: 0 (code_addr: 00400200) 0: xyz: c0 c1 t0 bias-> o0.xyz (1c000860) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c0.xyz 1.0 0.0 op: 40050a80 w: c1.x c0.x c0.x op: 04800003 1: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz t0.xxx op: 00804000 w: t0.x t0.x t0.x op: 00000000 2: 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 3: 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: 05000000 4: xyz: t0 t0 t0 bias-> t0.x (00800000) w: c0 t0 t0 bias-> (00000020) xyz: t0.xyz c0.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz 0.0 op: 00050000 w: t0.x t0.x t0.x op: 00000000 6: 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 -t0.x 0.0 op: 00041009 7: 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 8: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: -t0.x 1.0 1.0 op: 400448a0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL SAMP[8] DCL SAMP[9] DCL CONST[0] DCL CONST[5..8] DCL TEMP[0..11] IMM FLT32 { 2.0000, -1.0000, 1.0000, 4.0000} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.5000} 0: MAD TEMP[0].xy, IN[3], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[6], SAMP[0], 2D 2: TEX TEMP[2], IN[6], SAMP[1], 2D 3: MUL_SAT TEMP[2], TEMP[2], IN[3].wwww 4: DP3 TEMP[3].x, IN[8], IN[8] 5: RSQ TEMP[3].x, TEMP[3].xxxx 6: MUL TEMP[3], TEMP[3].xxxx, IN[8] 7: DP3 TEMP[4].x, IN[2], IN[2] 8: RSQ TEMP[4].x, TEMP[4].xxxx 9: MUL TEMP[4], TEMP[4].xxxx, IN[2] 10: TEX TEMP[5], IN[3], SAMP[3], 2D 11: MOV TEMP[5].x, TEMP[5].wwww 12: MAD TEMP[5], TEMP[5], IMM[0].xxxx, IMM[0].yyyy 13: TEX TEMP[6], TEMP[0], SAMP[4], 2D 14: MOV TEMP[6].x, TEMP[6].wwww 15: MAD TEMP[6].xy, TEMP[6], IMM[0].xxxx, IMM[0].yyyy 16: MAD TEMP[5].xy, TEMP[2].xxxx, TEMP[6], TEMP[5] 17: MOV TEMP[5].z, IMM[1].wwww 18: DP3 TEMP[7].x, TEMP[5], TEMP[5] 19: ADD TEMP[7].x, IMM[2].xxxx, -TEMP[7].xxxx 20: RSQ TEMP[7].x, TEMP[7].xxxx 21: RCP TEMP[5].z, TEMP[7].xxxx 22: DP3_SAT TEMP[4].x, TEMP[4], TEMP[5] 23: TXP TEMP[7], IN[5], SAMP[5], 2D 24: MUL TEMP[4], TEMP[4].xxxx, TEMP[7] 25: TEX TEMP[7].x, IN[4], SAMP[6], 2D 26: MUL TEMP[4], TEMP[4], TEMP[7].xxxx 27: MUL TEMP[1], TEMP[1], IN[0] 28: MUL TEMP[8], TEMP[1], CONST[5] 29: DP3 TEMP[3].x, TEMP[3], TEMP[5] 30: MAD_SAT TEMP[7].x, TEMP[3].xxxx, IMM[2].yyyy, -IMM[2].zzzz 31: MUL TEMP[7].x, TEMP[7].xxxx, TEMP[7].xxxx 32: MUL TEMP[7], TEMP[7].xxxx, CONST[6] 33: TEX TEMP[9], IN[7], SAMP[7], 2D 34: ADD TEMP[9], TEMP[9], TEMP[9] 35: TEX TEMP[10], TEMP[0], SAMP[8], 2D 36: ADD TEMP[10], TEMP[10], -IMM[2].wwww 37: MAD TEMP[9], TEMP[2].xxxx, TEMP[10], TEMP[9] 38: MAD TEMP[8], TEMP[7], TEMP[9], TEMP[8] 39: MUL TEMP[11].xyz, TEMP[4], TEMP[8] 40: MAD TEMP[11].xyz, TEMP[1], CONST[7], TEMP[11] 41: TEX TEMP[7], IN[6], SAMP[9], 2D 42: ADD TEMP[11], TEMP[7], TEMP[11] 43: LRP OUT[0].xyz, IN[1].xxxx, CONST[8], TEMP[11] 44: MUL TEMP[7], TEMP[7], TEMP[9] 45: MUL TEMP[7], TEMP[7], TEMP[4] 46: DP3 OUT[0].w, TEMP[7], IMM[1] 47: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[9]; 42: ADD temp[11], temp[7], temp[11]; 43: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 44: MUL temp[7], temp[7], temp[9]; 45: MUL temp[7], temp[7], temp[4]; 46: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[9]; 42: ADD temp[11], temp[7], temp[11]; 43: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 44: MUL temp[7], temp[7], temp[9]; 45: MUL temp[7], temp[7], temp[4]; 46: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[9]; 42: ADD temp[11], temp[7], temp[11]; 43: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 44: MUL temp[7], temp[7], temp[9]; 45: MUL temp[7], temp[7], temp[4]; 46: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[9]; 42: ADD temp[11], temp[7], temp[11]; 43: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 44: MUL temp[7], temp[7], temp[9]; 45: MUL temp[7], temp[7], temp[4]; 46: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[9]; 42: ADD temp[11], temp[7], temp[11]; 43: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 44: MUL temp[7], temp[7], temp[9]; 45: MUL temp[7], temp[7], temp[4]; 46: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[9]; 42: ADD temp[11], temp[7], temp[11]; 43: LRP_SAT output[0].xyz, input[1].xxxx, const[8], temp[11]; 44: MUL temp[7], temp[7], temp[9]; 45: MUL temp[7], temp[7], temp[4]; 46: DP3_SAT output[0].w, temp[7], const[10]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[6]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[7]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[8]; 37: ADD temp[10], temp[10], -const[11].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: MAD temp[11].xyz, temp[1], const[7], temp[11]; 42: TEX temp[7], input[6], 2D[9]; 43: ADD temp[11], temp[7], temp[11]; 44: LRP_SAT output[0].xyz, input[1].xxxx, const[8], temp[11]; 45: MUL temp[7], temp[7], temp[9]; 46: MUL temp[7], temp[7], temp[4]; 47: DP3_SAT output[0].w, temp[7], const[10]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, |temp[3].xxxx|; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, |temp[7].xxxx|; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[6]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[7]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[8]; 37: ADD temp[10], temp[10], -const[11].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: MAD temp[11].xyz, temp[1], const[7], temp[11]; 42: TEX temp[7], input[6], 2D[9]; 43: ADD temp[11], temp[7], temp[11]; 44: ADD temp[13].xyz, const[8], -temp[11]; 45: MAD_SAT output[0].xyz, input[1].xxxx, temp[13], temp[11]; 46: MUL temp[7], temp[7], temp[9]; 47: MUL temp[7], temp[7], temp[4]; 48: DP3_SAT output[0].w, temp[7], const[10]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: TEX temp[2].x, input[6].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[3]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[9].xx__, const[9].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[4]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[9].xx__, const[9].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[10].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[11].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[6]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[7]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[11].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: TEX temp[7].xyz, input[6].xy__, 2D[9]; 43: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 44: ADD temp[13].xyz, const[8].xyz_, -temp[11].xyz_; 45: MAD_SAT output[0].xyz, input[1].xxx_, temp[13].xyz_, temp[11].xyz_; 46: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 47: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 48: DP3_SAT output[0].w, temp[7].xyz_, const[10].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: TEX temp[2].x, input[6].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[3]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[9].xx__, const[9].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[4]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[9].xx__, const[9].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[10].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[11].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[6]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[7]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[11].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: TEX temp[7].xyz, input[6].xy__, 2D[9]; 43: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 44: ADD temp[13].xyz, const[8].xyz_, -temp[11].xyz_; 45: MAD_SAT output[0].xyz, input[1].xxx_, temp[13].xyz_, temp[11].xyz_; 46: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 47: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 48: DP3_SAT output[0].w, temp[7].xyz_, const[10].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: TEX temp[2].x, input[6].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[3]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[9].xx__, none.-1-1__; 13: TEX temp[6].yw, temp[0].xy__, 2D[4]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[9].xx__, none.-1-1__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, none.__0_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, none.1___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[6]; 26: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 27: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 28: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 29: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 30: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 31: MUL temp[7].x, temp[7].x___, temp[7].x___; 32: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 33: TEX temp[9].xyz, input[7].xy__, 2D[7]; 34: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 35: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 36: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 37: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 38: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 39: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 40: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 41: TEX temp[7].xyz, input[6].xy__, 2D[9]; 42: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 43: MAD_SAT output[0].xyz, input[1].xxx_, (const[8] - temp[11]).xyz_, temp[11].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 45: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[7].xyz_, const[10].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: TEX temp[2].x, input[6].xy__, 2D[1]; 5: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 6: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 7: RSQ temp[3].x, |temp[3].x___|; 8: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 9: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 10: RSQ temp[4].x, |temp[4].x___|; 11: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: MOV temp[5].x, temp[5].w___; 14: MAD temp[5].xy, temp[5].xy__, const[9].xx__, none.-1-1__; 15: TEX temp[6].yw, temp[0].xy__, 2D[4]; 16: MOV temp[6].x, temp[6].w___; 17: MAD temp[6].xy, temp[6].xy__, const[9].xx__, none.-1-1__; 18: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[7].x, none.1___, -temp[7].x___; 22: RSQ temp[7].x, |temp[7].x___|; 23: RCP temp[5].z, temp[7].x___; 24: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 25: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 26: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 27: TEX temp[12].x, input[4].xy__, 2D[6]; 28: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 29: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 30: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 31: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 32: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 33: MUL temp[7].x, temp[7].x___, temp[7].x___; 34: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 35: TEX temp[9].xyz, input[7].xy__, 2D[7]; 36: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 37: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 38: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 39: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 40: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 41: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 42: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 43: TEX temp[7].xyz, input[6].xy__, 2D[9]; 44: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 45: MAD_SAT output[0].xyz, input[1].xxx_, (const[8] - temp[11]).xyz_, temp[11].xyz_; 46: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 47: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 48: DP3_SAT output[0].w, temp[7].xyz_, const[10].xyz_; CONST[5] = { 2.0000 -1.0000 1.0000 4.0000 } CONST[6] = { 0.3000 0.5900 0.1100 0.0000 } CONST[7] = { 1.0000 4.0000 3.0000 0.5000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: TEX temp[2].x, input[6].xy__, 2D[1]; 5: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 6: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 7: RSQ temp[3].x, |temp[3].x___|; 8: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 9: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 10: RSQ temp[4].x, |temp[4].x___|; 11: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: MOV temp[5].x, temp[5].w___; 14: MAD temp[5].xy, temp[5].xy__, const[5].xx__, none.-1-1__; 15: TEX temp[6].yw, temp[0].xy__, 2D[4]; 16: MOV temp[6].x, temp[6].w___; 17: MAD temp[6].xy, temp[6].xy__, const[5].xx__, none.-1-1__; 18: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[7].x, none.1___, -temp[7].x___; 22: RSQ temp[7].x, |temp[7].x___|; 23: RCP temp[5].z, temp[7].x___; 24: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 25: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 26: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 27: TEX temp[12].x, input[4].xy__, 2D[6]; 28: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 29: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 30: MUL temp[8].xyz, temp[1].xyz_, const[1].xyz_; 31: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 32: MAD_SAT temp[7].x, temp[3].x___, const[7].y___, -const[7].z___; 33: MUL temp[7].x, temp[7].x___, temp[7].x___; 34: MUL temp[7].xyz, temp[7].xxx_, const[2].xyz_; 35: TEX temp[9].xyz, input[7].xy__, 2D[7]; 36: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 37: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 38: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 39: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 40: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 41: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 42: MAD temp[11].xyz, temp[1].xyz_, const[3].xyz_, temp[11].xyz_; 43: TEX temp[7].xyz, input[6].xy__, 2D[9]; 44: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 45: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[11]).xyz_, temp[11].xyz_; 46: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 47: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 48: DP3_SAT output[0].w, temp[7].xyz_, const[6].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[14].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: TEX temp[16].x, input[6].xy__, 2D[1]; 5: MUL_SAT temp[17].x, temp[16].x___, input[3].w___; 6: DP3 temp[18].x, input[8].xyz_, input[8].xyz_; 7: RSQ temp[19].x, |temp[18].x___|; 8: MUL temp[20].xyz, temp[19].xxx_, input[8].xyz_; 9: DP3 temp[21].x, input[2].xyz_, input[2].xyz_; 10: RSQ temp[22].x, |temp[21].x___|; 11: MUL temp[23].xyz, temp[22].xxx_, input[2].xyz_; 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: MOV temp[5].x, temp[5].w___; 14: MAD temp[24].xy, temp[5].xy__, const[5].xx__, none.-1-1__; 15: TEX temp[6].yw, temp[14].xy__, 2D[4]; 16: MOV temp[6].x, temp[6].w___; 17: MAD temp[25].xy, temp[6].xy__, const[5].xx__, none.-1-1__; 18: MAD temp[5].xy, temp[17].xx__, temp[25].xy__, temp[24].xy__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[26].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[27].x, none.1___, -temp[26].x___; 22: RSQ temp[28].x, |temp[27].x___|; 23: RCP temp[5].z, temp[28].x___; 24: DP3_SAT temp[29].x, temp[23].xyz_, temp[5].xyz_; 25: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 26: MUL temp[31].xyz, temp[29].xxx_, temp[30].xyz_; 27: TEX temp[32].x, input[4].xy__, 2D[6]; 28: MUL temp[33].xyz, temp[31].xyz_, temp[32].xxx_; 29: MUL temp[34].xyz, temp[15].xyz_, input[0].xyz_; 30: MUL temp[35].xyz, temp[34].xyz_, const[1].xyz_; 31: DP3 temp[36].x, temp[20].xyz_, temp[5].xyz_; 32: MAD_SAT temp[37].x, temp[36].x___, const[7].y___, -const[7].z___; 33: MUL temp[38].x, temp[37].x___, temp[37].x___; 34: MUL temp[39].xyz, temp[38].xxx_, const[2].xyz_; 35: TEX temp[40].xyz, input[7].xy__, 2D[7]; 36: ADD temp[41].xyz, temp[40].xyz_, temp[40].xyz_; 37: TEX temp[42].xyz, temp[14].xy__, 2D[8]; 38: ADD temp[43].xyz, temp[42].xyz_, -none.HHH_; 39: MAD temp[44].xyz, temp[17].xxx_, temp[43].xyz_, temp[41].xyz_; 40: MAD temp[45].xyz, temp[39].xyz_, temp[44].xyz_, temp[35].xyz_; 41: MUL temp[46].xyz, temp[33].xyz_, temp[45].xyz_; 42: MAD temp[47].xyz, temp[34].xyz_, const[3].xyz_, temp[46].xyz_; 43: TEX temp[48].xyz, input[6].xy__, 2D[9]; 44: ADD temp[49].xyz, temp[48].xyz_, temp[47].xyz_; 45: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[49]).xyz_, temp[49].xyz_; 46: MUL temp[50].xyz, temp[48].xyz_, temp[44].xyz_; 47: MUL temp[51].xyz, temp[50].xyz_, temp[33].xyz_; 48: DP3_SAT output[0].w, temp[51].xyz_, const[6].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: TEX temp[16].x, input[6].xy__, 2D[1]; 5: src0.xyz = temp[16], src0.w = input[3] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 6: src0.xyz = input[8] DP3 temp[18].x, src0.xyz, src0.xyz 7: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 8: src0.xyz = temp[19], src1.xyz = input[8] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 9: src0.xyz = input[2] DP3 temp[21].x, src0.xyz, src0.xyz 10: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 11: src0.xyz = temp[22], src1.xyz = input[2] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 14: src0.xyz = temp[5], src1.xyz = const[5] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 15: TEX temp[6].yw, temp[14].xy__, 2D[4]; 16: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 17: src0.xyz = temp[6], src1.xyz = const[5] MAD temp[25].xy, src0.xy_, src1.xx_, -src0.11_ 18: src0.xyz = temp[17], src1.xyz = temp[25], src2.xyz = temp[24] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 19: MAD temp[5].z, src0.__0, src0.111, src0.000 20: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 21: src0.xyz = temp[26] MAD temp[27].x, src0.1__, src0.111, -src0.x__ 22: src0.xyz = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.x| 23: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 24: src0.xyz = temp[23], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 25: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 26: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 27: TEX temp[32].x, input[4].xy__, 2D[6]; 28: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[20], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 32: src0.xyz = temp[36], src1.xyz = const[7] MAD_SAT temp[37].x, src0.x__, src1.y__, -src1.z__ 33: src0.xyz = temp[37] MAD temp[38].x, src0.x__, src0.x__, src0.000 34: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 35: TEX temp[40].xyz, input[7].xy__, 2D[7]; 36: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 37: TEX temp[42].xyz, temp[14].xy__, 2D[8]; 38: src0.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src0.111, -src0.HHH 39: src0.xyz = temp[17], src1.xyz = temp[43], src2.xyz = temp[41] MAD temp[44].xyz, src0.xxx, src1.xyz, src2.xyz 40: src0.xyz = temp[39], src1.xyz = temp[44], src2.xyz = temp[35] MAD temp[45].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[33], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xyz, src2.xyz 43: TEX temp[48].xyz, input[6].xy__, 2D[9]; 44: src0.xyz = temp[48], src1.xyz = temp[47] MAD temp[49].xyz, src0.xyz, src0.111, src1.xyz 45: src0.xyz = temp[49], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 46: src0.xyz = temp[48], src1.xyz = temp[44] MAD temp[50].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[50], src1.xyz = temp[33] MAD temp[51].xyz, src0.xyz, src1.xyz, src0.000 48: src0.xyz = temp[51], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[16].x, input[6].xy__, 2D[1]; 3: TEX temp[5].yw, input[3].xy__, 2D[3]; 4: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 5: TEX temp[32].x, input[4].xy__, 2D[6]; 6: TEX temp[40].xyz, input[7].xy__, 2D[7]; 7: TEX temp[48].xyz, input[6].xy__, 2D[9]; 8: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 9: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 10: src0.xyz = temp[5], src1.xyz = const[5] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 11: src0.xyz = temp[16], src0.w = input[3] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 12: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 13: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 14: MAD temp[5].z, src0.__0, src0.111, src0.000 15: src0.xyz = input[2] DP3 temp[21].x, src0.xyz, src0.xyz 16: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 17: src0.xyz = temp[22], src1.xyz = input[2] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 18: src0.xyz = input[8] DP3 temp[18].x, src0.xyz, src0.xyz 19: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 20: src0.xyz = temp[19], src1.xyz = input[8] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 21: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 22: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 23: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 24: BEGIN_TEX; 25: TEX temp[42].xyz, temp[14].xy__, 2D[8]; 26: TEX temp[6].yw, temp[14].xy__, 2D[4]; 27: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 28: src0.xyz = temp[6], src1.xyz = const[5] MAD temp[25].xy, src0.xy_, src1.xx_, -src0.11_ 29: src0.xyz = temp[17], src1.xyz = temp[25], src2.xyz = temp[24] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 30: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 31: src0.xyz = temp[42], src1.xyz = temp[26] MAD temp[43].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[27].w, src0.1, src0.1, -src1.x 32: src0.xyz = temp[27], src0.w = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.w| 33: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 34: src0.xyz = temp[23], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 35: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 36: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 37: src0.xyz = temp[20], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 38: src0.xyz = temp[17], src1.xyz = temp[43], src2.xyz = temp[41] MAD temp[44].xyz, src0.xxx, src1.xyz, src2.xyz 39: src0.xyz = temp[48], src1.xyz = temp[44] MAD temp[50].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[50], src1.xyz = temp[33] MAD temp[51].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[51], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 42: src0.xyz = temp[36], src1.xyz = const[7] MAD_SAT temp[37].w, src0.x, src1.y, -src1.z 43: src0.xyz = temp[37], src0.w = temp[37] MAD temp[38].x, src0.w__, src0.w__, src0.000 44: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 45: src0.xyz = temp[39], src1.xyz = temp[44], src2.xyz = temp[35] MAD temp[45].xyz, src0.xyz, src1.xyz, src2.xyz 46: src0.xyz = temp[33], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xyz, src2.xyz 48: src0.xyz = temp[48], src1.xyz = temp[47] MAD temp[49].xyz, src0.xyz, src0.111, src1.xyz 49: src0.xyz = temp[49], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[16].x, input[6].xy__, 2D[1]; 3: TEX temp[5].yw, input[3].xy__, 2D[3]; 4: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 5: TEX temp[32].x, input[4].xy__, 2D[6]; 6: TEX temp[40].xyz, input[7].xy__, 2D[7]; 7: TEX temp[48].xyz, input[6].xy__, 2D[9]; 8: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 9: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 10: src0.xyz = temp[5], src1.xyz = const[5] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 11: src0.xyz = temp[16], src0.w = input[3] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 12: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 13: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 14: MAD temp[5].z, src0.__0, src0.111, src0.000 15: src0.xyz = input[2] DP3 temp[21].x, src0.xyz, src0.xyz 16: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 17: src0.xyz = temp[22], src1.xyz = input[2] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 18: src0.xyz = input[8] DP3 temp[18].x, src0.xyz, src0.xyz 19: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 20: src0.xyz = temp[19], src1.xyz = input[8] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 21: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 22: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 23: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 24: BEGIN_TEX; 25: TEX temp[42].xyz, temp[14].xy__, 2D[8]; 26: TEX temp[6].yw, temp[14].xy__, 2D[4]; 27: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 28: src0.xyz = temp[6], src1.xyz = const[5] MAD temp[25].xy, src0.xy_, src1.xx_, -src0.11_ 29: src0.xyz = temp[17], src1.xyz = temp[25], src2.xyz = temp[24] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 30: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 31: src0.xyz = temp[42], src1.xyz = temp[26] MAD temp[43].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[27].w, src0.1, src0.1, -src1.x 32: src0.w = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.w| 33: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 34: src0.xyz = temp[23], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 35: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 36: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 37: src0.xyz = temp[20], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 38: src0.xyz = temp[17], src1.xyz = temp[43], src2.xyz = temp[41] MAD temp[44].xyz, src0.xxx, src1.xyz, src2.xyz 39: src0.xyz = temp[48], src1.xyz = temp[44] MAD temp[50].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[50], src1.xyz = temp[33] MAD temp[51].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[51], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 42: src0.xyz = temp[36], src1.xyz = const[7] MAD_SAT temp[37].w, src0.x, src1.y, -src1.z 43: src0.w = temp[37] MAD temp[38].x, src0.w__, src0.w__, src0.000 44: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 45: src0.xyz = temp[39], src1.xyz = temp[44], src2.xyz = temp[35] MAD temp[45].xyz, src0.xyz, src1.xyz, src2.xyz 46: src0.xyz = temp[33], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xyz, src2.xyz 48: src0.xyz = temp[48], src1.xyz = temp[47] MAD temp[49].xyz, src0.xyz, src0.111, src1.xyz 49: src0.xyz = temp[49], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[10].x, input[6].xy__, 2D[1]; 3: TEX temp[11].yw, input[3].xy__, 2D[3]; 4: TXP temp[5].xyz, input[5].xy_w, 2D[5]; 5: TEX temp[4].x, input[4].xy__, 2D[6]; 6: TEX temp[7].xyz, input[7].xy__, 2D[7]; 7: TEX temp[6].xyz, input[6].xy__, 2D[9]; 8: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 9: src0.w = temp[11] MAD temp[11].x, src0.w__, src0.11_, src0.00_ 10: src0.xyz = temp[11], src1.xyz = const[5] MAD temp[11].xy, src0.xy_, src1.xx_, -src0.11_ 11: src0.xyz = temp[10], src0.w = input[3] MAD_SAT temp[1].y, src0._x_, src0._w_, src0._0_ 12: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 13: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[9].xyz, src0.xyz, src1.xyz, src0.000 14: MAD temp[10].z, src0.__0, src0.111, src0.000 15: src0.xyz = input[2] DP3 temp[1].z, src0.xyz, src0.xyz 16: src0.xyz = temp[1] REPL_ALPHA temp[1].z RSQ, |src0.z| 17: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.zzz, src1.xyz, src0.000 18: src0.xyz = input[8] DP3 temp[1].z, src0.xyz, src0.xyz 19: src0.xyz = temp[1] REPL_ALPHA temp[1].z RSQ, |src0.z| 20: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[8].xyz, src0.zzz, src1.xyz, src0.000 21: src0.w = const[0] MAD temp[12].y, src0._w_, src0.11_, src0.00_ 22: src0.xyz = const[0] MAD temp[12].x, src0.z__, src0.11_, src0.00_ 23: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[12] MAD temp[3].xy, src0.xy_, src1.xy_, src2.xy_ 24: BEGIN_TEX; 25: TEX temp[12].xyz, temp[3].xy__, 2D[8]; 26: TEX temp[3].yw, temp[3].xy__, 2D[4]; 27: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 28: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 29: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[11] MAD temp[10].xy, src0.yy_, src1.xy_, src2.xy_ 30: src0.xyz = temp[10] DP3 temp[1].z, src0.xyz, src0.xyz 31: src0.xyz = temp[12], src1.xyz = temp[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.1, src0.1, -src1.z 32: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 33: src0.xyz = temp[1] REPL_ALPHA temp[1].z RCP, src0.z 34: src0.xyz = temp[2], src1.xyz = temp[10], src2.xyz = temp[1] DP3_SAT temp[2].x, src0.xyz, src2.xyz 35: src0.xyz = temp[2], src1.xyz = temp[5] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 36: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 37: src0.xyz = temp[8], src1.xyz = temp[10], src2.xyz = temp[1] DP3 temp[1].z, src0.xyz, src2.xyz 38: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[7] MAD temp[3].xyz, src0.yyy, src1.xyz, src2.xyz 39: src0.xyz = temp[6], src1.xyz = temp[3] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[4], src1.xyz = temp[2] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[4], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 42: src0.xyz = temp[1], src1.xyz = const[7] MAD_SAT temp[0].w, src0.z, src1.y, -src1.z 43: src0.w = temp[0] MAD temp[1].y, src0._w_, src0._w_, src0._0_ 44: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 45: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = temp[9] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 46: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 48: src0.xyz = temp[6], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src1.xyz 49: src0.xyz = temp[0], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz pc=43************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 6 (code_addr: 000c03c0) TEX: TEX t9, t6, texture[0] (00008246) TEX t10, t6, texture[1] (00008a86) TEX t11, t3, texture[3] (00009ac3) TXP t5, t5, texture[5] (0001a945) TEX t4, t4, texture[6] (0000b104) TEX t7, t7, texture[7] (0000b9c7) TEX t6, t6, texture[9] (0000c986) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 1: xyz: t0 t0 t0 bias-> t11.x (00ac0000) w: t11 t0 t0 bias-> (0000000b) xyz: t11.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t11 c5 t0 bias-> t11.xy (01ac094b) w: t0 t0 t0 bias-> (00000000) xyz: t11.xyz c5.xxx -1.0 op: 000d4280 w: t11.x t11.x t11.x op: 00000000 3: xyz: t10 t0 t0 bias-> t1.y (0104000a) w: t3 t0 t0 bias-> (00000003) xyz: t10.xxx t3.www 0.0 op: 40050601 w: t10.x t10.x t10.x op: 00000000 4: xyz: t9 t0 t0 bias-> t0.xyz (03800009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t0.xyz 0.0 op: 00050200 w: t9.x t9.x t9.x op: 00000000 5: xyz: t0 c1 t0 bias-> t9.xyz (03a40840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 t0 t0 bias-> t10.z (02280000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 7: xyz: t2 t0 t0 bias-> t1.z (02040002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 8: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.z| t1.x t1.x op: 05800042 9: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz t2.xyz 0.0 op: 00050203 w: t1.x t1.x t1.x op: 00000000 10: xyz: t8 t0 t0 bias-> t1.z (02040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 11: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.z| t1.x t1.x op: 05800042 12: xyz: t1 t8 t0 bias-> t8.xyz (03a00201) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz t8.xyz 0.0 op: 00050203 w: t1.x t1.x t1.x op: 00000000 13: xyz: t0 t0 t0 bias-> t12.y (01300000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 14: xyz: c0 t0 t0 bias-> t12.x (00b00020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 15: xyz: t3 c0 t12 bias-> t3.xy (018cc803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz t12.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 16, tex_offset: 7, alu_end: 22, tex_end: 1 (code_addr: 00427590) TEX: TEX t12, t3, texture[8] (0000c303) TEX t3, t3, texture[4] (0000a0c3) 16: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 17: xyz: t3 c5 t0 bias-> t3.xy (018c0943) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c5.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 18: xyz: t1 t3 t11 bias-> t10.xy (01a8b0c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t11.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 19: xyz: t10 t0 t0 bias-> t1.z (0204000a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xyz t10.xyz t10.xxx op: 00804000 w: t10.x t10.x t10.x op: 00000000 20: xyz: t12 t1 t0 bias-> t3.xyz (038c004c) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t12.xyz 1.0 -0.5 op: 000d8a80 w: 1.0 1.0 -t1.z op: 00094891 21: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 22: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 23: xyz: t2 t10 t1 bias-> t2.x (00881282) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t1.xyz t2.xxx op: 40804400 w: t2.x t2.x t2.x op: 00000000 24: xyz: t2 t5 t0 bias-> t2.xyz (03880142) w: t0 t0 t0 bias-> (00000000) xyz: t2.xxx t5.xyz 0.0 op: 00050201 w: t2.x t2.x t2.x op: 00000000 25: 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 26: xyz: t8 t10 t1 bias-> t1.z (02041288) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t1.xyz t8.xxx op: 00804400 w: t8.x t8.x t8.x op: 00000000 27: xyz: t1 t3 t7 bias-> t3.xyz (038c70c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t7.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 28: xyz: t6 t3 t0 bias-> t4.xyz (039000c6) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t3.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 29: xyz: t4 t2 t0 bias-> t4.xyz (03900084) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t2.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 30: xyz: t4 c6 t0 bias-> (00000984) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t4.xyz c6.xyz t4.xxx op: 40804200 w: 1.0 1.0 t4.x op: 40800891 31: xyz: t1 c7 t0 bias-> (000009c1) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xxx t1.xxx t1.xxx op: 00004081 w: t1.z c7.y -c7.z op: 40094202 32: xyz: t32 t0 t0 bias-> t1.y (01040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t0.www 0.0 op: 0005060c w: t32.x t32.x t32.x op: 00000000 33: xyz: t1 c2 t0 bias-> t4.xyz (03900881) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 34: xyz: t4 t3 t9 bias-> t3.xyz (038c90c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t9.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 35: 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 36: xyz: t0 c3 t2 bias-> t0.xyz (038028c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.xyz t2.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 37: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 1.0 t0.xyz op: 80010a80 NOP w: t6.x t6.x t6.x op: 00000000 38: xyz: t0 c4 t1 sub-> o0.xyz (1c001900) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL CONST[4..8] DCL TEMP[0..7] IMM FLT32 { 2.0000, -1.0000, 1.0000, 4.0000} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.0000} 0: TEX TEMP[0], IN[6], SAMP[0], 2D 1: DP3 TEMP[1].x, IN[8], IN[8] 2: RSQ TEMP[1].x, TEMP[1].xxxx 3: MUL TEMP[1], TEMP[1].xxxx, IN[8] 4: DP3 TEMP[2].x, IN[2], IN[2] 5: RSQ TEMP[2].x, TEMP[2].xxxx 6: MUL TEMP[2], TEMP[2].xxxx, IN[2] 7: TEX TEMP[3], IN[3], SAMP[2], 2D 8: MOV TEMP[3].x, TEMP[3].wwww 9: MAD TEMP[3], TEMP[3], IMM[0].xxxx, IMM[0].yyyy 10: MOV TEMP[3].z, IMM[1].wwww 11: DP3 TEMP[4].x, TEMP[3], TEMP[3] 12: ADD TEMP[4].x, IMM[2].xxxx, -TEMP[4].xxxx 13: RSQ TEMP[4].x, TEMP[4].xxxx 14: RCP TEMP[3].z, TEMP[4].xxxx 15: DP3_SAT TEMP[2].x, TEMP[2], TEMP[3] 16: TXP TEMP[4], IN[5], SAMP[3], 2D 17: MUL TEMP[2], TEMP[2].xxxx, TEMP[4] 18: TEX TEMP[4].x, IN[4], SAMP[4], 2D 19: MUL TEMP[2], TEMP[2], TEMP[4].xxxx 20: SUB TEMP[4].w, TEMP[0].wwww, CONST[4] 21: KIL TEMP[4].wwww 22: MUL TEMP[0], TEMP[0], IN[0] 23: MUL TEMP[5], TEMP[0], CONST[5] 24: DP3 TEMP[1].x, TEMP[1], TEMP[3] 25: MAD_SAT TEMP[4].x, TEMP[1].xxxx, IMM[2].yyyy, -IMM[2].zzzz 26: MUL TEMP[4].x, TEMP[4].xxxx, TEMP[4].xxxx 27: MUL TEMP[4], TEMP[4].xxxx, CONST[6] 28: TEX TEMP[6], IN[7], SAMP[5], 2D 29: ADD TEMP[6], TEMP[6], TEMP[6] 30: MAD TEMP[5], TEMP[4], TEMP[6], TEMP[5] 31: MUL TEMP[7].xyz, TEMP[2], TEMP[5] 32: MAD TEMP[7].xyz, TEMP[0], CONST[7], TEMP[7] 33: LRP OUT[0].xyz, IN[1].xxxx, CONST[8], TEMP[7] 34: MUL TEMP[4], TEMP[4], TEMP[6] 35: MUL TEMP[4], TEMP[4], TEMP[2] 36: DP3 OUT[0].w, TEMP[4], IMM[1] 37: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[9].xxxx, const[9].yyyy; 10: MOV temp[3].z, const[10].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[11].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: SUB temp[4].w, temp[0].wwww, const[4]; 21: KIL temp[4].wwww; 22: MUL temp[0], temp[0], input[0]; 23: MUL temp[5], temp[0], const[5]; 24: DP3 temp[1].x, temp[1], temp[3]; 25: MAD_SAT temp[4].x, temp[1].xxxx, const[11].yyyy, -const[11].zzzz; 26: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 27: MUL temp[4], temp[4].xxxx, const[6]; 28: TEX temp[6], input[7], 2D[5]; 29: ADD temp[6], temp[6], temp[6]; 30: MAD temp[5], temp[4], temp[6], temp[5]; 31: MUL temp[7].xyz, temp[2], temp[5]; 32: MAD temp[7].xyz, temp[0], const[7], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[8], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[10]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[9].xxxx, const[9].yyyy; 10: MOV temp[3].z, const[10].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[11].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: SUB temp[4].w, temp[0].wwww, const[4]; 21: KIL temp[4].wwww; 22: MUL temp[0], temp[0], input[0]; 23: MUL temp[5], temp[0], const[5]; 24: DP3 temp[1].x, temp[1], temp[3]; 25: MAD_SAT temp[4].x, temp[1].xxxx, const[11].yyyy, -const[11].zzzz; 26: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 27: MUL temp[4], temp[4].xxxx, const[6]; 28: TEX temp[6], input[7], 2D[5]; 29: ADD temp[6], temp[6], temp[6]; 30: MAD temp[5], temp[4], temp[6], temp[5]; 31: MUL temp[7].xyz, temp[2], temp[5]; 32: MAD temp[7].xyz, temp[0], const[7], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[8], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[10]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[9].xxxx, const[9].yyyy; 10: MOV temp[3].z, const[10].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[11].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: SUB temp[4].w, temp[0].wwww, const[4]; 21: KIL temp[4].wwww; 22: MUL temp[0], temp[0], input[0]; 23: MUL temp[5], temp[0], const[5]; 24: DP3 temp[1].x, temp[1], temp[3]; 25: MAD_SAT temp[4].x, temp[1].xxxx, const[11].yyyy, -const[11].zzzz; 26: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 27: MUL temp[4], temp[4].xxxx, const[6]; 28: TEX temp[6], input[7], 2D[5]; 29: ADD temp[6], temp[6], temp[6]; 30: MAD temp[5], temp[4], temp[6], temp[5]; 31: MUL temp[7].xyz, temp[2], temp[5]; 32: MAD temp[7].xyz, temp[0], const[7], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[8], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[10]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[9].xxxx, const[9].yyyy; 10: MOV temp[3].z, const[10].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[11].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: SUB temp[4].w, temp[0].wwww, const[4]; 21: KIL temp[4].wwww; 22: MUL temp[0], temp[0], input[0]; 23: MUL temp[5], temp[0], const[5]; 24: DP3 temp[1].x, temp[1], temp[3]; 25: MAD_SAT temp[4].x, temp[1].xxxx, const[11].yyyy, -const[11].zzzz; 26: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 27: MUL temp[4], temp[4].xxxx, const[6]; 28: TEX temp[6], input[7], 2D[5]; 29: ADD temp[6], temp[6], temp[6]; 30: MAD temp[5], temp[4], temp[6], temp[5]; 31: MUL temp[7].xyz, temp[2], temp[5]; 32: MAD temp[7].xyz, temp[0], const[7], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[8], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[10]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[9].xxxx, const[9].yyyy; 10: MOV temp[3].z, const[10].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[11].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: SUB temp[4].w, temp[0].wwww, const[4]; 21: KIL temp[4].wwww; 22: MUL temp[0], temp[0], input[0]; 23: MUL temp[5], temp[0], const[5]; 24: DP3 temp[1].x, temp[1], temp[3]; 25: MAD_SAT temp[4].x, temp[1].xxxx, const[11].yyyy, -const[11].zzzz; 26: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 27: MUL temp[4], temp[4].xxxx, const[6]; 28: TEX temp[6], input[7], 2D[5]; 29: ADD temp[6], temp[6], temp[6]; 30: MAD temp[5], temp[4], temp[6], temp[5]; 31: MUL temp[7].xyz, temp[2], temp[5]; 32: MAD temp[7].xyz, temp[0], const[7], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[8], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[10]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[9].xxxx, const[9].yyyy; 10: MOV temp[3].z, const[10].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[11].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: SUB temp[4].w, temp[0].wwww, const[4]; 21: KIL temp[4].wwww; 22: MUL temp[0], temp[0], input[0]; 23: MUL temp[5], temp[0], const[5]; 24: DP3 temp[1].x, temp[1], temp[3]; 25: MAD_SAT temp[4].x, temp[1].xxxx, const[11].yyyy, -const[11].zzzz; 26: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 27: MUL temp[4], temp[4].xxxx, const[6]; 28: TEX temp[6], input[7], 2D[5]; 29: ADD temp[6], temp[6], temp[6]; 30: MAD temp[5], temp[4], temp[6], temp[5]; 31: MUL temp[7].xyz, temp[2], temp[5]; 32: MAD temp[7].xyz, temp[0], const[7], temp[7]; 33: LRP_SAT output[0].xyz, input[1].xxxx, const[8], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3_SAT output[0].w, temp[4], const[10]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[9].xxxx, const[9].yyyy; 10: MOV temp[3].z, const[10].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[11].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: SUB temp[4].w, temp[0].wwww, const[4]; 22: KIL temp[4].wwww; 23: MUL temp[0], temp[0], input[0]; 24: MUL temp[5], temp[0], const[5]; 25: DP3 temp[1].x, temp[1], temp[3]; 26: MAD_SAT temp[4].x, temp[1].xxxx, const[11].yyyy, -const[11].zzzz; 27: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 28: MUL temp[4], temp[4].xxxx, const[6]; 29: TEX temp[6], input[7], 2D[5]; 30: ADD temp[6], temp[6], temp[6]; 31: MAD temp[5], temp[4], temp[6], temp[5]; 32: MUL temp[7].xyz, temp[2], temp[5]; 33: MAD temp[7].xyz, temp[0], const[7], temp[7]; 34: LRP_SAT output[0].xyz, input[1].xxxx, const[8], temp[7]; 35: MUL temp[4], temp[4], temp[6]; 36: MUL temp[4], temp[4], temp[2]; 37: DP3_SAT output[0].w, temp[4], const[10]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, |temp[1].xxxx|; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, |temp[2].xxxx|; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[9].xxxx, const[9].yyyy; 10: MOV temp[3].z, const[10].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[11].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, |temp[4].xxxx|; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: ADD temp[4].w, temp[0].wwww, -const[4]; 22: KIL temp[4].wwww; 23: MUL temp[0], temp[0], input[0]; 24: MUL temp[5], temp[0], const[5]; 25: DP3 temp[1].x, temp[1], temp[3]; 26: MAD_SAT temp[4].x, temp[1].xxxx, const[11].yyyy, -const[11].zzzz; 27: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 28: MUL temp[4], temp[4].xxxx, const[6]; 29: TEX temp[6], input[7], 2D[5]; 30: ADD temp[6], temp[6], temp[6]; 31: MAD temp[5], temp[4], temp[6], temp[5]; 32: MUL temp[7].xyz, temp[2], temp[5]; 33: MAD temp[7].xyz, temp[0], const[7], temp[7]; 34: ADD temp[9].xyz, const[8], -temp[7]; 35: MAD_SAT output[0].xyz, input[1].xxxx, temp[9], temp[7]; 36: MUL temp[4], temp[4], temp[6]; 37: MUL temp[4], temp[4], temp[2]; 38: DP3_SAT output[0].w, temp[4], const[10]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[9].xx__, const[9].yy__; 10: MOV temp[3].z, const[10].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[11].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: ADD temp[4].w, temp[0].___w, -const[4].___w; 22: KIL temp[4].wwww; 23: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 24: MUL temp[5].xyz, temp[0].xyz_, const[5].xyz_; 25: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 26: MAD_SAT temp[4].x, temp[1].x___, const[11].y___, -const[11].z___; 27: MUL temp[4].x, temp[4].x___, temp[4].x___; 28: MUL temp[4].xyz, temp[4].xxx_, const[6].xyz_; 29: TEX temp[6].xyz, input[7].xy__, 2D[5]; 30: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 31: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 32: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 33: MAD temp[7].xyz, temp[0].xyz_, const[7].xyz_, temp[7].xyz_; 34: ADD temp[9].xyz, const[8].xyz_, -temp[7].xyz_; 35: MAD_SAT output[0].xyz, input[1].xxx_, temp[9].xyz_, temp[7].xyz_; 36: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 37: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 38: DP3_SAT output[0].w, temp[4].xyz_, const[10].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[9].xx__, const[9].yy__; 10: MOV temp[3].z, const[10].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[11].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: ADD temp[4].w, temp[0].___w, -const[4].___w; 22: KIL temp[4].wwww; 23: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 24: MUL temp[5].xyz, temp[0].xyz_, const[5].xyz_; 25: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 26: MAD_SAT temp[4].x, temp[1].x___, const[11].y___, -const[11].z___; 27: MUL temp[4].x, temp[4].x___, temp[4].x___; 28: MUL temp[4].xyz, temp[4].xxx_, const[6].xyz_; 29: TEX temp[6].xyz, input[7].xy__, 2D[5]; 30: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 31: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 32: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 33: MAD temp[7].xyz, temp[0].xyz_, const[7].xyz_, temp[7].xyz_; 34: ADD temp[9].xyz, const[8].xyz_, -temp[7].xyz_; 35: MAD_SAT output[0].xyz, input[1].xxx_, temp[9].xyz_, temp[7].xyz_; 36: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 37: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 38: DP3_SAT output[0].w, temp[4].xyz_, const[10].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[9].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: KIL (temp[0] - const[4]).wwww; 21: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 22: MUL temp[5].xyz, temp[0].xyz_, const[5].xyz_; 23: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 24: MAD_SAT temp[4].x, temp[1].x___, const[11].y___, -const[11].z___; 25: MUL temp[4].x, temp[4].x___, temp[4].x___; 26: MUL temp[4].xyz, temp[4].xxx_, const[6].xyz_; 27: TEX temp[6].xyz, input[7].xy__, 2D[5]; 28: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 29: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 30: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 31: MAD temp[7].xyz, temp[0].xyz_, const[7].xyz_, temp[7].xyz_; 32: MAD_SAT output[0].xyz, input[1].xxx_, (const[8] - temp[7]).xyz_, temp[7].xyz_; 33: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 35: DP3_SAT output[0].w, temp[4].xyz_, const[10].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[9].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MOV temp[9], (temp[0] - const[4]).wwww; 21: KIL temp[9]; 22: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 23: MUL temp[5].xyz, temp[0].xyz_, const[5].xyz_; 24: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 25: MAD_SAT temp[4].x, temp[1].x___, const[11].y___, -const[11].z___; 26: MUL temp[4].x, temp[4].x___, temp[4].x___; 27: MUL temp[4].xyz, temp[4].xxx_, const[6].xyz_; 28: TEX temp[6].xyz, input[7].xy__, 2D[5]; 29: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 30: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 31: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 32: MAD temp[7].xyz, temp[0].xyz_, const[7].xyz_, temp[7].xyz_; 33: MAD_SAT output[0].xyz, input[1].xxx_, (const[8] - temp[7]).xyz_, temp[7].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 35: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 36: DP3_SAT output[0].w, temp[4].xyz_, const[10].xyz_; CONST[5] = { 2.0000 -1.0000 1.0000 4.0000 } CONST[6] = { 0.3000 0.5900 0.1100 0.0000 } CONST[7] = { 1.0000 4.0000 3.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[5].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MOV temp[9], (temp[0] - const[0]).wwww; 21: KIL temp[9]; 22: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 23: MUL temp[5].xyz, temp[0].xyz_, const[1].xyz_; 24: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 25: MAD_SAT temp[4].x, temp[1].x___, const[7].y___, -const[7].z___; 26: MUL temp[4].x, temp[4].x___, temp[4].x___; 27: MUL temp[4].xyz, temp[4].xxx_, const[2].xyz_; 28: TEX temp[6].xyz, input[7].xy__, 2D[5]; 29: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 30: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 31: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 32: MAD temp[7].xyz, temp[0].xyz_, const[3].xyz_, temp[7].xyz_; 33: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[7]).xyz_, temp[7].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 35: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 36: DP3_SAT output[0].w, temp[4].xyz_, const[6].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[10], input[6].xy__, 2D[0]; 1: DP3 temp[11].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[12].x, |temp[11].x___|; 3: MUL temp[13].xyz, temp[12].xxx_, input[8].xyz_; 4: DP3 temp[14].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[15].x, |temp[14].x___|; 6: MUL temp[16].xyz, temp[15].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[5].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[17].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[18].x, none.1___, -temp[17].x___; 13: RSQ temp[19].x, |temp[18].x___|; 14: RCP temp[3].z, temp[19].x___; 15: DP3_SAT temp[20].x, temp[16].xyz_, temp[3].xyz_; 16: TXP temp[21].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[22].xyz, temp[20].xxx_, temp[21].xyz_; 18: TEX temp[23].x, input[4].xy__, 2D[4]; 19: MUL temp[24].xyz, temp[22].xyz_, temp[23].xxx_; 20: MOV temp[25], (temp[10] - const[0]).wwww; 21: KIL temp[25]; 22: MUL temp[26].xyz, temp[10].xyz_, input[0].xyz_; 23: MUL temp[27].xyz, temp[26].xyz_, const[1].xyz_; 24: DP3 temp[28].x, temp[13].xyz_, temp[3].xyz_; 25: MAD_SAT temp[29].x, temp[28].x___, const[7].y___, -const[7].z___; 26: MUL temp[30].x, temp[29].x___, temp[29].x___; 27: MUL temp[31].xyz, temp[30].xxx_, const[2].xyz_; 28: TEX temp[32].xyz, input[7].xy__, 2D[5]; 29: ADD temp[33].xyz, temp[32].xyz_, temp[32].xyz_; 30: MAD temp[34].xyz, temp[31].xyz_, temp[33].xyz_, temp[27].xyz_; 31: MUL temp[35].xyz, temp[24].xyz_, temp[34].xyz_; 32: MAD temp[36].xyz, temp[26].xyz_, const[3].xyz_, temp[35].xyz_; 33: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[36]).xyz_, temp[36].xyz_; 34: MUL temp[37].xyz, temp[31].xyz_, temp[33].xyz_; 35: MUL temp[38].xyz, temp[37].xyz_, temp[24].xyz_; 36: DP3_SAT output[0].w, temp[38].xyz_, const[6].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[10], input[6].xy__, 2D[0]; 1: src0.xyz = input[8] DP3 temp[11].x, src0.xyz, src0.xyz 2: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 3: src0.xyz = temp[12], src1.xyz = input[8] MAD temp[13].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = input[2] DP3 temp[14].x, src0.xyz, src0.xyz 5: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 6: src0.xyz = temp[15], src1.xyz = input[2] MAD temp[16].xyz, src0.xxx, src1.xyz, src0.000 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: MAD temp[3].z, src0.__0, src0.111, src0.000 11: src0.xyz = temp[3] DP3 temp[17].x, src0.xyz, src0.xyz 12: src0.xyz = temp[17] MAD temp[18].x, src0.1__, src0.111, -src0.x__ 13: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 14: src0.xyz = temp[19] REPL_ALPHA temp[3].z RCP, src0.x 15: src0.xyz = temp[16], src1.xyz = temp[3] DP3_SAT temp[20].x, src0.xyz, src1.xyz 16: TXP temp[21].xyz, input[5].xy_w, 2D[3]; 17: src0.xyz = temp[20], src1.xyz = temp[21] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 18: TEX temp[23].x, input[4].xy__, 2D[4]; 19: src0.xyz = temp[22], src1.xyz = temp[23] MAD temp[24].xyz, src0.xyz, src1.xxx, src0.000 20: src0.w = const[0], src1.w = temp[10], srcp.w = (src1 - src0) MAD temp[25].xyz, srcp.www, src0.111, src0.000 MAD temp[25].w, srcp.w, src0.1, src0.0 21: KIL temp[25]; 22: src0.xyz = temp[10], src1.xyz = input[0] MAD temp[26].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[26], src1.xyz = const[1] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[13], src1.xyz = temp[3] DP3 temp[28].x, src0.xyz, src1.xyz 25: src0.xyz = temp[28], src1.xyz = const[7] MAD_SAT temp[29].x, src0.x__, src1.y__, -src1.z__ 26: src0.xyz = temp[29] MAD temp[30].x, src0.x__, src0.x__, src0.000 27: src0.xyz = temp[30], src1.xyz = const[2] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 28: TEX temp[32].xyz, input[7].xy__, 2D[5]; 29: src0.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src0.111, src0.xyz 30: src0.xyz = temp[31], src1.xyz = temp[33], src2.xyz = temp[27] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 31: src0.xyz = temp[24], src1.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 32: src0.xyz = temp[26], src1.xyz = const[3], src2.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src1.xyz, src2.xyz 33: src0.xyz = temp[36], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 34: src0.xyz = temp[31], src1.xyz = temp[33] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[37], src1.xyz = temp[24] MAD temp[38].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[38], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[10], input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[21].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[23].x, input[4].xy__, 2D[4]; 5: TEX temp[32].xyz, input[7].xy__, 2D[5]; 6: src0.w = const[0], src1.w = temp[10], srcp.w = (src1 - src0) MAD temp[25].xyz, srcp.www, src0.111, src0.000 MAD temp[25].w, srcp.w, src0.1, src0.0 7: src0.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[10], src1.xyz = input[0] MAD temp[26].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = temp[26], src1.xyz = const[1] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 12: MAD temp[3].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[3] DP3 temp[17].x, src0.xyz, src0.xyz 14: src0.xyz = input[2], src1.xyz = temp[17] DP3 temp[14].x, src0.xyz, src0.xyz MAD temp[18].w, src0.1, src0.1, -src1.x 15: src0.xyz = temp[18], src0.w = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.w| 16: src0.xyz = temp[19] REPL_ALPHA temp[3].z RCP, src0.x 17: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 18: src0.xyz = temp[15], src1.xyz = input[2] MAD temp[16].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[16], src1.xyz = temp[3] DP3_SAT temp[20].x, src0.xyz, src1.xyz 20: src0.xyz = temp[20], src1.xyz = temp[21] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[22], src1.xyz = temp[23] MAD temp[24].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = input[8] DP3 temp[11].x, src0.xyz, src0.xyz 23: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 24: src0.xyz = temp[12], src1.xyz = input[8] MAD temp[13].xyz, src0.xxx, src1.xyz, src0.000 25: src0.xyz = temp[13], src1.xyz = temp[3] DP3 temp[28].x, src0.xyz, src1.xyz 26: src0.xyz = temp[28], src1.xyz = const[7] MAD_SAT temp[29].x, src0.x__, src1.y__, -src1.z__ 27: src0.xyz = temp[29] MAD temp[30].x, src0.x__, src0.x__, src0.000 28: src0.xyz = temp[30], src1.xyz = const[2] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 29: src0.xyz = temp[31], src1.xyz = temp[33], src2.xyz = temp[27] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 30: src0.xyz = temp[24], src1.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[26], src1.xyz = const[3], src2.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src1.xyz, src2.xyz 32: src0.xyz = temp[36], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 33: src0.xyz = temp[31], src1.xyz = temp[33] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[37], src1.xyz = temp[24] MAD temp[38].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[38], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 36: BEGIN_TEX; 37: KIL temp[25]; Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[10], input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[21].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[23].x, input[4].xy__, 2D[4]; 5: TEX temp[32].xyz, input[7].xy__, 2D[5]; 6: src0.w = const[0], src1.w = temp[10], srcp.w = (src1 - src0) MAD temp[25].xyz, srcp.www, src0.111, src0.000 MAD temp[25].w, srcp.w, src0.1, src0.0 7: src0.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[10], src1.xyz = input[0] MAD temp[26].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = temp[26], src1.xyz = const[1] MAD temp[27].xyz, src0.xyz, src1.xyz, src0.000 12: MAD temp[3].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[3] DP3 temp[17].x, src0.xyz, src0.xyz 14: src0.xyz = input[2], src1.xyz = temp[17] DP3 temp[14].x, src0.xyz, src0.xyz MAD temp[18].w, src0.1, src0.1, -src1.x 15: src0.w = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.w| 16: src0.xyz = temp[19] REPL_ALPHA temp[3].z RCP, src0.x 17: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 18: src0.xyz = temp[15], src1.xyz = input[2] MAD temp[16].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[16], src1.xyz = temp[3] DP3_SAT temp[20].x, src0.xyz, src1.xyz 20: src0.xyz = temp[20], src1.xyz = temp[21] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[22], src1.xyz = temp[23] MAD temp[24].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = input[8] DP3 temp[11].x, src0.xyz, src0.xyz 23: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 24: src0.xyz = temp[12], src1.xyz = input[8] MAD temp[13].xyz, src0.xxx, src1.xyz, src0.000 25: src0.xyz = temp[13], src1.xyz = temp[3] DP3 temp[28].x, src0.xyz, src1.xyz 26: src0.xyz = temp[28], src1.xyz = const[7] MAD_SAT temp[29].x, src0.x__, src1.y__, -src1.z__ 27: src0.xyz = temp[29] MAD temp[30].x, src0.x__, src0.x__, src0.000 28: src0.xyz = temp[30], src1.xyz = const[2] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 29: src0.xyz = temp[31], src1.xyz = temp[33], src2.xyz = temp[27] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 30: src0.xyz = temp[24], src1.xyz = temp[34] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[26], src1.xyz = const[3], src2.xyz = temp[35] MAD temp[36].xyz, src0.xyz, src1.xyz, src2.xyz 32: src0.xyz = temp[36], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 33: src0.xyz = temp[31], src1.xyz = temp[33] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[37], src1.xyz = temp[24] MAD temp[38].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[38], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 36: BEGIN_TEX; 37: KIL temp[25]; Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6], input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[5].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[4].x, input[4].xy__, 2D[4]; 5: TEX temp[7].xyz, input[7].xy__, 2D[5]; 6: src0.w = const[0], src1.w = temp[6], srcp.w = (src1 - src0) MAD temp[9].xyz, srcp.www, src0.111, src0.000 MAD temp[9].w, srcp.w, src0.1, src0.0 7: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 9: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[6], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[6].xyz, src0.xyz, src1.xyz, src0.000 12: MAD temp[3].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[3] DP3 temp[1].y, src0.xyz, src0.xyz 14: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[0].w, src0.1, src0.1, -src1.y 15: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 16: src0.xyz = temp[1] REPL_ALPHA temp[3].z RCP, src0.z 17: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 18: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 19: src0.xyz = temp[2], src1.xyz = temp[3] DP3_SAT temp[1].y, src0.xyz, src1.xyz 20: src0.xyz = temp[1], src1.xyz = temp[5] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 21: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = input[8] DP3 temp[1].y, src0.xyz, src0.xyz 23: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 24: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 25: src0.xyz = temp[4], src1.xyz = temp[3] DP3 temp[1].y, src0.xyz, src1.xyz 26: src0.xyz = temp[1], src1.xyz = const[7] MAD_SAT temp[1].y, src0._y_, src1._y_, -src1._z_ 27: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._y_, src0._0_ 28: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[3].xyz, src0.yyy, src1.xyz, src0.000 29: src0.xyz = temp[3], src1.xyz = temp[7], src2.xyz = temp[6] MAD temp[4].xyz, src0.xyz, src1.xyz, src2.xyz 30: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 32: src0.xyz = temp[0], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 33: src0.xyz = temp[3], src1.xyz = temp[7] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[0], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 36: BEGIN_TEX; 37: KIL temp[9]; pc=44************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 29, tex_end: 4 (code_addr: 00480740) TEX: TEX t6, t6, texture[0] (00008186) TEX t3, t3, texture[2] (000090c3) TXP t5, t5, texture[3] (00019945) TEX t4, t4, texture[4] (0000a104) TEX t7, t7, texture[5] (0000a9c7) 0: xyz: t0 t0 t0 bias-> t9.xyz (03a40000) w: c0 t6 t0 sub-> t9.w (00a401a0) xyz: srcp.www 1.0 0.0 op: 00050a93 w: srcp.w 1.0 0.0 op: 0024088f 1: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 2: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 3: xyz: t3 c5 t0 bias-> t3.xy (018c0943) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c5.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 4: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t0.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 5: xyz: t0 c1 t0 bias-> t6.xyz (03980840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 t0 t0 bias-> t3.z (020c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 7: xyz: t3 t0 t0 bias-> t1.y (01040003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 8: xyz: t2 t1 t0 bias-> t1.y (01040042) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 1.0 1.0 -t1.y op: 00090891 9: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 10: xyz: t1 t0 t0 bias-> t3.z (020c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 11: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 12: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 13: xyz: t2 t3 t0 bias-> t1.y (010400c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 14: xyz: t1 t5 t0 bias-> t2.xyz (03880141) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t5.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 15: 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 16: xyz: t8 t0 t0 bias-> t1.y (01040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 17: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 18: xyz: t1 t8 t0 bias-> t4.xyz (03900201) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t8.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 19: xyz: t4 t3 t0 bias-> t1.y (010400c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 20: xyz: t1 c7 t0 bias-> t1.y (010409c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c7.xyz -c7.zzz op: 4009c200 w: t1.x t1.x t1.x op: 00000000 21: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 22: xyz: t1 c2 t0 bias-> t3.xyz (038c0881) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 23: xyz: t3 t7 t6 bias-> t4.xyz (039061c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz t6.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 24: xyz: t2 t4 t0 bias-> t4.xyz (03900102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 25: xyz: t0 c3 t4 bias-> t0.xyz (038048c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.xyz t4.xyz op: 80020200 NOP w: t0.x t0.x t0.x op: 00000000 26: xyz: t0 c4 t1 sub-> o0.xyz (1c001900) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 27: xyz: t3 t7 t0 bias-> t0.xyz (038001c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 28: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 29: xyz: t0 c6 t0 bias-> (00000980) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c6.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 NODE 1: alu_offset: 30, tex_offset: 5, alu_end: 0, tex_end: 0 (code_addr: 0000501e) TEX: KIL t0, t9, texture[0] (00010009) 30: 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], COLOR, LINEAR DCL IN[2], COLOR[1], LINEAR DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL IN[5], GENERIC[2], PERSPECTIVE DCL IN[6], GENERIC[3], PERSPECTIVE DCL IN[7], GENERIC[4], PERSPECTIVE DCL IN[8], GENERIC[5], PERSPECTIVE DCL IN[9], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL CONST[8..9] DCL CONST[1] DCL CONST[5..7] DCL TEMP[0..8] IMM FLT32 { 0.0625, 1.0000, 4.0000, 3.0000} IMM FLT32 { 2.0000, -1.0000, 0.3000, 0.5900} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[9].xxxx, CONST[9].yyyy 2: TEX TEMP[1], IN[7], SAMP[0], 2D 3: MUL TEMP[2].xy, TEMP[0], IMM[0].xxxx 4: TEX TEMP[2], TEMP[2], SAMP[1], 2D 5: SLT TEMP[2].w, CONST[1], TEMP[2].wwww 6: KIL -TEMP[2].wwww 7: DP3 TEMP[3].x, IN[9], IN[9] 8: RSQ TEMP[3].x, TEMP[3].xxxx 9: MUL TEMP[3], TEMP[3].xxxx, IN[9] 10: DP3 TEMP[4].x, IN[3], IN[3] 11: RSQ TEMP[4].x, TEMP[4].xxxx 12: MUL TEMP[4], TEMP[4].xxxx, IN[3] 13: TEX TEMP[5], IN[4], SAMP[4], 2D 14: MOV TEMP[5].x, TEMP[5].wwww 15: MAD TEMP[5], TEMP[5], IMM[1].xxxx, IMM[1].yyyy 16: MOV TEMP[5].z, IMM[2].wwww 17: DP3 TEMP[2].x, TEMP[5], TEMP[5] 18: ADD TEMP[2].x, IMM[0].yyyy, -TEMP[2].xxxx 19: RSQ TEMP[2].x, TEMP[2].xxxx 20: RCP TEMP[5].z, TEMP[2].xxxx 21: DP3_SAT TEMP[4].x, TEMP[4], TEMP[5] 22: TXP TEMP[2], IN[6], SAMP[5], 2D 23: MUL TEMP[4], TEMP[4].xxxx, TEMP[2] 24: TEX TEMP[2].x, IN[5], SAMP[6], 2D 25: MUL TEMP[4], TEMP[4], TEMP[2].xxxx 26: MUL TEMP[1], TEMP[1], IN[1] 27: MUL TEMP[6], TEMP[1], CONST[5] 28: DP3 TEMP[3].x, TEMP[3], TEMP[5] 29: MAD_SAT TEMP[2].x, TEMP[3].xxxx, IMM[0].zzzz, -IMM[0].wwww 30: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[2].xxxx 31: MUL TEMP[2], TEMP[2].xxxx, CONST[6] 32: TEX TEMP[7], IN[8], SAMP[7], 2D 33: ADD TEMP[7], TEMP[7], TEMP[7] 34: MAD TEMP[6], TEMP[2], TEMP[7], TEMP[6] 35: MUL TEMP[8].xyz, TEMP[4], TEMP[6] 36: MAD TEMP[8].xyz, TEMP[1], CONST[7], TEMP[8] 37: LRP OUT[0].xyz, IN[2].xxxx, CONST[8], TEMP[8] 38: MUL TEMP[2], TEMP[2], TEMP[7] 39: MUL TEMP[2], TEMP[2], TEMP[4] 40: DP3 OUT[0].w, TEMP[2], IMM[2] 41: 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: TEX temp[1], input[7], 2D[0]; 6: MUL temp[2].xy, temp[0], const[10].xxxx; 7: TEX temp[2], temp[2], 2D[1]; 8: SLT temp[2].w, const[1], temp[2].wwww; 9: KIL -temp[2].wwww; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[4]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[2].x, temp[5], temp[5]; 21: ADD temp[2].x, const[10].yyyy, -temp[2].xxxx; 22: RSQ temp[2].x, temp[2].xxxx; 23: RCP temp[5].z, temp[2].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[2], input[6], 2D[5]; 26: MUL temp[4], temp[4].xxxx, temp[2]; 27: TEX temp[2].x, input[5], 2D[6]; 28: MUL temp[4], temp[4], temp[2].xxxx; 29: MUL temp[1], temp[1], input[1]; 30: MUL temp[6], temp[1], const[5]; 31: DP3 temp[3].x, temp[3], temp[5]; 32: MAD_SAT temp[2].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 33: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 34: MUL temp[2], temp[2].xxxx, const[6]; 35: TEX temp[7], input[8], 2D[7]; 36: ADD temp[7], temp[7], temp[7]; 37: MAD temp[6], temp[2], temp[7], temp[6]; 38: MUL temp[8].xyz, temp[4], temp[6]; 39: MAD temp[8].xyz, temp[1], const[7], temp[8]; 40: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 41: MUL temp[2], temp[2], temp[7]; 42: MUL temp[2], temp[2], temp[4]; 43: DP3 output[0].w, temp[2], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: TEX temp[1], input[7], 2D[0]; 6: MUL temp[2].xy, temp[0], const[10].xxxx; 7: TEX temp[2], temp[2], 2D[1]; 8: SLT temp[2].w, const[1], temp[2].wwww; 9: KIL -temp[2].wwww; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[4]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[2].x, temp[5], temp[5]; 21: ADD temp[2].x, const[10].yyyy, -temp[2].xxxx; 22: RSQ temp[2].x, temp[2].xxxx; 23: RCP temp[5].z, temp[2].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[2], input[6], 2D[5]; 26: MUL temp[4], temp[4].xxxx, temp[2]; 27: TEX temp[2].x, input[5], 2D[6]; 28: MUL temp[4], temp[4], temp[2].xxxx; 29: MUL temp[1], temp[1], input[1]; 30: MUL temp[6], temp[1], const[5]; 31: DP3 temp[3].x, temp[3], temp[5]; 32: MAD_SAT temp[2].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 33: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 34: MUL temp[2], temp[2].xxxx, const[6]; 35: TEX temp[7], input[8], 2D[7]; 36: ADD temp[7], temp[7], temp[7]; 37: MAD temp[6], temp[2], temp[7], temp[6]; 38: MUL temp[8].xyz, temp[4], temp[6]; 39: MAD temp[8].xyz, temp[1], const[7], temp[8]; 40: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 41: MUL temp[2], temp[2], temp[7]; 42: MUL temp[2], temp[2], temp[4]; 43: DP3 output[0].w, temp[2], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: TEX temp[1], input[7], 2D[0]; 6: MUL temp[2].xy, temp[0], const[10].xxxx; 7: TEX temp[2], temp[2], 2D[1]; 8: SLT temp[2].w, const[1], temp[2].wwww; 9: KIL -temp[2].wwww; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[4]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[2].x, temp[5], temp[5]; 21: ADD temp[2].x, const[10].yyyy, -temp[2].xxxx; 22: RSQ temp[2].x, temp[2].xxxx; 23: RCP temp[5].z, temp[2].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[2], input[6], 2D[5]; 26: MUL temp[4], temp[4].xxxx, temp[2]; 27: TEX temp[2].x, input[5], 2D[6]; 28: MUL temp[4], temp[4], temp[2].xxxx; 29: MUL temp[1], temp[1], input[1]; 30: MUL temp[6], temp[1], const[5]; 31: DP3 temp[3].x, temp[3], temp[5]; 32: MAD_SAT temp[2].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 33: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 34: MUL temp[2], temp[2].xxxx, const[6]; 35: TEX temp[7], input[8], 2D[7]; 36: ADD temp[7], temp[7], temp[7]; 37: MAD temp[6], temp[2], temp[7], temp[6]; 38: MUL temp[8].xyz, temp[4], temp[6]; 39: MAD temp[8].xyz, temp[1], const[7], temp[8]; 40: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 41: MUL temp[2], temp[2], temp[7]; 42: MUL temp[2], temp[2], temp[4]; 43: DP3 output[0].w, temp[2], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: TEX temp[1], input[7], 2D[0]; 6: MUL temp[2].xy, temp[0], const[10].xxxx; 7: TEX temp[2], temp[2], 2D[1]; 8: SLT temp[2].w, const[1], temp[2].wwww; 9: KIL -temp[2].wwww; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[4]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[2].x, temp[5], temp[5]; 21: ADD temp[2].x, const[10].yyyy, -temp[2].xxxx; 22: RSQ temp[2].x, temp[2].xxxx; 23: RCP temp[5].z, temp[2].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[2], input[6], 2D[5]; 26: MUL temp[4], temp[4].xxxx, temp[2]; 27: TEX temp[2].x, input[5], 2D[6]; 28: MUL temp[4], temp[4], temp[2].xxxx; 29: MUL temp[1], temp[1], input[1]; 30: MUL temp[6], temp[1], const[5]; 31: DP3 temp[3].x, temp[3], temp[5]; 32: MAD_SAT temp[2].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 33: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 34: MUL temp[2], temp[2].xxxx, const[6]; 35: TEX temp[7], input[8], 2D[7]; 36: ADD temp[7], temp[7], temp[7]; 37: MAD temp[6], temp[2], temp[7], temp[6]; 38: MUL temp[8].xyz, temp[4], temp[6]; 39: MAD temp[8].xyz, temp[1], const[7], temp[8]; 40: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 41: MUL temp[2], temp[2], temp[7]; 42: MUL temp[2], temp[2], temp[4]; 43: DP3 output[0].w, temp[2], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: TEX temp[1], input[7], 2D[0]; 6: MUL temp[2].xy, temp[0], const[10].xxxx; 7: TEX temp[2], temp[2], 2D[1]; 8: SLT temp[2].w, const[1], temp[2].wwww; 9: KIL -temp[2].wwww; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[4]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[2].x, temp[5], temp[5]; 21: ADD temp[2].x, const[10].yyyy, -temp[2].xxxx; 22: RSQ temp[2].x, temp[2].xxxx; 23: RCP temp[5].z, temp[2].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[2], input[6], 2D[5]; 26: MUL temp[4], temp[4].xxxx, temp[2]; 27: TEX temp[2].x, input[5], 2D[6]; 28: MUL temp[4], temp[4], temp[2].xxxx; 29: MUL temp[1], temp[1], input[1]; 30: MUL temp[6], temp[1], const[5]; 31: DP3 temp[3].x, temp[3], temp[5]; 32: MAD_SAT temp[2].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 33: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 34: MUL temp[2], temp[2].xxxx, const[6]; 35: TEX temp[7], input[8], 2D[7]; 36: ADD temp[7], temp[7], temp[7]; 37: MAD temp[6], temp[2], temp[7], temp[6]; 38: MUL temp[8].xyz, temp[4], temp[6]; 39: MAD temp[8].xyz, temp[1], const[7], temp[8]; 40: LRP output[0].xyz, input[2].xxxx, const[8], temp[8]; 41: MUL temp[2], temp[2], temp[7]; 42: MUL temp[2], temp[2], temp[4]; 43: DP3 output[0].w, temp[2], const[12]; Fragment Program: after 'saturate output writes' # 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: TEX temp[1], input[7], 2D[0]; 6: MUL temp[2].xy, temp[0], const[10].xxxx; 7: TEX temp[2], temp[2], 2D[1]; 8: SLT temp[2].w, const[1], temp[2].wwww; 9: KIL -temp[2].wwww; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[4]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[2].x, temp[5], temp[5]; 21: ADD temp[2].x, const[10].yyyy, -temp[2].xxxx; 22: RSQ temp[2].x, temp[2].xxxx; 23: RCP temp[5].z, temp[2].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[2], input[6], 2D[5]; 26: MUL temp[4], temp[4].xxxx, temp[2]; 27: TEX temp[2].x, input[5], 2D[6]; 28: MUL temp[4], temp[4], temp[2].xxxx; 29: MUL temp[1], temp[1], input[1]; 30: MUL temp[6], temp[1], const[5]; 31: DP3 temp[3].x, temp[3], temp[5]; 32: MAD_SAT temp[2].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 33: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 34: MUL temp[2], temp[2].xxxx, const[6]; 35: TEX temp[7], input[8], 2D[7]; 36: ADD temp[7], temp[7], temp[7]; 37: MAD temp[6], temp[2], temp[7], temp[6]; 38: MUL temp[8].xyz, temp[4], temp[6]; 39: MAD temp[8].xyz, temp[1], const[7], temp[8]; 40: LRP_SAT output[0].xyz, input[2].xxxx, const[8], temp[8]; 41: MUL temp[2], temp[2], temp[7]; 42: MUL temp[2], temp[2], temp[4]; 43: DP3_SAT output[0].w, temp[2], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: TEX temp[1], input[7], 2D[0]; 6: MUL temp[2].xy, temp[0], const[10].xxxx; 7: TEX temp[2], temp[2], 2D[1]; 8: SLT temp[2].w, const[1], temp[2].wwww; 9: KIL -temp[2].wwww; 10: DP3 temp[3].x, input[9], input[9]; 11: RSQ temp[3].x, temp[3].xxxx; 12: MUL temp[3], temp[3].xxxx, input[9]; 13: DP3 temp[4].x, input[3], input[3]; 14: RSQ temp[4].x, temp[4].xxxx; 15: MUL temp[4], temp[4].xxxx, input[3]; 16: TEX temp[5], input[4], 2D[4]; 17: MOV temp[5].x, temp[5].wwww; 18: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 19: MOV temp[5].z, const[12].wwww; 20: DP3 temp[2].x, temp[5], temp[5]; 21: ADD temp[2].x, const[10].yyyy, -temp[2].xxxx; 22: RSQ temp[2].x, temp[2].xxxx; 23: RCP temp[5].z, temp[2].xxxx; 24: DP3_SAT temp[4].x, temp[4], temp[5]; 25: TXP temp[2], input[6], 2D[5]; 26: MUL temp[4], temp[4].xxxx, temp[2]; 27: TEX temp[10], input[5], 2D[6]; 28: MOV temp[2].x, temp[10]; 29: MUL temp[4], temp[4], temp[2].xxxx; 30: MUL temp[1], temp[1], input[1]; 31: MUL temp[6], temp[1], const[5]; 32: DP3 temp[3].x, temp[3], temp[5]; 33: MAD_SAT temp[2].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 34: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 35: MUL temp[2], temp[2].xxxx, const[6]; 36: TEX temp[7], input[8], 2D[7]; 37: ADD temp[7], temp[7], temp[7]; 38: MAD temp[6], temp[2], temp[7], temp[6]; 39: MUL temp[8].xyz, temp[4], temp[6]; 40: MAD temp[8].xyz, temp[1], const[7], temp[8]; 41: LRP_SAT output[0].xyz, input[2].xxxx, const[8], temp[8]; 42: MUL temp[2], temp[2], temp[7]; 43: MUL temp[2], temp[2], temp[4]; 44: DP3_SAT output[0].w, temp[2], const[12]; 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[13].xyz0, const[14].xyz0; 3: MOV temp[0], temp[9]; 4: MAD temp[0].y, temp[9], const[9].xxxx, const[9].yyyy; 5: TEX temp[1], input[7], 2D[0]; 6: MUL temp[2].xy, temp[0], const[10].xxxx; 7: TEX temp[2], temp[2], 2D[1]; 8: ADD temp[11].w, const[1], -temp[2].wwww; 9: CMP temp[2].w, temp[11], none.1111, none.0000; 10: KIL -temp[2].wwww; 11: DP3 temp[3].x, input[9], input[9]; 12: RSQ temp[3].x, |temp[3].xxxx|; 13: MUL temp[3], temp[3].xxxx, input[9]; 14: DP3 temp[4].x, input[3], input[3]; 15: RSQ temp[4].x, |temp[4].xxxx|; 16: MUL temp[4], temp[4].xxxx, input[3]; 17: TEX temp[5], input[4], 2D[4]; 18: MOV temp[5].x, temp[5].wwww; 19: MAD temp[5], temp[5], const[11].xxxx, const[11].yyyy; 20: MOV temp[5].z, const[12].wwww; 21: DP3 temp[2].x, temp[5], temp[5]; 22: ADD temp[2].x, const[10].yyyy, -temp[2].xxxx; 23: RSQ temp[2].x, |temp[2].xxxx|; 24: RCP temp[5].z, temp[2].xxxx; 25: DP3_SAT temp[4].x, temp[4], temp[5]; 26: TXP temp[2], input[6], 2D[5]; 27: MUL temp[4], temp[4].xxxx, temp[2]; 28: TEX temp[10], input[5], 2D[6]; 29: MOV temp[2].x, temp[10]; 30: MUL temp[4], temp[4], temp[2].xxxx; 31: MUL temp[1], temp[1], input[1]; 32: MUL temp[6], temp[1], const[5]; 33: DP3 temp[3].x, temp[3], temp[5]; 34: MAD_SAT temp[2].x, temp[3].xxxx, const[10].zzzz, -const[10].wwww; 35: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 36: MUL temp[2], temp[2].xxxx, const[6]; 37: TEX temp[7], input[8], 2D[7]; 38: ADD temp[7], temp[7], temp[7]; 39: MAD temp[6], temp[2], temp[7], temp[6]; 40: MUL temp[8].xyz, temp[4], temp[6]; 41: MAD temp[8].xyz, temp[1], const[7], temp[8]; 42: ADD temp[12].xyz, const[8], -temp[8]; 43: MAD_SAT output[0].xyz, input[2].xxxx, temp[12], temp[8]; 44: MUL temp[2], temp[2], temp[7]; 45: MUL temp[2], temp[2], temp[4]; 46: DP3_SAT output[0].w, temp[2], const[12]; 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[13].xy__, const[14].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[9]._x__, const[9]._y__; 5: TEX temp[1].xyz, input[7].xy__, 2D[0]; 6: MUL temp[2].xy, temp[0].xy__, const[10].xx__; 7: TEX temp[2].w, temp[2].xy__, 2D[1]; 8: ADD temp[11].w, const[1].___w, -temp[2].___w; 9: CMP temp[2].w, temp[11].___w, none.___1, none.___0; 10: KIL -temp[2].wwww; 11: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[3].x, |temp[3].x___|; 13: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 14: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[4].x, |temp[4].x___|; 16: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[4]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[11].xx__, const[11].yy__; 20: MOV temp[5].z, const[12].__w_; 21: DP3 temp[2].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[2].x, const[10].y___, -temp[2].x___; 23: RSQ temp[2].x, |temp[2].x___|; 24: RCP temp[5].z, temp[2].x___; 25: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 26: TXP temp[2].xyz, input[6].xy_w, 2D[5]; 27: MUL temp[4].xyz, temp[4].xxx_, temp[2].xyz_; 28: TEX temp[10].x, input[5].xy__, 2D[6]; 29: MOV temp[2].x, temp[10].x___; 30: MUL temp[4].xyz, temp[4].xyz_, temp[2].xxx_; 31: MUL temp[1].xyz, temp[1].xyz_, input[1].xyz_; 32: MUL temp[6].xyz, temp[1].xyz_, const[5].xyz_; 33: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 34: MAD_SAT temp[2].x, temp[3].x___, const[10].z___, -const[10].w___; 35: MUL temp[2].x, temp[2].x___, temp[2].x___; 36: MUL temp[2].xyz, temp[2].xxx_, const[6].xyz_; 37: TEX temp[7].xyz, input[8].xy__, 2D[7]; 38: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 39: MAD temp[6].xyz, temp[2].xyz_, temp[7].xyz_, temp[6].xyz_; 40: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 41: MAD temp[8].xyz, temp[1].xyz_, const[7].xyz_, temp[8].xyz_; 42: ADD temp[12].xyz, const[8].xyz_, -temp[8].xyz_; 43: MAD_SAT output[0].xyz, input[2].xxx_, temp[12].xyz_, temp[8].xyz_; 44: MUL temp[2].xyz, temp[2].xyz_, temp[7].xyz_; 45: MUL temp[2].xyz, temp[2].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[2].xyz_, const[12].xyz_; 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[13].xy__, const[14].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[9]._x__, const[9]._y__; 5: TEX temp[1].xyz, input[7].xy__, 2D[0]; 6: MUL temp[2].xy, temp[0].xy__, const[10].xx__; 7: TEX temp[2].w, temp[2].xy__, 2D[1]; 8: ADD temp[11].w, const[1].___w, -temp[2].___w; 9: CMP temp[2].w, temp[11].___w, none.___1, none.___0; 10: KIL -temp[2].wwww; 11: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[3].x, |temp[3].x___|; 13: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 14: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[4].x, |temp[4].x___|; 16: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[4]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[11].xx__, const[11].yy__; 20: MOV temp[5].z, const[12].__w_; 21: DP3 temp[2].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[2].x, const[10].y___, -temp[2].x___; 23: RSQ temp[2].x, |temp[2].x___|; 24: RCP temp[5].z, temp[2].x___; 25: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 26: TXP temp[2].xyz, input[6].xy_w, 2D[5]; 27: MUL temp[4].xyz, temp[4].xxx_, temp[2].xyz_; 28: TEX temp[10].x, input[5].xy__, 2D[6]; 29: MOV temp[2].x, temp[10].x___; 30: MUL temp[4].xyz, temp[4].xyz_, temp[2].xxx_; 31: MUL temp[1].xyz, temp[1].xyz_, input[1].xyz_; 32: MUL temp[6].xyz, temp[1].xyz_, const[5].xyz_; 33: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 34: MAD_SAT temp[2].x, temp[3].x___, const[10].z___, -const[10].w___; 35: MUL temp[2].x, temp[2].x___, temp[2].x___; 36: MUL temp[2].xyz, temp[2].xxx_, const[6].xyz_; 37: TEX temp[7].xyz, input[8].xy__, 2D[7]; 38: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 39: MAD temp[6].xyz, temp[2].xyz_, temp[7].xyz_, temp[6].xyz_; 40: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 41: MAD temp[8].xyz, temp[1].xyz_, const[7].xyz_, temp[8].xyz_; 42: ADD temp[12].xyz, const[8].xyz_, -temp[8].xyz_; 43: MAD_SAT output[0].xyz, input[2].xxx_, temp[12].xyz_, temp[8].xyz_; 44: MUL temp[2].xyz, temp[2].xyz_, temp[7].xyz_; 45: MUL temp[2].xyz, temp[2].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[2].xyz_, const[12].xyz_; Fragment Program: after 'dataflow optimize' # 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[13].xy__, const[14].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[9]._x__, const[9]._y__; 5: TEX temp[1].xyz, input[7].xy__, 2D[0]; 6: MUL temp[2].xy, temp[0].xy__, const[10].xx__; 7: TEX temp[2].w, temp[2].xy__, 2D[1]; 8: CMP temp[2].w, (const[1] - temp[2]).___w, none.___1, none.___0; 9: KIL -temp[2].wwww; 10: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 11: RSQ temp[3].x, |temp[3].x___|; 12: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 13: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 14: RSQ temp[4].x, |temp[4].x___|; 15: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 16: TEX temp[5].yw, input[4].xy__, 2D[4]; 17: MOV temp[5].x, temp[5].w___; 18: MAD temp[5].xy, temp[5].xy__, const[11].xx__, none.-1-1__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[2].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[2].x, none.1___, -temp[2].x___; 22: RSQ temp[2].x, |temp[2].x___|; 23: RCP temp[5].z, temp[2].x___; 24: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 25: TXP temp[2].xyz, input[6].xy_w, 2D[5]; 26: MUL temp[4].xyz, temp[4].xxx_, temp[2].xyz_; 27: TEX temp[10].x, input[5].xy__, 2D[6]; 28: MUL temp[4].xyz, temp[4].xyz_, temp[10].xxx_; 29: MUL temp[1].xyz, temp[1].xyz_, input[1].xyz_; 30: MUL temp[6].xyz, temp[1].xyz_, const[5].xyz_; 31: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 32: MAD_SAT temp[2].x, temp[3].x___, const[10].z___, -const[10].w___; 33: MUL temp[2].x, temp[2].x___, temp[2].x___; 34: MUL temp[2].xyz, temp[2].xxx_, const[6].xyz_; 35: TEX temp[7].xyz, input[8].xy__, 2D[7]; 36: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 37: MAD temp[6].xyz, temp[2].xyz_, temp[7].xyz_, temp[6].xyz_; 38: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 39: MAD temp[8].xyz, temp[1].xyz_, const[7].xyz_, temp[8].xyz_; 40: MAD_SAT output[0].xyz, input[2].xxx_, (const[8] - temp[8]).xyz_, temp[8].xyz_; 41: MUL temp[2].xyz, temp[2].xyz_, temp[7].xyz_; 42: MUL temp[2].xyz, temp[2].xyz_, temp[4].xyz_; 43: DP3_SAT output[0].w, temp[2].xyz_, const[12].xyz_; Fragment Program: after 'dataflow swizzles' # 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[13].xy__, const[14].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[9]._x__, const[9]._y__; 5: TEX temp[1].xyz, input[7].xy__, 2D[0]; 6: MUL temp[2].xy, temp[0].xy__, const[10].xx__; 7: TEX temp[2].w, temp[2].xy__, 2D[1]; 8: CMP temp[2].w, (const[1] - temp[2]).___w, none.___1, none.___0; 9: MOV temp[11], -temp[2].wwww; 10: KIL temp[11]; 11: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[3].x, |temp[3].x___|; 13: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 14: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[4].x, |temp[4].x___|; 16: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[4]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[11].xx__, none.-1-1__; 20: MOV temp[5].z, none.__0_; 21: DP3 temp[2].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[2].x, none.1___, -temp[2].x___; 23: RSQ temp[2].x, |temp[2].x___|; 24: RCP temp[5].z, temp[2].x___; 25: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 26: TXP temp[2].xyz, input[6].xy_w, 2D[5]; 27: MUL temp[4].xyz, temp[4].xxx_, temp[2].xyz_; 28: TEX temp[10].x, input[5].xy__, 2D[6]; 29: MUL temp[4].xyz, temp[4].xyz_, temp[10].xxx_; 30: MUL temp[1].xyz, temp[1].xyz_, input[1].xyz_; 31: MUL temp[6].xyz, temp[1].xyz_, const[5].xyz_; 32: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 33: MAD_SAT temp[2].x, temp[3].x___, const[10].z___, -const[10].w___; 34: MUL temp[2].x, temp[2].x___, temp[2].x___; 35: MUL temp[2].xyz, temp[2].xxx_, const[6].xyz_; 36: TEX temp[7].xyz, input[8].xy__, 2D[7]; 37: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 38: MAD temp[6].xyz, temp[2].xyz_, temp[7].xyz_, temp[6].xyz_; 39: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 40: MAD temp[8].xyz, temp[1].xyz_, const[7].xyz_, temp[8].xyz_; 41: MAD_SAT output[0].xyz, input[2].xxx_, (const[8] - temp[8]).xyz_, temp[8].xyz_; 42: MUL temp[2].xyz, temp[2].xyz_, temp[7].xyz_; 43: MUL temp[2].xyz, temp[2].xyz_, temp[4].xyz_; 44: DP3_SAT output[0].w, temp[2].xyz_, const[12].xyz_; CONST[6] = { 0.0625 1.0000 4.0000 3.0000 } CONST[7] = { 2.0000 -1.0000 0.3000 0.5900 } CONST[8] = { 0.3000 0.5900 0.1100 0.0000 } Fragment Program: after 'dead constants' # 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[9].xy__, const[10].xy__; 3: MOV temp[0].x, temp[9].x___; 4: MAD temp[0].y, temp[9]._y__, const[5]._x__, const[5]._y__; 5: TEX temp[1].xyz, input[7].xy__, 2D[0]; 6: MUL temp[2].xy, temp[0].xy__, const[6].xx__; 7: TEX temp[2].w, temp[2].xy__, 2D[1]; 8: CMP temp[2].w, (const[0] - temp[2]).___w, none.___1, none.___0; 9: MOV temp[11], -temp[2].wwww; 10: KIL temp[11]; 11: DP3 temp[3].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[3].x, |temp[3].x___|; 13: MUL temp[3].xyz, temp[3].xxx_, input[9].xyz_; 14: DP3 temp[4].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[4].x, |temp[4].x___|; 16: MUL temp[4].xyz, temp[4].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[4]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[7].xx__, none.-1-1__; 20: MOV temp[5].z, none.__0_; 21: DP3 temp[2].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[2].x, none.1___, -temp[2].x___; 23: RSQ temp[2].x, |temp[2].x___|; 24: RCP temp[5].z, temp[2].x___; 25: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 26: TXP temp[2].xyz, input[6].xy_w, 2D[5]; 27: MUL temp[4].xyz, temp[4].xxx_, temp[2].xyz_; 28: TEX temp[10].x, input[5].xy__, 2D[6]; 29: MUL temp[4].xyz, temp[4].xyz_, temp[10].xxx_; 30: MUL temp[1].xyz, temp[1].xyz_, input[1].xyz_; 31: MUL temp[6].xyz, temp[1].xyz_, const[1].xyz_; 32: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 33: MAD_SAT temp[2].x, temp[3].x___, const[6].z___, -const[6].w___; 34: MUL temp[2].x, temp[2].x___, temp[2].x___; 35: MUL temp[2].xyz, temp[2].xxx_, const[2].xyz_; 36: TEX temp[7].xyz, input[8].xy__, 2D[7]; 37: ADD temp[7].xyz, temp[7].xyz_, temp[7].xyz_; 38: MAD temp[6].xyz, temp[2].xyz_, temp[7].xyz_, temp[6].xyz_; 39: MUL temp[8].xyz, temp[4].xyz_, temp[6].xyz_; 40: MAD temp[8].xyz, temp[1].xyz_, const[3].xyz_, temp[8].xyz_; 41: MAD_SAT output[0].xyz, input[2].xxx_, (const[4] - temp[8]).xyz_, temp[8].xyz_; 42: MUL temp[2].xyz, temp[2].xyz_, temp[7].xyz_; 43: MUL temp[2].xyz, temp[2].xyz_, temp[4].xyz_; 44: DP3_SAT output[0].w, temp[2].xyz_, const[8].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[12].w, input[0].w___; 1: MUL temp[13].xy, input[0].xy__, temp[12].ww__; 2: MAD temp[14].xy, temp[13].xy__, const[9].xy__, const[10].xy__; 3: MOV temp[0].x, temp[14].x___; 4: MAD temp[0].y, temp[14]._y__, const[5]._x__, const[5]._y__; 5: TEX temp[15].xyz, input[7].xy__, 2D[0]; 6: MUL temp[16].xy, temp[0].xy__, const[6].xx__; 7: TEX temp[17].w, temp[16].xy__, 2D[1]; 8: CMP temp[18].w, (const[0] - temp[17]).___w, none.___1, none.___0; 9: MOV temp[19], -temp[18].wwww; 10: KIL temp[19]; 11: DP3 temp[20].x, input[9].xyz_, input[9].xyz_; 12: RSQ temp[21].x, |temp[20].x___|; 13: MUL temp[22].xyz, temp[21].xxx_, input[9].xyz_; 14: DP3 temp[23].x, input[3].xyz_, input[3].xyz_; 15: RSQ temp[24].x, |temp[23].x___|; 16: MUL temp[25].xyz, temp[24].xxx_, input[3].xyz_; 17: TEX temp[5].yw, input[4].xy__, 2D[4]; 18: MOV temp[5].x, temp[5].w___; 19: MAD temp[5].xy, temp[5].xy__, const[7].xx__, none.-1-1__; 20: MOV temp[5].z, none.__0_; 21: DP3 temp[26].x, temp[5].xyz_, temp[5].xyz_; 22: ADD temp[27].x, none.1___, -temp[26].x___; 23: RSQ temp[28].x, |temp[27].x___|; 24: RCP temp[5].z, temp[28].x___; 25: DP3_SAT temp[29].x, temp[25].xyz_, temp[5].xyz_; 26: TXP temp[30].xyz, input[6].xy_w, 2D[5]; 27: MUL temp[31].xyz, temp[29].xxx_, temp[30].xyz_; 28: TEX temp[32].x, input[5].xy__, 2D[6]; 29: MUL temp[33].xyz, temp[31].xyz_, temp[32].xxx_; 30: MUL temp[34].xyz, temp[15].xyz_, input[1].xyz_; 31: MUL temp[35].xyz, temp[34].xyz_, const[1].xyz_; 32: DP3 temp[36].x, temp[22].xyz_, temp[5].xyz_; 33: MAD_SAT temp[37].x, temp[36].x___, const[6].z___, -const[6].w___; 34: MUL temp[38].x, temp[37].x___, temp[37].x___; 35: MUL temp[39].xyz, temp[38].xxx_, const[2].xyz_; 36: TEX temp[40].xyz, input[8].xy__, 2D[7]; 37: ADD temp[41].xyz, temp[40].xyz_, temp[40].xyz_; 38: MAD temp[42].xyz, temp[39].xyz_, temp[41].xyz_, temp[35].xyz_; 39: MUL temp[43].xyz, temp[33].xyz_, temp[42].xyz_; 40: MAD temp[44].xyz, temp[34].xyz_, const[3].xyz_, temp[43].xyz_; 41: MAD_SAT output[0].xyz, input[2].xxx_, (const[4] - temp[44]).xyz_, temp[44].xyz_; 42: MUL temp[45].xyz, temp[39].xyz_, temp[41].xyz_; 43: MUL temp[46].xyz, temp[45].xyz_, temp[33].xyz_; 44: DP3_SAT output[0].w, temp[46].xyz_, const[8].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[12].w, src0.w 1: src0.xyz = input[0], src0.w = temp[12] MAD temp[13].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[13], src1.xyz = const[9], src2.xyz = const[10] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[14] MAD temp[0].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[14], src1.xyz = const[5] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 5: TEX temp[15].xyz, input[7].xy__, 2D[0]; 6: src0.xyz = temp[0], src1.xyz = const[6] MAD temp[16].xy, src0.xy_, src1.xx_, src0.000 7: TEX temp[17].w, temp[16].xy__, 2D[1]; 8: src0.w = temp[17], src1.w = const[0], srcp.w = (src1 - src0) CMP temp[18].w, src0.0, src0.1, srcp.w 9: src0.w = temp[18] MAD temp[19].xyz, -src0.www, src0.111, src0.000 MAD temp[19].w, -src0.w, src0.1, src0.0 10: KIL temp[19]; 11: src0.xyz = input[9] DP3 temp[20].x, src0.xyz, src0.xyz 12: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 13: src0.xyz = temp[21], src1.xyz = input[9] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 14: src0.xyz = input[3] DP3 temp[23].x, src0.xyz, src0.xyz 15: src0.xyz = temp[23] REPL_ALPHA temp[24].x RSQ, |src0.x| 16: src0.xyz = temp[24], src1.xyz = input[3] MAD temp[25].xyz, src0.xxx, src1.xyz, src0.000 17: TEX temp[5].yw, input[4].xy__, 2D[4]; 18: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 19: src0.xyz = temp[5], src1.xyz = const[7] MAD temp[5].xy, src0.xy_, src1.xx_, -src0.11_ 20: MAD temp[5].z, src0.__0, src0.111, src0.000 21: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 22: src0.xyz = temp[26] MAD temp[27].x, src0.1__, src0.111, -src0.x__ 23: src0.xyz = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.x| 24: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 25: src0.xyz = temp[25], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 26: TXP temp[30].xyz, input[6].xy_w, 2D[5]; 27: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 28: TEX temp[32].x, input[5].xy__, 2D[6]; 29: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 30: src0.xyz = temp[15], src1.xyz = input[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 32: src0.xyz = temp[22], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 33: src0.xyz = temp[36], src0.w = const[6], src1.xyz = const[6] MAD_SAT temp[37].x, src0.x__, src1.z__, -src0.w__ 34: src0.xyz = temp[37] MAD temp[38].x, src0.x__, src0.x__, src0.000 35: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 36: TEX temp[40].xyz, input[8].xy__, 2D[7]; 37: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 38: src0.xyz = temp[39], src1.xyz = temp[41], src2.xyz = temp[35] MAD temp[42].xyz, src0.xyz, src1.xyz, src2.xyz 39: src0.xyz = temp[33], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[44], src1.xyz = const[4], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 42: src0.xyz = temp[39], src1.xyz = temp[41] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = temp[45], src1.xyz = temp[33] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 44: src0.xyz = temp[46], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[7].xy__, 2D[0]; 2: TEX temp[5].yw, input[4].xy__, 2D[4]; 3: TXP temp[30].xyz, input[6].xy_w, 2D[5]; 4: TEX temp[32].x, input[5].xy__, 2D[6]; 5: TEX temp[40].xyz, input[8].xy__, 2D[7]; 6: src0.xyz = temp[40], src0.w = input[0] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz RCP temp[12].w, src0.w 7: src0.xyz = input[0], src0.w = temp[12] MAD temp[13].xy, src0.xy_, src0.ww_, src0.000 8: src0.xyz = temp[13], src1.xyz = const[9], src2.xyz = const[10] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 9: src0.xyz = temp[14], src1.xyz = const[5] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 10: src0.xyz = temp[14] MAD temp[0].x, src0.x__, src0.111, src0.000 11: src0.xyz = temp[0], src1.xyz = const[6] MAD temp[16].xy, src0.xy_, src1.xx_, src0.000 12: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 13: src0.xyz = temp[5], src1.xyz = const[7] MAD temp[5].xy, src0.xy_, src1.xx_, -src0.11_ 14: src0.xyz = temp[15], src1.xyz = input[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 16: MAD temp[5].z, src0.__0, src0.111, src0.000 17: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 18: src0.xyz = input[3], src1.xyz = temp[26] DP3 temp[23].x, src0.xyz, src0.xyz MAD temp[27].w, src0.1, src0.1, -src1.x 19: src0.xyz = temp[27], src0.w = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.w| 20: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 21: src0.xyz = temp[23] REPL_ALPHA temp[24].x RSQ, |src0.x| 22: src0.xyz = temp[24], src1.xyz = input[3] MAD temp[25].xyz, src0.xxx, src1.xyz, src0.000 23: src0.xyz = temp[25], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 24: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 25: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 26: src0.xyz = input[9] DP3 temp[20].x, src0.xyz, src0.xyz 27: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 28: src0.xyz = temp[21], src1.xyz = input[9] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 29: src0.xyz = temp[22], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 30: src0.xyz = temp[36], src0.w = const[6], src1.xyz = const[6] MAD_SAT temp[37].x, src0.x__, src1.z__, -src0.w__ 31: src0.xyz = temp[37] MAD temp[38].x, src0.x__, src0.x__, src0.000 32: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 33: src0.xyz = temp[39], src1.xyz = temp[41], src2.xyz = temp[35] MAD temp[42].xyz, src0.xyz, src1.xyz, src2.xyz 34: src0.xyz = temp[33], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 36: src0.xyz = temp[44], src1.xyz = const[4], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 37: src0.xyz = temp[39], src1.xyz = temp[41] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[45], src1.xyz = temp[33] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[46], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 40: BEGIN_TEX; 41: TEX temp[17].w, temp[16].xy__, 2D[1]; 42: src0.w = temp[17], src1.w = const[0], srcp.w = (src1 - src0) CMP temp[18].w, src0.0, src0.1, srcp.w 43: src0.w = temp[18] MAD temp[19].xyz, -src0.www, src0.111, src0.000 MAD temp[19].w, -src0.w, src0.1, src0.0 44: BEGIN_TEX; 45: KIL temp[19]; Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[7].xy__, 2D[0]; 2: TEX temp[5].yw, input[4].xy__, 2D[4]; 3: TXP temp[30].xyz, input[6].xy_w, 2D[5]; 4: TEX temp[32].x, input[5].xy__, 2D[6]; 5: TEX temp[40].xyz, input[8].xy__, 2D[7]; 6: src0.xyz = temp[40], src0.w = input[0] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz RCP temp[12].w, src0.w 7: src0.xyz = input[0], src0.w = temp[12] MAD temp[13].xy, src0.xy_, src0.ww_, src0.000 8: src0.xyz = temp[13], src1.xyz = const[9], src2.xyz = const[10] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 9: src0.xyz = temp[14], src1.xyz = const[5] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 10: src0.xyz = temp[14] MAD temp[0].x, src0.x__, src0.111, src0.000 11: src0.xyz = temp[0], src1.xyz = const[6] MAD temp[16].xy, src0.xy_, src1.xx_, src0.000 12: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 13: src0.xyz = temp[5], src1.xyz = const[7] MAD temp[5].xy, src0.xy_, src1.xx_, -src0.11_ 14: src0.xyz = temp[15], src1.xyz = input[1] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 16: MAD temp[5].z, src0.__0, src0.111, src0.000 17: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 18: src0.xyz = input[3], src1.xyz = temp[26] DP3 temp[23].x, src0.xyz, src0.xyz MAD temp[27].w, src0.1, src0.1, -src1.x 19: src0.w = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.w| 20: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 21: src0.xyz = temp[23] REPL_ALPHA temp[24].x RSQ, |src0.x| 22: src0.xyz = temp[24], src1.xyz = input[3] MAD temp[25].xyz, src0.xxx, src1.xyz, src0.000 23: src0.xyz = temp[25], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 24: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 25: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 26: src0.xyz = input[9] DP3 temp[20].x, src0.xyz, src0.xyz 27: src0.xyz = temp[20] REPL_ALPHA temp[21].x RSQ, |src0.x| 28: src0.xyz = temp[21], src1.xyz = input[9] MAD temp[22].xyz, src0.xxx, src1.xyz, src0.000 29: src0.xyz = temp[22], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 30: src0.xyz = temp[36], src0.w = const[6], src1.xyz = const[6] MAD_SAT temp[37].x, src0.x__, src1.z__, -src0.w__ 31: src0.xyz = temp[37] MAD temp[38].x, src0.x__, src0.x__, src0.000 32: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 33: src0.xyz = temp[39], src1.xyz = temp[41], src2.xyz = temp[35] MAD temp[42].xyz, src0.xyz, src1.xyz, src2.xyz 34: src0.xyz = temp[33], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 36: src0.xyz = temp[44], src1.xyz = const[4], src2.xyz = input[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 37: src0.xyz = temp[39], src1.xyz = temp[41] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[45], src1.xyz = temp[33] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[46], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 40: BEGIN_TEX; 41: TEX temp[17].w, temp[16].xy__, 2D[1]; 42: src0.w = temp[17], src1.w = const[0], srcp.w = (src1 - src0) CMP temp[18].w, src0.0, src0.1, srcp.w 43: src0.w = temp[18] MAD temp[19].xyz, -src0.www, src0.111, src0.000 MAD temp[19].w, -src0.w, src0.1, src0.0 44: BEGIN_TEX; 45: KIL temp[19]; Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[6].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[4]; 3: TXP temp[5].xyz, input[5].xy_w, 2D[5]; 4: TEX temp[4].x, input[4].xy__, 2D[6]; 5: TEX temp[7].xyz, input[7].xy__, 2D[7]; 6: src0.xyz = temp[7], src0.w = input[9] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz RCP temp[0].w, src0.w 7: src0.xyz = input[9], src0.w = temp[0] MAD temp[9].xy, src0.xy_, src0.ww_, src0.00_ 8: src0.xyz = temp[9], src1.xyz = const[9], src2.xyz = const[10] MAD temp[1].yz, src0._xy, src1._xy, src2._xy 9: src0.xyz = temp[1], src1.xyz = const[5] MAD temp[9].y, src0._z_, src1._x_, src1._y_ 10: src0.xyz = temp[1] MAD temp[9].x, src0.y__, src0.11_, src0.00_ 11: src0.xyz = temp[9], src1.xyz = const[6] MAD temp[9].xy, src0.xy_, src1.xx_, src0.00_ 12: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 13: src0.xyz = temp[3], src1.xyz = const[7] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 14: src0.xyz = temp[6], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[6].xyz, src0.xyz, src1.xyz, src0.000 16: MAD temp[3].z, src0.__0, src0.111, src0.000 17: src0.xyz = temp[3] DP3 temp[1].y, src0.xyz, src0.xyz 18: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[0].w, src0.1, src0.1, -src1.y 19: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 20: src0.xyz = temp[1] REPL_ALPHA temp[3].z RCP, src0.z 21: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 22: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 23: src0.xyz = temp[2], src1.xyz = temp[3] DP3_SAT temp[1].y, src0.xyz, src1.xyz 24: src0.xyz = temp[1], src1.xyz = temp[5] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 25: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 26: src0.xyz = input[8] DP3 temp[1].y, src0.xyz, src0.xyz 27: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 28: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 29: src0.xyz = temp[4], src1.xyz = temp[3] DP3 temp[1].y, src0.xyz, src1.xyz 30: src0.xyz = temp[1], src0.w = const[6], src1.xyz = const[6] MAD_SAT temp[1].y, src0._y_, src1._z_, -src0._w_ 31: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._y_, src0._0_ 32: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[3].xyz, src0.yyy, src1.xyz, src0.000 33: src0.xyz = temp[3], src1.xyz = temp[7], src2.xyz = temp[6] MAD temp[4].xyz, src0.xyz, src1.xyz, src2.xyz 34: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 36: src0.xyz = temp[0], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 37: src0.xyz = temp[3], src1.xyz = temp[7] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[0], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 40: BEGIN_TEX; 41: TEX temp[0].w, temp[9].xy__, 2D[1]; 42: src0.w = temp[0], src1.w = const[0], srcp.w = (src1 - src0) CMP temp[0].w, src0.0, src0.1, srcp.w 43: src0.w = temp[0] MAD temp[0].xyz, -src0.www, src0.111, src0.000 MAD temp[0].w, -src0.w, src0.1, src0.0 44: BEGIN_TEX; 45: KIL temp[0]; pc=45************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 33, tex_end: 4 (code_addr: 00480840) TEX: TEX t6, t6, texture[0] (00008186) TEX t3, t3, texture[4] (0000a0c3) TXP t5, t5, texture[5] (0001a945) TEX t4, t4, texture[6] (0000b104) TEX t7, t7, texture[7] (0000b9c7) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t9 t0 t0 bias-> t0.w (00800009) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t9.w t7.x t7.x op: 05000009 1: xyz: t9 t0 t0 bias-> t9.xy (01a40009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t0.www 0.0 op: 00050600 w: t9.x t9.x t9.x op: 00000000 2: xyz: t9 c9 c10 bias-> t1.yz (0306aa49) w: t0 t0 t0 bias-> (00000000) xyz: t9.zxy c9.zxy c10.zxy op: 00070d9a w: t9.x t9.x t9.x op: 00000000 3: xyz: t1 c5 t0 bias-> t9.y (01240941) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz c5.xxx c5.xyz op: 00010283 w: t1.x t1.x t1.x op: 00000000 4: xyz: t1 t0 t0 bias-> t9.x (00a40001) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy 1.0 0.0 op: 00050a82 w: t1.x t1.x t1.x op: 00000000 5: xyz: t9 c6 t0 bias-> t9.xy (01a40989) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz c6.xxx 0.0 op: 00050280 w: t9.x t9.x t9.x op: 00000000 6: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 7: xyz: t3 c7 t0 bias-> t3.xy (018c09c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c7.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 8: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t0.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 9: xyz: t0 c1 t0 bias-> t6.xyz (03980840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 10: xyz: t0 t0 t0 bias-> t3.z (020c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 11: xyz: t3 t0 t0 bias-> t1.y (01040003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 12: xyz: t2 t1 t0 bias-> t1.y (01040042) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 1.0 1.0 -t1.y op: 00090891 13: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 14: xyz: t1 t0 t0 bias-> t3.z (020c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 15: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 16: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 17: xyz: t2 t3 t0 bias-> t1.y (010400c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 18: xyz: t1 t5 t0 bias-> t2.xyz (03880141) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t5.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 19: 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 20: xyz: t8 t0 t0 bias-> t1.y (01040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 21: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 22: xyz: t1 t8 t0 bias-> t4.xyz (03900201) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t8.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 23: xyz: t4 t3 t0 bias-> t1.y (010400c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 24: xyz: t1 c6 t0 bias-> t1.y (01040981) w: c6 t0 t0 bias-> (00000026) xyz: t1.xyz c6.zzz -c6.www op: 400b0380 w: t1.x t1.x t1.x op: 00000000 25: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 26: xyz: t1 c2 t0 bias-> t3.xyz (038c0881) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 27: xyz: t3 t7 t6 bias-> t4.xyz (039061c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz t6.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 28: xyz: t2 t4 t0 bias-> t4.xyz (03900102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 29: xyz: t0 c3 t4 bias-> t0.xyz (038048c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.xyz t4.xyz op: 80020200 NOP w: t0.x t0.x t0.x op: 00000000 30: xyz: t0 c4 t1 sub-> o0.xyz (1c001900) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 31: xyz: t3 t7 t0 bias-> t0.xyz (038001c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 32: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 33: xyz: t0 c8 t0 bias-> (00000a00) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c8.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 NODE 1: alu_offset: 34, tex_offset: 5, alu_end: 1, tex_end: 0 (code_addr: 00005062) TEX: TEX t0, t9, texture[1] (00008809) 34: xyz: t0 t0 t0 bias-> (00000000) w: t0 c0 t0 sub-> t0.w (00800800) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: 0.0 1.0 srcp.w op: 0323c890 35: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t0.www 1.0 0.0 op: 00050aac w: -t0.w 1.0 0.0 op: 000408a9 NODE 2: alu_offset: 36, tex_offset: 6, alu_end: 0, tex_end: 0 (code_addr: 00006024) TEX: KIL t0, t0, texture[0] (00010000) 36: 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], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[2], PERSPECTIVE DCL IN[4], GENERIC[4], PERSPECTIVE DCL IN[5], GENERIC[5], PERSPECTIVE DCL IN[6], GENERIC[6], PERSPECTIVE DCL IN[7], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL SAMP[8] DCL CONST[0] DCL CONST[4..6] DCL CONST[8..9] DCL TEMP[0..11] IMM FLT32 { 1.0000, 0.0000, 0.5000, 1.8000} IMM FLT32 { 2.0000, -1.0000, 0.0500, 0.0000} 0: MAD TEMP[0].xy, IN[2], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[4], SAMP[0], 2D 2: MOV TEMP[2], IMM[0].xxxx 3: MUL_SAT TEMP[2], TEMP[2], IN[2].wwww 4: TEX TEMP[3], IN[2], SAMP[1], 2D 5: MOV TEMP[3].x, TEMP[3].wwww 6: MAD TEMP[3].xy, TEMP[3], IMM[1].xxxx, IMM[1].yyyy 7: TEX TEMP[4], TEMP[0], SAMP[2], 2D 8: MOV TEMP[4].x, TEMP[4].wwww 9: MAD TEMP[4].xy, TEMP[4], IMM[1].xxxx, IMM[1].yyyy 10: MAD TEMP[3].xy, TEMP[2].xxxx, TEMP[4], TEMP[3] 11: MOV TEMP[3].z, IMM[0].yyyy 12: DP3 TEMP[5].x, TEMP[3], TEMP[3] 13: ADD TEMP[5].x, IMM[0].xxxx, -TEMP[5].xxxx 14: RSQ TEMP[5].x, TEMP[5].xxxx 15: RCP TEMP[3].z, TEMP[5].xxxx 16: DP3 TEMP[6].x, IN[5], TEMP[3] 17: DP3 TEMP[6].y, IN[6], TEMP[3] 18: DP3 TEMP[6].z, IN[7], TEMP[3] 19: TEX TEMP[7], TEMP[6], SAMP[3], CUBE 20: MUL TEMP[7], TEMP[7], CONST[4] 21: MUL TEMP[8], TEMP[1], CONST[5] 22: MUL TEMP[8], TEMP[7], TEMP[8] 23: DP3 TEMP[5], IN[3], TEMP[6] 24: ADD TEMP[5], TEMP[5], TEMP[5] 25: MAD TEMP[9], -TEMP[6], TEMP[5].xxxx, IN[3] 26: TEX TEMP[7], TEMP[9], SAMP[4], CUBE 27: TEX TEMP[10], IN[4], SAMP[5], 2D 28: TEX TEMP[11], TEMP[0], SAMP[6], 2D 29: ADD TEMP[11], TEMP[11], -IMM[0].zzzz 30: MAD_SAT TEMP[10], TEMP[2].xxxx, TEMP[11], TEMP[10] 31: ADD TEMP[9], TEMP[10], TEMP[10] 32: MAD TEMP[8], TEMP[9], TEMP[7], TEMP[8] 33: MUL TEMP[8], CONST[6].xxxx, TEMP[8] 34: TEX TEMP[9], IN[4], SAMP[7], 2D 35: ADD TEMP[8], TEMP[8], TEMP[9] 36: DP3 TEMP[5], IN[3], TEMP[6] 37: TEX TEMP[9], TEMP[5], SAMP[8], 2D 38: MAD TEMP[5], TEMP[10], IMM[0].wwww, IMM[1].zzzz 39: MUL TEMP[9], TEMP[5], TEMP[9] 40: MUL TEMP[9], CONST[8], TEMP[9] 41: ADD TEMP[8], TEMP[8], TEMP[9] 42: LRP TEMP[8].xyz, IN[1].xxxx, CONST[9], TEMP[8] 43: MUL OUT[0], TEMP[8], IN[0] 44: MOV OUT[0].w, CONST[6].yyyy 45: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[10].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[11].xxxx, const[11].yyyy; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[11].xxxx, const[11].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[10].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[10].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: MUL temp[8], temp[1], const[5]; 22: MUL temp[8], temp[7], temp[8]; 23: DP3 temp[5], input[3], temp[6]; 24: ADD temp[5], temp[5], temp[5]; 25: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 26: TEX temp[7], temp[9], CUBE[4]; 27: TEX temp[10], input[4], 2D[5]; 28: TEX temp[11], temp[0], 2D[6]; 29: ADD temp[11], temp[11], -const[10].zzzz; 30: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 31: ADD temp[9], temp[10], temp[10]; 32: MAD temp[8], temp[9], temp[7], temp[8]; 33: MUL temp[8], const[6].xxxx, temp[8]; 34: TEX temp[9], input[4], 2D[7]; 35: ADD temp[8], temp[8], temp[9]; 36: DP3 temp[5], input[3], temp[6]; 37: TEX temp[9], temp[5], 2D[8]; 38: MAD temp[5], temp[10], const[10].wwww, const[11].zzzz; 39: MUL temp[9], temp[5], temp[9]; 40: MUL temp[9], const[8], temp[9]; 41: ADD temp[8], temp[8], temp[9]; 42: LRP temp[8].xyz, input[1].xxxx, const[9], temp[8]; 43: MUL output[0], temp[8], input[0]; 44: MOV output[0].w, const[6].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[10].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[11].xxxx, const[11].yyyy; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[11].xxxx, const[11].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[10].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[10].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: MUL temp[8], temp[1], const[5]; 22: MUL temp[8], temp[7], temp[8]; 23: DP3 temp[5], input[3], temp[6]; 24: ADD temp[5], temp[5], temp[5]; 25: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 26: TEX temp[7], temp[9], CUBE[4]; 27: TEX temp[10], input[4], 2D[5]; 28: TEX temp[11], temp[0], 2D[6]; 29: ADD temp[11], temp[11], -const[10].zzzz; 30: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 31: ADD temp[9], temp[10], temp[10]; 32: MAD temp[8], temp[9], temp[7], temp[8]; 33: MUL temp[8], const[6].xxxx, temp[8]; 34: TEX temp[9], input[4], 2D[7]; 35: ADD temp[8], temp[8], temp[9]; 36: DP3 temp[5], input[3], temp[6]; 37: TEX temp[9], temp[5], 2D[8]; 38: MAD temp[5], temp[10], const[10].wwww, const[11].zzzz; 39: MUL temp[9], temp[5], temp[9]; 40: MUL temp[9], const[8], temp[9]; 41: ADD temp[8], temp[8], temp[9]; 42: LRP temp[8].xyz, input[1].xxxx, const[9], temp[8]; 43: MUL output[0], temp[8], input[0]; 44: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[10].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[11].xxxx, const[11].yyyy; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[11].xxxx, const[11].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[10].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[10].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: MUL temp[8], temp[1], const[5]; 22: MUL temp[8], temp[7], temp[8]; 23: DP3 temp[5], input[3], temp[6]; 24: ADD temp[5], temp[5], temp[5]; 25: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 26: TEX temp[7], temp[9], CUBE[4]; 27: TEX temp[10], input[4], 2D[5]; 28: TEX temp[11], temp[0], 2D[6]; 29: ADD temp[11], temp[11], -const[10].zzzz; 30: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 31: ADD temp[9], temp[10], temp[10]; 32: MAD temp[8], temp[9], temp[7], temp[8]; 33: MUL temp[8], const[6].xxxx, temp[8]; 34: TEX temp[9], input[4], 2D[7]; 35: ADD temp[8], temp[8], temp[9]; 36: DP3 temp[5], input[3], temp[6]; 37: TEX temp[9], temp[5], 2D[8]; 38: MAD temp[5], temp[10], const[10].wwww, const[11].zzzz; 39: MUL temp[9], temp[5], temp[9]; 40: MUL temp[9], const[8], temp[9]; 41: ADD temp[8], temp[8], temp[9]; 42: LRP temp[8].xyz, input[1].xxxx, const[9], temp[8]; 43: MUL output[0], temp[8], input[0]; 44: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[10].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[11].xxxx, const[11].yyyy; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[11].xxxx, const[11].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[10].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[10].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: MUL temp[8], temp[1], const[5]; 22: MUL temp[8], temp[7], temp[8]; 23: DP3 temp[5], input[3], temp[6]; 24: ADD temp[5], temp[5], temp[5]; 25: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 26: TEX temp[7], temp[9], CUBE[4]; 27: TEX temp[10], input[4], 2D[5]; 28: TEX temp[11], temp[0], 2D[6]; 29: ADD temp[11], temp[11], -const[10].zzzz; 30: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 31: ADD temp[9], temp[10], temp[10]; 32: MAD temp[8], temp[9], temp[7], temp[8]; 33: MUL temp[8], const[6].xxxx, temp[8]; 34: TEX temp[9], input[4], 2D[7]; 35: ADD temp[8], temp[8], temp[9]; 36: DP3 temp[5], input[3], temp[6]; 37: TEX temp[9], temp[5], 2D[8]; 38: MAD temp[5], temp[10], const[10].wwww, const[11].zzzz; 39: MUL temp[9], temp[5], temp[9]; 40: MUL temp[9], const[8], temp[9]; 41: ADD temp[8], temp[8], temp[9]; 42: LRP temp[8].xyz, input[1].xxxx, const[9], temp[8]; 43: MUL output[0], temp[8], input[0]; 44: MOV output[0].w, const[6].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[10].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[11].xxxx, const[11].yyyy; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[11].xxxx, const[11].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[10].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[10].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: MUL temp[8], temp[1], const[5]; 22: MUL temp[8], temp[7], temp[8]; 23: DP3 temp[5], input[3], temp[6]; 24: ADD temp[5], temp[5], temp[5]; 25: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 26: TEX temp[7], temp[9], CUBE[4]; 27: TEX temp[10], input[4], 2D[5]; 28: TEX temp[11], temp[0], 2D[6]; 29: ADD temp[11], temp[11], -const[10].zzzz; 30: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 31: ADD temp[9], temp[10], temp[10]; 32: MAD temp[8], temp[9], temp[7], temp[8]; 33: MUL temp[8], const[6].xxxx, temp[8]; 34: TEX temp[9], input[4], 2D[7]; 35: ADD temp[8], temp[8], temp[9]; 36: DP3 temp[5], input[3], temp[6]; 37: TEX temp[9], temp[5], 2D[8]; 38: MAD temp[5], temp[10], const[10].wwww, const[11].zzzz; 39: MUL temp[9], temp[5], temp[9]; 40: MUL temp[9], const[8], temp[9]; 41: ADD temp[8], temp[8], temp[9]; 42: LRP temp[8].xyz, input[1].xxxx, const[9], temp[8]; 43: MUL output[0], temp[8], input[0]; 44: MOV output[0].w, const[6].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[10].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[11].xxxx, const[11].yyyy; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[11].xxxx, const[11].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[10].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[10].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: MUL temp[8], temp[1], const[5]; 22: MUL temp[8], temp[7], temp[8]; 23: DP3 temp[5], input[3], temp[6]; 24: ADD temp[5], temp[5], temp[5]; 25: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 26: TEX temp[7], temp[9], CUBE[4]; 27: TEX temp[10], input[4], 2D[5]; 28: TEX temp[11], temp[0], 2D[6]; 29: ADD temp[11], temp[11], -const[10].zzzz; 30: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 31: ADD temp[9], temp[10], temp[10]; 32: MAD temp[8], temp[9], temp[7], temp[8]; 33: MUL temp[8], const[6].xxxx, temp[8]; 34: TEX temp[9], input[4], 2D[7]; 35: ADD temp[8], temp[8], temp[9]; 36: DP3 temp[5], input[3], temp[6]; 37: TEX temp[9], temp[5], 2D[8]; 38: MAD temp[5], temp[10], const[10].wwww, const[11].zzzz; 39: MUL temp[9], temp[5], temp[9]; 40: MUL temp[9], const[8], temp[9]; 41: ADD temp[8], temp[8], temp[9]; 42: LRP temp[8].xyz, input[1].xxxx, const[9], temp[8]; 43: MUL_SAT output[0], temp[8], input[0]; 44: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[10].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[11].xxxx, const[11].yyyy; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[11].xxxx, const[11].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[10].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[10].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, temp[5].xxxx; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: MUL temp[8], temp[1], const[5]; 22: MUL temp[8], temp[7], temp[8]; 23: DP3 temp[5], input[3], temp[6]; 24: ADD temp[5], temp[5], temp[5]; 25: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 26: TEX temp[7], temp[9], CUBE[4]; 27: TEX temp[10], input[4], 2D[5]; 28: TEX temp[11], temp[0], 2D[6]; 29: ADD temp[11], temp[11], -const[10].zzzz; 30: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 31: ADD temp[9], temp[10], temp[10]; 32: MAD temp[8], temp[9], temp[7], temp[8]; 33: MUL temp[8], const[6].xxxx, temp[8]; 34: TEX temp[9], input[4], 2D[7]; 35: ADD temp[8], temp[8], temp[9]; 36: DP3 temp[5], input[3], temp[6]; 37: TEX temp[9], temp[5], 2D[8]; 38: MAD temp[5], temp[10], const[10].wwww, const[11].zzzz; 39: MUL temp[9], temp[5], temp[9]; 40: MUL temp[9], const[8], temp[9]; 41: ADD temp[8], temp[8], temp[9]; 42: LRP temp[8].xyz, input[1].xxxx, const[9], temp[8]; 43: MUL_SAT output[0], temp[8], input[0]; 44: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[2], const[0], const[0].zwzw; 1: TEX temp[1], input[4], 2D[0]; 2: MOV temp[2], const[10].xxxx; 3: MUL_SAT temp[2], temp[2], input[2].wwww; 4: TEX temp[3], input[2], 2D[1]; 5: MOV temp[3].x, temp[3].wwww; 6: MAD temp[3].xy, temp[3], const[11].xxxx, const[11].yyyy; 7: TEX temp[4], temp[0], 2D[2]; 8: MOV temp[4].x, temp[4].wwww; 9: MAD temp[4].xy, temp[4], const[11].xxxx, const[11].yyyy; 10: MAD temp[3].xy, temp[2].xxxx, temp[4], temp[3]; 11: MOV temp[3].z, const[10].yyyy; 12: DP3 temp[5].x, temp[3], temp[3]; 13: ADD temp[5].x, const[10].xxxx, -temp[5].xxxx; 14: RSQ temp[5].x, |temp[5].xxxx|; 15: RCP temp[3].z, temp[5].xxxx; 16: DP3 temp[6].x, input[5], temp[3]; 17: DP3 temp[6].y, input[6], temp[3]; 18: DP3 temp[6].z, input[7], temp[3]; 19: TEX temp[7], temp[6], CUBE[3]; 20: MUL temp[7], temp[7], const[4]; 21: MUL temp[8], temp[1], const[5]; 22: MUL temp[8], temp[7], temp[8]; 23: DP3 temp[5], input[3], temp[6]; 24: ADD temp[5], temp[5], temp[5]; 25: MAD temp[9], -temp[6], temp[5].xxxx, input[3]; 26: TEX temp[7], temp[9], CUBE[4]; 27: TEX temp[10], input[4], 2D[5]; 28: TEX temp[11], temp[0], 2D[6]; 29: ADD temp[11], temp[11], -const[10].zzzz; 30: MAD_SAT temp[10], temp[2].xxxx, temp[11], temp[10]; 31: ADD temp[9], temp[10], temp[10]; 32: MAD temp[8], temp[9], temp[7], temp[8]; 33: MUL temp[8], const[6].xxxx, temp[8]; 34: TEX temp[9], input[4], 2D[7]; 35: ADD temp[8], temp[8], temp[9]; 36: DP3 temp[5], input[3], temp[6]; 37: TEX temp[9], temp[5], 2D[8]; 38: MAD temp[5], temp[10], const[10].wwww, const[11].zzzz; 39: MUL temp[9], temp[5], temp[9]; 40: MUL temp[9], const[8], temp[9]; 41: ADD temp[8], temp[8], temp[9]; 42: ADD temp[12].xyz, const[9], -temp[8]; 43: MAD temp[8].xyz, input[1].xxxx, temp[12], temp[8]; 44: MUL_SAT output[0], temp[8], input[0]; 45: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[4].xy__, 2D[0]; 2: MOV temp[2].x, const[10].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 4: TEX temp[3].yw, input[2].xy__, 2D[1]; 5: MOV temp[3].x, temp[3].w___; 6: MAD temp[3].xy, temp[3].xy__, const[11].xx__, const[11].yy__; 7: TEX temp[4].yw, temp[0].xy__, 2D[2]; 8: MOV temp[4].x, temp[4].w___; 9: MAD temp[4].xy, temp[4].xy__, const[11].xx__, const[11].yy__; 10: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 11: MOV temp[3].z, const[10].__y_; 12: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 13: ADD temp[5].x, const[10].x___, -temp[5].x___; 14: RSQ temp[5].x, |temp[5].x___|; 15: RCP temp[3].z, temp[5].x___; 16: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 17: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 18: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 19: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 20: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 21: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 22: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 23: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 24: ADD temp[5].x, temp[5].x___, temp[5].x___; 25: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 26: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 27: TEX temp[10].xyz, input[4].xy__, 2D[5]; 28: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 29: ADD temp[11].xyz, temp[11].xyz_, -const[10].zzz_; 30: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 31: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 32: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 33: MUL temp[8].xyz, const[6].xxx_, temp[8].xyz_; 34: TEX temp[9].xyz, input[4].xy__, 2D[7]; 35: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 36: DP3 temp[5].xy, input[3].xyz_, temp[6].xyz_; 37: TEX temp[9].xyz, temp[5].xy__, 2D[8]; 38: MAD temp[5].xyz, temp[10].xyz_, const[10].www_, const[11].zzz_; 39: MUL temp[9].xyz, temp[5].xyz_, temp[9].xyz_; 40: MUL temp[9].xyz, const[8].xyz_, temp[9].xyz_; 41: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 42: ADD temp[12].xyz, const[9].xyz_, -temp[8].xyz_; 43: MAD temp[8].xyz, input[1].xxx_, temp[12].xyz_, temp[8].xyz_; 44: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 45: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[4].xy__, 2D[0]; 2: MOV temp[2].x, const[10].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[2].w___; 4: TEX temp[3].yw, input[2].xy__, 2D[1]; 5: MOV temp[3].x, temp[3].w___; 6: MAD temp[3].xy, temp[3].xy__, const[11].xx__, const[11].yy__; 7: TEX temp[4].yw, temp[0].xy__, 2D[2]; 8: MOV temp[4].x, temp[4].w___; 9: MAD temp[4].xy, temp[4].xy__, const[11].xx__, const[11].yy__; 10: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 11: MOV temp[3].z, const[10].__y_; 12: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 13: ADD temp[5].x, const[10].x___, -temp[5].x___; 14: RSQ temp[5].x, |temp[5].x___|; 15: RCP temp[3].z, temp[5].x___; 16: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 17: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 18: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 19: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 20: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 21: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 22: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 23: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 24: ADD temp[5].x, temp[5].x___, temp[5].x___; 25: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 26: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 27: TEX temp[10].xyz, input[4].xy__, 2D[5]; 28: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 29: ADD temp[11].xyz, temp[11].xyz_, -const[10].zzz_; 30: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 31: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 32: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 33: MUL temp[8].xyz, const[6].xxx_, temp[8].xyz_; 34: TEX temp[9].xyz, input[4].xy__, 2D[7]; 35: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 36: DP3 temp[5].xy, input[3].xyz_, temp[6].xyz_; 37: TEX temp[9].xyz, temp[5].xy__, 2D[8]; 38: MAD temp[5].xyz, temp[10].xyz_, const[10].www_, const[11].zzz_; 39: MUL temp[9].xyz, temp[5].xyz_, temp[9].xyz_; 40: MUL temp[9].xyz, const[8].xyz_, temp[9].xyz_; 41: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 42: ADD temp[12].xyz, const[9].xyz_, -temp[8].xyz_; 43: MAD temp[8].xyz, input[1].xxx_, temp[12].xyz_, temp[8].xyz_; 44: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 45: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[2].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[4].xy__, 2D[0]; 2: MOV_SAT temp[2].x, input[2].w___; 3: TEX temp[3].yw, input[2].xy__, 2D[1]; 4: MOV temp[3].x, temp[3].w___; 5: MAD temp[3].xy, temp[3].xy__, const[11].xx__, none.-1-1__; 6: TEX temp[4].yw, temp[0].xy__, 2D[2]; 7: MOV temp[4].x, temp[4].w___; 8: MAD temp[4].xy, temp[4].xy__, const[11].xx__, none.-1-1__; 9: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[5].x, none.1___, -temp[5].x___; 13: RSQ temp[5].x, |temp[5].x___|; 14: RCP temp[3].z, temp[5].x___; 15: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 16: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 17: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 18: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 19: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 20: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 21: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 22: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 23: ADD temp[5].x, temp[5].x___, temp[5].x___; 24: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 25: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 26: TEX temp[10].xyz, input[4].xy__, 2D[5]; 27: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 28: ADD temp[11].xyz, temp[11].xyz_, -none.HHH_; 29: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 30: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 31: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 32: MUL temp[8].xyz, const[6].xxx_, temp[8].xyz_; 33: TEX temp[9].xyz, input[4].xy__, 2D[7]; 34: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 35: DP3 temp[5].xy, input[3].xyz_, temp[6].xyz_; 36: TEX temp[9].xyz, temp[5].xy__, 2D[8]; 37: MAD temp[5].xyz, temp[10].xyz_, const[10].www_, const[11].zzz_; 38: MUL temp[9].xyz, temp[5].xyz_, temp[9].xyz_; 39: MUL temp[9].xyz, const[8].xyz_, temp[9].xyz_; 40: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 41: MAD temp[8].xyz, input[1].xxx_, (const[9] - temp[8]).xyz_, temp[8].xyz_; 42: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 43: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[12].x, const[0].z___; 1: MOV temp[12].y, const[0]._w__; 2: MAD temp[0].xy, input[2].xy__, const[0].xy__, temp[12].xy__; 3: TEX temp[1].xyz, input[4].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[2].w___; 5: TEX temp[3].yw, input[2].xy__, 2D[1]; 6: MOV temp[3].x, temp[3].w___; 7: MAD temp[3].xy, temp[3].xy__, const[11].xx__, none.-1-1__; 8: TEX temp[4].yw, temp[0].xy__, 2D[2]; 9: MOV temp[4].x, temp[4].w___; 10: MAD temp[4].xy, temp[4].xy__, const[11].xx__, none.-1-1__; 11: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 12: MOV temp[3].z, none.__0_; 13: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 14: ADD temp[5].x, none.1___, -temp[5].x___; 15: RSQ temp[5].x, |temp[5].x___|; 16: RCP temp[3].z, temp[5].x___; 17: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 18: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 19: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 20: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 21: MUL temp[7].xyz, temp[7].xyz_, const[4].xyz_; 22: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 23: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 24: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 25: ADD temp[5].x, temp[5].x___, temp[5].x___; 26: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 27: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 28: TEX temp[10].xyz, input[4].xy__, 2D[5]; 29: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 30: ADD temp[11].xyz, temp[11].xyz_, -none.HHH_; 31: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 32: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 33: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 34: MUL temp[8].xyz, const[6].xxx_, temp[8].xyz_; 35: TEX temp[9].xyz, input[4].xy__, 2D[7]; 36: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 37: DP3 temp[5].xy, input[3].xyz_, temp[6].xyz_; 38: TEX temp[9].xyz, temp[5].xy__, 2D[8]; 39: MAD temp[5].xyz, temp[10].xyz_, const[10].www_, const[11].zzz_; 40: MUL temp[9].xyz, temp[5].xyz_, temp[9].xyz_; 41: MUL temp[9].xyz, const[8].xyz_, temp[9].xyz_; 42: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 43: MAD temp[8].xyz, input[1].xxx_, (const[9] - temp[8]).xyz_, temp[8].xyz_; 44: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 45: MOV_SAT output[0].w, const[6].___y; CONST[6] = { 1.0000 0.0000 0.5000 1.8000 } CONST[7] = { 2.0000 -1.0000 0.0500 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[12].x, const[0].z___; 1: MOV temp[12].y, const[0]._w__; 2: MAD temp[0].xy, input[2].xy__, const[0].xy__, temp[12].xy__; 3: TEX temp[1].xyz, input[4].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[2].w___; 5: TEX temp[3].yw, input[2].xy__, 2D[1]; 6: MOV temp[3].x, temp[3].w___; 7: MAD temp[3].xy, temp[3].xy__, const[7].xx__, none.-1-1__; 8: TEX temp[4].yw, temp[0].xy__, 2D[2]; 9: MOV temp[4].x, temp[4].w___; 10: MAD temp[4].xy, temp[4].xy__, const[7].xx__, none.-1-1__; 11: MAD temp[3].xy, temp[2].xx__, temp[4].xy__, temp[3].xy__; 12: MOV temp[3].z, none.__0_; 13: DP3 temp[5].x, temp[3].xyz_, temp[3].xyz_; 14: ADD temp[5].x, none.1___, -temp[5].x___; 15: RSQ temp[5].x, |temp[5].x___|; 16: RCP temp[3].z, temp[5].x___; 17: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 18: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 19: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 20: TEX temp[7].xyz, temp[6].xyz_, CUBE[3]; 21: MUL temp[7].xyz, temp[7].xyz_, const[1].xyz_; 22: MUL temp[8].xyz, temp[1].xyz_, const[2].xyz_; 23: MUL temp[8].xyz, temp[7].xyz_, temp[8].xyz_; 24: DP3 temp[5].x, input[3].xyz_, temp[6].xyz_; 25: ADD temp[5].x, temp[5].x___, temp[5].x___; 26: MAD temp[9].xyz, -temp[6].xyz_, temp[5].xxx_, input[3].xyz_; 27: TEX temp[7].xyz, temp[9].xyz_, CUBE[4]; 28: TEX temp[10].xyz, input[4].xy__, 2D[5]; 29: TEX temp[11].xyz, temp[0].xy__, 2D[6]; 30: ADD temp[11].xyz, temp[11].xyz_, -none.HHH_; 31: MAD_SAT temp[10].xyz, temp[2].xxx_, temp[11].xyz_, temp[10].xyz_; 32: ADD temp[9].xyz, temp[10].xyz_, temp[10].xyz_; 33: MAD temp[8].xyz, temp[9].xyz_, temp[7].xyz_, temp[8].xyz_; 34: MUL temp[8].xyz, const[3].xxx_, temp[8].xyz_; 35: TEX temp[9].xyz, input[4].xy__, 2D[7]; 36: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 37: DP3 temp[5].xy, input[3].xyz_, temp[6].xyz_; 38: TEX temp[9].xyz, temp[5].xy__, 2D[8]; 39: MAD temp[5].xyz, temp[10].xyz_, const[6].www_, const[7].zzz_; 40: MUL temp[9].xyz, temp[5].xyz_, temp[9].xyz_; 41: MUL temp[9].xyz, const[4].xyz_, temp[9].xyz_; 42: ADD temp[8].xyz, temp[8].xyz_, temp[9].xyz_; 43: MAD temp[8].xyz, input[1].xxx_, (const[5] - temp[8]).xyz_, temp[8].xyz_; 44: MUL_SAT output[0].xyz, temp[8].xyz_, input[0].xyz_; 45: MOV_SAT output[0].w, const[3].___y; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[12].x, const[0].z___; 1: MOV temp[12].y, const[0]._w__; 2: MAD temp[13].xy, input[2].xy__, const[0].xy__, temp[12].xy__; 3: TEX temp[14].xyz, input[4].xy__, 2D[0]; 4: MOV_SAT temp[15].x, input[2].w___; 5: TEX temp[3].yw, input[2].xy__, 2D[1]; 6: MOV temp[3].x, temp[3].w___; 7: MAD temp[16].xy, temp[3].xy__, const[7].xx__, none.-1-1__; 8: TEX temp[4].yw, temp[13].xy__, 2D[2]; 9: MOV temp[4].x, temp[4].w___; 10: MAD temp[17].xy, temp[4].xy__, const[7].xx__, none.-1-1__; 11: MAD temp[3].xy, temp[15].xx__, temp[17].xy__, temp[16].xy__; 12: MOV temp[3].z, none.__0_; 13: DP3 temp[18].x, temp[3].xyz_, temp[3].xyz_; 14: ADD temp[19].x, none.1___, -temp[18].x___; 15: RSQ temp[20].x, |temp[19].x___|; 16: RCP temp[3].z, temp[20].x___; 17: DP3 temp[6].x, input[5].xyz_, temp[3].xyz_; 18: DP3 temp[6].y, input[6].xyz_, temp[3].xyz_; 19: DP3 temp[6].z, input[7].xyz_, temp[3].xyz_; 20: TEX temp[21].xyz, temp[6].xyz_, CUBE[3]; 21: MUL temp[22].xyz, temp[21].xyz_, const[1].xyz_; 22: MUL temp[23].xyz, temp[14].xyz_, const[2].xyz_; 23: MUL temp[24].xyz, temp[22].xyz_, temp[23].xyz_; 24: DP3 temp[25].x, input[3].xyz_, temp[6].xyz_; 25: ADD temp[26].x, temp[25].x___, temp[25].x___; 26: MAD temp[27].xyz, -temp[6].xyz_, temp[26].xxx_, input[3].xyz_; 27: TEX temp[28].xyz, temp[27].xyz_, CUBE[4]; 28: TEX temp[29].xyz, input[4].xy__, 2D[5]; 29: TEX temp[30].xyz, temp[13].xy__, 2D[6]; 30: ADD temp[31].xyz, temp[30].xyz_, -none.HHH_; 31: MAD_SAT temp[32].xyz, temp[15].xxx_, temp[31].xyz_, temp[29].xyz_; 32: ADD temp[33].xyz, temp[32].xyz_, temp[32].xyz_; 33: MAD temp[34].xyz, temp[33].xyz_, temp[28].xyz_, temp[24].xyz_; 34: MUL temp[35].xyz, const[3].xxx_, temp[34].xyz_; 35: TEX temp[36].xyz, input[4].xy__, 2D[7]; 36: ADD temp[37].xyz, temp[35].xyz_, temp[36].xyz_; 37: DP3 temp[38].xy, input[3].xyz_, temp[6].xyz_; 38: TEX temp[39].xyz, temp[38].xy__, 2D[8]; 39: MAD temp[40].xyz, temp[32].xyz_, const[6].www_, const[7].zzz_; 40: MUL temp[41].xyz, temp[40].xyz_, temp[39].xyz_; 41: MUL temp[42].xyz, const[4].xyz_, temp[41].xyz_; 42: ADD temp[43].xyz, temp[37].xyz_, temp[42].xyz_; 43: MAD temp[44].xyz, input[1].xxx_, (const[5] - temp[43]).xyz_, temp[43].xyz_; 44: MUL_SAT output[0].xyz, temp[44].xyz_, input[0].xyz_; 45: MOV_SAT output[0].w, const[3].___y; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[12].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[12].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[12] MAD temp[13].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[14].xyz, input[4].xy__, 2D[0]; 4: src0.w = input[2] MAD_SAT temp[15].x, src0.w__, src0.111, src0.000 5: TEX temp[3].yw, input[2].xy__, 2D[1]; 6: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 7: src0.xyz = temp[3], src1.xyz = const[7] MAD temp[16].xy, src0.xy_, src1.xx_, -src0.11_ 8: TEX temp[4].yw, temp[13].xy__, 2D[2]; 9: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 10: src0.xyz = temp[4], src1.xyz = const[7] MAD temp[17].xy, src0.xy_, src1.xx_, -src0.11_ 11: src0.xyz = temp[15], src1.xyz = temp[17], src2.xyz = temp[16] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 12: MAD temp[3].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[3] DP3 temp[18].x, src0.xyz, src0.xyz 14: src0.xyz = temp[18] MAD temp[19].x, src0.1__, src0.111, -src0.x__ 15: src0.xyz = temp[19] REPL_ALPHA temp[20].x RSQ, |src0.x| 16: src0.xyz = temp[20] REPL_ALPHA temp[3].z RCP, src0.x 17: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 18: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 19: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 20: TEX temp[21].xyz, temp[6].xyz_, CUBE[3]; 21: src0.xyz = temp[21], src1.xyz = const[1] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[14], src1.xyz = const[2] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[22], src1.xyz = temp[23] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[25].x, src0.xyz, src1.xyz 25: src0.xyz = temp[25] MAD temp[26].x, src0.x__, src0.111, src0.x__ 26: src0.xyz = temp[6], src1.xyz = temp[26], src2.xyz = input[3] MAD temp[27].xyz, -src0.xyz, src1.xxx, src2.xyz 27: TEX temp[28].xyz, temp[27].xyz_, CUBE[4]; 28: TEX temp[29].xyz, input[4].xy__, 2D[5]; 29: TEX temp[30].xyz, temp[13].xy__, 2D[6]; 30: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, -src0.HHH 31: src0.xyz = temp[15], src1.xyz = temp[31], src2.xyz = temp[29] MAD_SAT temp[32].xyz, src0.xxx, src1.xyz, src2.xyz 32: src0.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src0.111, src0.xyz 33: src0.xyz = temp[33], src1.xyz = temp[28], src2.xyz = temp[24] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 34: src0.xyz = const[3], src1.xyz = temp[34] MAD temp[35].xyz, src0.xxx, src1.xyz, src0.000 35: TEX temp[36].xyz, input[4].xy__, 2D[7]; 36: src0.xyz = temp[35], src1.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src0.111, src1.xyz 37: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[38].xy, src0.xyz, src1.xyz 38: TEX temp[39].xyz, temp[38].xy__, 2D[8]; 39: src0.xyz = temp[32], src0.w = const[6], src1.xyz = const[7] MAD temp[40].xyz, src0.xyz, src0.www, src1.zzz 40: src0.xyz = temp[40], src1.xyz = temp[39] MAD temp[41].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = const[4], src1.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[37], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz 43: src0.xyz = temp[43], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[44].xyz, src2.xxx, srcp.xyz, src0.xyz 44: src0.xyz = temp[44], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = const[3] MAD_SAT color[0].w, src0.y, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[14].xyz, input[4].xy__, 2D[0]; 2: TEX temp[3].yw, input[2].xy__, 2D[1]; 3: TEX temp[29].xyz, input[4].xy__, 2D[5]; 4: TEX temp[36].xyz, input[4].xy__, 2D[7]; 5: src0.xyz = const[3], src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.y, src0.1, src0.0 6: src0.xyz = temp[3], src1.xyz = const[7] MAD temp[16].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[14], src1.xyz = const[2] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[3].z, src0.__0, src0.111, src0.000 9: src0.w = input[2] MAD_SAT temp[15].x, src0.w__, src0.111, src0.000 10: src0.w = const[0] MAD temp[12].y, src0._w_, src0.111, src0.000 11: src0.xyz = const[0] MAD temp[12].x, src0.z__, src0.111, src0.000 12: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[12] MAD temp[13].xy, src0.xy_, src1.xy_, src2.xy_ 13: BEGIN_TEX; 14: TEX temp[30].xyz, temp[13].xy__, 2D[6]; 15: TEX temp[4].yw, temp[13].xy__, 2D[2]; 16: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 17: src0.xyz = temp[4], src1.xyz = const[7] MAD temp[17].xy, src0.xy_, src1.xx_, -src0.11_ 18: src0.xyz = temp[15], src1.xyz = temp[17], src2.xyz = temp[16] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 19: src0.xyz = temp[3] DP3 temp[18].x, src0.xyz, src0.xyz 20: src0.xyz = temp[30], src1.xyz = temp[18] MAD temp[31].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[19].w, src0.1, src0.1, -src1.x 21: src0.xyz = temp[19], src0.w = temp[19] REPL_ALPHA temp[20].x RSQ, |src0.w| 22: src0.xyz = temp[20] REPL_ALPHA temp[3].z RCP, src0.x 23: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 24: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 25: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 26: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[25].x, src0.xyz, src1.xyz 27: src0.xyz = temp[25] MAD temp[26].x, src0.x__, src0.111, src0.x__ 28: src0.xyz = temp[6], src1.xyz = temp[26], src2.xyz = input[3] MAD temp[27].xyz, -src0.xyz, src1.xxx, src2.xyz 29: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[38].xy, src0.xyz, src1.xyz 30: src0.xyz = temp[15], src1.xyz = temp[31], src2.xyz = temp[29] MAD_SAT temp[32].xyz, src0.xxx, src1.xyz, src2.xyz 31: src0.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src0.111, src0.xyz 32: src0.xyz = temp[32], src0.w = const[6], src1.xyz = const[7] MAD temp[40].xyz, src0.xyz, src0.www, src1.zzz 33: BEGIN_TEX; 34: TEX temp[21].xyz, temp[6].xyz_, CUBE[3]; 35: TEX temp[28].xyz, temp[27].xyz_, CUBE[4]; 36: TEX temp[39].xyz, temp[38].xy__, 2D[8]; 37: src0.xyz = temp[40], src1.xyz = temp[39] MAD temp[41].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = const[4], src1.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[21], src1.xyz = const[1] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[22], src1.xyz = temp[23] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[33], src1.xyz = temp[28], src2.xyz = temp[24] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = const[3], src1.xyz = temp[34] MAD temp[35].xyz, src0.xxx, src1.xyz, src0.000 43: src0.xyz = temp[35], src1.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src0.111, src1.xyz 44: src0.xyz = temp[37], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz 45: src0.xyz = temp[43], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[44].xyz, src2.xxx, srcp.xyz, src0.xyz 46: src0.xyz = temp[44], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[14].xyz, input[4].xy__, 2D[0]; 2: TEX temp[3].yw, input[2].xy__, 2D[1]; 3: TEX temp[29].xyz, input[4].xy__, 2D[5]; 4: TEX temp[36].xyz, input[4].xy__, 2D[7]; 5: src0.xyz = const[3], src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.y, src0.1, src0.0 6: src0.xyz = temp[3], src1.xyz = const[7] MAD temp[16].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[14], src1.xyz = const[2] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[3].z, src0.__0, src0.111, src0.000 9: src0.w = input[2] MAD_SAT temp[15].x, src0.w__, src0.111, src0.000 10: src0.w = const[0] MAD temp[12].y, src0._w_, src0.111, src0.000 11: src0.xyz = const[0] MAD temp[12].x, src0.z__, src0.111, src0.000 12: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[12] MAD temp[13].xy, src0.xy_, src1.xy_, src2.xy_ 13: BEGIN_TEX; 14: TEX temp[30].xyz, temp[13].xy__, 2D[6]; 15: TEX temp[4].yw, temp[13].xy__, 2D[2]; 16: src0.w = temp[4] MAD temp[4].x, src0.w__, src0.111, src0.000 17: src0.xyz = temp[4], src1.xyz = const[7] MAD temp[17].xy, src0.xy_, src1.xx_, -src0.11_ 18: src0.xyz = temp[15], src1.xyz = temp[17], src2.xyz = temp[16] MAD temp[3].xy, src0.xx_, src1.xy_, src2.xy_ 19: src0.xyz = temp[3] DP3 temp[18].x, src0.xyz, src0.xyz 20: src0.xyz = temp[30], src1.xyz = temp[18] MAD temp[31].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[19].w, src0.1, src0.1, -src1.x 21: src0.w = temp[19] REPL_ALPHA temp[20].x RSQ, |src0.w| 22: src0.xyz = temp[20] REPL_ALPHA temp[3].z RCP, src0.x 23: src0.xyz = input[5], src1.xyz = temp[3] DP3 temp[6].x, src0.xyz, src1.xyz 24: src0.xyz = input[6], src1.xyz = temp[3] DP3 temp[6].y, src0.xyz, src1.xyz 25: src0.xyz = input[7], src1.xyz = temp[3] DP3 temp[6].z, src0.xyz, src1.xyz 26: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[25].x, src0.xyz, src1.xyz 27: src0.xyz = temp[25] MAD temp[26].x, src0.x__, src0.111, src0.x__ 28: src0.xyz = temp[6], src1.xyz = temp[26], src2.xyz = input[3] MAD temp[27].xyz, -src0.xyz, src1.xxx, src2.xyz 29: src0.xyz = input[3], src1.xyz = temp[6] DP3 temp[38].xy, src0.xyz, src1.xyz 30: src0.xyz = temp[15], src1.xyz = temp[31], src2.xyz = temp[29] MAD_SAT temp[32].xyz, src0.xxx, src1.xyz, src2.xyz 31: src0.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src0.111, src0.xyz 32: src0.xyz = temp[32], src0.w = const[6], src1.xyz = const[7] MAD temp[40].xyz, src0.xyz, src0.www, src1.zzz 33: BEGIN_TEX; 34: TEX temp[21].xyz, temp[6].xyz_, CUBE[3]; 35: TEX temp[28].xyz, temp[27].xyz_, CUBE[4]; 36: TEX temp[39].xyz, temp[38].xy__, 2D[8]; 37: src0.xyz = temp[40], src1.xyz = temp[39] MAD temp[41].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = const[4], src1.xyz = temp[41] MAD temp[42].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[21], src1.xyz = const[1] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[22], src1.xyz = temp[23] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[33], src1.xyz = temp[28], src2.xyz = temp[24] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = const[3], src1.xyz = temp[34] MAD temp[35].xyz, src0.xxx, src1.xyz, src0.000 43: src0.xyz = temp[35], src1.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src0.111, src1.xyz 44: src0.xyz = temp[37], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz 45: src0.xyz = temp[43], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[44].xyz, src2.xxx, srcp.xyz, src0.xyz 46: src0.xyz = temp[44], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8].xyz, input[4].xy__, 2D[0]; 2: TEX temp[9].yw, input[2].xy__, 2D[1]; 3: TEX temp[10].xyz, input[4].xy__, 2D[5]; 4: TEX temp[4].xyz, input[4].xy__, 2D[7]; 5: src0.xyz = const[3], src0.w = temp[9] MAD temp[9].x, src0.w__, src0.11_, src0.00_ MAD_SAT color[0].w, src0.y, src0.1, src0.0 6: src0.xyz = temp[9], src1.xyz = const[7] MAD temp[9].xy, src0.xy_, src1.xx_, -src0.11_ 7: src0.xyz = temp[8], src1.xyz = const[2] MAD temp[8].xyz, src0.xyz, src1.xyz, src0.000 8: MAD temp[11].z, src0.__0, src0.111, src0.000 9: src0.w = input[2] MAD_SAT temp[1].y, src0._w_, src0._1_, src0._0_ 10: src0.w = const[0] MAD temp[12].y, src0._w_, src0.11_, src0.00_ 11: src0.xyz = const[0] MAD temp[12].x, src0.z__, src0.11_, src0.00_ 12: src0.xyz = input[2], src1.xyz = const[0], src2.xyz = temp[12] MAD temp[2].xy, src0.xy_, src1.xy_, src2.xy_ 13: BEGIN_TEX; 14: TEX temp[12].xyz, temp[2].xy__, 2D[6]; 15: TEX temp[2].yw, temp[2].xy__, 2D[2]; 16: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.11_, src0.00_ 17: src0.xyz = temp[2], src1.xyz = const[7] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 18: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[9] MAD temp[11].xy, src0.yy_, src1.xy_, src2.xy_ 19: src0.xyz = temp[11] DP3 temp[1].z, src0.xyz, src0.xyz 20: src0.xyz = temp[12], src1.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.1, src0.1, -src1.z 21: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 22: src0.xyz = temp[1] REPL_ALPHA temp[1].z RCP, src0.z 23: src0.xyz = input[5], src1.xyz = temp[11], src2.xyz = temp[1] DP3 temp[5].x, src0.xyz, src2.xyz 24: src0.xyz = input[6], src1.xyz = temp[11], src2.xyz = temp[1] DP3 temp[5].y, src0.xyz, src2.xyz 25: src0.xyz = input[7], src1.xyz = temp[11], src2.xyz = temp[1] DP3 temp[5].z, src0.xyz, src2.xyz 26: src0.xyz = input[3], src1.xyz = temp[5] DP3 temp[1].z, src0.xyz, src1.xyz 27: src0.xyz = temp[1] MAD temp[1].z, src0.__z, src0.__1, src0.__z 28: src0.xyz = temp[5], src1.xyz = temp[1], src2.xyz = input[3] MAD temp[6].xyz, -src0.xyz, src1.zzz, src2.xyz 29: src0.xyz = input[3], src1.xyz = temp[5] DP3 temp[3].xy, src0.xyz, src1.xyz 30: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[10] MAD_SAT temp[2].xyz, src0.yyy, src1.xyz, src2.xyz 31: src0.xyz = temp[2] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 32: src0.xyz = temp[2], src0.w = const[6], src1.xyz = const[7] MAD temp[2].xyz, src0.xyz, src0.www, src1.zzz 33: BEGIN_TEX; 34: TEX temp[5].xyz, temp[5].xyz_, CUBE[3]; 35: TEX temp[6].xyz, temp[6].xyz_, CUBE[4]; 36: TEX temp[3].xyz, temp[3].xy__, 2D[8]; 37: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = const[4], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[3], src1.xyz = temp[8] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[7], src1.xyz = temp[6], src2.xyz = temp[3] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = const[3], src1.xyz = temp[3] MAD temp[3].xyz, src0.xxx, src1.xyz, src0.000 43: src0.xyz = temp[3], src1.xyz = temp[4] MAD temp[3].xyz, src0.xyz, src0.111, src1.xyz 44: src0.xyz = temp[3], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, src1.xyz 45: src0.xyz = temp[2], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xxx, srcp.xyz, src0.xyz 46: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 pc=46************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 7, tex_end: 3 (code_addr: 004601c0) TEX: TEX t8, t4, texture[0] (00008204) TEX t9, t2, texture[1] (00008a42) TEX t10, t4, texture[5] (0000aa84) TEX t4, t4, texture[7] (0000b904) 0: xyz: c3 t0 t0 bias-> t9.x (00a40023) w: t9 t0 t0 bias-> o0.w (01000009) xyz: t9.www 1.0 0.0 op: 00050a8c w: c3.y 1.0 0.0 op: 40040881 1: xyz: t9 c7 t0 bias-> t9.xy (01a409c9) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz c7.xxx -1.0 op: 000d4280 w: t9.x t9.x t9.x op: 00000000 2: xyz: t8 c2 t0 bias-> t8.xyz (03a00888) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz c2.xyz 0.0 op: 00050200 w: t8.x t8.x t8.x op: 00000000 3: xyz: t0 t0 t0 bias-> t11.z (022c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 4: xyz: t0 t0 t0 bias-> t1.y (01040000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 40050a8c w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t12.y (01300000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 6: xyz: c0 t0 t0 bias-> t12.x (00b00020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 7: xyz: t2 c0 t12 bias-> t2.xy (0188c802) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c0.xyz t12.xyz op: 00020200 w: t2.x t2.x t2.x op: 00000000 NODE 1: alu_offset: 8, tex_offset: 4, alu_end: 16, tex_end: 1 (code_addr: 00024408) TEX: TEX t12, t2, texture[6] (0000b302) TEX t2, t2, texture[2] (00009082) 8: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 9: xyz: t2 c7 t0 bias-> t2.xy (018809c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c7.xxx -1.0 op: 000d4280 w: t2.x t2.x t2.x op: 00000000 10: xyz: t1 t2 t9 bias-> t11.xy (01ac9081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz t9.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 11: xyz: t11 t0 t0 bias-> t1.z (0204000b) w: t0 t0 t0 bias-> (00000000) xyz: t11.xyz t11.xyz t11.xxx op: 00804000 w: t11.x t11.x t11.x op: 00000000 12: xyz: t12 t1 t0 bias-> t2.xyz (0388004c) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t12.xyz 1.0 -0.5 op: 000d8a80 w: 1.0 1.0 -t1.z op: 00094891 13: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 14: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 15: xyz: t5 t11 t1 bias-> t5.x (009412c5) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t1.xyz t5.xxx op: 00804400 w: t5.x t5.x t5.x op: 00000000 16: xyz: t6 t11 t1 bias-> t5.y (011412c6) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t1.xyz t6.xxx op: 00804400 w: t6.x t6.x t6.x op: 00000000 17: xyz: t7 t11 t1 bias-> t5.z (021412c7) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t1.xyz t7.xxx op: 00804400 w: t7.x t7.x t7.x op: 00000000 18: xyz: t3 t5 t0 bias-> t1.z (02040143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 19: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 t1.xyz op: 00000a80 w: t1.x t1.x t1.x op: 00000000 20: xyz: t5 t1 t3 bias-> t6.xyz (03983045) w: t0 t0 t0 bias-> (00000000) xyz: -t5.xyz t1.zzz t3.xyz op: 000203a0 w: t5.x t5.x t5.x op: 00000000 21: xyz: t3 t5 t0 bias-> t3.xy (018c0143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 22: xyz: t1 t2 t10 bias-> t2.xyz (0388a081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz t10.xyz op: 40020202 w: t1.x t1.x t1.x op: 00000000 23: xyz: t2 t0 t0 bias-> t7.xyz (039c0002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 t2.xyz op: 00000a80 w: t2.x t2.x t2.x op: 00000000 24: xyz: t2 c7 t0 bias-> t2.xyz (038809c2) w: c6 t0 t0 bias-> (00000026) xyz: t2.xyz c6.www c7.zzz op: 0001c600 w: t2.x t2.x t2.x op: 00000000 NODE 2: alu_offset: 25, tex_offset: 6, alu_end: 9, tex_end: 2 (code_addr: 00446259) TEX: TEX t5, t5, texture[3] (00009945) TEX t6, t6, texture[4] (0000a186) TEX t3, t3, texture[8] (0000c0c3) 25: 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 26: xyz: c4 t2 t0 bias-> t2.xyz (038800a4) w: t0 t0 t0 bias-> (00000000) xyz: c4.xyz t2.xyz 0.0 op: 00050200 w: c4.x c4.x c4.x op: 00000000 27: xyz: t5 c1 t0 bias-> t3.xyz (038c0845) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c1.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 28: xyz: t3 t8 t0 bias-> t3.xyz (038c0203) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t8.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 29: xyz: t7 t6 t3 bias-> t3.xyz (038c3187) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t6.xyz t3.xyz op: 00020200 w: t7.x t7.x t7.x op: 00000000 30: xyz: c3 t3 t0 bias-> t3.xyz (038c00e3) w: t0 t0 t0 bias-> (00000000) xyz: c3.xxx t3.xyz 0.0 op: 00050201 w: c3.x c3.x c3.x op: 00000000 31: xyz: t3 t4 t0 bias-> t3.xyz (038c0103) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz 1.0 t4.xyz op: 00010a80 w: t3.x t3.x t3.x op: 00000000 32: xyz: t3 t2 t0 bias-> t2.xyz (03880083) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz 1.0 t2.xyz op: 80010a80 NOP w: t3.x t3.x t3.x op: 00000000 33: xyz: t2 c5 t1 sub-> t1.xyz (03841942) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t2.xyz op: 00200789 w: t2.x t2.x t2.x op: 00000000 34: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.x t1.x t1.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[0] DCL TEMP[0..3] IMM FLT32 { 0.5000, 0.0000, 0.0000, 0.0000} 0: MAD TEMP[0].xy, IN[1], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[1], SAMP[0], 2D 2: MOV_SAT TEMP[2], IN[2].wwww 3: TEX TEMP[3], TEMP[0], SAMP[1], 2D 4: ADD TEMP[3], TEMP[3], -IMM[0].xxxx 5: MAD TEMP[1].xyz, TEMP[2].xxxx, TEMP[3], TEMP[1] 6: MUL OUT[0], TEMP[1], IN[0] 7: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[1], const[0], const[0].zwzw; 1: TEX temp[1], input[1], 2D[0]; 2: MOV_SAT temp[2], input[2].wwww; 3: TEX temp[3], temp[0], 2D[1]; 4: ADD temp[3], temp[3], -temp[0].HHHH; 5: MAD temp[1].xyz, temp[2].xxxx, temp[3], temp[1]; 6: MUL output[0], temp[1], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[1], const[0], const[0].zwzw; 1: TEX temp[1], input[1], 2D[0]; 2: MOV_SAT temp[2], input[2].wwww; 3: TEX temp[3], temp[0], 2D[1]; 4: ADD temp[3], temp[3], -temp[0].HHHH; 5: MAD temp[1].xyz, temp[2].xxxx, temp[3], temp[1]; 6: MUL output[0], temp[1], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[1], const[0], const[0].zwzw; 1: TEX temp[1], input[1], 2D[0]; 2: MOV_SAT temp[2], input[2].wwww; 3: TEX temp[3], temp[0], 2D[1]; 4: ADD temp[3], temp[3], -temp[0].HHHH; 5: MAD temp[1].xyz, temp[2].xxxx, temp[3], temp[1]; 6: MUL output[0], temp[1], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[1], const[0], const[0].zwzw; 1: TEX temp[1], input[1], 2D[0]; 2: MOV_SAT temp[2], input[2].wwww; 3: TEX temp[3], temp[0], 2D[1]; 4: ADD temp[3], temp[3], -temp[0].HHHH; 5: MAD temp[1].xyz, temp[2].xxxx, temp[3], temp[1]; 6: MUL output[0], temp[1], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[1], const[0], const[0].zwzw; 1: TEX temp[1], input[1], 2D[0]; 2: MOV_SAT temp[2], input[2].wwww; 3: TEX temp[3], temp[0], 2D[1]; 4: ADD temp[3], temp[3], -temp[0].HHHH; 5: MAD temp[1].xyz, temp[2].xxxx, temp[3], temp[1]; 6: MUL output[0], temp[1], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[1], const[0], const[0].zwzw; 1: TEX temp[1], input[1], 2D[0]; 2: MOV_SAT temp[2], input[2].wwww; 3: TEX temp[3], temp[0], 2D[1]; 4: ADD temp[3], temp[3], -temp[0].HHHH; 5: MAD temp[1].xyz, temp[2].xxxx, temp[3], temp[1]; 6: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[1], const[0], const[0].zwzw; 1: TEX temp[1], input[1], 2D[0]; 2: MOV_SAT temp[2], input[2].wwww; 3: TEX temp[3], temp[0], 2D[1]; 4: ADD temp[3], temp[3], -temp[0].HHHH; 5: MAD temp[1].xyz, temp[2].xxxx, temp[3], temp[1]; 6: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[1], const[0], const[0].zwzw; 1: TEX temp[1], input[1], 2D[0]; 2: MOV_SAT temp[2], input[2].wwww; 3: TEX temp[3], temp[0], 2D[1]; 4: ADD temp[3], temp[3], -temp[0].HHHH; 5: MAD temp[1].xyz, temp[2].xxxx, temp[3], temp[1]; 6: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[1].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: MOV_SAT temp[2].x, input[2].w___; 3: TEX temp[3].xyz, temp[0].xy__, 2D[1]; 4: ADD temp[3].xyz, temp[3].xyz_, -temp[0].HHH_; 5: MAD temp[1].xyz, temp[2].xxx_, temp[3].xyz_, temp[1].xyz_; 6: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[1].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: MOV_SAT temp[2].x, input[2].w___; 3: TEX temp[3].xyz, temp[0].xy__, 2D[1]; 4: ADD temp[3].xyz, temp[3].xyz_, -temp[0].HHH_; 5: MAD temp[1].xyz, temp[2].xxx_, temp[3].xyz_, temp[1].xyz_; 6: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[1].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: MOV_SAT temp[2].x, input[2].w___; 3: TEX temp[3].xyz, temp[0].xy__, 2D[1]; 4: ADD temp[3].xyz, temp[3].xyz_, -none.HHH_; 5: MAD temp[1].xyz, temp[2].xxx_, temp[3].xyz_, temp[1].xyz_; 6: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[4].x, const[0].z___; 1: MOV temp[4].y, const[0]._w__; 2: MAD temp[0].xy, input[1].xy__, const[0].xy__, temp[4].xy__; 3: TEX temp[1], input[1].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[2].w___; 5: TEX temp[3].xyz, temp[0].xy__, 2D[1]; 6: ADD temp[3].xyz, temp[3].xyz_, -none.HHH_; 7: MAD temp[1].xyz, temp[2].xxx_, temp[3].xyz_, temp[1].xyz_; 8: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[4].x, const[0].z___; 1: MOV temp[4].y, const[0]._w__; 2: MAD temp[0].xy, input[1].xy__, const[0].xy__, temp[4].xy__; 3: TEX temp[1], input[1].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[2].w___; 5: TEX temp[3].xyz, temp[0].xy__, 2D[1]; 6: ADD temp[3].xyz, temp[3].xyz_, -none.HHH_; 7: MAD temp[1].xyz, temp[2].xxx_, temp[3].xyz_, temp[1].xyz_; 8: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[4].x, const[0].z___; 1: MOV temp[4].y, const[0]._w__; 2: MAD temp[5].xy, input[1].xy__, const[0].xy__, temp[4].xy__; 3: TEX temp[1], input[1].xy__, 2D[0]; 4: MOV_SAT temp[6].x, input[2].w___; 5: TEX temp[7].xyz, temp[5].xy__, 2D[1]; 6: ADD temp[8].xyz, temp[7].xyz_, -none.HHH_; 7: MAD temp[1].xyz, temp[6].xxx_, temp[8].xyz_, temp[1].xyz_; 8: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[4].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[4].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[4] MAD temp[5].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[1], input[1].xy__, 2D[0]; 4: src0.w = input[2] MAD_SAT temp[6].x, src0.w__, src0.111, src0.000 5: TEX temp[7].xyz, temp[5].xy__, 2D[1]; 6: src0.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src0.111, -src0.HHH 7: src0.xyz = temp[6], src1.xyz = temp[8], src2.xyz = temp[1] MAD temp[1].xyz, src0.xxx, src1.xyz, src2.xyz 8: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.w = input[2] MAD_SAT temp[6].x, src0.w__, src0.111, src0.000 3: src0.w = const[0] MAD temp[4].y, src0._w_, src0.111, src0.000 4: src0.xyz = const[0] MAD temp[4].x, src0.z__, src0.111, src0.000 5: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[4] MAD temp[5].xy, src0.xy_, src1.xy_, src2.xy_ 6: BEGIN_TEX; 7: TEX temp[7].xyz, temp[5].xy__, 2D[1]; 8: src0.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src0.111, -src0.HHH 9: src0.xyz = temp[6], src1.xyz = temp[8], src2.xyz = temp[1] MAD temp[1].xyz, src0.xxx, src1.xyz, src2.xyz 10: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.w = input[2] MAD_SAT temp[6].x, src0.w__, src0.111, src0.000 3: src0.w = const[0] MAD temp[4].y, src0._w_, src0.111, src0.000 4: src0.xyz = const[0] MAD temp[4].x, src0.z__, src0.111, src0.000 5: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[4] MAD temp[5].xy, src0.xy_, src1.xy_, src2.xy_ 6: BEGIN_TEX; 7: TEX temp[7].xyz, temp[5].xy__, 2D[1]; 8: src0.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src0.111, -src0.HHH 9: src0.xyz = temp[6], src1.xyz = temp[8], src2.xyz = temp[1] MAD temp[1].xyz, src0.xxx, src1.xyz, src2.xyz 10: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[1].xy__, 2D[0]; 2: src0.w = input[2] MAD_SAT temp[1].z, src0.__w, src0.__1, src0.__0 3: src0.w = const[0] MAD temp[2].y, src0._w_, src0.11_, src0.00_ 4: src0.xyz = const[0] MAD temp[2].x, src0.z__, src0.11_, src0.00_ 5: src0.xyz = input[1], src1.xyz = const[0], src2.xyz = temp[2] MAD temp[1].xy, src0.xy_, src1.xy_, src2.xy_ 6: BEGIN_TEX; 7: TEX temp[2].xyz, temp[1].xy__, 2D[1]; 8: src0.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, -src0.HHH 9: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = temp[3] MAD temp[1].xyz, src0.zzz, src1.xyz, src2.xyz 10: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=47************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 3, tex_end: 0 (code_addr: 000000c0) TEX: TEX t3, t1, texture[0] (000080c1) 0: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 40050a8c w: t0.x t0.x t0.x op: 00000000 1: xyz: t0 t0 t0 bias-> t2.y (01080000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: c0 t0 t0 bias-> t2.x (00880020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 3: xyz: t1 c0 t2 bias-> t1.xy (01842801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c0.xyz t2.xyz op: 00020200 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 4, tex_offset: 1, alu_end: 2, tex_end: 0 (code_addr: 00401084) TEX: TEX t2, t1, texture[1] (00008881) 4: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 -0.5 op: 000d8a80 w: t2.x t2.x t2.x op: 00000000 5: xyz: t1 t2 t3 bias-> t1.xyz (03843081) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz t2.xyz t3.xyz op: 00020203 w: t1.x t1.x t1.x op: 00000000 6: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t3 t0 t0 bias-> o0.w (01000003) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t3.w t0.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0..2] IMM FLT32 { 2.0000, 0.0000, 0.0000, 0.0000} 0: DP3 TEMP[0], IN[1], IN[1] 1: RSQ TEMP[0], TEMP[0].xxxx 2: MUL TEMP[1], IN[1], TEMP[0] 3: DP3 TEMP[0], IN[2], IN[2] 4: RSQ TEMP[0], TEMP[0].xxxx 5: MUL TEMP[2], IN[2], TEMP[0] 6: DP3 TEMP[0], TEMP[2], TEMP[1] 7: MUL TEMP[0], TEMP[0], TEMP[1] 8: MAD TEMP[0], TEMP[0], IMM[0].xxxx, -TEMP[2] 9: TEX TEMP[0], TEMP[0], SAMP[0], CUBE 10: MUL OUT[0], TEMP[0], IN[0] 11: END Fragment Program: before compilation # Radeon Compiler Program 0: DP3 temp[0], input[1], input[1]; 1: RSQ temp[0], temp[0].xxxx; 2: MUL temp[1], input[1], temp[0]; 3: DP3 temp[0], input[2], input[2]; 4: RSQ temp[0], temp[0].xxxx; 5: MUL temp[2], input[2], temp[0]; 6: DP3 temp[0], temp[2], temp[1]; 7: MUL temp[0], temp[0], temp[1]; 8: MAD temp[0], temp[0], const[0].xxxx, -temp[2]; 9: TEX temp[0], temp[0], CUBE[0]; 10: MUL output[0], temp[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: DP3 temp[0], input[1], input[1]; 1: RSQ temp[0], temp[0].xxxx; 2: MUL temp[1], input[1], temp[0]; 3: DP3 temp[0], input[2], input[2]; 4: RSQ temp[0], temp[0].xxxx; 5: MUL temp[2], input[2], temp[0]; 6: DP3 temp[0], temp[2], temp[1]; 7: MUL temp[0], temp[0], temp[1]; 8: MAD temp[0], temp[0], const[0].xxxx, -temp[2]; 9: TEX temp[0], temp[0], CUBE[0]; 10: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: DP3 temp[0], input[1], input[1]; 1: RSQ temp[0], temp[0].xxxx; 2: MUL temp[1], input[1], temp[0]; 3: DP3 temp[0], input[2], input[2]; 4: RSQ temp[0], temp[0].xxxx; 5: MUL temp[2], input[2], temp[0]; 6: DP3 temp[0], temp[2], temp[1]; 7: MUL temp[0], temp[0], temp[1]; 8: MAD temp[0], temp[0], const[0].xxxx, -temp[2]; 9: TEX temp[0], temp[0], CUBE[0]; 10: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: DP3 temp[0], input[1], input[1]; 1: RSQ temp[0], temp[0].xxxx; 2: MUL temp[1], input[1], temp[0]; 3: DP3 temp[0], input[2], input[2]; 4: RSQ temp[0], temp[0].xxxx; 5: MUL temp[2], input[2], temp[0]; 6: DP3 temp[0], temp[2], temp[1]; 7: MUL temp[0], temp[0], temp[1]; 8: MAD temp[0], temp[0], const[0].xxxx, -temp[2]; 9: TEX temp[0], temp[0], CUBE[0]; 10: MUL output[0], temp[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: DP3 temp[0], input[1], input[1]; 1: RSQ temp[0], temp[0].xxxx; 2: MUL temp[1], input[1], temp[0]; 3: DP3 temp[0], input[2], input[2]; 4: RSQ temp[0], temp[0].xxxx; 5: MUL temp[2], input[2], temp[0]; 6: DP3 temp[0], temp[2], temp[1]; 7: MUL temp[0], temp[0], temp[1]; 8: MAD temp[0], temp[0], const[0].xxxx, -temp[2]; 9: TEX temp[0], temp[0], CUBE[0]; 10: MUL output[0], temp[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: DP3 temp[0], input[1], input[1]; 1: RSQ temp[0], temp[0].xxxx; 2: MUL temp[1], input[1], temp[0]; 3: DP3 temp[0], input[2], input[2]; 4: RSQ temp[0], temp[0].xxxx; 5: MUL temp[2], input[2], temp[0]; 6: DP3 temp[0], temp[2], temp[1]; 7: MUL temp[0], temp[0], temp[1]; 8: MAD temp[0], temp[0], const[0].xxxx, -temp[2]; 9: TEX temp[0], temp[0], CUBE[0]; 10: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: DP3 temp[0], input[1], input[1]; 1: RSQ temp[0], temp[0].xxxx; 2: MUL temp[1], input[1], temp[0]; 3: DP3 temp[0], input[2], input[2]; 4: RSQ temp[0], temp[0].xxxx; 5: MUL temp[2], input[2], temp[0]; 6: DP3 temp[0], temp[2], temp[1]; 7: MUL temp[0], temp[0], temp[1]; 8: MAD temp[0], temp[0], const[0].xxxx, -temp[2]; 9: TEX temp[0], temp[0], CUBE[0]; 10: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: DP3 temp[0], input[1], input[1]; 1: RSQ temp[0], |temp[0].xxxx|; 2: MUL temp[1], input[1], temp[0]; 3: DP3 temp[0], input[2], input[2]; 4: RSQ temp[0], |temp[0].xxxx|; 5: MUL temp[2], input[2], temp[0]; 6: DP3 temp[0], temp[2], temp[1]; 7: MUL temp[0], temp[0], temp[1]; 8: MAD temp[0], temp[0], const[0].xxxx, -temp[2]; 9: TEX temp[0], temp[0], CUBE[0]; 10: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: DP3 temp[0].x, input[1].xyz_, input[1].xyz_; 1: RSQ temp[0].xyz, |temp[0].x___|; 2: MUL temp[1].xyz, input[1].xyz_, temp[0].xyz_; 3: DP3 temp[0].x, input[2].xyz_, input[2].xyz_; 4: RSQ temp[0].xyz, |temp[0].x___|; 5: MUL temp[2].xyz, input[2].xyz_, temp[0].xyz_; 6: DP3 temp[0].xyz, temp[2].xyz_, temp[1].xyz_; 7: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 8: MAD temp[0].xyz, temp[0].xyz_, const[0].xxx_, -temp[2].xyz_; 9: TEX temp[0], temp[0].xyz_, CUBE[0]; 10: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: DP3 temp[0].x, input[1].xyz_, input[1].xyz_; 1: RSQ temp[0].xyz, |temp[0].x___|; 2: MUL temp[1].xyz, input[1].xyz_, temp[0].xyz_; 3: DP3 temp[0].x, input[2].xyz_, input[2].xyz_; 4: RSQ temp[0].xyz, |temp[0].x___|; 5: MUL temp[2].xyz, input[2].xyz_, temp[0].xyz_; 6: DP3 temp[0].xyz, temp[2].xyz_, temp[1].xyz_; 7: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 8: MAD temp[0].xyz, temp[0].xyz_, const[0].xxx_, -temp[2].xyz_; 9: TEX temp[0], temp[0].xyz_, CUBE[0]; 10: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: DP3 temp[0].x, input[1].xyz_, input[1].xyz_; 1: RSQ temp[0].xyz, |temp[0].x___|; 2: MUL temp[1].xyz, input[1].xyz_, temp[0].xyz_; 3: DP3 temp[0].x, input[2].xyz_, input[2].xyz_; 4: RSQ temp[0].xyz, |temp[0].x___|; 5: MUL temp[2].xyz, input[2].xyz_, temp[0].xyz_; 6: DP3 temp[0].xyz, temp[2].xyz_, temp[1].xyz_; 7: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 8: MAD temp[0].xyz, temp[0].xyz_, const[0].xxx_, -temp[2].xyz_; 9: TEX temp[0], temp[0].xyz_, CUBE[0]; 10: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: DP3 temp[0].x, input[1].xyz_, input[1].xyz_; 1: RSQ temp[0].xyz, |temp[0].x___|; 2: MUL temp[1].xyz, input[1].xyz_, temp[0].xyz_; 3: DP3 temp[0].x, input[2].xyz_, input[2].xyz_; 4: RSQ temp[0].xyz, |temp[0].x___|; 5: MUL temp[2].xyz, input[2].xyz_, temp[0].xyz_; 6: DP3 temp[0].xyz, temp[2].xyz_, temp[1].xyz_; 7: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 8: MAD temp[0].xyz, temp[0].xyz_, const[0].xxx_, -temp[2].xyz_; 9: TEX temp[0], temp[0].xyz_, CUBE[0]; 10: MUL_SAT output[0], temp[0], input[0]; CONST[0] = { 2.0000 0.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: DP3 temp[0].x, input[1].xyz_, input[1].xyz_; 1: RSQ temp[0].xyz, |temp[0].x___|; 2: MUL temp[1].xyz, input[1].xyz_, temp[0].xyz_; 3: DP3 temp[0].x, input[2].xyz_, input[2].xyz_; 4: RSQ temp[0].xyz, |temp[0].x___|; 5: MUL temp[2].xyz, input[2].xyz_, temp[0].xyz_; 6: DP3 temp[0].xyz, temp[2].xyz_, temp[1].xyz_; 7: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 8: MAD temp[0].xyz, temp[0].xyz_, const[0].xxx_, -temp[2].xyz_; 9: TEX temp[0], temp[0].xyz_, CUBE[0]; 10: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: DP3 temp[3].x, input[1].xyz_, input[1].xyz_; 1: RSQ temp[4].xyz, |temp[3].x___|; 2: MUL temp[5].xyz, input[1].xyz_, temp[4].xyz_; 3: DP3 temp[6].x, input[2].xyz_, input[2].xyz_; 4: RSQ temp[7].xyz, |temp[6].x___|; 5: MUL temp[8].xyz, input[2].xyz_, temp[7].xyz_; 6: DP3 temp[9].xyz, temp[8].xyz_, temp[5].xyz_; 7: MUL temp[10].xyz, temp[9].xyz_, temp[5].xyz_; 8: MAD temp[11].xyz, temp[10].xyz_, const[0].xxx_, -temp[8].xyz_; 9: TEX temp[12], temp[11].xyz_, CUBE[0]; 10: MUL_SAT output[0], temp[12], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1] DP3 temp[3].x, src0.xyz, src0.xyz 1: src0.xyz = temp[3] REPL_ALPHA temp[4].xyz RSQ, |src0.x| 2: src0.xyz = input[1], src1.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = input[2] DP3 temp[6].x, src0.xyz, src0.xyz 4: src0.xyz = temp[6] REPL_ALPHA temp[7].xyz RSQ, |src0.x| 5: src0.xyz = input[2], src1.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[8], src1.xyz = temp[5] DP3 temp[9].xyz, src0.xyz, src1.xyz 7: src0.xyz = temp[9], src1.xyz = temp[5] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[10], src1.xyz = const[0], src2.xyz = temp[8] MAD temp[11].xyz, src0.xyz, src1.xxx, -src2.xyz 9: TEX temp[12], temp[11].xyz_, CUBE[0]; 10: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[2] DP3 temp[6].x, src0.xyz, src0.xyz 1: src0.xyz = temp[6] REPL_ALPHA temp[7].xyz RSQ, |src0.x| 2: src0.xyz = input[2], src1.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = input[1] DP3 temp[3].x, src0.xyz, src0.xyz 4: src0.xyz = temp[3] REPL_ALPHA temp[4].xyz RSQ, |src0.x| 5: src0.xyz = input[1], src1.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[8], src1.xyz = temp[5] DP3 temp[9].xyz, src0.xyz, src1.xyz 7: src0.xyz = temp[9], src1.xyz = temp[5] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[10], src1.xyz = const[0], src2.xyz = temp[8] MAD temp[11].xyz, src0.xyz, src1.xxx, -src2.xyz 9: BEGIN_TEX; 10: TEX temp[12], temp[11].xyz_, CUBE[0]; 11: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[2] DP3 temp[6].x, src0.xyz, src0.xyz 1: src0.xyz = temp[6] REPL_ALPHA temp[7].xyz RSQ, |src0.x| 2: src0.xyz = input[2], src1.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = input[1] DP3 temp[3].x, src0.xyz, src0.xyz 4: src0.xyz = temp[3] REPL_ALPHA temp[4].xyz RSQ, |src0.x| 5: src0.xyz = input[1], src1.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[8], src1.xyz = temp[5] DP3 temp[9].xyz, src0.xyz, src1.xyz 7: src0.xyz = temp[9], src1.xyz = temp[5] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[10], src1.xyz = const[0], src2.xyz = temp[8] MAD temp[11].xyz, src0.xyz, src1.xxx, -src2.xyz 9: BEGIN_TEX; 10: TEX temp[12], temp[11].xyz_, CUBE[0]; 11: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[2] DP3 temp[3].x, src0.xyz, src0.xyz 1: src0.xyz = temp[3] REPL_ALPHA temp[3].xyz RSQ, |src0.x| 2: src0.xyz = input[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = input[1] DP3 temp[3].x, src0.xyz, src0.xyz 4: src0.xyz = temp[3] REPL_ALPHA temp[3].xyz RSQ, |src0.x| 5: src0.xyz = input[1], src1.xyz = temp[3] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[2], src1.xyz = temp[1] DP3 temp[3].xyz, src0.xyz, src1.xyz 7: src0.xyz = temp[3], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[1], src1.xyz = const[0], src2.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.xxx, -src2.xyz 9: BEGIN_TEX; 10: TEX temp[1], temp[1].xyz_, CUBE[0]; 11: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=48************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 8, tex_end: 0 (code_addr: 00000200) 0: xyz: t2 t0 t0 bias-> t3.x (008c0002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 1: xyz: t3 t0 t0 bias-> t3.xyz (038c0003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xxx t3.xxx t3.xxx op: 05004081 w: |t3.x| t3.x t3.x op: 05800040 2: 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 3: xyz: t1 t0 t0 bias-> t3.x (008c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz t1.xxx op: 00804000 w: t1.x t1.x t1.x op: 00000000 4: xyz: t3 t0 t0 bias-> t3.xyz (038c0003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xxx t3.xxx t3.xxx op: 05004081 w: |t3.x| t3.x t3.x op: 05800040 5: xyz: t1 t3 t0 bias-> t1.xyz (038400c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t3.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 6: xyz: t2 t1 t0 bias-> t3.xyz (038c0042) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t1.xyz t2.xxx op: 00804200 w: t2.x t2.x t2.x op: 00000000 7: xyz: t3 t1 t0 bias-> t1.xyz (03840043) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t1.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 8: xyz: t1 c0 t2 bias-> t1.xyz (03842801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c0.xxx -t2.xyz op: 000a0280 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 9, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400009) TEX: TEX t1, t1, texture[0] (00008041) 9: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.w t0.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR[1], LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[2], PERSPECTIVE DCL IN[4], GENERIC[3], PERSPECTIVE DCL IN[5], GENERIC[4], PERSPECTIVE DCL IN[6], GENERIC[5], PERSPECTIVE DCL IN[7], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL CONST[4..8] DCL TEMP[0..9] IMM FLT32 { 2.0000, -1.0000, 1.0000, 4.0000} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.0000} 0: DP3 TEMP[0].x, IN[7], IN[7] 1: RSQ TEMP[0].x, TEMP[0].xxxx 2: MUL TEMP[0], TEMP[0].xxxx, IN[7] 3: DP3 TEMP[1].x, IN[1], IN[1] 4: RSQ TEMP[1].x, TEMP[1].xxxx 5: MUL TEMP[1], TEMP[1].xxxx, IN[1] 6: TEX TEMP[2], IN[2], SAMP[1], 2D 7: MOV TEMP[2].x, TEMP[2].wwww 8: MAD TEMP[2], TEMP[2], IMM[0].xxxx, IMM[0].yyyy 9: MOV TEMP[2].z, IMM[1].wwww 10: DP3 TEMP[3].x, TEMP[2], TEMP[2] 11: ADD TEMP[3].x, IMM[2].xxxx, -TEMP[3].xxxx 12: RSQ TEMP[3].x, TEMP[3].xxxx 13: RCP TEMP[2].z, TEMP[3].xxxx 14: MOV TEMP[4], TEMP[1].zzzz 15: TEX TEMP[5], IN[5], SAMP[2], 2D 16: MOV TEMP[6], TEMP[5] 17: DP3 TEMP[7].x, TEMP[1], -TEMP[2] 18: MUL TEMP[7].x, TEMP[7].xxxx, TEMP[5].wwww 19: MUL TEMP[7].x, TEMP[7].xxxx, CONST[4].wwww 20: DP3 TEMP[8].x, TEMP[1], TEMP[2] 21: CMP TEMP[1].x, TEMP[4].xxxx, TEMP[7].xxxx, TEMP[8].xxxx 22: TXP TEMP[3], IN[4], SAMP[3], 2D 23: MUL TEMP[1], TEMP[1].xxxx, TEMP[3] 24: TEX TEMP[3].x, IN[3], SAMP[4], 2D 25: MUL TEMP[1], TEMP[1], TEMP[3].xxxx 26: MUL TEMP[9], TEMP[5], CONST[5] 27: MUL TEMP[3].xyz, TEMP[9], CONST[4] 28: CMP TEMP[9].xyz, TEMP[4].xxxx, TEMP[3], TEMP[9] 29: DP3 TEMP[0].x, TEMP[0], TEMP[2] 30: MAD_SAT TEMP[3].x, TEMP[0].xxxx, IMM[2].yyyy, -IMM[2].zzzz 31: MUL TEMP[3].x, TEMP[3].xxxx, TEMP[3].xxxx 32: MUL TEMP[3], TEMP[3].xxxx, CONST[6] 33: CMP TEMP[3], TEMP[4].xxxx, IMM[1].wwww, TEMP[3] 34: TEX TEMP[5], IN[6], SAMP[5], 2D 35: ADD TEMP[5], TEMP[5], TEMP[5] 36: MAD TEMP[9], TEMP[3], TEMP[5], TEMP[9] 37: MUL TEMP[9], TEMP[1], TEMP[9] 38: MAD TEMP[9], TEMP[6], CONST[7], TEMP[9] 39: LRP OUT[0].xyz, IN[0].xxxx, CONST[8], TEMP[9] 40: MUL TEMP[3], TEMP[3], TEMP[5] 41: MUL TEMP[3], TEMP[3], TEMP[1] 42: DP3 TEMP[3].x, TEMP[3], IMM[1] 43: CMP OUT[0].w, TEMP[4].xxxx, IMM[2].xxxx, TEMP[3].xxxx 44: END Fragment Program: before compilation # Radeon Compiler Program 0: DP3 temp[0].x, input[7], input[7]; 1: RSQ temp[0].x, temp[0].xxxx; 2: MUL temp[0], temp[0].xxxx, input[7]; 3: DP3 temp[1].x, input[1], input[1]; 4: RSQ temp[1].x, temp[1].xxxx; 5: MUL temp[1], temp[1].xxxx, input[1]; 6: TEX temp[2], input[2], 2D[1]; 7: MOV temp[2].x, temp[2].wwww; 8: MAD temp[2], temp[2], const[9].xxxx, const[9].yyyy; 9: MOV temp[2].z, const[10].wwww; 10: DP3 temp[3].x, temp[2], temp[2]; 11: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 12: RSQ temp[3].x, temp[3].xxxx; 13: RCP temp[2].z, temp[3].xxxx; 14: MOV temp[4], temp[1].zzzz; 15: TEX temp[5], input[5], 2D[2]; 16: MOV temp[6], temp[5]; 17: DP3 temp[7].x, temp[1], -temp[2]; 18: MUL temp[7].x, temp[7].xxxx, temp[5].wwww; 19: MUL temp[7].x, temp[7].xxxx, const[4].wwww; 20: DP3 temp[8].x, temp[1], temp[2]; 21: CMP temp[1].x, temp[4].xxxx, temp[7].xxxx, temp[8].xxxx; 22: TXP temp[3], input[4], 2D[3]; 23: MUL temp[1], temp[1].xxxx, temp[3]; 24: TEX temp[3].x, input[3], 2D[4]; 25: MUL temp[1], temp[1], temp[3].xxxx; 26: MUL temp[9], temp[5], const[5]; 27: MUL temp[3].xyz, temp[9], const[4]; 28: CMP temp[9].xyz, temp[4].xxxx, temp[3], temp[9]; 29: DP3 temp[0].x, temp[0], temp[2]; 30: MAD_SAT temp[3].x, temp[0].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[3].x, temp[3].xxxx, temp[3].xxxx; 32: MUL temp[3], temp[3].xxxx, const[6]; 33: CMP temp[3], temp[4].xxxx, const[10].wwww, temp[3]; 34: TEX temp[5], input[6], 2D[5]; 35: ADD temp[5], temp[5], temp[5]; 36: MAD temp[9], temp[3], temp[5], temp[9]; 37: MUL temp[9], temp[1], temp[9]; 38: MAD temp[9], temp[6], const[7], temp[9]; 39: LRP output[0].xyz, input[0].xxxx, const[8], temp[9]; 40: MUL temp[3], temp[3], temp[5]; 41: MUL temp[3], temp[3], temp[1]; 42: DP3 temp[3].x, temp[3], const[10]; 43: CMP output[0].w, temp[4].xxxx, const[11].xxxx, temp[3].xxxx; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: DP3 temp[0].x, input[7], input[7]; 1: RSQ temp[0].x, temp[0].xxxx; 2: MUL temp[0], temp[0].xxxx, input[7]; 3: DP3 temp[1].x, input[1], input[1]; 4: RSQ temp[1].x, temp[1].xxxx; 5: MUL temp[1], temp[1].xxxx, input[1]; 6: TEX temp[2], input[2], 2D[1]; 7: MOV temp[2].x, temp[2].wwww; 8: MAD temp[2], temp[2], const[9].xxxx, const[9].yyyy; 9: MOV temp[2].z, const[10].wwww; 10: DP3 temp[3].x, temp[2], temp[2]; 11: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 12: RSQ temp[3].x, temp[3].xxxx; 13: RCP temp[2].z, temp[3].xxxx; 14: MOV temp[4], temp[1].zzzz; 15: TEX temp[5], input[5], 2D[2]; 16: MOV temp[6], temp[5]; 17: DP3 temp[7].x, temp[1], -temp[2]; 18: MUL temp[7].x, temp[7].xxxx, temp[5].wwww; 19: MUL temp[7].x, temp[7].xxxx, const[4].wwww; 20: DP3 temp[8].x, temp[1], temp[2]; 21: CMP temp[1].x, temp[4].xxxx, temp[7].xxxx, temp[8].xxxx; 22: TXP temp[3], input[4], 2D[3]; 23: MUL temp[1], temp[1].xxxx, temp[3]; 24: TEX temp[3].x, input[3], 2D[4]; 25: MUL temp[1], temp[1], temp[3].xxxx; 26: MUL temp[9], temp[5], const[5]; 27: MUL temp[3].xyz, temp[9], const[4]; 28: CMP temp[9].xyz, temp[4].xxxx, temp[3], temp[9]; 29: DP3 temp[0].x, temp[0], temp[2]; 30: MAD_SAT temp[3].x, temp[0].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[3].x, temp[3].xxxx, temp[3].xxxx; 32: MUL temp[3], temp[3].xxxx, const[6]; 33: CMP temp[3], temp[4].xxxx, const[10].wwww, temp[3]; 34: TEX temp[5], input[6], 2D[5]; 35: ADD temp[5], temp[5], temp[5]; 36: MAD temp[9], temp[3], temp[5], temp[9]; 37: MUL temp[9], temp[1], temp[9]; 38: MAD temp[9], temp[6], const[7], temp[9]; 39: LRP output[0].xyz, input[0].xxxx, const[8], temp[9]; 40: MUL temp[3], temp[3], temp[5]; 41: MUL temp[3], temp[3], temp[1]; 42: DP3 temp[3].x, temp[3], const[10]; 43: CMP output[0].w, temp[4].xxxx, const[11].xxxx, temp[3].xxxx; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: DP3 temp[0].x, input[7], input[7]; 1: RSQ temp[0].x, temp[0].xxxx; 2: MUL temp[0], temp[0].xxxx, input[7]; 3: DP3 temp[1].x, input[1], input[1]; 4: RSQ temp[1].x, temp[1].xxxx; 5: MUL temp[1], temp[1].xxxx, input[1]; 6: TEX temp[2], input[2], 2D[1]; 7: MOV temp[2].x, temp[2].wwww; 8: MAD temp[2], temp[2], const[9].xxxx, const[9].yyyy; 9: MOV temp[2].z, const[10].wwww; 10: DP3 temp[3].x, temp[2], temp[2]; 11: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 12: RSQ temp[3].x, temp[3].xxxx; 13: RCP temp[2].z, temp[3].xxxx; 14: MOV temp[4], temp[1].zzzz; 15: TEX temp[5], input[5], 2D[2]; 16: MOV temp[6], temp[5]; 17: DP3 temp[7].x, temp[1], -temp[2]; 18: MUL temp[7].x, temp[7].xxxx, temp[5].wwww; 19: MUL temp[7].x, temp[7].xxxx, const[4].wwww; 20: DP3 temp[8].x, temp[1], temp[2]; 21: CMP temp[1].x, temp[4].xxxx, temp[7].xxxx, temp[8].xxxx; 22: TXP temp[3], input[4], 2D[3]; 23: MUL temp[1], temp[1].xxxx, temp[3]; 24: TEX temp[3].x, input[3], 2D[4]; 25: MUL temp[1], temp[1], temp[3].xxxx; 26: MUL temp[9], temp[5], const[5]; 27: MUL temp[3].xyz, temp[9], const[4]; 28: CMP temp[9].xyz, temp[4].xxxx, temp[3], temp[9]; 29: DP3 temp[0].x, temp[0], temp[2]; 30: MAD_SAT temp[3].x, temp[0].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[3].x, temp[3].xxxx, temp[3].xxxx; 32: MUL temp[3], temp[3].xxxx, const[6]; 33: CMP temp[3], temp[4].xxxx, const[10].wwww, temp[3]; 34: TEX temp[5], input[6], 2D[5]; 35: ADD temp[5], temp[5], temp[5]; 36: MAD temp[9], temp[3], temp[5], temp[9]; 37: MUL temp[9], temp[1], temp[9]; 38: MAD temp[9], temp[6], const[7], temp[9]; 39: LRP output[0].xyz, input[0].xxxx, const[8], temp[9]; 40: MUL temp[3], temp[3], temp[5]; 41: MUL temp[3], temp[3], temp[1]; 42: DP3 temp[3].x, temp[3], const[10]; 43: CMP output[0].w, temp[4].xxxx, const[11].xxxx, temp[3].xxxx; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: DP3 temp[0].x, input[7], input[7]; 1: RSQ temp[0].x, temp[0].xxxx; 2: MUL temp[0], temp[0].xxxx, input[7]; 3: DP3 temp[1].x, input[1], input[1]; 4: RSQ temp[1].x, temp[1].xxxx; 5: MUL temp[1], temp[1].xxxx, input[1]; 6: TEX temp[2], input[2], 2D[1]; 7: MOV temp[2].x, temp[2].wwww; 8: MAD temp[2], temp[2], const[9].xxxx, const[9].yyyy; 9: MOV temp[2].z, const[10].wwww; 10: DP3 temp[3].x, temp[2], temp[2]; 11: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 12: RSQ temp[3].x, temp[3].xxxx; 13: RCP temp[2].z, temp[3].xxxx; 14: MOV temp[4], temp[1].zzzz; 15: TEX temp[5], input[5], 2D[2]; 16: MOV temp[6], temp[5]; 17: DP3 temp[7].x, temp[1], -temp[2]; 18: MUL temp[7].x, temp[7].xxxx, temp[5].wwww; 19: MUL temp[7].x, temp[7].xxxx, const[4].wwww; 20: DP3 temp[8].x, temp[1], temp[2]; 21: CMP temp[1].x, temp[4].xxxx, temp[7].xxxx, temp[8].xxxx; 22: TXP temp[3], input[4], 2D[3]; 23: MUL temp[1], temp[1].xxxx, temp[3]; 24: TEX temp[3].x, input[3], 2D[4]; 25: MUL temp[1], temp[1], temp[3].xxxx; 26: MUL temp[9], temp[5], const[5]; 27: MUL temp[3].xyz, temp[9], const[4]; 28: CMP temp[9].xyz, temp[4].xxxx, temp[3], temp[9]; 29: DP3 temp[0].x, temp[0], temp[2]; 30: MAD_SAT temp[3].x, temp[0].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[3].x, temp[3].xxxx, temp[3].xxxx; 32: MUL temp[3], temp[3].xxxx, const[6]; 33: CMP temp[3], temp[4].xxxx, const[10].wwww, temp[3]; 34: TEX temp[5], input[6], 2D[5]; 35: ADD temp[5], temp[5], temp[5]; 36: MAD temp[9], temp[3], temp[5], temp[9]; 37: MUL temp[9], temp[1], temp[9]; 38: MAD temp[9], temp[6], const[7], temp[9]; 39: LRP output[0].xyz, input[0].xxxx, const[8], temp[9]; 40: MUL temp[3], temp[3], temp[5]; 41: MUL temp[3], temp[3], temp[1]; 42: DP3 temp[3].x, temp[3], const[10]; 43: CMP output[0].w, temp[4].xxxx, const[11].xxxx, temp[3].xxxx; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: DP3 temp[0].x, input[7], input[7]; 1: RSQ temp[0].x, temp[0].xxxx; 2: MUL temp[0], temp[0].xxxx, input[7]; 3: DP3 temp[1].x, input[1], input[1]; 4: RSQ temp[1].x, temp[1].xxxx; 5: MUL temp[1], temp[1].xxxx, input[1]; 6: TEX temp[2], input[2], 2D[1]; 7: MOV temp[2].x, temp[2].wwww; 8: MAD temp[2], temp[2], const[9].xxxx, const[9].yyyy; 9: MOV temp[2].z, const[10].wwww; 10: DP3 temp[3].x, temp[2], temp[2]; 11: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 12: RSQ temp[3].x, temp[3].xxxx; 13: RCP temp[2].z, temp[3].xxxx; 14: MOV temp[4], temp[1].zzzz; 15: TEX temp[5], input[5], 2D[2]; 16: MOV temp[6], temp[5]; 17: DP3 temp[7].x, temp[1], -temp[2]; 18: MUL temp[7].x, temp[7].xxxx, temp[5].wwww; 19: MUL temp[7].x, temp[7].xxxx, const[4].wwww; 20: DP3 temp[8].x, temp[1], temp[2]; 21: CMP temp[1].x, temp[4].xxxx, temp[7].xxxx, temp[8].xxxx; 22: TXP temp[3], input[4], 2D[3]; 23: MUL temp[1], temp[1].xxxx, temp[3]; 24: TEX temp[3].x, input[3], 2D[4]; 25: MUL temp[1], temp[1], temp[3].xxxx; 26: MUL temp[9], temp[5], const[5]; 27: MUL temp[3].xyz, temp[9], const[4]; 28: CMP temp[9].xyz, temp[4].xxxx, temp[3], temp[9]; 29: DP3 temp[0].x, temp[0], temp[2]; 30: MAD_SAT temp[3].x, temp[0].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[3].x, temp[3].xxxx, temp[3].xxxx; 32: MUL temp[3], temp[3].xxxx, const[6]; 33: CMP temp[3], temp[4].xxxx, const[10].wwww, temp[3]; 34: TEX temp[5], input[6], 2D[5]; 35: ADD temp[5], temp[5], temp[5]; 36: MAD temp[9], temp[3], temp[5], temp[9]; 37: MUL temp[9], temp[1], temp[9]; 38: MAD temp[9], temp[6], const[7], temp[9]; 39: LRP output[0].xyz, input[0].xxxx, const[8], temp[9]; 40: MUL temp[3], temp[3], temp[5]; 41: MUL temp[3], temp[3], temp[1]; 42: DP3 temp[3].x, temp[3], const[10]; 43: CMP output[0].w, temp[4].xxxx, const[11].xxxx, temp[3].xxxx; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: DP3 temp[0].x, input[7], input[7]; 1: RSQ temp[0].x, temp[0].xxxx; 2: MUL temp[0], temp[0].xxxx, input[7]; 3: DP3 temp[1].x, input[1], input[1]; 4: RSQ temp[1].x, temp[1].xxxx; 5: MUL temp[1], temp[1].xxxx, input[1]; 6: TEX temp[2], input[2], 2D[1]; 7: MOV temp[2].x, temp[2].wwww; 8: MAD temp[2], temp[2], const[9].xxxx, const[9].yyyy; 9: MOV temp[2].z, const[10].wwww; 10: DP3 temp[3].x, temp[2], temp[2]; 11: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 12: RSQ temp[3].x, temp[3].xxxx; 13: RCP temp[2].z, temp[3].xxxx; 14: MOV temp[4], temp[1].zzzz; 15: TEX temp[5], input[5], 2D[2]; 16: MOV temp[6], temp[5]; 17: DP3 temp[7].x, temp[1], -temp[2]; 18: MUL temp[7].x, temp[7].xxxx, temp[5].wwww; 19: MUL temp[7].x, temp[7].xxxx, const[4].wwww; 20: DP3 temp[8].x, temp[1], temp[2]; 21: CMP temp[1].x, temp[4].xxxx, temp[7].xxxx, temp[8].xxxx; 22: TXP temp[3], input[4], 2D[3]; 23: MUL temp[1], temp[1].xxxx, temp[3]; 24: TEX temp[3].x, input[3], 2D[4]; 25: MUL temp[1], temp[1], temp[3].xxxx; 26: MUL temp[9], temp[5], const[5]; 27: MUL temp[3].xyz, temp[9], const[4]; 28: CMP temp[9].xyz, temp[4].xxxx, temp[3], temp[9]; 29: DP3 temp[0].x, temp[0], temp[2]; 30: MAD_SAT temp[3].x, temp[0].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[3].x, temp[3].xxxx, temp[3].xxxx; 32: MUL temp[3], temp[3].xxxx, const[6]; 33: CMP temp[3], temp[4].xxxx, const[10].wwww, temp[3]; 34: TEX temp[5], input[6], 2D[5]; 35: ADD temp[5], temp[5], temp[5]; 36: MAD temp[9], temp[3], temp[5], temp[9]; 37: MUL temp[9], temp[1], temp[9]; 38: MAD temp[9], temp[6], const[7], temp[9]; 39: LRP_SAT output[0].xyz, input[0].xxxx, const[8], temp[9]; 40: MUL temp[3], temp[3], temp[5]; 41: MUL temp[3], temp[3], temp[1]; 42: DP3 temp[3].x, temp[3], const[10]; 43: CMP_SAT output[0].w, temp[4].xxxx, const[11].xxxx, temp[3].xxxx; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: DP3 temp[0].x, input[7], input[7]; 1: RSQ temp[0].x, temp[0].xxxx; 2: MUL temp[0], temp[0].xxxx, input[7]; 3: DP3 temp[1].x, input[1], input[1]; 4: RSQ temp[1].x, temp[1].xxxx; 5: MUL temp[1], temp[1].xxxx, input[1]; 6: TEX temp[2], input[2], 2D[1]; 7: MOV temp[2].x, temp[2].wwww; 8: MAD temp[2], temp[2], const[9].xxxx, const[9].yyyy; 9: MOV temp[2].z, const[10].wwww; 10: DP3 temp[3].x, temp[2], temp[2]; 11: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 12: RSQ temp[3].x, temp[3].xxxx; 13: RCP temp[2].z, temp[3].xxxx; 14: MOV temp[4], temp[1].zzzz; 15: TEX temp[5], input[5], 2D[2]; 16: MOV temp[6], temp[5]; 17: DP3 temp[7].x, temp[1], -temp[2]; 18: MUL temp[7].x, temp[7].xxxx, temp[5].wwww; 19: MUL temp[7].x, temp[7].xxxx, const[4].wwww; 20: DP3 temp[8].x, temp[1], temp[2]; 21: CMP temp[1].x, temp[4].xxxx, temp[7].xxxx, temp[8].xxxx; 22: TXP temp[3], input[4], 2D[3]; 23: MUL temp[1], temp[1].xxxx, temp[3]; 24: TEX temp[10], input[3], 2D[4]; 25: MOV temp[3].x, temp[10]; 26: MUL temp[1], temp[1], temp[3].xxxx; 27: MUL temp[9], temp[5], const[5]; 28: MUL temp[3].xyz, temp[9], const[4]; 29: CMP temp[9].xyz, temp[4].xxxx, temp[3], temp[9]; 30: DP3 temp[0].x, temp[0], temp[2]; 31: MAD_SAT temp[3].x, temp[0].xxxx, const[11].yyyy, -const[11].zzzz; 32: MUL temp[3].x, temp[3].xxxx, temp[3].xxxx; 33: MUL temp[3], temp[3].xxxx, const[6]; 34: CMP temp[3], temp[4].xxxx, const[10].wwww, temp[3]; 35: TEX temp[5], input[6], 2D[5]; 36: ADD temp[5], temp[5], temp[5]; 37: MAD temp[9], temp[3], temp[5], temp[9]; 38: MUL temp[9], temp[1], temp[9]; 39: MAD temp[9], temp[6], const[7], temp[9]; 40: LRP_SAT output[0].xyz, input[0].xxxx, const[8], temp[9]; 41: MUL temp[3], temp[3], temp[5]; 42: MUL temp[3], temp[3], temp[1]; 43: DP3 temp[3].x, temp[3], const[10]; 44: CMP_SAT output[0].w, temp[4].xxxx, const[11].xxxx, temp[3].xxxx; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: DP3 temp[0].x, input[7], input[7]; 1: RSQ temp[0].x, |temp[0].xxxx|; 2: MUL temp[0], temp[0].xxxx, input[7]; 3: DP3 temp[1].x, input[1], input[1]; 4: RSQ temp[1].x, |temp[1].xxxx|; 5: MUL temp[1], temp[1].xxxx, input[1]; 6: TEX temp[2], input[2], 2D[1]; 7: MOV temp[2].x, temp[2].wwww; 8: MAD temp[2], temp[2], const[9].xxxx, const[9].yyyy; 9: MOV temp[2].z, const[10].wwww; 10: DP3 temp[3].x, temp[2], temp[2]; 11: ADD temp[3].x, const[11].xxxx, -temp[3].xxxx; 12: RSQ temp[3].x, |temp[3].xxxx|; 13: RCP temp[2].z, temp[3].xxxx; 14: MOV temp[4], temp[1].zzzz; 15: TEX temp[5], input[5], 2D[2]; 16: MOV temp[6], temp[5]; 17: DP3 temp[7].x, temp[1], -temp[2]; 18: MUL temp[7].x, temp[7].xxxx, temp[5].wwww; 19: MUL temp[7].x, temp[7].xxxx, const[4].wwww; 20: DP3 temp[8].x, temp[1], temp[2]; 21: CMP temp[1].x, temp[4].xxxx, temp[7].xxxx, temp[8].xxxx; 22: TXP temp[3], input[4], 2D[3]; 23: MUL temp[1], temp[1].xxxx, temp[3]; 24: TEX temp[10], input[3], 2D[4]; 25: MOV temp[3].x, temp[10]; 26: MUL temp[1], temp[1], temp[3].xxxx; 27: MUL temp[9], temp[5], const[5]; 28: MUL temp[3].xyz, temp[9], const[4]; 29: CMP temp[9].xyz, temp[4].xxxx, temp[3], temp[9]; 30: DP3 temp[0].x, temp[0], temp[2]; 31: MAD_SAT temp[3].x, temp[0].xxxx, const[11].yyyy, -const[11].zzzz; 32: MUL temp[3].x, temp[3].xxxx, temp[3].xxxx; 33: MUL temp[3], temp[3].xxxx, const[6]; 34: CMP temp[3], temp[4].xxxx, const[10].wwww, temp[3]; 35: TEX temp[5], input[6], 2D[5]; 36: ADD temp[5], temp[5], temp[5]; 37: MAD temp[9], temp[3], temp[5], temp[9]; 38: MUL temp[9], temp[1], temp[9]; 39: MAD temp[9], temp[6], const[7], temp[9]; 40: ADD temp[11].xyz, const[8], -temp[9]; 41: MAD_SAT output[0].xyz, input[0].xxxx, temp[11], temp[9]; 42: MUL temp[3], temp[3], temp[5]; 43: MUL temp[3], temp[3], temp[1]; 44: DP3 temp[3].x, temp[3], const[10]; 45: CMP_SAT output[0].w, temp[4].xxxx, const[11].xxxx, temp[3].xxxx; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: DP3 temp[0].x, input[7].xyz_, input[7].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: MUL temp[0].xyz, temp[0].xxx_, input[7].xyz_; 3: DP3 temp[1].x, input[1].xyz_, input[1].xyz_; 4: RSQ temp[1].x, |temp[1].x___|; 5: MUL temp[1].xyz, temp[1].xxx_, input[1].xyz_; 6: TEX temp[2].yw, input[2].xy__, 2D[1]; 7: MOV temp[2].x, temp[2].w___; 8: MAD temp[2].xy, temp[2].xy__, const[9].xx__, const[9].yy__; 9: MOV temp[2].z, const[10].__w_; 10: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 11: ADD temp[3].x, const[11].x___, -temp[3].x___; 12: RSQ temp[3].x, |temp[3].x___|; 13: RCP temp[2].z, temp[3].x___; 14: MOV temp[4].x, temp[1].z___; 15: TEX temp[5], input[5].xy__, 2D[2]; 16: MOV temp[6].xyz, temp[5].xyz_; 17: DP3 temp[7].x, temp[1].xyz_, -temp[2].xyz_; 18: MUL temp[7].x, temp[7].x___, temp[5].w___; 19: MUL temp[7].x, temp[7].x___, const[4].w___; 20: DP3 temp[8].x, temp[1].xyz_, temp[2].xyz_; 21: CMP temp[1].x, temp[4].x___, temp[7].x___, temp[8].x___; 22: TXP temp[3].xyz, input[4].xy_w, 2D[3]; 23: MUL temp[1].xyz, temp[1].xxx_, temp[3].xyz_; 24: TEX temp[10].x, input[3].xy__, 2D[4]; 25: MOV temp[3].x, temp[10].x___; 26: MUL temp[1].xyz, temp[1].xyz_, temp[3].xxx_; 27: MUL temp[9].xyz, temp[5].xyz_, const[5].xyz_; 28: MUL temp[3].xyz, temp[9].xyz_, const[4].xyz_; 29: CMP temp[9].xyz, temp[4].xxx_, temp[3].xyz_, temp[9].xyz_; 30: DP3 temp[0].x, temp[0].xyz_, temp[2].xyz_; 31: MAD_SAT temp[3].x, temp[0].x___, const[11].y___, -const[11].z___; 32: MUL temp[3].x, temp[3].x___, temp[3].x___; 33: MUL temp[3].xyz, temp[3].xxx_, const[6].xyz_; 34: CMP temp[3].xyz, temp[4].xxx_, const[10].www_, temp[3].xyz_; 35: TEX temp[5].xyz, input[6].xy__, 2D[5]; 36: ADD temp[5].xyz, temp[5].xyz_, temp[5].xyz_; 37: MAD temp[9].xyz, temp[3].xyz_, temp[5].xyz_, temp[9].xyz_; 38: MUL temp[9].xyz, temp[1].xyz_, temp[9].xyz_; 39: MAD temp[9].xyz, temp[6].xyz_, const[7].xyz_, temp[9].xyz_; 40: ADD temp[11].xyz, const[8].xyz_, -temp[9].xyz_; 41: MAD_SAT output[0].xyz, input[0].xxx_, temp[11].xyz_, temp[9].xyz_; 42: MUL temp[3].xyz, temp[3].xyz_, temp[5].xyz_; 43: MUL temp[3].xyz, temp[3].xyz_, temp[1].xyz_; 44: DP3 temp[3].x, temp[3].xyz_, const[10].xyz_; 45: CMP_SAT output[0].w, temp[4].___x, const[11].___x, temp[3].___x; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: DP3 temp[0].x, input[7].xyz_, input[7].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: MUL temp[0].xyz, temp[0].xxx_, input[7].xyz_; 3: DP3 temp[1].x, input[1].xyz_, input[1].xyz_; 4: RSQ temp[1].x, |temp[1].x___|; 5: MUL temp[1].xyz, temp[1].xxx_, input[1].xyz_; 6: TEX temp[2].yw, input[2].xy__, 2D[1]; 7: MOV temp[2].x, temp[2].w___; 8: MAD temp[2].xy, temp[2].xy__, const[9].xx__, const[9].yy__; 9: MOV temp[2].z, const[10].__w_; 10: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 11: ADD temp[3].x, const[11].x___, -temp[3].x___; 12: RSQ temp[3].x, |temp[3].x___|; 13: RCP temp[2].z, temp[3].x___; 14: MOV temp[4].x, temp[1].z___; 15: TEX temp[5], input[5].xy__, 2D[2]; 16: MOV temp[6].xyz, temp[5].xyz_; 17: DP3 temp[7].x, temp[1].xyz_, -temp[2].xyz_; 18: MUL temp[7].x, temp[7].x___, temp[5].w___; 19: MUL temp[7].x, temp[7].x___, const[4].w___; 20: DP3 temp[8].x, temp[1].xyz_, temp[2].xyz_; 21: CMP temp[1].x, temp[4].x___, temp[7].x___, temp[8].x___; 22: TXP temp[3].xyz, input[4].xy_w, 2D[3]; 23: MUL temp[1].xyz, temp[1].xxx_, temp[3].xyz_; 24: TEX temp[10].x, input[3].xy__, 2D[4]; 25: MOV temp[3].x, temp[10].x___; 26: MUL temp[1].xyz, temp[1].xyz_, temp[3].xxx_; 27: MUL temp[9].xyz, temp[5].xyz_, const[5].xyz_; 28: MUL temp[3].xyz, temp[9].xyz_, const[4].xyz_; 29: CMP temp[9].xyz, temp[4].xxx_, temp[3].xyz_, temp[9].xyz_; 30: DP3 temp[0].x, temp[0].xyz_, temp[2].xyz_; 31: MAD_SAT temp[3].x, temp[0].x___, const[11].y___, -const[11].z___; 32: MUL temp[3].x, temp[3].x___, temp[3].x___; 33: MUL temp[3].xyz, temp[3].xxx_, const[6].xyz_; 34: CMP temp[3].xyz, temp[4].xxx_, const[10].www_, temp[3].xyz_; 35: TEX temp[5].xyz, input[6].xy__, 2D[5]; 36: ADD temp[5].xyz, temp[5].xyz_, temp[5].xyz_; 37: MAD temp[9].xyz, temp[3].xyz_, temp[5].xyz_, temp[9].xyz_; 38: MUL temp[9].xyz, temp[1].xyz_, temp[9].xyz_; 39: MAD temp[9].xyz, temp[6].xyz_, const[7].xyz_, temp[9].xyz_; 40: ADD temp[11].xyz, const[8].xyz_, -temp[9].xyz_; 41: MAD_SAT output[0].xyz, input[0].xxx_, temp[11].xyz_, temp[9].xyz_; 42: MUL temp[3].xyz, temp[3].xyz_, temp[5].xyz_; 43: MUL temp[3].xyz, temp[3].xyz_, temp[1].xyz_; 44: DP3 temp[3].x, temp[3].xyz_, const[10].xyz_; 45: CMP_SAT output[0].w, temp[4].___x, const[11].___x, temp[3].___x; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: DP3 temp[0].x, input[7].xyz_, input[7].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: MUL temp[0].xyz, temp[0].xxx_, input[7].xyz_; 3: DP3 temp[1].x, input[1].xyz_, input[1].xyz_; 4: RSQ temp[1].x, |temp[1].x___|; 5: MUL temp[1].xyz, temp[1].xxx_, input[1].xyz_; 6: TEX temp[2].yw, input[2].xy__, 2D[1]; 7: MOV temp[2].x, temp[2].w___; 8: MAD temp[2].xy, temp[2].xy__, const[9].xx__, none.-1-1__; 9: MOV temp[2].z, none.__0_; 10: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 11: ADD temp[3].x, none.1___, -temp[3].x___; 12: RSQ temp[3].x, |temp[3].x___|; 13: RCP temp[2].z, temp[3].x___; 14: MOV temp[4].x, temp[1].z___; 15: TEX temp[5], input[5].xy__, 2D[2]; 16: MOV temp[6].xyz, temp[5].xyz_; 17: DP3 temp[7].x, temp[1].xyz_, -temp[2].xyz_; 18: MUL temp[7].x, temp[7].x___, temp[5].w___; 19: MUL temp[7].x, temp[7].x___, const[4].w___; 20: DP3 temp[8].x, temp[1].xyz_, temp[2].xyz_; 21: CMP temp[1].x, temp[4].x___, temp[7].x___, temp[8].x___; 22: TXP temp[3].xyz, input[4].xy_w, 2D[3]; 23: MUL temp[1].xyz, temp[1].xxx_, temp[3].xyz_; 24: TEX temp[10].x, input[3].xy__, 2D[4]; 25: MUL temp[1].xyz, temp[1].xyz_, temp[10].xxx_; 26: MUL temp[9].xyz, temp[5].xyz_, const[5].xyz_; 27: MUL temp[3].xyz, temp[9].xyz_, const[4].xyz_; 28: CMP temp[9].xyz, temp[4].xxx_, temp[3].xyz_, temp[9].xyz_; 29: DP3 temp[0].x, temp[0].xyz_, temp[2].xyz_; 30: MAD_SAT temp[3].x, temp[0].x___, const[11].y___, -const[11].z___; 31: MUL temp[3].x, temp[3].x___, temp[3].x___; 32: MUL temp[3].xyz, temp[3].xxx_, const[6].xyz_; 33: CMP temp[3].xyz, temp[4].xxx_, none.000_, temp[3].xyz_; 34: TEX temp[5].xyz, input[6].xy__, 2D[5]; 35: ADD temp[5].xyz, temp[5].xyz_, temp[5].xyz_; 36: MAD temp[9].xyz, temp[3].xyz_, temp[5].xyz_, temp[9].xyz_; 37: MUL temp[9].xyz, temp[1].xyz_, temp[9].xyz_; 38: MAD temp[9].xyz, temp[6].xyz_, const[7].xyz_, temp[9].xyz_; 39: MAD_SAT output[0].xyz, input[0].xxx_, (const[8] - temp[9]).xyz_, temp[9].xyz_; 40: MUL temp[3].xyz, temp[3].xyz_, temp[5].xyz_; 41: MUL temp[3].xyz, temp[3].xyz_, temp[1].xyz_; 42: DP3 temp[3].x, temp[3].xyz_, const[10].xyz_; 43: CMP_SAT output[0].w, temp[4].___x, none.___1, temp[3].___x; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: DP3 temp[0].x, input[7].xyz_, input[7].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: MUL temp[0].xyz, temp[0].xxx_, input[7].xyz_; 3: DP3 temp[1].x, input[1].xyz_, input[1].xyz_; 4: RSQ temp[1].x, |temp[1].x___|; 5: MUL temp[1].xyz, temp[1].xxx_, input[1].xyz_; 6: TEX temp[2].yw, input[2].xy__, 2D[1]; 7: MOV temp[2].x, temp[2].w___; 8: MAD temp[2].xy, temp[2].xy__, const[9].xx__, none.-1-1__; 9: MOV temp[2].z, none.__0_; 10: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 11: ADD temp[3].x, none.1___, -temp[3].x___; 12: RSQ temp[3].x, |temp[3].x___|; 13: RCP temp[2].z, temp[3].x___; 14: MOV temp[4].x, temp[1].z___; 15: TEX temp[5], input[5].xy__, 2D[2]; 16: MOV temp[6].xyz, temp[5].xyz_; 17: DP3 temp[7].x, temp[1].xyz_, -temp[2].xyz_; 18: MUL temp[7].x, temp[7].x___, temp[5].w___; 19: MUL temp[7].x, temp[7].x___, const[4].w___; 20: DP3 temp[8].x, temp[1].xyz_, temp[2].xyz_; 21: CMP temp[1].x, temp[4].x___, temp[7].x___, temp[8].x___; 22: TXP temp[3].xyz, input[4].xy_w, 2D[3]; 23: MUL temp[1].xyz, temp[1].xxx_, temp[3].xyz_; 24: TEX temp[10].x, input[3].xy__, 2D[4]; 25: MUL temp[1].xyz, temp[1].xyz_, temp[10].xxx_; 26: MUL temp[9].xyz, temp[5].xyz_, const[5].xyz_; 27: MUL temp[3].xyz, temp[9].xyz_, const[4].xyz_; 28: CMP temp[9].xyz, temp[4].xxx_, temp[3].xyz_, temp[9].xyz_; 29: DP3 temp[0].x, temp[0].xyz_, temp[2].xyz_; 30: MAD_SAT temp[3].x, temp[0].x___, const[11].y___, -const[11].z___; 31: MUL temp[3].x, temp[3].x___, temp[3].x___; 32: MUL temp[3].xyz, temp[3].xxx_, const[6].xyz_; 33: CMP temp[3].xyz, temp[4].xxx_, none.000_, temp[3].xyz_; 34: TEX temp[5].xyz, input[6].xy__, 2D[5]; 35: ADD temp[5].xyz, temp[5].xyz_, temp[5].xyz_; 36: MAD temp[9].xyz, temp[3].xyz_, temp[5].xyz_, temp[9].xyz_; 37: MUL temp[9].xyz, temp[1].xyz_, temp[9].xyz_; 38: MAD temp[9].xyz, temp[6].xyz_, const[7].xyz_, temp[9].xyz_; 39: MAD_SAT output[0].xyz, input[0].xxx_, (const[8] - temp[9]).xyz_, temp[9].xyz_; 40: MUL temp[3].xyz, temp[3].xyz_, temp[5].xyz_; 41: MUL temp[3].xyz, temp[3].xyz_, temp[1].xyz_; 42: DP3 temp[3].x, temp[3].xyz_, const[10].xyz_; 43: CMP_SAT output[0].w, temp[4].___x, none.___1, temp[3].___x; CONST[5] = { 2.0000 -1.0000 1.0000 4.0000 } CONST[6] = { 0.3000 0.5900 0.1100 0.0000 } CONST[7] = { 1.0000 4.0000 3.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: DP3 temp[0].x, input[7].xyz_, input[7].xyz_; 1: RSQ temp[0].x, |temp[0].x___|; 2: MUL temp[0].xyz, temp[0].xxx_, input[7].xyz_; 3: DP3 temp[1].x, input[1].xyz_, input[1].xyz_; 4: RSQ temp[1].x, |temp[1].x___|; 5: MUL temp[1].xyz, temp[1].xxx_, input[1].xyz_; 6: TEX temp[2].yw, input[2].xy__, 2D[1]; 7: MOV temp[2].x, temp[2].w___; 8: MAD temp[2].xy, temp[2].xy__, const[5].xx__, none.-1-1__; 9: MOV temp[2].z, none.__0_; 10: DP3 temp[3].x, temp[2].xyz_, temp[2].xyz_; 11: ADD temp[3].x, none.1___, -temp[3].x___; 12: RSQ temp[3].x, |temp[3].x___|; 13: RCP temp[2].z, temp[3].x___; 14: MOV temp[4].x, temp[1].z___; 15: TEX temp[5], input[5].xy__, 2D[2]; 16: MOV temp[6].xyz, temp[5].xyz_; 17: DP3 temp[7].x, temp[1].xyz_, -temp[2].xyz_; 18: MUL temp[7].x, temp[7].x___, temp[5].w___; 19: MUL temp[7].x, temp[7].x___, const[0].w___; 20: DP3 temp[8].x, temp[1].xyz_, temp[2].xyz_; 21: CMP temp[1].x, temp[4].x___, temp[7].x___, temp[8].x___; 22: TXP temp[3].xyz, input[4].xy_w, 2D[3]; 23: MUL temp[1].xyz, temp[1].xxx_, temp[3].xyz_; 24: TEX temp[10].x, input[3].xy__, 2D[4]; 25: MUL temp[1].xyz, temp[1].xyz_, temp[10].xxx_; 26: MUL temp[9].xyz, temp[5].xyz_, const[1].xyz_; 27: MUL temp[3].xyz, temp[9].xyz_, const[0].xyz_; 28: CMP temp[9].xyz, temp[4].xxx_, temp[3].xyz_, temp[9].xyz_; 29: DP3 temp[0].x, temp[0].xyz_, temp[2].xyz_; 30: MAD_SAT temp[3].x, temp[0].x___, const[7].y___, -const[7].z___; 31: MUL temp[3].x, temp[3].x___, temp[3].x___; 32: MUL temp[3].xyz, temp[3].xxx_, const[2].xyz_; 33: CMP temp[3].xyz, temp[4].xxx_, none.000_, temp[3].xyz_; 34: TEX temp[5].xyz, input[6].xy__, 2D[5]; 35: ADD temp[5].xyz, temp[5].xyz_, temp[5].xyz_; 36: MAD temp[9].xyz, temp[3].xyz_, temp[5].xyz_, temp[9].xyz_; 37: MUL temp[9].xyz, temp[1].xyz_, temp[9].xyz_; 38: MAD temp[9].xyz, temp[6].xyz_, const[3].xyz_, temp[9].xyz_; 39: MAD_SAT output[0].xyz, input[0].xxx_, (const[4] - temp[9]).xyz_, temp[9].xyz_; 40: MUL temp[3].xyz, temp[3].xyz_, temp[5].xyz_; 41: MUL temp[3].xyz, temp[3].xyz_, temp[1].xyz_; 42: DP3 temp[3].x, temp[3].xyz_, const[6].xyz_; 43: CMP_SAT output[0].w, temp[4].___x, none.___1, temp[3].___x; Fragment Program: after 'register rename' # Radeon Compiler Program 0: DP3 temp[11].x, input[7].xyz_, input[7].xyz_; 1: RSQ temp[12].x, |temp[11].x___|; 2: MUL temp[13].xyz, temp[12].xxx_, input[7].xyz_; 3: DP3 temp[14].x, input[1].xyz_, input[1].xyz_; 4: RSQ temp[15].x, |temp[14].x___|; 5: MUL temp[16].xyz, temp[15].xxx_, input[1].xyz_; 6: TEX temp[2].yw, input[2].xy__, 2D[1]; 7: MOV temp[2].x, temp[2].w___; 8: MAD temp[2].xy, temp[2].xy__, const[5].xx__, none.-1-1__; 9: MOV temp[2].z, none.__0_; 10: DP3 temp[17].x, temp[2].xyz_, temp[2].xyz_; 11: ADD temp[18].x, none.1___, -temp[17].x___; 12: RSQ temp[19].x, |temp[18].x___|; 13: RCP temp[2].z, temp[19].x___; 14: MOV temp[20].x, temp[16].z___; 15: TEX temp[21], input[5].xy__, 2D[2]; 16: MOV temp[22].xyz, temp[21].xyz_; 17: DP3 temp[23].x, temp[16].xyz_, -temp[2].xyz_; 18: MUL temp[24].x, temp[23].x___, temp[21].w___; 19: MUL temp[25].x, temp[24].x___, const[0].w___; 20: DP3 temp[26].x, temp[16].xyz_, temp[2].xyz_; 21: CMP temp[27].x, temp[20].x___, temp[25].x___, temp[26].x___; 22: TXP temp[28].xyz, input[4].xy_w, 2D[3]; 23: MUL temp[29].xyz, temp[27].xxx_, temp[28].xyz_; 24: TEX temp[30].x, input[3].xy__, 2D[4]; 25: MUL temp[31].xyz, temp[29].xyz_, temp[30].xxx_; 26: MUL temp[32].xyz, temp[21].xyz_, const[1].xyz_; 27: MUL temp[33].xyz, temp[32].xyz_, const[0].xyz_; 28: CMP temp[34].xyz, temp[20].xxx_, temp[33].xyz_, temp[32].xyz_; 29: DP3 temp[35].x, temp[13].xyz_, temp[2].xyz_; 30: MAD_SAT temp[36].x, temp[35].x___, const[7].y___, -const[7].z___; 31: MUL temp[37].x, temp[36].x___, temp[36].x___; 32: MUL temp[38].xyz, temp[37].xxx_, const[2].xyz_; 33: CMP temp[39].xyz, temp[20].xxx_, none.000_, temp[38].xyz_; 34: TEX temp[40].xyz, input[6].xy__, 2D[5]; 35: ADD temp[41].xyz, temp[40].xyz_, temp[40].xyz_; 36: MAD temp[42].xyz, temp[39].xyz_, temp[41].xyz_, temp[34].xyz_; 37: MUL temp[43].xyz, temp[31].xyz_, temp[42].xyz_; 38: MAD temp[44].xyz, temp[22].xyz_, const[3].xyz_, temp[43].xyz_; 39: MAD_SAT output[0].xyz, input[0].xxx_, (const[4] - temp[44]).xyz_, temp[44].xyz_; 40: MUL temp[45].xyz, temp[39].xyz_, temp[41].xyz_; 41: MUL temp[46].xyz, temp[45].xyz_, temp[31].xyz_; 42: DP3 temp[47].x, temp[46].xyz_, const[6].xyz_; 43: CMP_SAT output[0].w, temp[20].___x, none.___1, temp[47].___x; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[7] DP3 temp[11].x, src0.xyz, src0.xyz 1: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 2: src0.xyz = temp[12], src1.xyz = input[7] MAD temp[13].xyz, src0.xxx, src1.xyz, src0.000 3: src0.xyz = input[1] DP3 temp[14].x, src0.xyz, src0.xyz 4: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 5: src0.xyz = temp[15], src1.xyz = input[1] MAD temp[16].xyz, src0.xxx, src1.xyz, src0.000 6: TEX temp[2].yw, input[2].xy__, 2D[1]; 7: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.111, src0.000 8: src0.xyz = temp[2], src1.xyz = const[5] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 9: MAD temp[2].z, src0.__0, src0.111, src0.000 10: src0.xyz = temp[2] DP3 temp[17].x, src0.xyz, src0.xyz 11: src0.xyz = temp[17] MAD temp[18].x, src0.1__, src0.111, -src0.x__ 12: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 13: src0.xyz = temp[19] REPL_ALPHA temp[2].z RCP, src0.x 14: src0.xyz = temp[16] MAD temp[20].x, src0.z__, src0.111, src0.000 15: TEX temp[21], input[5].xy__, 2D[2]; 16: src0.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src0.111, src0.000 17: src0.xyz = temp[16], src1.xyz = temp[2] DP3 temp[23].x, src0.xyz, -src1.xyz 18: src0.xyz = temp[23], src0.w = temp[21] MAD temp[24].x, src0.x__, src0.w__, src0.000 19: src0.xyz = temp[24], src0.w = const[0] MAD temp[25].x, src0.x__, src0.w__, src0.000 20: src0.xyz = temp[16], src1.xyz = temp[2] DP3 temp[26].x, src0.xyz, src1.xyz 21: src0.xyz = temp[26], src1.xyz = temp[25], src2.xyz = temp[20] CMP temp[27].x, src0.x__, src1.x__, src2.x__ 22: TXP temp[28].xyz, input[4].xy_w, 2D[3]; 23: src0.xyz = temp[27], src1.xyz = temp[28] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 24: TEX temp[30].x, input[3].xy__, 2D[4]; 25: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 26: src0.xyz = temp[21], src1.xyz = const[1] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 27: src0.xyz = temp[32], src1.xyz = const[0] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[32], src1.xyz = temp[33], src2.xyz = temp[20] CMP temp[34].xyz, src0.xyz, src1.xyz, src2.xxx 29: src0.xyz = temp[13], src1.xyz = temp[2] DP3 temp[35].x, src0.xyz, src1.xyz 30: src0.xyz = temp[35], src1.xyz = const[7] MAD_SAT temp[36].x, src0.x__, src1.y__, -src1.z__ 31: src0.xyz = temp[36] MAD temp[37].x, src0.x__, src0.x__, src0.000 32: src0.xyz = temp[37], src1.xyz = const[2] MAD temp[38].xyz, src0.xxx, src1.xyz, src0.000 33: src0.xyz = temp[38], src1.xyz = temp[20] CMP temp[39].xyz, src0.xyz, src0.000, src1.xxx 34: TEX temp[40].xyz, input[6].xy__, 2D[5]; 35: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 36: src0.xyz = temp[39], src1.xyz = temp[41], src2.xyz = temp[34] MAD temp[42].xyz, src0.xyz, src1.xyz, src2.xyz 37: src0.xyz = temp[31], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[22], src1.xyz = const[3], src2.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 39: src0.xyz = temp[44], src1.xyz = const[4], src2.xyz = input[0], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 40: src0.xyz = temp[39], src1.xyz = temp[41] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[45], src1.xyz = temp[31] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[46], src1.xyz = const[6] DP3 temp[47].x, src0.xyz, src1.xyz 43: src0.xyz = temp[47], src1.xyz = temp[20] CMP_SAT color[0].w, src0.x, src0.1, src1.x Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: TEX temp[21], input[5].xy__, 2D[2]; 3: TXP temp[28].xyz, input[4].xy_w, 2D[3]; 4: TEX temp[30].x, input[3].xy__, 2D[4]; 5: TEX temp[40].xyz, input[6].xy__, 2D[5]; 6: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 7: src0.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src0.111, src0.000 8: src0.xyz = temp[21], src1.xyz = const[1] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[32], src1.xyz = const[0] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 10: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.111, src0.000 11: src0.xyz = temp[2], src1.xyz = const[5] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 12: MAD temp[2].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[2] DP3 temp[17].x, src0.xyz, src0.xyz 14: src0.xyz = input[1], src1.xyz = temp[17] DP3 temp[14].x, src0.xyz, src0.xyz MAD temp[18].w, src0.1, src0.1, -src1.x 15: src0.xyz = temp[18], src0.w = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.w| 16: src0.xyz = temp[19] REPL_ALPHA temp[2].z RCP, src0.x 17: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 18: src0.xyz = temp[15], src1.xyz = input[1] MAD temp[16].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[16] MAD temp[20].x, src0.z__, src0.111, src0.000 20: src0.xyz = temp[32], src1.xyz = temp[33], src2.xyz = temp[20] CMP temp[34].xyz, src0.xyz, src1.xyz, src2.xxx 21: src0.xyz = temp[16], src1.xyz = temp[2] DP3 temp[23].x, src0.xyz, -src1.xyz 22: src0.xyz = temp[16], src0.w = temp[21], src1.xyz = temp[2], src2.xyz = temp[23] DP3 temp[26].x, src0.xyz, src1.xyz MAD temp[24].w, src2.x, src0.w, src0.0 23: src0.xyz = input[7], src0.w = temp[24], src1.w = const[0] DP3 temp[11].x, src0.xyz, src0.xyz MAD temp[25].w, src0.w, src1.w, src0.0 24: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 25: src0.xyz = temp[12], src1.xyz = input[7] MAD temp[13].xyz, src0.xxx, src1.xyz, src0.000 26: src0.xyz = temp[13], src1.xyz = temp[2] DP3 temp[35].x, src0.xyz, src1.xyz 27: src0.xyz = temp[26], src0.w = temp[25], src1.xyz = temp[25], src2.xyz = temp[20] CMP temp[27].x, src0.x__, src0.w__, src2.x__ 28: src0.xyz = temp[27], src1.xyz = temp[28] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 29: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 30: src0.xyz = temp[35], src1.xyz = const[7] MAD_SAT temp[36].w, src0.x, src1.y, -src1.z 31: src0.xyz = temp[36], src0.w = temp[36] MAD temp[37].x, src0.w__, src0.w__, src0.000 32: src0.xyz = temp[37], src1.xyz = const[2] MAD temp[38].xyz, src0.xxx, src1.xyz, src0.000 33: src0.xyz = temp[38], src1.xyz = temp[20] CMP temp[39].xyz, src0.xyz, src0.000, src1.xxx 34: src0.xyz = temp[39], src1.xyz = temp[41], src2.xyz = temp[34] MAD temp[42].xyz, src0.xyz, src1.xyz, src2.xyz 35: src0.xyz = temp[31], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[22], src1.xyz = const[3], src2.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 37: src0.xyz = temp[44], src1.xyz = const[4], src2.xyz = input[0], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 38: src0.xyz = temp[39], src1.xyz = temp[41] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[45], src1.xyz = temp[31] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[46], src1.xyz = const[6] DP3 temp[47].x, src0.xyz, src1.xyz 41: src0.xyz = temp[47], src1.xyz = temp[20] CMP_SAT color[0].w, src0.x, src0.1, src1.x Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: TEX temp[21], input[5].xy__, 2D[2]; 3: TXP temp[28].xyz, input[4].xy_w, 2D[3]; 4: TEX temp[30].x, input[3].xy__, 2D[4]; 5: TEX temp[40].xyz, input[6].xy__, 2D[5]; 6: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 7: src0.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src0.111, src0.000 8: src0.xyz = temp[21], src1.xyz = const[1] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[32], src1.xyz = const[0] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 10: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.111, src0.000 11: src0.xyz = temp[2], src1.xyz = const[5] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 12: MAD temp[2].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[2] DP3 temp[17].x, src0.xyz, src0.xyz 14: src0.xyz = input[1], src1.xyz = temp[17] DP3 temp[14].x, src0.xyz, src0.xyz MAD temp[18].w, src0.1, src0.1, -src1.x 15: src0.w = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.w| 16: src0.xyz = temp[19] REPL_ALPHA temp[2].z RCP, src0.x 17: src0.xyz = temp[14] REPL_ALPHA temp[15].x RSQ, |src0.x| 18: src0.xyz = temp[15], src1.xyz = input[1] MAD temp[16].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[16] MAD temp[20].x, src0.z__, src0.111, src0.000 20: src0.xyz = temp[32], src1.xyz = temp[33], src2.xyz = temp[20] CMP temp[34].xyz, src0.xyz, src1.xyz, src2.xxx 21: src0.xyz = temp[16], src1.xyz = temp[2] DP3 temp[23].x, src0.xyz, -src1.xyz 22: src0.xyz = temp[16], src0.w = temp[21], src1.xyz = temp[2], src2.xyz = temp[23] DP3 temp[26].x, src0.xyz, src1.xyz MAD temp[24].w, src2.x, src0.w, src0.0 23: src0.xyz = input[7], src0.w = temp[24], src1.w = const[0] DP3 temp[11].x, src0.xyz, src0.xyz MAD temp[25].w, src0.w, src1.w, src0.0 24: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 25: src0.xyz = temp[12], src1.xyz = input[7] MAD temp[13].xyz, src0.xxx, src1.xyz, src0.000 26: src0.xyz = temp[13], src1.xyz = temp[2] DP3 temp[35].x, src0.xyz, src1.xyz 27: src0.xyz = temp[26], src0.w = temp[25], src2.xyz = temp[20] CMP temp[27].x, src0.x__, src0.w__, src2.x__ 28: src0.xyz = temp[27], src1.xyz = temp[28] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 29: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 30: src0.xyz = temp[35], src1.xyz = const[7] MAD_SAT temp[36].w, src0.x, src1.y, -src1.z 31: src0.w = temp[36] MAD temp[37].x, src0.w__, src0.w__, src0.000 32: src0.xyz = temp[37], src1.xyz = const[2] MAD temp[38].xyz, src0.xxx, src1.xyz, src0.000 33: src0.xyz = temp[38], src1.xyz = temp[20] CMP temp[39].xyz, src0.xyz, src0.000, src1.xxx 34: src0.xyz = temp[39], src1.xyz = temp[41], src2.xyz = temp[34] MAD temp[42].xyz, src0.xyz, src1.xyz, src2.xyz 35: src0.xyz = temp[31], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[22], src1.xyz = const[3], src2.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 37: src0.xyz = temp[44], src1.xyz = const[4], src2.xyz = input[0], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 38: src0.xyz = temp[39], src1.xyz = temp[41] MAD temp[45].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[45], src1.xyz = temp[31] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[46], src1.xyz = const[6] DP3 temp[47].x, src0.xyz, src1.xyz 41: src0.xyz = temp[47], src1.xyz = temp[20] CMP_SAT color[0].w, src0.x, src0.1, src1.x Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2].yw, input[2].xy__, 2D[1]; 2: TEX temp[5], input[5].xy__, 2D[2]; 3: TXP temp[4].xyz, input[4].xy_w, 2D[3]; 4: TEX temp[3].x, input[3].xy__, 2D[4]; 5: TEX temp[6].xyz, input[6].xy__, 2D[5]; 6: src0.xyz = temp[6] MAD temp[6].xyz, src0.xyz, src0.111, src0.xyz 7: src0.xyz = temp[5] MAD temp[8].xyz, src0.xyz, src0.111, src0.000 8: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[9].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[9], src1.xyz = const[0] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 10: src0.w = temp[2] MAD temp[2].x, src0.w__, src0.11_, src0.00_ 11: src0.xyz = temp[2], src1.xyz = const[5] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 12: MAD temp[2].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[2] DP3 temp[0].y, src0.xyz, src0.xyz 14: src0.xyz = input[1], src1.xyz = temp[0] DP3 temp[0].y, src0.xyz, src0.xyz MAD temp[0].w, src0.1, src0.1, -src1.y 15: src0.w = temp[0] REPL_ALPHA temp[0].z RSQ, |src0.w| 16: src0.xyz = temp[0] REPL_ALPHA temp[2].z RCP, src0.z 17: src0.xyz = temp[0] REPL_ALPHA temp[0].y RSQ, |src0.y| 18: src0.xyz = temp[0], src1.xyz = input[1] MAD temp[1].xyz, src0.yyy, src1.xyz, src0.000 19: src0.xyz = temp[1] MAD temp[0].y, src0._z_, src0._1_, src0._0_ 20: src0.xyz = temp[9], src1.xyz = temp[10], src2.xyz = temp[0] CMP temp[9].xyz, src0.xyz, src1.xyz, src2.yyy 21: src0.xyz = temp[1], src1.xyz = temp[2] DP3 temp[0].z, src0.xyz, -src1.xyz 22: src0.xyz = temp[1], src0.w = temp[5], src1.xyz = temp[2], src2.xyz = temp[0] DP3 temp[0].z, src0.xyz, src1.xyz MAD temp[0].w, src2.z, src0.w, src0.0 23: src0.xyz = input[7], src0.w = temp[0], src1.w = const[0] DP3 temp[1].x, src0.xyz, src0.xyz MAD temp[0].w, src0.w, src1.w, src0.0 24: src0.xyz = temp[1] REPL_ALPHA temp[1].x RSQ, |src0.x| 25: src0.xyz = temp[1], src1.xyz = input[7] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 26: src0.xyz = temp[1], src1.xyz = temp[2] DP3 temp[1].x, src0.xyz, src1.xyz 27: src0.xyz = temp[0], src0.w = temp[0], src2.xyz = temp[0] CMP temp[0].z, src0.__z, src0.__w, src2.__y 28: src0.xyz = temp[0], src1.xyz = temp[4] MAD temp[2].xyz, src0.zzz, src1.xyz, src0.000 29: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 30: src0.xyz = temp[1], src1.xyz = const[7] MAD_SAT temp[0].w, src0.x, src1.y, -src1.z 31: src0.w = temp[0] MAD temp[0].z, src0.__w, src0.__w, src0.__0 32: src0.xyz = temp[0], src1.xyz = const[2] MAD temp[1].xyz, src0.zzz, src1.xyz, src0.000 33: src0.xyz = temp[1], src1.xyz = temp[0] CMP temp[1].xyz, src0.xyz, src0.000, src1.yyy 34: src0.xyz = temp[1], src1.xyz = temp[6], src2.xyz = temp[9] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 35: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[8], src1.xyz = const[3], src2.xyz = temp[3] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 37: src0.xyz = temp[3], src1.xyz = const[4], src2.xyz = input[0], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 38: src0.xyz = temp[1], src1.xyz = temp[6] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 39: src0.xyz = temp[1], src1.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 40: src0.xyz = temp[1], src1.xyz = const[6] DP3 temp[0].x, src0.xyz, src1.xyz 41: src0.xyz = temp[0], src1.xyz = temp[0] CMP_SAT color[0].w, src0.x, src0.1, src1.y pc=49************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 35, tex_end: 4 (code_addr: 004808c0) TEX: TEX t2, t2, texture[1] (00008882) TEX t5, t5, texture[2] (00009145) TXP t4, t4, texture[3] (00019904) TEX t3, t3, texture[4] (0000a0c3) TEX t6, t6, texture[5] (0000a986) 0: xyz: t6 t0 t0 bias-> t6.xyz (03980006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 1.0 t6.xyz op: 00000a80 w: t6.x t6.x t6.x op: 00000000 1: xyz: t5 t0 t0 bias-> t8.xyz (03a00005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz 1.0 0.0 op: 00050a80 w: t5.x t5.x t5.x op: 00000000 2: xyz: t5 c1 t0 bias-> t9.xyz (03a40845) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c1.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 3: xyz: t9 c0 t0 bias-> t10.xyz (03a80809) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz c0.xyz 0.0 op: 00050200 w: t9.x t9.x t9.x op: 00000000 4: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 5: xyz: t2 c5 t0 bias-> t2.xy (01880942) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c5.xxx -1.0 op: 000d4280 w: t2.x t2.x t2.x op: 00000000 6: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 7: xyz: t2 t0 t0 bias-> t0.y (01000002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 8: xyz: t1 t0 t0 bias-> t0.y (01000001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xyz t1.xyz t1.xxx op: 00804000 w: 1.0 1.0 -t0.y op: 00090891 9: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 10: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: t0.z t0.x t0.x op: 05000002 11: xyz: t0 t0 t0 bias-> t0.y (01000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.y| t0.x t0.x op: 05800041 12: xyz: t0 t1 t0 bias-> t1.xyz (03840040) w: t0 t0 t0 bias-> (00000000) xyz: t0.yyy t1.xyz 0.0 op: 00050202 w: t0.x t0.x t0.x op: 00000000 13: xyz: t1 t0 t0 bias-> t0.y (01000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz 1.0 0.0 op: 00050a83 w: t1.x t1.x t1.x op: 00000000 14: xyz: t9 t10 t0 bias-> t9.xyz (03a40289) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t10.xyz t0.yyy op: 04028200 w: t9.x t9.x t9.x op: 00000000 15: xyz: t1 t2 t0 bias-> t0.z (02000081) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz -t2.xyz t1.xxx op: 00805200 w: t1.x t1.x t1.x op: 00000000 16: xyz: t1 t2 t0 bias-> t0.z (02000081) w: t5 t0 t0 bias-> t0.w (00800005) xyz: t1.xyz t2.xyz t1.xxx op: 00804200 w: t0.z t5.w 0.0 op: 00040488 17: xyz: t7 t0 t0 bias-> t1.x (00840007) w: t0 c0 t0 bias-> t0.w (00800800) xyz: t7.xyz t7.xyz t7.xxx op: 00804000 w: t0.w c0.w 0.0 op: 00040509 18: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.x| t1.x t1.x op: 05800040 19: xyz: t1 t7 t0 bias-> t1.xyz (038401c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t7.xyz 0.0 op: 00050201 w: t1.x t1.x t1.x op: 00000000 20: xyz: t1 t2 t0 bias-> t1.x (00840081) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t2.xyz t1.xxx op: 00804200 w: t1.x t1.x t1.x op: 00000000 21: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.www t0.yyy op: 04028600 w: t0.x t0.x t0.x op: 00000000 22: xyz: t0 t4 t0 bias-> t2.xyz (03880100) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz t4.xyz 0.0 op: 00050203 w: t0.x t0.x t0.x op: 00000000 23: xyz: t2 t3 t0 bias-> t2.xyz (038800c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xxx 0.0 op: 00050280 w: t2.x t2.x t2.x op: 00000000 24: xyz: t1 c7 t0 bias-> (000009c1) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xxx t1.xxx t1.xxx op: 00004081 w: t1.x c7.y -c7.z op: 40094200 25: xyz: t32 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t0.www 0.0 op: 0005060c w: t32.x t32.x t32.x op: 00000000 26: xyz: t0 c2 t0 bias-> t1.xyz (03840880) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz c2.xyz 0.0 op: 00050203 w: t0.x t0.x t0.x op: 00000000 27: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 0.0 t0.yyy op: 04018a00 w: t1.x t1.x t1.x op: 00000000 28: xyz: t1 t6 t9 bias-> t3.xyz (038c9181) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t6.xyz t9.xyz op: 00020200 w: t1.x t1.x t1.x op: 00000000 29: xyz: t2 t3 t0 bias-> t3.xyz (038c00c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 30: xyz: t8 c3 t3 bias-> t3.xyz (038c38c8) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz c3.xyz t3.xyz op: 80020200 NOP w: t8.x t8.x t8.x op: 00000000 31: xyz: t3 c4 t0 sub-> o0.xyz (1c000903) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx srcp.xyz t3.xyz op: 40200789 w: t3.x t3.x t3.x op: 00000000 32: xyz: t1 t6 t0 bias-> t1.xyz (03840181) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t6.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 33: xyz: t1 t2 t0 bias-> t1.xyz (03840081) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t2.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 34: xyz: t1 c6 t0 bias-> t0.x (00800981) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c6.xyz t1.xxx op: 00804200 w: t1.x t1.x t1.x op: 00000000 35: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.x 1.0 t0.y op: 43010880 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL SAMP[8] DCL SAMP[9] DCL CONST[0] DCL CONST[5..7] DCL CONST[9..10] DCL TEMP[0..11] IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.5000} IMM FLT32 { 2.0000, -1.0000, 0.2000, 0.0100} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} 0: MAD TEMP[0].xy, IN[3], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[6], SAMP[0], 2D 2: MOV TEMP[2], IMM[0].xxxx 3: MUL_SAT TEMP[2], TEMP[2], IN[3].wwww 4: DP3 TEMP[3].x, IN[8], IN[8] 5: RSQ TEMP[3].x, TEMP[3].xxxx 6: MUL TEMP[3], TEMP[3].xxxx, IN[8] 7: DP3 TEMP[4].x, IN[2], IN[2] 8: RSQ TEMP[4].x, TEMP[4].xxxx 9: MUL TEMP[4], TEMP[4].xxxx, IN[2] 10: TEX TEMP[5], IN[3], SAMP[2], 2D 11: MOV TEMP[5].x, TEMP[5].wwww 12: MAD TEMP[5], TEMP[5], IMM[1].xxxx, IMM[1].yyyy 13: TEX TEMP[6], TEMP[0], SAMP[3], 2D 14: MOV TEMP[6].x, TEMP[6].wwww 15: MAD TEMP[6].xy, TEMP[6], IMM[1].xxxx, IMM[1].yyyy 16: MAD TEMP[5].xy, TEMP[2].xxxx, TEMP[6], TEMP[5] 17: MOV TEMP[5].z, IMM[2].wwww 18: DP3 TEMP[7].x, TEMP[5], TEMP[5] 19: ADD TEMP[7].x, IMM[0].xxxx, -TEMP[7].xxxx 20: RSQ TEMP[7].x, TEMP[7].xxxx 21: RCP TEMP[5].z, TEMP[7].xxxx 22: DP3_SAT TEMP[4].x, TEMP[4], TEMP[5] 23: TXP TEMP[7], IN[5], SAMP[4], 2D 24: MUL TEMP[4], TEMP[4].xxxx, TEMP[7] 25: TEX TEMP[7].x, IN[4], SAMP[5], 2D 26: MUL TEMP[4], TEMP[4], TEMP[7].xxxx 27: MUL TEMP[1], TEMP[1], IN[0] 28: MUL TEMP[8], TEMP[1], CONST[5] 29: DP3 TEMP[3].x, TEMP[3], TEMP[5] 30: MAD_SAT TEMP[7].x, TEMP[3].xxxx, IMM[0].yyyy, -IMM[0].zzzz 31: MUL TEMP[7].x, TEMP[7].xxxx, TEMP[7].xxxx 32: MUL TEMP[7], TEMP[7].xxxx, CONST[6] 33: TEX TEMP[9], IN[7], SAMP[6], 2D 34: ADD TEMP[9], TEMP[9], TEMP[9] 35: TEX TEMP[10], TEMP[0], SAMP[7], 2D 36: ADD TEMP[10], TEMP[10], -IMM[0].wwww 37: MAD TEMP[9], TEMP[2].xxxx, TEMP[10], TEMP[9] 38: MAD TEMP[8], TEMP[7], TEMP[9], TEMP[8] 39: MUL TEMP[11].xyz, TEMP[4], TEMP[8] 40: MAD TEMP[11].xyz, TEMP[1], CONST[7], TEMP[11] 41: TEX TEMP[7], IN[6], SAMP[8], 2D 42: ADD TEMP[11], TEMP[7], TEMP[11] 43: DP3 TEMP[7], TEMP[3], TEMP[5] 44: TEX TEMP[9], TEMP[7], SAMP[9], 2D 45: MAD TEMP[7], TEMP[7], IMM[1].zzzz, IMM[1].wwww 46: MUL TEMP[9], TEMP[7], TEMP[9] 47: MUL TEMP[9], CONST[9], TEMP[9] 48: ADD TEMP[11], TEMP[11], TEMP[9] 49: LRP OUT[0].xyz, IN[1].xxxx, CONST[10], TEMP[11] 50: MUL TEMP[7], TEMP[7], TEMP[9] 51: MUL TEMP[7], TEMP[7], TEMP[4] 52: DP3 OUT[0].w, TEMP[7], IMM[2] 53: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[11].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[12].xxxx, const[12].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[12].xxxx, const[12].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[13].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[8]; 42: ADD temp[11], temp[7], temp[11]; 43: DP3 temp[7], temp[3], temp[5]; 44: TEX temp[9], temp[7], 2D[9]; 45: MAD temp[7], temp[7], const[12].zzzz, const[12].wwww; 46: MUL temp[9], temp[7], temp[9]; 47: MUL temp[9], const[9], temp[9]; 48: ADD temp[11], temp[11], temp[9]; 49: LRP output[0].xyz, input[1].xxxx, const[10], temp[11]; 50: MUL temp[7], temp[7], temp[9]; 51: MUL temp[7], temp[7], temp[4]; 52: DP3 output[0].w, temp[7], const[13]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[11].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[12].xxxx, const[12].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[12].xxxx, const[12].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[13].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[8]; 42: ADD temp[11], temp[7], temp[11]; 43: DP3 temp[7], temp[3], temp[5]; 44: TEX temp[9], temp[7], 2D[9]; 45: MAD temp[7], temp[7], const[12].zzzz, const[12].wwww; 46: MUL temp[9], temp[7], temp[9]; 47: MUL temp[9], const[9], temp[9]; 48: ADD temp[11], temp[11], temp[9]; 49: LRP output[0].xyz, input[1].xxxx, const[10], temp[11]; 50: MUL temp[7], temp[7], temp[9]; 51: MUL temp[7], temp[7], temp[4]; 52: DP3 output[0].w, temp[7], const[13]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[11].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[12].xxxx, const[12].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[12].xxxx, const[12].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[13].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[8]; 42: ADD temp[11], temp[7], temp[11]; 43: DP3 temp[7], temp[3], temp[5]; 44: TEX temp[9], temp[7], 2D[9]; 45: MAD temp[7], temp[7], const[12].zzzz, const[12].wwww; 46: MUL temp[9], temp[7], temp[9]; 47: MUL temp[9], const[9], temp[9]; 48: ADD temp[11], temp[11], temp[9]; 49: LRP output[0].xyz, input[1].xxxx, const[10], temp[11]; 50: MUL temp[7], temp[7], temp[9]; 51: MUL temp[7], temp[7], temp[4]; 52: DP3 output[0].w, temp[7], const[13]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[11].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[12].xxxx, const[12].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[12].xxxx, const[12].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[13].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[8]; 42: ADD temp[11], temp[7], temp[11]; 43: DP3 temp[7], temp[3], temp[5]; 44: TEX temp[9], temp[7], 2D[9]; 45: MAD temp[7], temp[7], const[12].zzzz, const[12].wwww; 46: MUL temp[9], temp[7], temp[9]; 47: MUL temp[9], const[9], temp[9]; 48: ADD temp[11], temp[11], temp[9]; 49: LRP output[0].xyz, input[1].xxxx, const[10], temp[11]; 50: MUL temp[7], temp[7], temp[9]; 51: MUL temp[7], temp[7], temp[4]; 52: DP3 output[0].w, temp[7], const[13]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[11].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[12].xxxx, const[12].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[12].xxxx, const[12].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[13].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[8]; 42: ADD temp[11], temp[7], temp[11]; 43: DP3 temp[7], temp[3], temp[5]; 44: TEX temp[9], temp[7], 2D[9]; 45: MAD temp[7], temp[7], const[12].zzzz, const[12].wwww; 46: MUL temp[9], temp[7], temp[9]; 47: MUL temp[9], const[9], temp[9]; 48: ADD temp[11], temp[11], temp[9]; 49: LRP output[0].xyz, input[1].xxxx, const[10], temp[11]; 50: MUL temp[7], temp[7], temp[9]; 51: MUL temp[7], temp[7], temp[4]; 52: DP3 output[0].w, temp[7], const[13]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[11].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[12].xxxx, const[12].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[12].xxxx, const[12].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[13].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[5]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[6]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[7]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: TEX temp[7], input[6], 2D[8]; 42: ADD temp[11], temp[7], temp[11]; 43: DP3 temp[7], temp[3], temp[5]; 44: TEX temp[9], temp[7], 2D[9]; 45: MAD temp[7], temp[7], const[12].zzzz, const[12].wwww; 46: MUL temp[9], temp[7], temp[9]; 47: MUL temp[9], const[9], temp[9]; 48: ADD temp[11], temp[11], temp[9]; 49: LRP_SAT output[0].xyz, input[1].xxxx, const[10], temp[11]; 50: MUL temp[7], temp[7], temp[9]; 51: MUL temp[7], temp[7], temp[4]; 52: DP3_SAT output[0].w, temp[7], const[13]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[11].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[12].xxxx, const[12].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[12].xxxx, const[12].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[13].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[5]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[6]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[7]; 37: ADD temp[10], temp[10], -const[11].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: MAD temp[11].xyz, temp[1], const[7], temp[11]; 42: TEX temp[7], input[6], 2D[8]; 43: ADD temp[11], temp[7], temp[11]; 44: DP3 temp[7], temp[3], temp[5]; 45: TEX temp[9], temp[7], 2D[9]; 46: MAD temp[7], temp[7], const[12].zzzz, const[12].wwww; 47: MUL temp[9], temp[7], temp[9]; 48: MUL temp[9], const[9], temp[9]; 49: ADD temp[11], temp[11], temp[9]; 50: LRP_SAT output[0].xyz, input[1].xxxx, const[10], temp[11]; 51: MUL temp[7], temp[7], temp[9]; 52: MUL temp[7], temp[7], temp[4]; 53: DP3_SAT output[0].w, temp[7], const[13]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: MOV temp[2], const[11].xxxx; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, |temp[3].xxxx|; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[2]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[12].xxxx, const[12].yyyy; 13: TEX temp[6], temp[0], 2D[3]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[12].xxxx, const[12].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[13].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, |temp[7].xxxx|; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[4]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[5]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[6]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[7]; 37: ADD temp[10], temp[10], -const[11].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: MAD temp[11].xyz, temp[1], const[7], temp[11]; 42: TEX temp[7], input[6], 2D[8]; 43: ADD temp[11], temp[7], temp[11]; 44: DP3 temp[7], temp[3], temp[5]; 45: TEX temp[9], temp[7], 2D[9]; 46: MAD temp[7], temp[7], const[12].zzzz, const[12].wwww; 47: MUL temp[9], temp[7], temp[9]; 48: MUL temp[9], const[9], temp[9]; 49: ADD temp[11], temp[11], temp[9]; 50: ADD temp[13].xyz, const[10], -temp[11]; 51: MAD_SAT output[0].xyz, input[1].xxxx, temp[13], temp[11]; 52: MUL temp[7], temp[7], temp[9]; 53: MUL temp[7], temp[7], temp[4]; 54: DP3_SAT output[0].w, temp[7], const[13]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: MOV temp[2].x, const[11].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[2]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[12].xx__, const[12].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[3]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[12].xx__, const[12].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[13].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[11].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[5]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[11].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: TEX temp[7].xyz, input[6].xy__, 2D[8]; 43: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 44: DP3 temp[7].xyz, temp[3].xyz_, temp[5].xyz_; 45: TEX temp[9].xyz, temp[7].xy__, 2D[9]; 46: MAD temp[7].xyz, temp[7].xyz_, const[12].zzz_, const[12].www_; 47: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 48: MUL temp[9].xyz, const[9].xyz_, temp[9].xyz_; 49: ADD temp[11].xyz, temp[11].xyz_, temp[9].xyz_; 50: ADD temp[13].xyz, const[10].xyz_, -temp[11].xyz_; 51: MAD_SAT output[0].xyz, input[1].xxx_, temp[13].xyz_, temp[11].xyz_; 52: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 53: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 54: DP3_SAT output[0].w, temp[7].xyz_, const[13].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: MOV temp[2].x, const[11].x___; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[2]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[12].xx__, const[12].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[3]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[12].xx__, const[12].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[13].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[11].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[5]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[11].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: TEX temp[7].xyz, input[6].xy__, 2D[8]; 43: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 44: DP3 temp[7].xyz, temp[3].xyz_, temp[5].xyz_; 45: TEX temp[9].xyz, temp[7].xy__, 2D[9]; 46: MAD temp[7].xyz, temp[7].xyz_, const[12].zzz_, const[12].www_; 47: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 48: MUL temp[9].xyz, const[9].xyz_, temp[9].xyz_; 49: ADD temp[11].xyz, temp[11].xyz_, temp[9].xyz_; 50: ADD temp[13].xyz, const[10].xyz_, -temp[11].xyz_; 51: MAD_SAT output[0].xyz, input[1].xxx_, temp[13].xyz_, temp[11].xyz_; 52: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 53: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 54: DP3_SAT output[0].w, temp[7].xyz_, const[13].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: MOV_SAT temp[2].x, input[3].w___; 3: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 4: RSQ temp[3].x, |temp[3].x___|; 5: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 6: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 7: RSQ temp[4].x, |temp[4].x___|; 8: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 9: TEX temp[5].yw, input[3].xy__, 2D[2]; 10: MOV temp[5].x, temp[5].w___; 11: MAD temp[5].xy, temp[5].xy__, const[12].xx__, none.-1-1__; 12: TEX temp[6].yw, temp[0].xy__, 2D[3]; 13: MOV temp[6].x, temp[6].w___; 14: MAD temp[6].xy, temp[6].xy__, const[12].xx__, none.-1-1__; 15: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 16: MOV temp[5].z, none.__0_; 17: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 18: ADD temp[7].x, none.1___, -temp[7].x___; 19: RSQ temp[7].x, |temp[7].x___|; 20: RCP temp[5].z, temp[7].x___; 21: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 22: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 23: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 24: TEX temp[12].x, input[4].xy__, 2D[5]; 25: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 26: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 27: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 28: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 29: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 30: MUL temp[7].x, temp[7].x___, temp[7].x___; 31: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 32: TEX temp[9].xyz, input[7].xy__, 2D[6]; 33: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 34: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 35: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 36: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 37: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 38: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 39: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 40: TEX temp[7].xyz, input[6].xy__, 2D[8]; 41: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 42: DP3 temp[7].xyz, temp[3].xyz_, temp[5].xyz_; 43: TEX temp[9].xyz, temp[7].xy__, 2D[9]; 44: MAD temp[7].xyz, temp[7].xyz_, const[12].zzz_, const[12].www_; 45: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 46: MUL temp[9].xyz, const[9].xyz_, temp[9].xyz_; 47: ADD temp[11].xyz, temp[11].xyz_, temp[9].xyz_; 48: MAD_SAT output[0].xyz, input[1].xxx_, (const[10] - temp[11]).xyz_, temp[11].xyz_; 49: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 50: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 51: DP3_SAT output[0].w, temp[7].xyz_, const[13].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[3].w___; 5: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[3].x, |temp[3].x___|; 7: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 8: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 9: RSQ temp[4].x, |temp[4].x___|; 10: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: MOV temp[5].x, temp[5].w___; 13: MAD temp[5].xy, temp[5].xy__, const[12].xx__, none.-1-1__; 14: TEX temp[6].yw, temp[0].xy__, 2D[3]; 15: MOV temp[6].x, temp[6].w___; 16: MAD temp[6].xy, temp[6].xy__, const[12].xx__, none.-1-1__; 17: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 18: MOV temp[5].z, none.__0_; 19: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 20: ADD temp[7].x, none.1___, -temp[7].x___; 21: RSQ temp[7].x, |temp[7].x___|; 22: RCP temp[5].z, temp[7].x___; 23: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 24: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 25: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 26: TEX temp[12].x, input[4].xy__, 2D[5]; 27: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: TEX temp[7].xyz, input[6].xy__, 2D[8]; 43: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 44: DP3 temp[7].xyz, temp[3].xyz_, temp[5].xyz_; 45: TEX temp[9].xyz, temp[7].xy__, 2D[9]; 46: MAD temp[7].xyz, temp[7].xyz_, const[12].zzz_, const[12].www_; 47: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 48: MUL temp[9].xyz, const[9].xyz_, temp[9].xyz_; 49: ADD temp[11].xyz, temp[11].xyz_, temp[9].xyz_; 50: MAD_SAT output[0].xyz, input[1].xxx_, (const[10] - temp[11]).xyz_, temp[11].xyz_; 51: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 52: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 53: DP3_SAT output[0].w, temp[7].xyz_, const[13].xyz_; CONST[6] = { 1.0000 4.0000 3.0000 0.5000 } CONST[7] = { 2.0000 -1.0000 0.2000 0.0100 } CONST[8] = { 0.3000 0.5900 0.1100 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: MOV_SAT temp[2].x, input[3].w___; 5: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[3].x, |temp[3].x___|; 7: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 8: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 9: RSQ temp[4].x, |temp[4].x___|; 10: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: MOV temp[5].x, temp[5].w___; 13: MAD temp[5].xy, temp[5].xy__, const[7].xx__, none.-1-1__; 14: TEX temp[6].yw, temp[0].xy__, 2D[3]; 15: MOV temp[6].x, temp[6].w___; 16: MAD temp[6].xy, temp[6].xy__, const[7].xx__, none.-1-1__; 17: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 18: MOV temp[5].z, none.__0_; 19: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 20: ADD temp[7].x, none.1___, -temp[7].x___; 21: RSQ temp[7].x, |temp[7].x___|; 22: RCP temp[5].z, temp[7].x___; 23: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 24: TXP temp[7].xyz, input[5].xy_w, 2D[4]; 25: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 26: TEX temp[12].x, input[4].xy__, 2D[5]; 27: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[1].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[6].y___, -const[6].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[2].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[6]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[7]; 37: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[3].xyz_, temp[11].xyz_; 42: TEX temp[7].xyz, input[6].xy__, 2D[8]; 43: ADD temp[11].xyz, temp[7].xyz_, temp[11].xyz_; 44: DP3 temp[7].xyz, temp[3].xyz_, temp[5].xyz_; 45: TEX temp[9].xyz, temp[7].xy__, 2D[9]; 46: MAD temp[7].xyz, temp[7].xyz_, const[7].zzz_, const[7].www_; 47: MUL temp[9].xyz, temp[7].xyz_, temp[9].xyz_; 48: MUL temp[9].xyz, const[4].xyz_, temp[9].xyz_; 49: ADD temp[11].xyz, temp[11].xyz_, temp[9].xyz_; 50: MAD_SAT output[0].xyz, input[1].xxx_, (const[5] - temp[11]).xyz_, temp[11].xyz_; 51: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 52: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 53: DP3_SAT output[0].w, temp[7].xyz_, const[8].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[14].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: MOV_SAT temp[16].x, input[3].w___; 5: DP3 temp[17].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[18].x, |temp[17].x___|; 7: MUL temp[3].xyz, temp[18].xxx_, input[8].xyz_; 8: DP3 temp[19].x, input[2].xyz_, input[2].xyz_; 9: RSQ temp[20].x, |temp[19].x___|; 10: MUL temp[21].xyz, temp[20].xxx_, input[2].xyz_; 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: MOV temp[5].x, temp[5].w___; 13: MAD temp[22].xy, temp[5].xy__, const[7].xx__, none.-1-1__; 14: TEX temp[6].yw, temp[14].xy__, 2D[3]; 15: MOV temp[6].x, temp[6].w___; 16: MAD temp[23].xy, temp[6].xy__, const[7].xx__, none.-1-1__; 17: MAD temp[5].xy, temp[16].xx__, temp[23].xy__, temp[22].xy__; 18: MOV temp[5].z, none.__0_; 19: DP3 temp[24].x, temp[5].xyz_, temp[5].xyz_; 20: ADD temp[25].x, none.1___, -temp[24].x___; 21: RSQ temp[26].x, |temp[25].x___|; 22: RCP temp[5].z, temp[26].x___; 23: DP3_SAT temp[27].x, temp[21].xyz_, temp[5].xyz_; 24: TXP temp[28].xyz, input[5].xy_w, 2D[4]; 25: MUL temp[29].xyz, temp[27].xxx_, temp[28].xyz_; 26: TEX temp[30].x, input[4].xy__, 2D[5]; 27: MUL temp[31].xyz, temp[29].xyz_, temp[30].xxx_; 28: MUL temp[32].xyz, temp[15].xyz_, input[0].xyz_; 29: MUL temp[33].xyz, temp[32].xyz_, const[1].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[34].x, temp[3].x___, const[6].y___, -const[6].z___; 32: MUL temp[35].x, temp[34].x___, temp[34].x___; 33: MUL temp[36].xyz, temp[35].xxx_, const[2].xyz_; 34: TEX temp[37].xyz, input[7].xy__, 2D[6]; 35: ADD temp[38].xyz, temp[37].xyz_, temp[37].xyz_; 36: TEX temp[39].xyz, temp[14].xy__, 2D[7]; 37: ADD temp[40].xyz, temp[39].xyz_, -none.HHH_; 38: MAD temp[41].xyz, temp[16].xxx_, temp[40].xyz_, temp[38].xyz_; 39: MAD temp[42].xyz, temp[36].xyz_, temp[41].xyz_, temp[33].xyz_; 40: MUL temp[43].xyz, temp[31].xyz_, temp[42].xyz_; 41: MAD temp[44].xyz, temp[32].xyz_, const[3].xyz_, temp[43].xyz_; 42: TEX temp[45].xyz, input[6].xy__, 2D[8]; 43: ADD temp[46].xyz, temp[45].xyz_, temp[44].xyz_; 44: DP3 temp[47].xyz, temp[3].xyz_, temp[5].xyz_; 45: TEX temp[48].xyz, temp[47].xy__, 2D[9]; 46: MAD temp[49].xyz, temp[47].xyz_, const[7].zzz_, const[7].www_; 47: MUL temp[50].xyz, temp[49].xyz_, temp[48].xyz_; 48: MUL temp[51].xyz, const[4].xyz_, temp[50].xyz_; 49: ADD temp[52].xyz, temp[46].xyz_, temp[51].xyz_; 50: MAD_SAT output[0].xyz, input[1].xxx_, (const[5] - temp[52]).xyz_, temp[52].xyz_; 51: MUL temp[53].xyz, temp[49].xyz_, temp[51].xyz_; 52: MUL temp[54].xyz, temp[53].xyz_, temp[31].xyz_; 53: DP3_SAT output[0].w, temp[54].xyz_, const[8].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: src0.w = input[3] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 5: src0.xyz = input[8] DP3 temp[17].x, src0.xyz, src0.xyz 6: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 7: src0.xyz = temp[18], src1.xyz = input[8] MAD temp[3].xyz, src0.xxx, src1.xyz, src0.000 8: src0.xyz = input[2] DP3 temp[19].x, src0.xyz, src0.xyz 9: src0.xyz = temp[19] REPL_ALPHA temp[20].x RSQ, |src0.x| 10: src0.xyz = temp[20], src1.xyz = input[2] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 11: TEX temp[5].yw, input[3].xy__, 2D[2]; 12: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 13: src0.xyz = temp[5], src1.xyz = const[7] MAD temp[22].xy, src0.xy_, src1.xx_, -src0.11_ 14: TEX temp[6].yw, temp[14].xy__, 2D[3]; 15: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 16: src0.xyz = temp[6], src1.xyz = const[7] MAD temp[23].xy, src0.xy_, src1.xx_, -src0.11_ 17: src0.xyz = temp[16], src1.xyz = temp[23], src2.xyz = temp[22] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 18: MAD temp[5].z, src0.__0, src0.111, src0.000 19: src0.xyz = temp[5] DP3 temp[24].x, src0.xyz, src0.xyz 20: src0.xyz = temp[24] MAD temp[25].x, src0.1__, src0.111, -src0.x__ 21: src0.xyz = temp[25] REPL_ALPHA temp[26].x RSQ, |src0.x| 22: src0.xyz = temp[26] REPL_ALPHA temp[5].z RCP, src0.x 23: src0.xyz = temp[21], src1.xyz = temp[5] DP3_SAT temp[27].x, src0.xyz, src1.xyz 24: TXP temp[28].xyz, input[5].xy_w, 2D[4]; 25: src0.xyz = temp[27], src1.xyz = temp[28] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 26: TEX temp[30].x, input[4].xy__, 2D[5]; 27: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 28: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 29: src0.xyz = temp[32], src1.xyz = const[1] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[3], src1.xyz = temp[5] DP3 temp[3].x, src0.xyz, src1.xyz 31: src0.xyz = temp[3], src1.xyz = const[6] MAD_SAT temp[34].x, src0.x__, src1.y__, -src1.z__ 32: src0.xyz = temp[34] MAD temp[35].x, src0.x__, src0.x__, src0.000 33: src0.xyz = temp[35], src1.xyz = const[2] MAD temp[36].xyz, src0.xxx, src1.xyz, src0.000 34: TEX temp[37].xyz, input[7].xy__, 2D[6]; 35: src0.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src0.111, src0.xyz 36: TEX temp[39].xyz, temp[14].xy__, 2D[7]; 37: src0.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, -src0.HHH 38: src0.xyz = temp[16], src1.xyz = temp[40], src2.xyz = temp[38] MAD temp[41].xyz, src0.xxx, src1.xyz, src2.xyz 39: src0.xyz = temp[36], src1.xyz = temp[41], src2.xyz = temp[33] MAD temp[42].xyz, src0.xyz, src1.xyz, src2.xyz 40: src0.xyz = temp[31], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[32], src1.xyz = const[3], src2.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 42: TEX temp[45].xyz, input[6].xy__, 2D[8]; 43: src0.xyz = temp[45], src1.xyz = temp[44] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz 44: src0.xyz = temp[3], src1.xyz = temp[5] DP3 temp[47].xyz, src0.xyz, src1.xyz 45: TEX temp[48].xyz, temp[47].xy__, 2D[9]; 46: src0.xyz = temp[47], src0.w = const[7], src1.xyz = const[7] MAD temp[49].xyz, src0.xyz, src1.zzz, src0.www 47: src0.xyz = temp[49], src1.xyz = temp[48] MAD temp[50].xyz, src0.xyz, src1.xyz, src0.000 48: src0.xyz = const[4], src1.xyz = temp[50] MAD temp[51].xyz, src0.xyz, src1.xyz, src0.000 49: src0.xyz = temp[46], src1.xyz = temp[51] MAD temp[52].xyz, src0.xyz, src0.111, src1.xyz 50: src0.xyz = temp[52], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 51: src0.xyz = temp[49], src1.xyz = temp[51] MAD temp[53].xyz, src0.xyz, src1.xyz, src0.000 52: src0.xyz = temp[53], src1.xyz = temp[31] MAD temp[54].xyz, src0.xyz, src1.xyz, src0.000 53: src0.xyz = temp[54], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[5].yw, input[3].xy__, 2D[2]; 3: TXP temp[28].xyz, input[5].xy_w, 2D[4]; 4: TEX temp[30].x, input[4].xy__, 2D[5]; 5: TEX temp[37].xyz, input[7].xy__, 2D[6]; 6: TEX temp[45].xyz, input[6].xy__, 2D[8]; 7: src0.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[5], src1.xyz = const[7] MAD temp[22].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = temp[32], src1.xyz = const[1] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 12: MAD temp[5].z, src0.__0, src0.111, src0.000 13: src0.xyz = input[2] DP3 temp[19].x, src0.xyz, src0.xyz 14: src0.xyz = temp[19] REPL_ALPHA temp[20].x RSQ, |src0.x| 15: src0.xyz = temp[20], src1.xyz = input[2] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 16: src0.xyz = input[8] DP3 temp[17].x, src0.xyz, src0.xyz 17: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 18: src0.xyz = temp[18], src1.xyz = input[8] MAD temp[3].xyz, src0.xxx, src1.xyz, src0.000 19: src0.w = input[3] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 20: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 21: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 22: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[39].xyz, temp[14].xy__, 2D[7]; 25: TEX temp[6].yw, temp[14].xy__, 2D[3]; 26: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 27: src0.xyz = temp[6], src1.xyz = const[7] MAD temp[23].xy, src0.xy_, src1.xx_, -src0.11_ 28: src0.xyz = temp[16], src1.xyz = temp[23], src2.xyz = temp[22] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 29: src0.xyz = temp[5] DP3 temp[24].x, src0.xyz, src0.xyz 30: src0.xyz = temp[39], src1.xyz = temp[24] MAD temp[40].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[25].w, src0.1, src0.1, -src1.x 31: src0.xyz = temp[25], src0.w = temp[25] REPL_ALPHA temp[26].x RSQ, |src0.w| 32: src0.xyz = temp[26] REPL_ALPHA temp[5].z RCP, src0.x 33: src0.xyz = temp[21], src1.xyz = temp[5] DP3_SAT temp[27].x, src0.xyz, src1.xyz 34: src0.xyz = temp[27], src1.xyz = temp[28] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 36: src0.xyz = temp[3], src1.xyz = temp[5] DP3 temp[3].x, src0.xyz, src1.xyz 37: src0.xyz = temp[3], src1.xyz = temp[5], src2.xyz = const[6] DP3 temp[47].xyz, src0.xyz, src1.xyz MAD_SAT temp[34].w, src0.x, src2.y, -src2.z 38: src0.xyz = temp[34], src0.w = temp[34] MAD temp[35].x, src0.w__, src0.w__, src0.000 39: src0.xyz = temp[35], src1.xyz = const[2] MAD temp[36].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[47], src0.w = const[7], src1.xyz = const[7] MAD temp[49].xyz, src0.xyz, src1.zzz, src0.www 41: src0.xyz = temp[16], src1.xyz = temp[40], src2.xyz = temp[38] MAD temp[41].xyz, src0.xxx, src1.xyz, src2.xyz 42: src0.xyz = temp[36], src1.xyz = temp[41], src2.xyz = temp[33] MAD temp[42].xyz, src0.xyz, src1.xyz, src2.xyz 43: src0.xyz = temp[31], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src1.xyz, src0.000 44: src0.xyz = temp[32], src1.xyz = const[3], src2.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 45: src0.xyz = temp[45], src1.xyz = temp[44] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz 46: BEGIN_TEX; 47: TEX temp[48].xyz, temp[47].xy__, 2D[9]; 48: src0.xyz = temp[49], src1.xyz = temp[48] MAD temp[50].xyz, src0.xyz, src1.xyz, src0.000 49: src0.xyz = const[4], src1.xyz = temp[50] MAD temp[51].xyz, src0.xyz, src1.xyz, src0.000 50: src0.xyz = temp[46], src1.xyz = temp[51] MAD temp[52].xyz, src0.xyz, src0.111, src1.xyz 51: src0.xyz = temp[52], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 52: src0.xyz = temp[49], src1.xyz = temp[51] MAD temp[53].xyz, src0.xyz, src1.xyz, src0.000 53: src0.xyz = temp[53], src1.xyz = temp[31] MAD temp[54].xyz, src0.xyz, src1.xyz, src0.000 54: src0.xyz = temp[54], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[5].yw, input[3].xy__, 2D[2]; 3: TXP temp[28].xyz, input[5].xy_w, 2D[4]; 4: TEX temp[30].x, input[4].xy__, 2D[5]; 5: TEX temp[37].xyz, input[7].xy__, 2D[6]; 6: TEX temp[45].xyz, input[6].xy__, 2D[8]; 7: src0.xyz = temp[37] MAD temp[38].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[5], src1.xyz = const[7] MAD temp[22].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = temp[32], src1.xyz = const[1] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 12: MAD temp[5].z, src0.__0, src0.111, src0.000 13: src0.xyz = input[2] DP3 temp[19].x, src0.xyz, src0.xyz 14: src0.xyz = temp[19] REPL_ALPHA temp[20].x RSQ, |src0.x| 15: src0.xyz = temp[20], src1.xyz = input[2] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 16: src0.xyz = input[8] DP3 temp[17].x, src0.xyz, src0.xyz 17: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 18: src0.xyz = temp[18], src1.xyz = input[8] MAD temp[3].xyz, src0.xxx, src1.xyz, src0.000 19: src0.w = input[3] MAD_SAT temp[16].x, src0.w__, src0.111, src0.000 20: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 21: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 22: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[39].xyz, temp[14].xy__, 2D[7]; 25: TEX temp[6].yw, temp[14].xy__, 2D[3]; 26: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 27: src0.xyz = temp[6], src1.xyz = const[7] MAD temp[23].xy, src0.xy_, src1.xx_, -src0.11_ 28: src0.xyz = temp[16], src1.xyz = temp[23], src2.xyz = temp[22] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 29: src0.xyz = temp[5] DP3 temp[24].x, src0.xyz, src0.xyz 30: src0.xyz = temp[39], src1.xyz = temp[24] MAD temp[40].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[25].w, src0.1, src0.1, -src1.x 31: src0.w = temp[25] REPL_ALPHA temp[26].x RSQ, |src0.w| 32: src0.xyz = temp[26] REPL_ALPHA temp[5].z RCP, src0.x 33: src0.xyz = temp[21], src1.xyz = temp[5] DP3_SAT temp[27].x, src0.xyz, src1.xyz 34: src0.xyz = temp[27], src1.xyz = temp[28] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xxx, src0.000 36: src0.xyz = temp[3], src1.xyz = temp[5] DP3 temp[3].x, src0.xyz, src1.xyz 37: src0.xyz = temp[3], src1.xyz = temp[5], src2.xyz = const[6] DP3 temp[47].xyz, src0.xyz, src1.xyz MAD_SAT temp[34].w, src0.x, src2.y, -src2.z 38: src0.w = temp[34] MAD temp[35].x, src0.w__, src0.w__, src0.000 39: src0.xyz = temp[35], src1.xyz = const[2] MAD temp[36].xyz, src0.xxx, src1.xyz, src0.000 40: src0.xyz = temp[47], src0.w = const[7], src1.xyz = const[7] MAD temp[49].xyz, src0.xyz, src1.zzz, src0.www 41: src0.xyz = temp[16], src1.xyz = temp[40], src2.xyz = temp[38] MAD temp[41].xyz, src0.xxx, src1.xyz, src2.xyz 42: src0.xyz = temp[36], src1.xyz = temp[41], src2.xyz = temp[33] MAD temp[42].xyz, src0.xyz, src1.xyz, src2.xyz 43: src0.xyz = temp[31], src1.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src1.xyz, src0.000 44: src0.xyz = temp[32], src1.xyz = const[3], src2.xyz = temp[43] MAD temp[44].xyz, src0.xyz, src1.xyz, src2.xyz 45: src0.xyz = temp[45], src1.xyz = temp[44] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz 46: BEGIN_TEX; 47: TEX temp[48].xyz, temp[47].xy__, 2D[9]; 48: src0.xyz = temp[49], src1.xyz = temp[48] MAD temp[50].xyz, src0.xyz, src1.xyz, src0.000 49: src0.xyz = const[4], src1.xyz = temp[50] MAD temp[51].xyz, src0.xyz, src1.xyz, src0.000 50: src0.xyz = temp[46], src1.xyz = temp[51] MAD temp[52].xyz, src0.xyz, src0.111, src1.xyz 51: src0.xyz = temp[52], src1.xyz = const[5], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 52: src0.xyz = temp[49], src1.xyz = temp[51] MAD temp[53].xyz, src0.xyz, src1.xyz, src0.000 53: src0.xyz = temp[53], src1.xyz = temp[31] MAD temp[54].xyz, src0.xyz, src1.xyz, src0.000 54: src0.xyz = temp[54], src1.xyz = const[8] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ r300compiler error: Rewrite of inst 32 failed Can't allocate source for Inst 37 src_type=1 new_index=1 new_mask=4 r300 FP: Compiler Error: Rewrite of inst 32 failed Can't allocate source for Inst 37 src_type=1 new_index=1 new_mask=4 Using a dummy shader instead. r300: Initial fragment program FRAG DCL OUT[0], COLOR IMM 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 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 pc=50************************************* 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: 40050a94 w: 1.0 1.0 0.0 op: 40040891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL IN[1], GENERIC[2], PERSPECTIVE DCL IN[2], GENERIC[3], PERSPECTIVE DCL IN[3], GENERIC[4], PERSPECTIVE DCL IN[4], GENERIC[5], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[1] DCL TEMP[0..4] IMM FLT32 { 2.0000, 1.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[0], SAMP[0], 2D 1: MOV TEMP[0].x, TEMP[0].wwww 2: MAD TEMP[1], TEMP[0], IMM[0].xxxx, -IMM[0].yyyy 3: MOV TEMP[1].z, IMM[0].zzzz 4: DP3 TEMP[0].x, TEMP[1], TEMP[1] 5: ADD TEMP[0].x, IMM[0].yyyy, -TEMP[0].xxxx 6: RSQ TEMP[0].x, TEMP[0].xxxx 7: RCP TEMP[1].z, TEMP[0].xxxx 8: DP3 TEMP[0].x, TEMP[1], IN[2] 9: DP3 TEMP[0].y, TEMP[1], IN[3] 10: DP3 TEMP[0].z, TEMP[1], IN[4] 11: DP3 TEMP[2].w, IN[1], IN[1] 12: RSQ TEMP[2].w, TEMP[2].wwww 13: MUL TEMP[2], IN[1], TEMP[2].wwww 14: DP3 TEMP[1], TEMP[2], TEMP[0] 15: MUL TEMP[1], TEMP[1], IMM[0].xxxx 16: MAD TEMP[3], -TEMP[0], TEMP[1].xxxx, TEMP[2] 17: DP3_SAT TEMP[0], -TEMP[2], TEMP[0] 18: SUB TEMP[0], IMM[0].yyyy, TEMP[0] 19: POW TEMP[4], TEMP[0].xxxx, CONST[1].xxxx 20: TEX TEMP[3], TEMP[3], SAMP[1], CUBE 21: TEX TEMP[1], IN[0], SAMP[2], 2D 22: MUL OUT[0].xyz, TEMP[3], CONST[1].yyyy 23: ADD TEMP[4], TEMP[4], CONST[1].zzzz 24: MUL OUT[0].w, TEMP[1].xxxx, TEMP[4] 25: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[2].xxxx, -const[2].yyyy; 3: MOV temp[1].z, const[2].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[2].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[2].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[2].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: TEX temp[1], input[0], 2D[2]; 22: MUL output[0].xyz, temp[3], const[1].yyyy; 23: ADD temp[4], temp[4], const[1].zzzz; 24: MUL output[0].w, temp[1].xxxx, temp[4]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[2].xxxx, -const[2].yyyy; 3: MOV temp[1].z, const[2].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[2].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[2].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[2].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: TEX temp[1], input[0], 2D[2]; 22: MUL output[0].xyz, temp[3], const[1].yyyy; 23: ADD temp[4], temp[4], const[1].zzzz; 24: MUL output[0].w, temp[1].xxxx, temp[4]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[2].xxxx, -const[2].yyyy; 3: MOV temp[1].z, const[2].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[2].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[2].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[2].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: TEX temp[1], input[0], 2D[2]; 22: MUL output[0].xyz, temp[3], const[1].yyyy; 23: ADD temp[4], temp[4], const[1].zzzz; 24: MUL output[0].w, temp[1].xxxx, temp[4]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[2].xxxx, -const[2].yyyy; 3: MOV temp[1].z, const[2].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[2].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[2].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[2].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: TEX temp[1], input[0], 2D[2]; 22: MUL output[0].xyz, temp[3], const[1].yyyy; 23: ADD temp[4], temp[4], const[1].zzzz; 24: MUL output[0].w, temp[1].xxxx, temp[4]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[2].xxxx, -const[2].yyyy; 3: MOV temp[1].z, const[2].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[2].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[2].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[2].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: TEX temp[1], input[0], 2D[2]; 22: MUL output[0].xyz, temp[3], const[1].yyyy; 23: ADD temp[4], temp[4], const[1].zzzz; 24: MUL output[0].w, temp[1].xxxx, temp[4]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[2].xxxx, -const[2].yyyy; 3: MOV temp[1].z, const[2].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[2].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[2].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[2].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: TEX temp[1], input[0], 2D[2]; 22: MUL_SAT output[0].xyz, temp[3], const[1].yyyy; 23: ADD temp[4], temp[4], const[1].zzzz; 24: MUL_SAT output[0].w, temp[1].xxxx, temp[4]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[2].xxxx, -const[2].yyyy; 3: MOV temp[1].z, const[2].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[2].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, temp[0].xxxx; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, temp[2].wwww; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[2].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: SUB temp[0], const[2].yyyy, temp[0]; 19: POW temp[4], temp[0].xxxx, const[1].xxxx; 20: TEX temp[3], temp[3], CUBE[1]; 21: TEX temp[1], input[0], 2D[2]; 22: MUL_SAT output[0].xyz, temp[3], const[1].yyyy; 23: ADD temp[4], temp[4], const[1].zzzz; 24: MUL_SAT output[0].w, temp[1].xxxx, temp[4]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0], 2D[0]; 1: MOV temp[0].x, temp[0].wwww; 2: MAD temp[1], temp[0], const[2].xxxx, -const[2].yyyy; 3: MOV temp[1].z, const[2].zzzz; 4: DP3 temp[0].x, temp[1], temp[1]; 5: ADD temp[0].x, const[2].yyyy, -temp[0].xxxx; 6: RSQ temp[0].x, |temp[0].xxxx|; 7: RCP temp[1].z, temp[0].xxxx; 8: DP3 temp[0].x, temp[1], input[2]; 9: DP3 temp[0].y, temp[1], input[3]; 10: DP3 temp[0].z, temp[1], input[4]; 11: DP3 temp[2].w, input[1], input[1]; 12: RSQ temp[2].w, |temp[2].wwww|; 13: MUL temp[2], input[1], temp[2].wwww; 14: DP3 temp[1], temp[2], temp[0]; 15: MUL temp[1], temp[1], const[2].xxxx; 16: MAD temp[3], -temp[0], temp[1].xxxx, temp[2]; 17: DP3_SAT temp[0], -temp[2], temp[0]; 18: ADD temp[0], const[2].yyyy, -temp[0]; 19: LG2 temp[4].w, temp[0].xxxx; 20: MUL temp[4].w, temp[4].wwww, const[1].xxxx; 21: EX2 temp[4], temp[4].wwww; 22: TEX temp[3], temp[3], CUBE[1]; 23: TEX temp[1], input[0], 2D[2]; 24: MUL_SAT output[0].xyz, temp[3], const[1].yyyy; 25: ADD temp[4], temp[4], const[1].zzzz; 26: MUL_SAT output[0].w, temp[1].xxxx, temp[4]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[2].xx__, -const[2].yy__; 3: MOV temp[1].z, const[2].__z_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, const[2].y___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[2].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, const[2].y___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[1].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: TEX temp[1].x, input[0].xy__, 2D[2]; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[1].yyy_; 25: ADD temp[4].w, temp[4].___w, const[1].___z; 26: MUL_SAT output[0].w, temp[1].___x, temp[4].___w; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[2].xx__, -const[2].yy__; 3: MOV temp[1].z, const[2].__z_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, const[2].y___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[2].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, const[2].y___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[1].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: TEX temp[1].x, input[0].xy__, 2D[2]; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[1].yyy_; 25: ADD temp[4].w, temp[4].___w, const[1].___z; 26: MUL_SAT output[0].w, temp[1].___x, temp[4].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[2].xx__, -none.11__; 3: MOV temp[1].z, none.__0_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, none.1___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[2].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, none.1___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[1].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: TEX temp[1].x, input[0].xy__, 2D[2]; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[1].yyy_; 25: ADD temp[4].w, temp[4].___w, const[1].___z; 26: MUL_SAT output[0].w, temp[1].___x, temp[4].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[2].xx__, -none.11__; 3: MOV temp[1].z, none.__0_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, none.1___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[2].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, none.1___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[1].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: TEX temp[1].x, input[0].xy__, 2D[2]; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[1].yyy_; 25: ADD temp[4].w, temp[4].___w, const[1].___z; 26: MUL_SAT output[0].w, temp[1].___x, temp[4].___w; CONST[1] = { 2.0000 1.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[1].xx__, -none.11__; 3: MOV temp[1].z, none.__0_; 4: DP3 temp[0].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[0].x, none.1___, -temp[0].x___; 6: RSQ temp[0].x, |temp[0].x___|; 7: RCP temp[1].z, temp[0].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[2].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[2].w, |temp[2].w___|; 13: MUL temp[2].xyz, input[1].xyz_, temp[2].www_; 14: DP3 temp[1].x, temp[2].xyz_, temp[0].xyz_; 15: MUL temp[1].x, temp[1].x___, const[1].x___; 16: MAD temp[3].xyz, -temp[0].xyz_, temp[1].xxx_, temp[2].xyz_; 17: DP3_SAT temp[0].x, -temp[2].xyz_, temp[0].xyz_; 18: ADD temp[0].x, none.1___, -temp[0].x___; 19: LG2 temp[4].w, temp[0].x___; 20: MUL temp[4].w, temp[4].___w, const[0].___x; 21: EX2 temp[4].w, temp[4].w___; 22: TEX temp[3].xyz, temp[3].xyz_, CUBE[1]; 23: TEX temp[1].x, input[0].xy__, 2D[2]; 24: MUL_SAT output[0].xyz, temp[3].xyz_, const[0].yyy_; 25: ADD temp[4].w, temp[4].___w, const[0].___z; 26: MUL_SAT output[0].w, temp[1].___x, temp[4].___w; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: MOV temp[0].x, temp[0].w___; 2: MAD temp[1].xy, temp[0].xy__, const[1].xx__, -none.11__; 3: MOV temp[1].z, none.__0_; 4: DP3 temp[5].x, temp[1].xyz_, temp[1].xyz_; 5: ADD temp[6].x, none.1___, -temp[5].x___; 6: RSQ temp[7].x, |temp[6].x___|; 7: RCP temp[1].z, temp[7].x___; 8: DP3 temp[0].x, temp[1].xyz_, input[2].xyz_; 9: DP3 temp[0].y, temp[1].xyz_, input[3].xyz_; 10: DP3 temp[0].z, temp[1].xyz_, input[4].xyz_; 11: DP3 temp[8].w, input[1].xyz_, input[1].xyz_; 12: RSQ temp[9].w, |temp[8].w___|; 13: MUL temp[10].xyz, input[1].xyz_, temp[9].www_; 14: DP3 temp[11].x, temp[10].xyz_, temp[0].xyz_; 15: MUL temp[12].x, temp[11].x___, const[1].x___; 16: MAD temp[13].xyz, -temp[0].xyz_, temp[12].xxx_, temp[10].xyz_; 17: DP3_SAT temp[14].x, -temp[10].xyz_, temp[0].xyz_; 18: ADD temp[15].x, none.1___, -temp[14].x___; 19: LG2 temp[16].w, temp[15].x___; 20: MUL temp[17].w, temp[16].___w, const[0].___x; 21: EX2 temp[18].w, temp[17].w___; 22: TEX temp[19].xyz, temp[13].xyz_, CUBE[1]; 23: TEX temp[20].x, input[0].xy__, 2D[2]; 24: MUL_SAT output[0].xyz, temp[19].xyz_, const[0].yyy_; 25: ADD temp[21].w, temp[18].___w, const[0].___z; 26: MUL_SAT output[0].w, temp[20].___x, temp[21].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0].yw, input[0].xy__, 2D[0]; 1: src0.w = temp[0] MAD temp[0].x, src0.w__, src0.111, src0.000 2: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 3: MAD temp[1].z, src0.__0, src0.111, src0.000 4: src0.xyz = temp[1] DP3 temp[5].x, src0.xyz, src0.xyz 5: src0.xyz = temp[5] MAD temp[6].x, src0.1__, src0.111, -src0.x__ 6: src0.xyz = temp[6] REPL_ALPHA temp[7].x RSQ, |src0.x| 7: src0.xyz = temp[7] REPL_ALPHA temp[1].z RCP, src0.x 8: src0.xyz = temp[1], src1.xyz = input[2] DP3 temp[0].x, src0.xyz, src1.xyz 9: src0.xyz = temp[1], src1.xyz = input[3] DP3 temp[0].y, src0.xyz, src1.xyz 10: src0.xyz = temp[1], src1.xyz = input[4] DP3 temp[0].z, src0.xyz, src1.xyz 11: src0.xyz = input[1] DP3, src0.xyz, src0.xyz DP3 temp[8].w, src0._, src0._ 12: src0.w = temp[8] RSQ temp[9].w, |src0.w| 13: src0.xyz = input[1], src0.w = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 14: src0.xyz = temp[10], src1.xyz = temp[0] DP3 temp[11].x, src0.xyz, src1.xyz 15: src0.xyz = temp[11], src1.xyz = const[1] MAD temp[12].x, src0.x__, src1.x__, src0.000 16: src0.xyz = temp[0], src1.xyz = temp[12], src2.xyz = temp[10] MAD temp[13].xyz, -src0.xyz, src1.xxx, src2.xyz 17: src0.xyz = temp[10], src1.xyz = temp[0] DP3_SAT temp[14].x, -src0.xyz, src1.xyz 18: src0.xyz = temp[14] MAD temp[15].x, src0.1__, src0.111, -src0.x__ 19: src0.xyz = temp[15] LG2 temp[16].w, src0.x 20: src0.xyz = const[0], src0.w = temp[16] MAD temp[17].w, src0.w, src0.x, src0.0 21: src0.w = temp[17] EX2 temp[18].w, src0.w 22: TEX temp[19].xyz, temp[13].xyz_, CUBE[1]; 23: TEX temp[20].x, input[0].xy__, 2D[2]; 24: src0.xyz = temp[19], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.yyy, src0.000 25: src0.xyz = const[0], src0.w = temp[18] MAD temp[21].w, src0.w, src0.1, src0.z 26: src0.xyz = temp[20], src0.w = temp[21] MAD_SAT color[0].w, src0.x, src0.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].yw, input[0].xy__, 2D[0]; 2: TEX temp[20].x, input[0].xy__, 2D[2]; 3: src0.xyz = input[1] DP3, src0.xyz, src0.xyz DP3 temp[8].w, src0._, src0._ 4: src0.w = temp[0], src1.w = temp[8] MAD temp[0].x, src0.w__, src0.111, src0.000 RSQ temp[9].w, |src1.w| 5: src0.xyz = input[1], src0.w = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 6: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 7: MAD temp[1].z, src0.__0, src0.111, src0.000 8: src0.xyz = temp[1] DP3 temp[5].x, src0.xyz, src0.xyz 9: src0.xyz = temp[5] MAD temp[6].x, src0.1__, src0.111, -src0.x__ 10: src0.xyz = temp[6] REPL_ALPHA temp[7].x RSQ, |src0.x| 11: src0.xyz = temp[7] REPL_ALPHA temp[1].z RCP, src0.x 12: src0.xyz = temp[1], src1.xyz = input[2] DP3 temp[0].x, src0.xyz, src1.xyz 13: src0.xyz = temp[1], src1.xyz = input[3] DP3 temp[0].y, src0.xyz, src1.xyz 14: src0.xyz = temp[1], src1.xyz = input[4] DP3 temp[0].z, src0.xyz, src1.xyz 15: src0.xyz = temp[10], src1.xyz = temp[0] DP3 temp[11].x, src0.xyz, src1.xyz 16: src0.xyz = temp[11], src1.xyz = const[1] MAD temp[12].x, src0.x__, src1.x__, src0.000 17: src0.xyz = temp[0], src1.xyz = temp[12], src2.xyz = temp[10] MAD temp[13].xyz, -src0.xyz, src1.xxx, src2.xyz 18: src0.xyz = temp[10], src1.xyz = temp[0] DP3_SAT temp[14].x, -src0.xyz, src1.xyz 19: src0.xyz = temp[14] MAD temp[15].x, src0.1__, src0.111, -src0.x__ 20: src0.xyz = temp[15] LG2 temp[16].w, src0.x 21: src0.xyz = const[0], src0.w = temp[16] MAD temp[17].w, src0.w, src0.x, src0.0 22: src0.w = temp[17] EX2 temp[18].w, src0.w 23: src0.xyz = const[0], src0.w = temp[18] MAD temp[21].w, src0.w, src0.1, src0.z 24: src0.xyz = temp[20], src0.w = temp[21] MAD_SAT color[0].w, src0.x, src0.w, src0.0 25: BEGIN_TEX; 26: TEX temp[19].xyz, temp[13].xyz_, CUBE[1]; 27: src0.xyz = temp[19], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.yyy, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].yw, input[0].xy__, 2D[0]; 2: TEX temp[20].x, input[0].xy__, 2D[2]; 3: src0.xyz = input[1] DP3, src0.xyz, src0.xyz DP3 temp[8].w, src0._, src0._ 4: src0.w = temp[0], src1.w = temp[8] MAD temp[0].x, src0.w__, src0.111, src0.000 RSQ temp[9].w, |src1.w| 5: src0.xyz = input[1], src0.w = temp[9] MAD temp[10].xyz, src0.xyz, src0.www, src0.000 6: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 7: MAD temp[1].z, src0.__0, src0.111, src0.000 8: src0.xyz = temp[1] DP3 temp[5].x, src0.xyz, src0.xyz 9: src0.xyz = temp[5] MAD temp[6].x, src0.1__, src0.111, -src0.x__ 10: src0.xyz = temp[6] REPL_ALPHA temp[7].x RSQ, |src0.x| 11: src0.xyz = temp[7] REPL_ALPHA temp[1].z RCP, src0.x 12: src0.xyz = temp[1], src1.xyz = input[2] DP3 temp[0].x, src0.xyz, src1.xyz 13: src0.xyz = temp[1], src1.xyz = input[3] DP3 temp[0].y, src0.xyz, src1.xyz 14: src0.xyz = temp[1], src1.xyz = input[4] DP3 temp[0].z, src0.xyz, src1.xyz 15: src0.xyz = temp[10], src1.xyz = temp[0] DP3 temp[11].x, src0.xyz, src1.xyz 16: src0.xyz = temp[11], src1.xyz = const[1] MAD temp[12].x, src0.x__, src1.x__, src0.000 17: src0.xyz = temp[0], src1.xyz = temp[12], src2.xyz = temp[10] MAD temp[13].xyz, -src0.xyz, src1.xxx, src2.xyz 18: src0.xyz = temp[10], src1.xyz = temp[0] DP3_SAT temp[14].x, -src0.xyz, src1.xyz 19: src0.xyz = temp[14] MAD temp[15].x, src0.1__, src0.111, -src0.x__ 20: src0.xyz = temp[15] LG2 temp[16].w, src0.x 21: src0.xyz = const[0], src0.w = temp[16] MAD temp[17].w, src0.w, src0.x, src0.0 22: src0.w = temp[17] EX2 temp[18].w, src0.w 23: src0.xyz = const[0], src0.w = temp[18] MAD temp[21].w, src0.w, src0.1, src0.z 24: src0.xyz = temp[20], src0.w = temp[21] MAD_SAT color[0].w, src0.x, src0.w, src0.0 25: BEGIN_TEX; 26: TEX temp[19].xyz, temp[13].xyz_, CUBE[1]; 27: src0.xyz = temp[19], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.yyy, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5].yw, input[0].xy__, 2D[0]; 2: TEX temp[0].x, input[0].xy__, 2D[2]; 3: src0.xyz = input[1] DP3, src0.xyz, src0.xyz DP3 temp[1].w, src0._, src0._ 4: src0.w = temp[5], src1.w = temp[1] MAD temp[5].x, src0.w__, src0.11_, src0.00_ RSQ temp[1].w, |src1.w| 5: src0.xyz = input[1], src0.w = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 6: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[5].xy, src0.xy_, src1.xx_, -src0.11_ 7: MAD temp[5].z, src0.__0, src0.111, src0.000 8: src0.xyz = temp[5] DP3 temp[6].x, src0.xyz, src0.xyz 9: src0.xyz = temp[6] MAD temp[6].x, src0.1__, src0.1__, -src0.x__ 10: src0.xyz = temp[6] REPL_ALPHA temp[6].x RSQ, |src0.x| 11: src0.xyz = temp[6] REPL_ALPHA temp[5].z RCP, src0.x 12: src0.xyz = temp[5], src1.xyz = input[2] DP3 temp[2].x, src0.xyz, src1.xyz 13: src0.xyz = temp[5], src1.xyz = input[3] DP3 temp[2].y, src0.xyz, src1.xyz 14: src0.xyz = temp[5], src1.xyz = input[4] DP3 temp[2].z, src0.xyz, src1.xyz 15: src0.xyz = temp[1], src1.xyz = temp[2] DP3 temp[3].x, src0.xyz, src1.xyz 16: src0.xyz = temp[3], src1.xyz = const[1] MAD temp[3].x, src0.x__, src1.x__, src0.0__ 17: src0.xyz = temp[2], src1.xyz = temp[3], src2.xyz = temp[1] MAD temp[3].xyz, -src0.xyz, src1.xxx, src2.xyz 18: src0.xyz = temp[1], src1.xyz = temp[2] DP3_SAT temp[1].x, -src0.xyz, src1.xyz 19: src0.xyz = temp[1] MAD temp[1].x, src0.1__, src0.1__, -src0.x__ 20: src0.xyz = temp[1] LG2 temp[1].w, src0.x 21: src0.xyz = const[0], src0.w = temp[1] MAD temp[1].w, src0.w, src0.x, src0.0 22: src0.w = temp[1] EX2 temp[1].w, src0.w 23: src0.xyz = const[0], src0.w = temp[1] MAD temp[1].w, src0.w, src0.1, src0.z 24: src0.xyz = temp[0], src0.w = temp[1] MAD_SAT color[0].w, src0.x, src0.w, src0.0 25: BEGIN_TEX; 26: TEX temp[0].xyz, temp[3].xyz_, CUBE[1]; 27: src0.xyz = temp[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.yyy, src0.000 pc=51************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 21, tex_end: 1 (code_addr: 00420540) TEX: TEX t5, t0, texture[0] (00008140) TEX t0, t0, texture[2] (00009000) 0: xyz: t1 t0 t0 bias-> (00000001) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz t1.xyz t1.xxx op: 00804000 w: 1.0 1.0 t1.x op: 00800891 1: xyz: t0 t0 t0 bias-> t5.x (00940000) w: t5 t1 t0 bias-> t1.w (00840045) xyz: t5.www 1.0 0.0 op: 00050a8c w: |t1.w| t0.x t0.x op: 0580004a 2: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t1 t0 t0 bias-> (00000001) xyz: t1.xyz t1.www 0.0 op: 00050600 w: t1.x t1.x t1.x op: 00000000 3: xyz: t5 c1 t0 bias-> t5.xy (01940845) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c1.xxx -1.0 op: 000d4280 w: t5.x t5.x t5.x op: 00000000 4: xyz: t0 t0 t0 bias-> t5.z (02140000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 5: xyz: t5 t0 t0 bias-> t6.x (00980005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t5.xyz t5.xxx op: 00804000 w: t5.x t5.x t5.x op: 00000000 6: xyz: t6 t0 t0 bias-> t6.x (00980006) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t6.xyz op: 00080a95 w: t6.x t6.x t6.x op: 00000000 7: xyz: t6 t0 t0 bias-> t6.x (00980006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xxx t6.xxx t6.xxx op: 05004081 w: |t6.x| t6.x t6.x op: 05800040 8: xyz: t6 t0 t0 bias-> t5.z (02140006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xxx t6.xxx t6.xxx op: 05004081 w: t6.x t6.x t6.x op: 05000000 9: xyz: t5 t2 t0 bias-> t2.x (00880085) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t2.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 10: xyz: t5 t3 t0 bias-> t2.y (010800c5) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t3.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 11: xyz: t5 t4 t0 bias-> t2.z (02080105) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t4.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 12: xyz: t1 t2 t0 bias-> t3.x (008c0081) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t2.xyz t1.xxx op: 00804200 w: t1.x t1.x t1.x op: 00000000 13: xyz: t3 c1 t0 bias-> t3.x (008c0843) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c1.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 14: xyz: t2 t3 t1 bias-> t3.xyz (038c10c2) w: t0 t0 t0 bias-> (00000000) xyz: -t2.xyz t3.xxx t1.xyz op: 000202a0 w: t2.x t2.x t2.x op: 00000000 15: xyz: t1 t2 t0 bias-> t1.x (00840081) w: t0 t0 t0 bias-> (00000000) xyz: -t1.xyz t2.xyz t1.xxx op: 40804220 w: t1.x t1.x t1.x op: 00000000 16: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 17: 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 18: 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 19: 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: 04000009 20: 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 1.0 c0.z op: 00008889 21: xyz: t0 t0 t0 bias-> (00000000) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.x t1.w 0.0 op: 40040480 NODE 1: alu_offset: 22, tex_offset: 2, alu_end: 0, tex_end: 0 (code_addr: 00402016) TEX: TEX t0, t3, texture[1] (00008803) 22: xyz: t0 c0 t0 bias-> o0.xyz (1c000800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.yyy 0.0 op: 40050300 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL CONST[4..7] DCL TEMP[0..7] IMM FLT32 { 2.0000, -1.0000, 1.0000, 4.0000} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.0000} 0: TEX TEMP[0], IN[6], SAMP[0], 2D 1: DP3 TEMP[1].x, IN[8], IN[8] 2: RSQ TEMP[1].x, TEMP[1].xxxx 3: MUL TEMP[1], TEMP[1].xxxx, IN[8] 4: DP3 TEMP[2].x, IN[2], IN[2] 5: RSQ TEMP[2].x, TEMP[2].xxxx 6: MUL TEMP[2], TEMP[2].xxxx, IN[2] 7: TEX TEMP[3], IN[3], SAMP[2], 2D 8: MOV TEMP[3].x, TEMP[3].wwww 9: MAD TEMP[3], TEMP[3], IMM[0].xxxx, IMM[0].yyyy 10: MOV TEMP[3].z, IMM[1].wwww 11: DP3 TEMP[4].x, TEMP[3], TEMP[3] 12: ADD TEMP[4].x, IMM[2].xxxx, -TEMP[4].xxxx 13: RSQ TEMP[4].x, TEMP[4].xxxx 14: RCP TEMP[3].z, TEMP[4].xxxx 15: DP3_SAT TEMP[2].x, TEMP[2], TEMP[3] 16: TXP TEMP[4], IN[5], SAMP[3], 2D 17: MUL TEMP[2], TEMP[2].xxxx, TEMP[4] 18: TEX TEMP[4].x, IN[4], SAMP[4], 2D 19: MUL TEMP[2], TEMP[2], TEMP[4].xxxx 20: MUL TEMP[0], TEMP[0], IN[0] 21: MUL TEMP[5], TEMP[0], CONST[4] 22: DP3 TEMP[1].x, TEMP[1], TEMP[3] 23: MAD_SAT TEMP[4].x, TEMP[1].xxxx, IMM[2].yyyy, -IMM[2].zzzz 24: MUL TEMP[4].x, TEMP[4].xxxx, TEMP[4].xxxx 25: MUL TEMP[4], TEMP[4].xxxx, CONST[5] 26: TEX TEMP[6], IN[7], SAMP[5], 2D 27: ADD TEMP[6], TEMP[6], TEMP[6] 28: MAD TEMP[5], TEMP[4], TEMP[6], TEMP[5] 29: MUL TEMP[7].xyz, TEMP[2], TEMP[5] 30: MAD TEMP[7].xyz, TEMP[0], CONST[6], TEMP[7] 31: TEX TEMP[4], IN[6], SAMP[6], 2D 32: ADD TEMP[7], TEMP[4], TEMP[7] 33: LRP OUT[0].xyz, IN[1].xxxx, CONST[7], TEMP[7] 34: MUL TEMP[4], TEMP[4], TEMP[6] 35: MUL TEMP[4], TEMP[4], TEMP[2] 36: DP3 OUT[0].w, TEMP[4], IMM[1] 37: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: LRP output[0].xyz, input[1].xxxx, const[7], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3 output[0].w, temp[4], const[9]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: LRP_SAT output[0].xyz, input[1].xxxx, const[7], temp[7]; 34: MUL temp[4], temp[4], temp[6]; 35: MUL temp[4], temp[4], temp[2]; 36: DP3_SAT output[0].w, temp[4], const[9]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: MUL temp[0], temp[0], input[0]; 22: MUL temp[5], temp[0], const[4]; 23: DP3 temp[1].x, temp[1], temp[3]; 24: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 25: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 26: MUL temp[4], temp[4].xxxx, const[5]; 27: TEX temp[6], input[7], 2D[5]; 28: ADD temp[6], temp[6], temp[6]; 29: MAD temp[5], temp[4], temp[6], temp[5]; 30: MUL temp[7].xyz, temp[2], temp[5]; 31: MAD temp[7].xyz, temp[0], const[6], temp[7]; 32: TEX temp[4], input[6], 2D[6]; 33: ADD temp[7], temp[4], temp[7]; 34: LRP_SAT output[0].xyz, input[1].xxxx, const[7], temp[7]; 35: MUL temp[4], temp[4], temp[6]; 36: MUL temp[4], temp[4], temp[2]; 37: DP3_SAT output[0].w, temp[4], const[9]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, |temp[1].xxxx|; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, |temp[2].xxxx|; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[8].xxxx, const[8].yyyy; 10: MOV temp[3].z, const[9].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[10].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, |temp[4].xxxx|; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: MUL temp[0], temp[0], input[0]; 22: MUL temp[5], temp[0], const[4]; 23: DP3 temp[1].x, temp[1], temp[3]; 24: MAD_SAT temp[4].x, temp[1].xxxx, const[10].yyyy, -const[10].zzzz; 25: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 26: MUL temp[4], temp[4].xxxx, const[5]; 27: TEX temp[6], input[7], 2D[5]; 28: ADD temp[6], temp[6], temp[6]; 29: MAD temp[5], temp[4], temp[6], temp[5]; 30: MUL temp[7].xyz, temp[2], temp[5]; 31: MAD temp[7].xyz, temp[0], const[6], temp[7]; 32: TEX temp[4], input[6], 2D[6]; 33: ADD temp[7], temp[4], temp[7]; 34: ADD temp[9].xyz, const[7], -temp[7]; 35: MAD_SAT output[0].xyz, input[1].xxxx, temp[9], temp[7]; 36: MUL temp[4], temp[4], temp[6]; 37: MUL temp[4], temp[4], temp[2]; 38: DP3_SAT output[0].w, temp[4], const[9]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[8].xx__, const[8].yy__; 10: MOV temp[3].z, const[9].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[10].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 22: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 23: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 24: MAD_SAT temp[4].x, temp[1].x___, const[10].y___, -const[10].z___; 25: MUL temp[4].x, temp[4].x___, temp[4].x___; 26: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 27: TEX temp[6].xyz, input[7].xy__, 2D[5]; 28: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 29: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 30: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 31: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 32: TEX temp[4].xyz, input[6].xy__, 2D[6]; 33: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 34: ADD temp[9].xyz, const[7].xyz_, -temp[7].xyz_; 35: MAD_SAT output[0].xyz, input[1].xxx_, temp[9].xyz_, temp[7].xyz_; 36: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 37: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 38: DP3_SAT output[0].w, temp[4].xyz_, const[9].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[8].xx__, const[8].yy__; 10: MOV temp[3].z, const[9].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[10].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 22: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 23: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 24: MAD_SAT temp[4].x, temp[1].x___, const[10].y___, -const[10].z___; 25: MUL temp[4].x, temp[4].x___, temp[4].x___; 26: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 27: TEX temp[6].xyz, input[7].xy__, 2D[5]; 28: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 29: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 30: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 31: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 32: TEX temp[4].xyz, input[6].xy__, 2D[6]; 33: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 34: ADD temp[9].xyz, const[7].xyz_, -temp[7].xyz_; 35: MAD_SAT output[0].xyz, input[1].xxx_, temp[9].xyz_, temp[7].xyz_; 36: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 37: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 38: DP3_SAT output[0].w, temp[4].xyz_, const[9].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[8].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[10].y___, -const[10].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 31: TEX temp[4].xyz, input[6].xy__, 2D[6]; 32: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 33: MAD_SAT output[0].xyz, input[1].xxx_, (const[7] - temp[7]).xyz_, temp[7].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 35: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 36: DP3_SAT output[0].w, temp[4].xyz_, const[9].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[8].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[10].y___, -const[10].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 31: TEX temp[4].xyz, input[6].xy__, 2D[6]; 32: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 33: MAD_SAT output[0].xyz, input[1].xxx_, (const[7] - temp[7]).xyz_, temp[7].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 35: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 36: DP3_SAT output[0].w, temp[4].xyz_, const[9].xyz_; CONST[4] = { 2.0000 -1.0000 1.0000 4.0000 } CONST[5] = { 0.3000 0.5900 0.1100 0.0000 } CONST[6] = { 1.0000 4.0000 3.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[4].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[0].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[6].y___, -const[6].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[1].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: MAD temp[7].xyz, temp[0].xyz_, const[2].xyz_, temp[7].xyz_; 31: TEX temp[4].xyz, input[6].xy__, 2D[6]; 32: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 33: MAD_SAT output[0].xyz, input[1].xxx_, (const[3] - temp[7]).xyz_, temp[7].xyz_; 34: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 35: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 36: DP3_SAT output[0].w, temp[4].xyz_, const[5].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[9].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[10].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[11].x, |temp[10].x___|; 3: MUL temp[12].xyz, temp[11].xxx_, input[8].xyz_; 4: DP3 temp[13].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[14].x, |temp[13].x___|; 6: MUL temp[15].xyz, temp[14].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[4].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[16].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[17].x, none.1___, -temp[16].x___; 13: RSQ temp[18].x, |temp[17].x___|; 14: RCP temp[3].z, temp[18].x___; 15: DP3_SAT temp[19].x, temp[15].xyz_, temp[3].xyz_; 16: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[21].xyz, temp[19].xxx_, temp[20].xyz_; 18: TEX temp[22].x, input[4].xy__, 2D[4]; 19: MUL temp[23].xyz, temp[21].xyz_, temp[22].xxx_; 20: MUL temp[24].xyz, temp[9].xyz_, input[0].xyz_; 21: MUL temp[25].xyz, temp[24].xyz_, const[0].xyz_; 22: DP3 temp[26].x, temp[12].xyz_, temp[3].xyz_; 23: MAD_SAT temp[27].x, temp[26].x___, const[6].y___, -const[6].z___; 24: MUL temp[28].x, temp[27].x___, temp[27].x___; 25: MUL temp[29].xyz, temp[28].xxx_, const[1].xyz_; 26: TEX temp[30].xyz, input[7].xy__, 2D[5]; 27: ADD temp[31].xyz, temp[30].xyz_, temp[30].xyz_; 28: MAD temp[32].xyz, temp[29].xyz_, temp[31].xyz_, temp[25].xyz_; 29: MUL temp[33].xyz, temp[23].xyz_, temp[32].xyz_; 30: MAD temp[34].xyz, temp[24].xyz_, const[2].xyz_, temp[33].xyz_; 31: TEX temp[35].xyz, input[6].xy__, 2D[6]; 32: ADD temp[36].xyz, temp[35].xyz_, temp[34].xyz_; 33: MAD_SAT output[0].xyz, input[1].xxx_, (const[3] - temp[36]).xyz_, temp[36].xyz_; 34: MUL temp[37].xyz, temp[35].xyz_, temp[31].xyz_; 35: MUL temp[38].xyz, temp[37].xyz_, temp[23].xyz_; 36: DP3_SAT output[0].w, temp[38].xyz_, const[5].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[9].xyz, input[6].xy__, 2D[0]; 1: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 2: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 3: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = input[2] DP3 temp[13].x, src0.xyz, src0.xyz 5: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 6: src0.xyz = temp[14], src1.xyz = input[2] MAD temp[15].xyz, src0.xxx, src1.xyz, src0.000 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: MAD temp[3].z, src0.__0, src0.111, src0.000 11: src0.xyz = temp[3] DP3 temp[16].x, src0.xyz, src0.xyz 12: src0.xyz = temp[16] MAD temp[17].x, src0.1__, src0.111, -src0.x__ 13: src0.xyz = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.x| 14: src0.xyz = temp[18] REPL_ALPHA temp[3].z RCP, src0.x 15: src0.xyz = temp[15], src1.xyz = temp[3] DP3_SAT temp[19].x, src0.xyz, src1.xyz 16: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 17: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 18: TEX temp[22].x, input[4].xy__, 2D[4]; 19: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 20: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 21: src0.xyz = temp[24], src1.xyz = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[12], src1.xyz = temp[3] DP3 temp[26].x, src0.xyz, src1.xyz 23: src0.xyz = temp[26], src1.xyz = const[6] MAD_SAT temp[27].x, src0.x__, src1.y__, -src1.z__ 24: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 25: src0.xyz = temp[28], src1.xyz = const[1] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 26: TEX temp[30].xyz, input[7].xy__, 2D[5]; 27: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, src0.xyz 28: src0.xyz = temp[29], src1.xyz = temp[31], src2.xyz = temp[25] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[23], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[24], src1.xyz = const[2], src2.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 31: TEX temp[35].xyz, input[6].xy__, 2D[6]; 32: src0.xyz = temp[35], src1.xyz = temp[34] MAD temp[36].xyz, src0.xyz, src0.111, src1.xyz 33: src0.xyz = temp[36], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 34: src0.xyz = temp[35], src1.xyz = temp[31] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 35: src0.xyz = temp[37], src1.xyz = temp[23] MAD temp[38].xyz, src0.xyz, src1.xyz, src0.000 36: src0.xyz = temp[38], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[22].x, input[4].xy__, 2D[4]; 5: TEX temp[30].xyz, input[7].xy__, 2D[5]; 6: TEX temp[35].xyz, input[6].xy__, 2D[6]; 7: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, src0.xyz 8: src0.xyz = temp[35], src1.xyz = temp[31] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 9: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 10: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 11: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 12: src0.xyz = temp[24], src1.xyz = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 13: MAD temp[3].z, src0.__0, src0.111, src0.000 14: src0.xyz = temp[3] DP3 temp[16].x, src0.xyz, src0.xyz 15: src0.xyz = input[2], src1.xyz = temp[16] DP3 temp[13].x, src0.xyz, src0.xyz MAD temp[17].w, src0.1, src0.1, -src1.x 16: src0.xyz = temp[17], src0.w = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.w| 17: src0.xyz = temp[18] REPL_ALPHA temp[3].z RCP, src0.x 18: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 19: src0.xyz = temp[14], src1.xyz = input[2] MAD temp[15].xyz, src0.xxx, src1.xyz, src0.000 20: src0.xyz = temp[15], src1.xyz = temp[3] DP3_SAT temp[19].x, src0.xyz, src1.xyz 21: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 22: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 23: src0.xyz = temp[37], src1.xyz = temp[23] MAD temp[38].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[38], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 25: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 26: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 27: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 28: src0.xyz = temp[12], src1.xyz = temp[3] DP3 temp[26].x, src0.xyz, src1.xyz 29: src0.xyz = temp[26], src1.xyz = const[6] MAD_SAT temp[27].x, src0.x__, src1.y__, -src1.z__ 30: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 31: src0.xyz = temp[28], src1.xyz = const[1] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 32: src0.xyz = temp[29], src1.xyz = temp[31], src2.xyz = temp[25] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 33: src0.xyz = temp[23], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[24], src1.xyz = const[2], src2.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 35: src0.xyz = temp[35], src1.xyz = temp[34] MAD temp[36].xyz, src0.xyz, src0.111, src1.xyz 36: src0.xyz = temp[36], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[20].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[22].x, input[4].xy__, 2D[4]; 5: TEX temp[30].xyz, input[7].xy__, 2D[5]; 6: TEX temp[35].xyz, input[6].xy__, 2D[6]; 7: src0.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src0.111, src0.xyz 8: src0.xyz = temp[35], src1.xyz = temp[31] MAD temp[37].xyz, src0.xyz, src1.xyz, src0.000 9: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 10: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 11: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 12: src0.xyz = temp[24], src1.xyz = const[0] MAD temp[25].xyz, src0.xyz, src1.xyz, src0.000 13: MAD temp[3].z, src0.__0, src0.111, src0.000 14: src0.xyz = temp[3] DP3 temp[16].x, src0.xyz, src0.xyz 15: src0.xyz = input[2], src1.xyz = temp[16] DP3 temp[13].x, src0.xyz, src0.xyz MAD temp[17].w, src0.1, src0.1, -src1.x 16: src0.w = temp[17] REPL_ALPHA temp[18].x RSQ, |src0.w| 17: src0.xyz = temp[18] REPL_ALPHA temp[3].z RCP, src0.x 18: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 19: src0.xyz = temp[14], src1.xyz = input[2] MAD temp[15].xyz, src0.xxx, src1.xyz, src0.000 20: src0.xyz = temp[15], src1.xyz = temp[3] DP3_SAT temp[19].x, src0.xyz, src1.xyz 21: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].xyz, src0.xxx, src1.xyz, src0.000 22: src0.xyz = temp[21], src1.xyz = temp[22] MAD temp[23].xyz, src0.xyz, src1.xxx, src0.000 23: src0.xyz = temp[37], src1.xyz = temp[23] MAD temp[38].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[38], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 25: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 26: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 27: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[12].xyz, src0.xxx, src1.xyz, src0.000 28: src0.xyz = temp[12], src1.xyz = temp[3] DP3 temp[26].x, src0.xyz, src1.xyz 29: src0.xyz = temp[26], src1.xyz = const[6] MAD_SAT temp[27].x, src0.x__, src1.y__, -src1.z__ 30: src0.xyz = temp[27] MAD temp[28].x, src0.x__, src0.x__, src0.000 31: src0.xyz = temp[28], src1.xyz = const[1] MAD temp[29].xyz, src0.xxx, src1.xyz, src0.000 32: src0.xyz = temp[29], src1.xyz = temp[31], src2.xyz = temp[25] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 33: src0.xyz = temp[23], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[24], src1.xyz = const[2], src2.xyz = temp[33] MAD temp[34].xyz, src0.xyz, src1.xyz, src2.xyz 35: src0.xyz = temp[35], src1.xyz = temp[34] MAD temp[36].xyz, src0.xyz, src0.111, src1.xyz 36: src0.xyz = temp[36], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[5].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[4].x, input[4].xy__, 2D[4]; 5: TEX temp[7].xyz, input[7].xy__, 2D[5]; 6: TEX temp[6].xyz, input[6].xy__, 2D[6]; 7: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 8: src0.xyz = temp[6], src1.xyz = temp[7] MAD temp[10].xyz, src0.xyz, src1.xyz, src0.000 9: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 10: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 11: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 12: src0.xyz = temp[0], src1.xyz = const[0] MAD temp[9].xyz, src0.xyz, src1.xyz, src0.000 13: MAD temp[3].z, src0.__0, src0.111, src0.000 14: src0.xyz = temp[3] DP3 temp[1].y, src0.xyz, src0.xyz 15: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[0].w, src0.1, src0.1, -src1.y 16: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 17: src0.xyz = temp[1] REPL_ALPHA temp[3].z RCP, src0.z 18: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 19: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 20: src0.xyz = temp[2], src1.xyz = temp[3] DP3_SAT temp[1].y, src0.xyz, src1.xyz 21: src0.xyz = temp[1], src1.xyz = temp[5] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 22: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 23: src0.xyz = temp[10], src1.xyz = temp[2] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[4], src1.xyz = const[5] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ 25: src0.xyz = input[8] DP3 temp[1].y, src0.xyz, src0.xyz 26: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 27: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 28: src0.xyz = temp[4], src1.xyz = temp[3] DP3 temp[1].y, src0.xyz, src1.xyz 29: src0.xyz = temp[1], src1.xyz = const[6] MAD_SAT temp[1].y, src0._y_, src1._y_, -src1._z_ 30: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._y_, src0._0_ 31: src0.xyz = temp[1], src1.xyz = const[1] MAD temp[3].xyz, src0.yyy, src1.xyz, src0.000 32: src0.xyz = temp[3], src1.xyz = temp[7], src2.xyz = temp[9] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 33: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 34: src0.xyz = temp[0], src1.xyz = const[2], src2.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 35: src0.xyz = temp[6], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src1.xyz 36: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz pc=52************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 29, tex_end: 5 (code_addr: 004a0740) TEX: TEX t9, t6, texture[0] (00008246) TEX t3, t3, texture[2] (000090c3) TXP t5, t5, texture[3] (00019945) TEX t4, t4, texture[4] (0000a104) TEX t7, t7, texture[5] (0000a9c7) TEX t6, t6, texture[6] (0000b186) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 1: xyz: t6 t7 t0 bias-> t10.xyz (03a801c6) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t7.xyz 0.0 op: 00050200 w: t6.x t6.x t6.x op: 00000000 2: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 3: xyz: t3 c4 t0 bias-> t3.xy (018c0903) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c4.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 4: xyz: t9 t0 t0 bias-> t0.xyz (03800009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t0.xyz 0.0 op: 00050200 w: t9.x t9.x t9.x op: 00000000 5: xyz: t0 c0 t0 bias-> t9.xyz (03a40800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 t0 t0 bias-> t3.z (020c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 7: xyz: t3 t0 t0 bias-> t1.y (01040003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 8: xyz: t2 t1 t0 bias-> t1.y (01040042) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 1.0 1.0 -t1.y op: 00090891 9: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 10: xyz: t1 t0 t0 bias-> t3.z (020c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 11: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 12: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 13: xyz: t2 t3 t0 bias-> t1.y (010400c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 14: xyz: t1 t5 t0 bias-> t2.xyz (03880141) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t5.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 15: 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 16: xyz: t10 t2 t0 bias-> t4.xyz (0390008a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xyz t2.xyz 0.0 op: 00050200 w: t10.x t10.x t10.x op: 00000000 17: xyz: t4 c5 t0 bias-> (00000944) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t4.xyz c5.xyz t4.xxx op: 40804200 w: 1.0 1.0 t4.x op: 40800891 18: xyz: t8 t0 t0 bias-> t1.y (01040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 19: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 20: xyz: t1 t8 t0 bias-> t4.xyz (03900201) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t8.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 21: xyz: t4 t3 t0 bias-> t1.y (010400c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 22: xyz: t1 c6 t0 bias-> t1.y (01040981) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c6.xyz -c6.zzz op: 4009c200 w: t1.x t1.x t1.x op: 00000000 23: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 24: xyz: t1 c1 t0 bias-> t3.xyz (038c0841) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c1.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 25: xyz: t3 t7 t9 bias-> t3.xyz (038c91c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t7.xyz t9.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 26: 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 27: xyz: t0 c2 t2 bias-> t0.xyz (03802880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c2.xyz t2.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 28: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 1.0 t0.xyz op: 80010a80 NOP w: t6.x t6.x t6.x op: 00000000 29: xyz: t0 c3 t1 sub-> o0.xyz (1c0018c0) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL CONST[4..6] DCL CONST[8..9] DCL TEMP[0..7] IMM FLT32 { 2.0000, -1.0000, 0.0100, 4.0000} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.2000} 0: TEX TEMP[0], IN[6], SAMP[0], 2D 1: DP3 TEMP[1].x, IN[8], IN[8] 2: RSQ TEMP[1].x, TEMP[1].xxxx 3: MUL TEMP[1], TEMP[1].xxxx, IN[8] 4: DP3 TEMP[2].x, IN[2], IN[2] 5: RSQ TEMP[2].x, TEMP[2].xxxx 6: MUL TEMP[2], TEMP[2].xxxx, IN[2] 7: TEX TEMP[3], IN[3], SAMP[2], 2D 8: MOV TEMP[3].x, TEMP[3].wwww 9: MAD TEMP[3], TEMP[3], IMM[0].xxxx, IMM[0].yyyy 10: MOV TEMP[3].z, IMM[1].wwww 11: DP3 TEMP[4].x, TEMP[3], TEMP[3] 12: ADD TEMP[4].x, IMM[2].xxxx, -TEMP[4].xxxx 13: RSQ TEMP[4].x, TEMP[4].xxxx 14: RCP TEMP[3].z, TEMP[4].xxxx 15: DP3_SAT TEMP[2].x, TEMP[2], TEMP[3] 16: TXP TEMP[4], IN[5], SAMP[3], 2D 17: MUL TEMP[2], TEMP[2].xxxx, TEMP[4] 18: TEX TEMP[4].x, IN[4], SAMP[4], 2D 19: MUL TEMP[2], TEMP[2], TEMP[4].xxxx 20: MUL TEMP[0], TEMP[0], IN[0] 21: MUL TEMP[5], TEMP[0], CONST[4] 22: DP3 TEMP[1].x, TEMP[1], TEMP[3] 23: MAD_SAT TEMP[4].x, TEMP[1].xxxx, IMM[2].yyyy, -IMM[2].zzzz 24: MUL TEMP[4].x, TEMP[4].xxxx, TEMP[4].xxxx 25: MUL TEMP[4], TEMP[4].xxxx, CONST[5] 26: TEX TEMP[6], IN[7], SAMP[5], 2D 27: ADD TEMP[6], TEMP[6], TEMP[6] 28: MAD TEMP[5], TEMP[4], TEMP[6], TEMP[5] 29: MUL TEMP[7].xyz, TEMP[2], TEMP[5] 30: MAD TEMP[7].xyz, TEMP[0], CONST[6], TEMP[7] 31: TEX TEMP[4], IN[6], SAMP[6], 2D 32: ADD TEMP[7], TEMP[4], TEMP[7] 33: DP3 TEMP[4], TEMP[1], TEMP[3] 34: TEX TEMP[6], TEMP[4], SAMP[7], 2D 35: MAD TEMP[4], TEMP[4], IMM[2].wwww, IMM[0].zzzz 36: MUL TEMP[6], TEMP[4], TEMP[6] 37: MUL TEMP[6], CONST[8], TEMP[6] 38: ADD TEMP[7], TEMP[7], TEMP[6] 39: LRP OUT[0].xyz, IN[1].xxxx, CONST[9], TEMP[7] 40: MUL TEMP[4], TEMP[4], TEMP[6] 41: MUL TEMP[4], TEMP[4], TEMP[2] 42: DP3 OUT[0].w, TEMP[4], IMM[1] 43: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[10].xxxx, const[10].yyyy; 10: MOV temp[3].z, const[11].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[12].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[12].yyyy, -const[12].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: DP3 temp[4], temp[1], temp[3]; 34: TEX temp[6], temp[4], 2D[7]; 35: MAD temp[4], temp[4], const[12].wwww, const[10].zzzz; 36: MUL temp[6], temp[4], temp[6]; 37: MUL temp[6], const[8], temp[6]; 38: ADD temp[7], temp[7], temp[6]; 39: LRP output[0].xyz, input[1].xxxx, const[9], temp[7]; 40: MUL temp[4], temp[4], temp[6]; 41: MUL temp[4], temp[4], temp[2]; 42: DP3 output[0].w, temp[4], const[11]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[10].xxxx, const[10].yyyy; 10: MOV temp[3].z, const[11].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[12].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[12].yyyy, -const[12].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: DP3 temp[4], temp[1], temp[3]; 34: TEX temp[6], temp[4], 2D[7]; 35: MAD temp[4], temp[4], const[12].wwww, const[10].zzzz; 36: MUL temp[6], temp[4], temp[6]; 37: MUL temp[6], const[8], temp[6]; 38: ADD temp[7], temp[7], temp[6]; 39: LRP output[0].xyz, input[1].xxxx, const[9], temp[7]; 40: MUL temp[4], temp[4], temp[6]; 41: MUL temp[4], temp[4], temp[2]; 42: DP3 output[0].w, temp[4], const[11]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[10].xxxx, const[10].yyyy; 10: MOV temp[3].z, const[11].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[12].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[12].yyyy, -const[12].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: DP3 temp[4], temp[1], temp[3]; 34: TEX temp[6], temp[4], 2D[7]; 35: MAD temp[4], temp[4], const[12].wwww, const[10].zzzz; 36: MUL temp[6], temp[4], temp[6]; 37: MUL temp[6], const[8], temp[6]; 38: ADD temp[7], temp[7], temp[6]; 39: LRP output[0].xyz, input[1].xxxx, const[9], temp[7]; 40: MUL temp[4], temp[4], temp[6]; 41: MUL temp[4], temp[4], temp[2]; 42: DP3 output[0].w, temp[4], const[11]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[10].xxxx, const[10].yyyy; 10: MOV temp[3].z, const[11].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[12].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[12].yyyy, -const[12].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: DP3 temp[4], temp[1], temp[3]; 34: TEX temp[6], temp[4], 2D[7]; 35: MAD temp[4], temp[4], const[12].wwww, const[10].zzzz; 36: MUL temp[6], temp[4], temp[6]; 37: MUL temp[6], const[8], temp[6]; 38: ADD temp[7], temp[7], temp[6]; 39: LRP output[0].xyz, input[1].xxxx, const[9], temp[7]; 40: MUL temp[4], temp[4], temp[6]; 41: MUL temp[4], temp[4], temp[2]; 42: DP3 output[0].w, temp[4], const[11]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[10].xxxx, const[10].yyyy; 10: MOV temp[3].z, const[11].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[12].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[12].yyyy, -const[12].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: DP3 temp[4], temp[1], temp[3]; 34: TEX temp[6], temp[4], 2D[7]; 35: MAD temp[4], temp[4], const[12].wwww, const[10].zzzz; 36: MUL temp[6], temp[4], temp[6]; 37: MUL temp[6], const[8], temp[6]; 38: ADD temp[7], temp[7], temp[6]; 39: LRP output[0].xyz, input[1].xxxx, const[9], temp[7]; 40: MUL temp[4], temp[4], temp[6]; 41: MUL temp[4], temp[4], temp[2]; 42: DP3 output[0].w, temp[4], const[11]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[10].xxxx, const[10].yyyy; 10: MOV temp[3].z, const[11].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[12].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[4].x, input[4], 2D[4]; 19: MUL temp[2], temp[2], temp[4].xxxx; 20: MUL temp[0], temp[0], input[0]; 21: MUL temp[5], temp[0], const[4]; 22: DP3 temp[1].x, temp[1], temp[3]; 23: MAD_SAT temp[4].x, temp[1].xxxx, const[12].yyyy, -const[12].zzzz; 24: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 25: MUL temp[4], temp[4].xxxx, const[5]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[4], temp[6], temp[5]; 29: MUL temp[7].xyz, temp[2], temp[5]; 30: MAD temp[7].xyz, temp[0], const[6], temp[7]; 31: TEX temp[4], input[6], 2D[6]; 32: ADD temp[7], temp[4], temp[7]; 33: DP3 temp[4], temp[1], temp[3]; 34: TEX temp[6], temp[4], 2D[7]; 35: MAD temp[4], temp[4], const[12].wwww, const[10].zzzz; 36: MUL temp[6], temp[4], temp[6]; 37: MUL temp[6], const[8], temp[6]; 38: ADD temp[7], temp[7], temp[6]; 39: LRP_SAT output[0].xyz, input[1].xxxx, const[9], temp[7]; 40: MUL temp[4], temp[4], temp[6]; 41: MUL temp[4], temp[4], temp[2]; 42: DP3_SAT output[0].w, temp[4], const[11]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, temp[1].xxxx; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, temp[2].xxxx; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[10].xxxx, const[10].yyyy; 10: MOV temp[3].z, const[11].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[12].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, temp[4].xxxx; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: MUL temp[0], temp[0], input[0]; 22: MUL temp[5], temp[0], const[4]; 23: DP3 temp[1].x, temp[1], temp[3]; 24: MAD_SAT temp[4].x, temp[1].xxxx, const[12].yyyy, -const[12].zzzz; 25: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 26: MUL temp[4], temp[4].xxxx, const[5]; 27: TEX temp[6], input[7], 2D[5]; 28: ADD temp[6], temp[6], temp[6]; 29: MAD temp[5], temp[4], temp[6], temp[5]; 30: MUL temp[7].xyz, temp[2], temp[5]; 31: MAD temp[7].xyz, temp[0], const[6], temp[7]; 32: TEX temp[4], input[6], 2D[6]; 33: ADD temp[7], temp[4], temp[7]; 34: DP3 temp[4], temp[1], temp[3]; 35: TEX temp[6], temp[4], 2D[7]; 36: MAD temp[4], temp[4], const[12].wwww, const[10].zzzz; 37: MUL temp[6], temp[4], temp[6]; 38: MUL temp[6], const[8], temp[6]; 39: ADD temp[7], temp[7], temp[6]; 40: LRP_SAT output[0].xyz, input[1].xxxx, const[9], temp[7]; 41: MUL temp[4], temp[4], temp[6]; 42: MUL temp[4], temp[4], temp[2]; 43: DP3_SAT output[0].w, temp[4], const[11]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[0]; 1: DP3 temp[1].x, input[8], input[8]; 2: RSQ temp[1].x, |temp[1].xxxx|; 3: MUL temp[1], temp[1].xxxx, input[8]; 4: DP3 temp[2].x, input[2], input[2]; 5: RSQ temp[2].x, |temp[2].xxxx|; 6: MUL temp[2], temp[2].xxxx, input[2]; 7: TEX temp[3], input[3], 2D[2]; 8: MOV temp[3].x, temp[3].wwww; 9: MAD temp[3], temp[3], const[10].xxxx, const[10].yyyy; 10: MOV temp[3].z, const[11].wwww; 11: DP3 temp[4].x, temp[3], temp[3]; 12: ADD temp[4].x, const[12].xxxx, -temp[4].xxxx; 13: RSQ temp[4].x, |temp[4].xxxx|; 14: RCP temp[3].z, temp[4].xxxx; 15: DP3_SAT temp[2].x, temp[2], temp[3]; 16: TXP temp[4], input[5], 2D[3]; 17: MUL temp[2], temp[2].xxxx, temp[4]; 18: TEX temp[8], input[4], 2D[4]; 19: MOV temp[4].x, temp[8]; 20: MUL temp[2], temp[2], temp[4].xxxx; 21: MUL temp[0], temp[0], input[0]; 22: MUL temp[5], temp[0], const[4]; 23: DP3 temp[1].x, temp[1], temp[3]; 24: MAD_SAT temp[4].x, temp[1].xxxx, const[12].yyyy, -const[12].zzzz; 25: MUL temp[4].x, temp[4].xxxx, temp[4].xxxx; 26: MUL temp[4], temp[4].xxxx, const[5]; 27: TEX temp[6], input[7], 2D[5]; 28: ADD temp[6], temp[6], temp[6]; 29: MAD temp[5], temp[4], temp[6], temp[5]; 30: MUL temp[7].xyz, temp[2], temp[5]; 31: MAD temp[7].xyz, temp[0], const[6], temp[7]; 32: TEX temp[4], input[6], 2D[6]; 33: ADD temp[7], temp[4], temp[7]; 34: DP3 temp[4], temp[1], temp[3]; 35: TEX temp[6], temp[4], 2D[7]; 36: MAD temp[4], temp[4], const[12].wwww, const[10].zzzz; 37: MUL temp[6], temp[4], temp[6]; 38: MUL temp[6], const[8], temp[6]; 39: ADD temp[7], temp[7], temp[6]; 40: ADD temp[9].xyz, const[9], -temp[7]; 41: MAD_SAT output[0].xyz, input[1].xxxx, temp[9], temp[7]; 42: MUL temp[4], temp[4], temp[6]; 43: MUL temp[4], temp[4], temp[2]; 44: DP3_SAT output[0].w, temp[4], const[11]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[10].xx__, const[10].yy__; 10: MOV temp[3].z, const[11].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[12].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 22: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 23: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 24: MAD_SAT temp[4].x, temp[1].x___, const[12].y___, -const[12].z___; 25: MUL temp[4].x, temp[4].x___, temp[4].x___; 26: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 27: TEX temp[6].xyz, input[7].xy__, 2D[5]; 28: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 29: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 30: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 31: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 32: TEX temp[4].xyz, input[6].xy__, 2D[6]; 33: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 34: DP3 temp[4].xyz, temp[1].xyz_, temp[3].xyz_; 35: TEX temp[6].xyz, temp[4].xy__, 2D[7]; 36: MAD temp[4].xyz, temp[4].xyz_, const[12].www_, const[10].zzz_; 37: MUL temp[6].xyz, temp[4].xyz_, temp[6].xyz_; 38: MUL temp[6].xyz, const[8].xyz_, temp[6].xyz_; 39: ADD temp[7].xyz, temp[7].xyz_, temp[6].xyz_; 40: ADD temp[9].xyz, const[9].xyz_, -temp[7].xyz_; 41: MAD_SAT output[0].xyz, input[1].xxx_, temp[9].xyz_, temp[7].xyz_; 42: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 43: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 44: DP3_SAT output[0].w, temp[4].xyz_, const[11].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[10].xx__, const[10].yy__; 10: MOV temp[3].z, const[11].__w_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, const[12].x___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MOV temp[4].x, temp[8].x___; 20: MUL temp[2].xyz, temp[2].xyz_, temp[4].xxx_; 21: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 22: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 23: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 24: MAD_SAT temp[4].x, temp[1].x___, const[12].y___, -const[12].z___; 25: MUL temp[4].x, temp[4].x___, temp[4].x___; 26: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 27: TEX temp[6].xyz, input[7].xy__, 2D[5]; 28: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 29: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 30: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 31: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 32: TEX temp[4].xyz, input[6].xy__, 2D[6]; 33: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 34: DP3 temp[4].xyz, temp[1].xyz_, temp[3].xyz_; 35: TEX temp[6].xyz, temp[4].xy__, 2D[7]; 36: MAD temp[4].xyz, temp[4].xyz_, const[12].www_, const[10].zzz_; 37: MUL temp[6].xyz, temp[4].xyz_, temp[6].xyz_; 38: MUL temp[6].xyz, const[8].xyz_, temp[6].xyz_; 39: ADD temp[7].xyz, temp[7].xyz_, temp[6].xyz_; 40: ADD temp[9].xyz, const[9].xyz_, -temp[7].xyz_; 41: MAD_SAT output[0].xyz, input[1].xxx_, temp[9].xyz_, temp[7].xyz_; 42: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 43: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 44: DP3_SAT output[0].w, temp[4].xyz_, const[11].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[10].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[12].y___, -const[12].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 31: TEX temp[4].xyz, input[6].xy__, 2D[6]; 32: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 33: DP3 temp[4].xyz, temp[1].xyz_, temp[3].xyz_; 34: TEX temp[6].xyz, temp[4].xy__, 2D[7]; 35: MAD temp[4].xyz, temp[4].xyz_, const[12].www_, const[10].zzz_; 36: MUL temp[6].xyz, temp[4].xyz_, temp[6].xyz_; 37: MUL temp[6].xyz, const[8].xyz_, temp[6].xyz_; 38: ADD temp[7].xyz, temp[7].xyz_, temp[6].xyz_; 39: MAD_SAT output[0].xyz, input[1].xxx_, (const[9] - temp[7]).xyz_, temp[7].xyz_; 40: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 41: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 42: DP3_SAT output[0].w, temp[4].xyz_, const[11].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[10].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[4].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[12].y___, -const[12].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[5].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: MAD temp[7].xyz, temp[0].xyz_, const[6].xyz_, temp[7].xyz_; 31: TEX temp[4].xyz, input[6].xy__, 2D[6]; 32: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 33: DP3 temp[4].xyz, temp[1].xyz_, temp[3].xyz_; 34: TEX temp[6].xyz, temp[4].xy__, 2D[7]; 35: MAD temp[4].xyz, temp[4].xyz_, const[12].www_, const[10].zzz_; 36: MUL temp[6].xyz, temp[4].xyz_, temp[6].xyz_; 37: MUL temp[6].xyz, const[8].xyz_, temp[6].xyz_; 38: ADD temp[7].xyz, temp[7].xyz_, temp[6].xyz_; 39: MAD_SAT output[0].xyz, input[1].xxx_, (const[9] - temp[7]).xyz_, temp[7].xyz_; 40: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 41: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 42: DP3_SAT output[0].w, temp[4].xyz_, const[11].xyz_; CONST[5] = { 2.0000 -1.0000 0.0100 4.0000 } CONST[6] = { 0.3000 0.5900 0.1100 0.0000 } CONST[7] = { 1.0000 4.0000 3.0000 0.2000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[1].x, |temp[1].x___|; 3: MUL temp[1].xyz, temp[1].xxx_, input[8].xyz_; 4: DP3 temp[2].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[2].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[2].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[5].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[4].x, none.1___, -temp[4].x___; 13: RSQ temp[4].x, |temp[4].x___|; 14: RCP temp[3].z, temp[4].x___; 15: DP3_SAT temp[2].x, temp[2].xyz_, temp[3].xyz_; 16: TXP temp[4].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[2].xyz, temp[2].xxx_, temp[4].xyz_; 18: TEX temp[8].x, input[4].xy__, 2D[4]; 19: MUL temp[2].xyz, temp[2].xyz_, temp[8].xxx_; 20: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 21: MUL temp[5].xyz, temp[0].xyz_, const[0].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[4].x, temp[1].x___, const[7].y___, -const[7].z___; 24: MUL temp[4].x, temp[4].x___, temp[4].x___; 25: MUL temp[4].xyz, temp[4].xxx_, const[1].xyz_; 26: TEX temp[6].xyz, input[7].xy__, 2D[5]; 27: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 28: MAD temp[5].xyz, temp[4].xyz_, temp[6].xyz_, temp[5].xyz_; 29: MUL temp[7].xyz, temp[2].xyz_, temp[5].xyz_; 30: MAD temp[7].xyz, temp[0].xyz_, const[2].xyz_, temp[7].xyz_; 31: TEX temp[4].xyz, input[6].xy__, 2D[6]; 32: ADD temp[7].xyz, temp[4].xyz_, temp[7].xyz_; 33: DP3 temp[4].xyz, temp[1].xyz_, temp[3].xyz_; 34: TEX temp[6].xyz, temp[4].xy__, 2D[7]; 35: MAD temp[4].xyz, temp[4].xyz_, const[7].www_, const[5].zzz_; 36: MUL temp[6].xyz, temp[4].xyz_, temp[6].xyz_; 37: MUL temp[6].xyz, const[3].xyz_, temp[6].xyz_; 38: ADD temp[7].xyz, temp[7].xyz_, temp[6].xyz_; 39: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[7]).xyz_, temp[7].xyz_; 40: MUL temp[4].xyz, temp[4].xyz_, temp[6].xyz_; 41: MUL temp[4].xyz, temp[4].xyz_, temp[2].xyz_; 42: DP3_SAT output[0].w, temp[4].xyz_, const[6].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[9].xyz, input[6].xy__, 2D[0]; 1: DP3 temp[10].x, input[8].xyz_, input[8].xyz_; 2: RSQ temp[11].x, |temp[10].x___|; 3: MUL temp[1].xyz, temp[11].xxx_, input[8].xyz_; 4: DP3 temp[12].x, input[2].xyz_, input[2].xyz_; 5: RSQ temp[13].x, |temp[12].x___|; 6: MUL temp[14].xyz, temp[13].xxx_, input[2].xyz_; 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: MOV temp[3].x, temp[3].w___; 9: MAD temp[3].xy, temp[3].xy__, const[5].xx__, none.-1-1__; 10: MOV temp[3].z, none.__0_; 11: DP3 temp[15].x, temp[3].xyz_, temp[3].xyz_; 12: ADD temp[16].x, none.1___, -temp[15].x___; 13: RSQ temp[17].x, |temp[16].x___|; 14: RCP temp[3].z, temp[17].x___; 15: DP3_SAT temp[18].x, temp[14].xyz_, temp[3].xyz_; 16: TXP temp[19].xyz, input[5].xy_w, 2D[3]; 17: MUL temp[20].xyz, temp[18].xxx_, temp[19].xyz_; 18: TEX temp[21].x, input[4].xy__, 2D[4]; 19: MUL temp[22].xyz, temp[20].xyz_, temp[21].xxx_; 20: MUL temp[23].xyz, temp[9].xyz_, input[0].xyz_; 21: MUL temp[24].xyz, temp[23].xyz_, const[0].xyz_; 22: DP3 temp[1].x, temp[1].xyz_, temp[3].xyz_; 23: MAD_SAT temp[25].x, temp[1].x___, const[7].y___, -const[7].z___; 24: MUL temp[26].x, temp[25].x___, temp[25].x___; 25: MUL temp[27].xyz, temp[26].xxx_, const[1].xyz_; 26: TEX temp[28].xyz, input[7].xy__, 2D[5]; 27: ADD temp[29].xyz, temp[28].xyz_, temp[28].xyz_; 28: MAD temp[30].xyz, temp[27].xyz_, temp[29].xyz_, temp[24].xyz_; 29: MUL temp[31].xyz, temp[22].xyz_, temp[30].xyz_; 30: MAD temp[32].xyz, temp[23].xyz_, const[2].xyz_, temp[31].xyz_; 31: TEX temp[33].xyz, input[6].xy__, 2D[6]; 32: ADD temp[34].xyz, temp[33].xyz_, temp[32].xyz_; 33: DP3 temp[35].xyz, temp[1].xyz_, temp[3].xyz_; 34: TEX temp[36].xyz, temp[35].xy__, 2D[7]; 35: MAD temp[37].xyz, temp[35].xyz_, const[7].www_, const[5].zzz_; 36: MUL temp[38].xyz, temp[37].xyz_, temp[36].xyz_; 37: MUL temp[39].xyz, const[3].xyz_, temp[38].xyz_; 38: ADD temp[40].xyz, temp[34].xyz_, temp[39].xyz_; 39: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[40]).xyz_, temp[40].xyz_; 40: MUL temp[41].xyz, temp[37].xyz_, temp[39].xyz_; 41: MUL temp[42].xyz, temp[41].xyz_, temp[22].xyz_; 42: DP3_SAT output[0].w, temp[42].xyz_, const[6].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[9].xyz, input[6].xy__, 2D[0]; 1: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 2: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 3: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = input[2] DP3 temp[12].x, src0.xyz, src0.xyz 5: src0.xyz = temp[12] REPL_ALPHA temp[13].x RSQ, |src0.x| 6: src0.xyz = temp[13], src1.xyz = input[2] MAD temp[14].xyz, src0.xxx, src1.xyz, src0.000 7: TEX temp[3].yw, input[3].xy__, 2D[2]; 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: MAD temp[3].z, src0.__0, src0.111, src0.000 11: src0.xyz = temp[3] DP3 temp[15].x, src0.xyz, src0.xyz 12: src0.xyz = temp[15] MAD temp[16].x, src0.1__, src0.111, -src0.x__ 13: src0.xyz = temp[16] REPL_ALPHA temp[17].x RSQ, |src0.x| 14: src0.xyz = temp[17] REPL_ALPHA temp[3].z RCP, src0.x 15: src0.xyz = temp[14], src1.xyz = temp[3] DP3_SAT temp[18].x, src0.xyz, src1.xyz 16: TXP temp[19].xyz, input[5].xy_w, 2D[3]; 17: src0.xyz = temp[18], src1.xyz = temp[19] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 18: TEX temp[21].x, input[4].xy__, 2D[4]; 19: src0.xyz = temp[20], src1.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src1.xxx, src0.000 20: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 21: src0.xyz = temp[23], src1.xyz = const[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[1], src1.xyz = temp[3] DP3 temp[1].x, src0.xyz, src1.xyz 23: src0.xyz = temp[1], src1.xyz = const[7] MAD_SAT temp[25].x, src0.x__, src1.y__, -src1.z__ 24: src0.xyz = temp[25] MAD temp[26].x, src0.x__, src0.x__, src0.000 25: src0.xyz = temp[26], src1.xyz = const[1] MAD temp[27].xyz, src0.xxx, src1.xyz, src0.000 26: TEX temp[28].xyz, input[7].xy__, 2D[5]; 27: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.xyz 28: src0.xyz = temp[27], src1.xyz = temp[29], src2.xyz = temp[24] MAD temp[30].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[22], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[23], src1.xyz = const[2], src2.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 31: TEX temp[33].xyz, input[6].xy__, 2D[6]; 32: src0.xyz = temp[33], src1.xyz = temp[32] MAD temp[34].xyz, src0.xyz, src0.111, src1.xyz 33: src0.xyz = temp[1], src1.xyz = temp[3] DP3 temp[35].xyz, src0.xyz, src1.xyz 34: TEX temp[36].xyz, temp[35].xy__, 2D[7]; 35: src0.xyz = temp[35], src0.w = const[7], src1.xyz = const[5] MAD temp[37].xyz, src0.xyz, src0.www, src1.zzz 36: src0.xyz = temp[37], src1.xyz = temp[36] MAD temp[38].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = const[3], src1.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[34], src1.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz 39: src0.xyz = temp[40], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 40: src0.xyz = temp[37], src1.xyz = temp[39] MAD temp[41].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[41], src1.xyz = temp[22] MAD temp[42].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[42], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[19].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[21].x, input[4].xy__, 2D[4]; 5: TEX temp[28].xyz, input[7].xy__, 2D[5]; 6: TEX temp[33].xyz, input[6].xy__, 2D[6]; 7: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = temp[23], src1.xyz = const[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 12: MAD temp[3].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[3] DP3 temp[15].x, src0.xyz, src0.xyz 14: src0.xyz = input[2], src1.xyz = temp[15] DP3 temp[12].x, src0.xyz, src0.xyz MAD temp[16].w, src0.1, src0.1, -src1.x 15: src0.xyz = temp[16], src0.w = temp[16] REPL_ALPHA temp[17].x RSQ, |src0.w| 16: src0.xyz = temp[17] REPL_ALPHA temp[3].z RCP, src0.x 17: src0.xyz = temp[12] REPL_ALPHA temp[13].x RSQ, |src0.x| 18: src0.xyz = temp[13], src1.xyz = input[2] MAD temp[14].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[14], src1.xyz = temp[3] DP3_SAT temp[18].x, src0.xyz, src1.xyz 20: src0.xyz = temp[18], src1.xyz = temp[19] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[20], src1.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 23: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 24: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 25: src0.xyz = temp[1], src1.xyz = temp[3] DP3 temp[1].x, src0.xyz, src1.xyz 26: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = const[7] DP3 temp[35].xyz, src0.xyz, src1.xyz MAD_SAT temp[25].w, src0.x, src2.y, -src2.z 27: src0.xyz = temp[25], src0.w = temp[25] MAD temp[26].x, src0.w__, src0.w__, src0.000 28: src0.xyz = temp[26], src1.xyz = const[1] MAD temp[27].xyz, src0.xxx, src1.xyz, src0.000 29: src0.xyz = temp[27], src1.xyz = temp[29], src2.xyz = temp[24] MAD temp[30].xyz, src0.xyz, src1.xyz, src2.xyz 30: src0.xyz = temp[22], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[23], src1.xyz = const[2], src2.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 32: src0.xyz = temp[33], src1.xyz = temp[32] MAD temp[34].xyz, src0.xyz, src0.111, src1.xyz 33: src0.xyz = temp[35], src0.w = const[7], src1.xyz = const[5] MAD temp[37].xyz, src0.xyz, src0.www, src1.zzz 34: BEGIN_TEX; 35: TEX temp[36].xyz, temp[35].xy__, 2D[7]; 36: src0.xyz = temp[37], src1.xyz = temp[36] MAD temp[38].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = const[3], src1.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[34], src1.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz 39: src0.xyz = temp[40], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 40: src0.xyz = temp[37], src1.xyz = temp[39] MAD temp[41].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[41], src1.xyz = temp[22] MAD temp[42].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[42], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[19].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[21].x, input[4].xy__, 2D[4]; 5: TEX temp[28].xyz, input[7].xy__, 2D[5]; 6: TEX temp[33].xyz, input[6].xy__, 2D[6]; 7: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[23].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = temp[23], src1.xyz = const[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 12: MAD temp[3].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[3] DP3 temp[15].x, src0.xyz, src0.xyz 14: src0.xyz = input[2], src1.xyz = temp[15] DP3 temp[12].x, src0.xyz, src0.xyz MAD temp[16].w, src0.1, src0.1, -src1.x 15: src0.w = temp[16] REPL_ALPHA temp[17].x RSQ, |src0.w| 16: src0.xyz = temp[17] REPL_ALPHA temp[3].z RCP, src0.x 17: src0.xyz = temp[12] REPL_ALPHA temp[13].x RSQ, |src0.x| 18: src0.xyz = temp[13], src1.xyz = input[2] MAD temp[14].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[14], src1.xyz = temp[3] DP3_SAT temp[18].x, src0.xyz, src1.xyz 20: src0.xyz = temp[18], src1.xyz = temp[19] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[20], src1.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = input[8] DP3 temp[10].x, src0.xyz, src0.xyz 23: src0.xyz = temp[10] REPL_ALPHA temp[11].x RSQ, |src0.x| 24: src0.xyz = temp[11], src1.xyz = input[8] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 25: src0.xyz = temp[1], src1.xyz = temp[3] DP3 temp[1].x, src0.xyz, src1.xyz 26: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = const[7] DP3 temp[35].xyz, src0.xyz, src1.xyz MAD_SAT temp[25].w, src0.x, src2.y, -src2.z 27: src0.w = temp[25] MAD temp[26].x, src0.w__, src0.w__, src0.000 28: src0.xyz = temp[26], src1.xyz = const[1] MAD temp[27].xyz, src0.xxx, src1.xyz, src0.000 29: src0.xyz = temp[27], src1.xyz = temp[29], src2.xyz = temp[24] MAD temp[30].xyz, src0.xyz, src1.xyz, src2.xyz 30: src0.xyz = temp[22], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[23], src1.xyz = const[2], src2.xyz = temp[31] MAD temp[32].xyz, src0.xyz, src1.xyz, src2.xyz 32: src0.xyz = temp[33], src1.xyz = temp[32] MAD temp[34].xyz, src0.xyz, src0.111, src1.xyz 33: src0.xyz = temp[35], src0.w = const[7], src1.xyz = const[5] MAD temp[37].xyz, src0.xyz, src0.www, src1.zzz 34: BEGIN_TEX; 35: TEX temp[36].xyz, temp[35].xy__, 2D[7]; 36: src0.xyz = temp[37], src1.xyz = temp[36] MAD temp[38].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = const[3], src1.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[34], src1.xyz = temp[39] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz 39: src0.xyz = temp[40], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 40: src0.xyz = temp[37], src1.xyz = temp[39] MAD temp[41].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[41], src1.xyz = temp[22] MAD temp[42].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[42], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[3].yw, input[3].xy__, 2D[2]; 3: TXP temp[5].xyz, input[5].xy_w, 2D[3]; 4: TEX temp[4].x, input[4].xy__, 2D[4]; 5: TEX temp[7].xyz, input[7].xy__, 2D[5]; 6: TEX temp[6].xyz, input[6].xy__, 2D[6]; 7: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 9: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = temp[0], src1.xyz = const[0] MAD temp[9].xyz, src0.xyz, src1.xyz, src0.000 12: MAD temp[3].z, src0.__0, src0.111, src0.000 13: src0.xyz = temp[3] DP3 temp[1].y, src0.xyz, src0.xyz 14: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[1].y, src0.xyz, src0.xyz MAD temp[0].w, src0.1, src0.1, -src1.y 15: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 16: src0.xyz = temp[1] REPL_ALPHA temp[3].z RCP, src0.z 17: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 18: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 19: src0.xyz = temp[2], src1.xyz = temp[3] DP3_SAT temp[1].y, src0.xyz, src1.xyz 20: src0.xyz = temp[1], src1.xyz = temp[5] MAD temp[2].xyz, src0.yyy, src1.xyz, src0.000 21: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = input[8] DP3 temp[1].y, src0.xyz, src0.xyz 23: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 24: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 25: src0.xyz = temp[4], src1.xyz = temp[3] DP3 temp[4].x, src0.xyz, src1.xyz 26: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = const[7] DP3 temp[3].xyz, src0.xyz, src1.xyz MAD_SAT temp[0].w, src0.x, src2.y, -src2.z 27: src0.w = temp[0] MAD temp[1].y, src0._w_, src0._w_, src0._0_ 28: src0.xyz = temp[1], src1.xyz = const[1] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 29: src0.xyz = temp[4], src1.xyz = temp[7], src2.xyz = temp[9] MAD temp[4].xyz, src0.xyz, src1.xyz, src2.xyz 30: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[0], src1.xyz = const[2], src2.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 32: src0.xyz = temp[6], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src1.xyz 33: src0.xyz = temp[3], src0.w = const[7], src1.xyz = const[5] MAD temp[4].xyz, src0.xyz, src0.www, src1.zzz 34: BEGIN_TEX; 35: TEX temp[3].xyz, temp[3].xy__, 2D[7]; 36: src0.xyz = temp[4], src1.xyz = temp[3] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 37: src0.xyz = const[3], src1.xyz = temp[3] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 38: src0.xyz = temp[0], src1.xyz = temp[3] MAD temp[0].xyz, src0.xyz, src0.111, src1.xyz 39: src0.xyz = temp[0], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 40: src0.xyz = temp[4], src1.xyz = temp[3] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 41: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[0], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ pc=53************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 26, tex_end: 5 (code_addr: 000a0680) TEX: TEX t9, t6, texture[0] (00008246) TEX t3, t3, texture[2] (000090c3) TXP t5, t5, texture[3] (00019945) TEX t4, t4, texture[4] (0000a104) TEX t7, t7, texture[5] (0000a9c7) TEX t6, t6, texture[6] (0000b186) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 1: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t3 c5 t0 bias-> t3.xy (018c0943) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c5.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 3: xyz: t9 t0 t0 bias-> t0.xyz (03800009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t0.xyz 0.0 op: 00050200 w: t9.x t9.x t9.x op: 00000000 4: xyz: t0 c0 t0 bias-> t9.xyz (03a40800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t3.z (020c0000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 6: xyz: t3 t0 t0 bias-> t1.y (01040003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 7: xyz: t2 t1 t0 bias-> t1.y (01040042) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: 1.0 1.0 -t1.y op: 00090891 8: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 9: xyz: t1 t0 t0 bias-> t3.z (020c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 10: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 11: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 12: xyz: t2 t3 t0 bias-> t1.y (010400c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t3.xyz t2.xxx op: 40804200 w: t2.x t2.x t2.x op: 00000000 13: xyz: t1 t5 t0 bias-> t2.xyz (03880141) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t5.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 14: 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 15: xyz: t8 t0 t0 bias-> t1.y (01040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 16: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 17: xyz: t1 t8 t0 bias-> t4.xyz (03900201) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t8.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 18: xyz: t4 t3 t0 bias-> t4.x (009000c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 19: xyz: t4 t3 c7 bias-> t3.xyz (038e70c4) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t4.xyz t3.xyz t4.xxx op: 00804200 w: t4.x c7.y -c7.z op: 400a0380 20: xyz: t0 t0 t0 bias-> t1.y (01040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t0.www 0.0 op: 0005060c w: t0.x t0.x t0.x op: 00000000 21: xyz: t1 c1 t0 bias-> t4.xyz (03900841) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c1.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 22: xyz: t4 t7 t9 bias-> t4.xyz (039091c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t7.xyz t9.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 23: xyz: t2 t4 t0 bias-> t4.xyz (03900102) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t4.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 24: xyz: t0 c2 t4 bias-> t0.xyz (03804880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c2.xyz t4.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 25: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 1.0 t0.xyz op: 00010a80 w: t6.x t6.x t6.x op: 00000000 26: xyz: t3 c5 t0 bias-> t4.xyz (03900943) w: c7 t0 t0 bias-> (00000027) xyz: t3.xyz c7.www c5.zzz op: 0001c600 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 27, tex_offset: 6, alu_end: 6, tex_end: 0 (code_addr: 0040619b) TEX: TEX t3, t3, texture[7] (0000b8c3) 27: xyz: t4 t3 t0 bias-> t3.xyz (038c00c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 28: xyz: c3 t3 t0 bias-> t3.xyz (038c00e3) w: t0 t0 t0 bias-> (00000000) xyz: c3.xyz t3.xyz 0.0 op: 00050200 w: c3.x c3.x c3.x op: 00000000 29: xyz: t0 t3 t0 bias-> t0.xyz (038000c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 t3.xyz op: 80010a80 NOP w: t0.x t0.x t0.x op: 00000000 30: xyz: t0 c4 t1 sub-> o0.xyz (1c001900) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 31: xyz: t4 t3 t0 bias-> t0.xyz (038000c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 32: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 33: xyz: t0 c6 t0 bias-> (00000980) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c6.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[2], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[2] DCL TEMP[0..1] IMM FLT32 { 1.4600, 0.0580, 0.5000, 1.0000} IMM FLT32 { 1.1000, 0.0000, 1.0000, 0.0000} 0: ADD TEMP[0].xyz, IN[0], IMM[0].xxxx 1: MUL TEMP[0].xyz, TEMP[0].zxyw, IMM[0].yyyy 2: MOV TEMP[0].w, TEMP[0].xxxx 3: MOV TEMP[0].x, IMM[0].zzzz 4: TEX TEMP[0].x, TEMP[0].xwzw, SAMP[0], 2D 5: TEX TEMP[1].x, TEMP[0].yzzw, SAMP[0], 2D 6: MAD TEMP[0].x, -TEMP[1], TEMP[0], IMM[1].xyyz 7: MUL OUT[0], TEMP[0].xxxx, CONST[2] 8: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xyz, input[0], const[3].xxxx; 1: MUL temp[0].xyz, temp[0].zxyw, const[3].yyyy; 2: MOV temp[0].w, temp[0].xxxx; 3: MOV temp[0].x, const[3].zzzz; 4: TEX temp[0].x, temp[0].xwzw, 2D[0]; 5: TEX temp[1].x, temp[0].yzzw, 2D[0]; 6: MAD temp[0].x, -temp[1], temp[0], const[4].xyyz; 7: MUL output[0], temp[0].xxxx, const[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0], const[3].xxxx; 1: MUL temp[0].xyz, temp[0].zxyw, const[3].yyyy; 2: MOV temp[0].w, temp[0].xxxx; 3: MOV temp[0].x, const[3].zzzz; 4: TEX temp[0].x, temp[0].xwzw, 2D[0]; 5: TEX temp[1].x, temp[0].yzzw, 2D[0]; 6: MAD temp[0].x, -temp[1], temp[0], const[4].xyyz; 7: MUL output[0], temp[0].xxxx, const[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0], const[3].xxxx; 1: MUL temp[0].xyz, temp[0].zxyw, const[3].yyyy; 2: MOV temp[0].w, temp[0].xxxx; 3: MOV temp[0].x, const[3].zzzz; 4: TEX temp[0].x, temp[0].xwzw, 2D[0]; 5: TEX temp[1].x, temp[0].yzzw, 2D[0]; 6: MAD temp[0].x, -temp[1], temp[0], const[4].xyyz; 7: MUL output[0], temp[0].xxxx, const[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0], const[3].xxxx; 1: MUL temp[0].xyz, temp[0].zxyw, const[3].yyyy; 2: MOV temp[0].w, temp[0].xxxx; 3: MOV temp[0].x, const[3].zzzz; 4: TEX temp[0].x, temp[0].xwzw, 2D[0]; 5: TEX temp[1].x, temp[0].yzzw, 2D[0]; 6: MAD temp[0].x, -temp[1], temp[0], const[4].xyyz; 7: MUL output[0], temp[0].xxxx, const[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0], const[3].xxxx; 1: MUL temp[0].xyz, temp[0].zxyw, const[3].yyyy; 2: MOV temp[0].w, temp[0].xxxx; 3: MOV temp[0].x, const[3].zzzz; 4: TEX temp[0].x, temp[0].xwzw, 2D[0]; 5: TEX temp[1].x, temp[0].yzzw, 2D[0]; 6: MAD temp[0].x, -temp[1], temp[0], const[4].xyyz; 7: MUL output[0], temp[0].xxxx, const[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0], const[3].xxxx; 1: MUL temp[0].xyz, temp[0].zxyw, const[3].yyyy; 2: MOV temp[0].w, temp[0].xxxx; 3: MOV temp[0].x, const[3].zzzz; 4: TEX temp[0].x, temp[0].xwzw, 2D[0]; 5: TEX temp[1].x, temp[0].yzzw, 2D[0]; 6: MAD temp[0].x, -temp[1], temp[0], const[4].xyyz; 7: MUL_SAT output[0], temp[0].xxxx, const[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0], const[3].xxxx; 1: MUL temp[0].xyz, temp[0].zxyw, const[3].yyyy; 2: MOV temp[0].w, temp[0].xxxx; 3: MOV temp[0].x, const[3].zzzz; 4: TEX temp[2], temp[0].xwzw, 2D[0]; 5: MOV temp[0].x, temp[2]; 6: TEX temp[3], temp[0].yzzw, 2D[0]; 7: MOV temp[1].x, temp[3]; 8: MAD temp[0].x, -temp[1], temp[0], const[4].xyyz; 9: MUL_SAT output[0], temp[0].xxxx, const[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0], const[3].xxxx; 1: MUL temp[0].xyz, temp[0].zxyw, const[3].yyyy; 2: MOV temp[0].w, temp[0].xxxx; 3: MOV temp[0].x, const[3].zzzz; 4: TEX temp[2], temp[0].xwzw, 2D[0]; 5: MOV temp[0].x, temp[2]; 6: TEX temp[3], temp[0].yzzw, 2D[0]; 7: MOV temp[1].x, temp[3]; 8: MAD temp[0].x, -temp[1], temp[0], const[4].xyyz; 9: MUL_SAT output[0], temp[0].xxxx, const[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0].xyz_, const[3].xxx_; 1: MUL temp[0].xyz, temp[0].zxy_, const[3].yyy_; 2: MOV temp[0].w, temp[0].___x; 3: MOV temp[0].x, const[3].z___; 4: TEX temp[2].x, temp[0].xw__, 2D[0]; 5: MOV temp[0].x, temp[2].x___; 6: TEX temp[3].x, temp[0].yz__, 2D[0]; 7: MOV temp[1].x, temp[3].x___; 8: MAD temp[0].x, -temp[1].x___, temp[0].x___, const[4].x___; 9: MUL_SAT output[0], temp[0].xxxx, const[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0].xyz_, const[3].xxx_; 1: MUL temp[0].xyz, temp[0].zxy_, const[3].yyy_; 2: MOV temp[0].w, temp[0].___x; 3: MOV temp[0].x, const[3].z___; 4: TEX temp[2].x, temp[0].xw__, 2D[0]; 5: MOV temp[0].x, temp[2].x___; 6: TEX temp[3].x, temp[0].yz__, 2D[0]; 7: MOV temp[1].x, temp[3].x___; 8: MAD temp[0].x, -temp[1].x___, temp[0].x___, const[4].x___; 9: MUL_SAT output[0], temp[0].xxxx, const[2]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0].xyz_, const[3].xxx_; 1: MUL temp[0].xyz, temp[0].zxy_, const[3].yyy_; 2: MOV temp[0].w, temp[0].___x; 3: MOV temp[0].x, none.H___; 4: TEX temp[2].x, temp[0].xw__, 2D[0]; 5: TEX temp[3].x, temp[0].yz__, 2D[0]; 6: MAD temp[0].x, -temp[3].x___, temp[2].x___, const[4].x___; 7: MUL_SAT output[0], temp[0].xxxx, const[2]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0].xyz_, const[3].xxx_; 1: MUL temp[0].xyz, temp[0].zxy_, const[3].yyy_; 2: MOV temp[0].w, temp[0].___x; 3: MOV temp[0].x, none.H___; 4: MOV temp[1].x, temp[0].x___; 5: MOV temp[1].y, temp[0]._w__; 6: TEX temp[2].x, temp[1].xy__, 2D[0]; 7: MOV temp[4].xy, temp[0].yz__; 8: TEX temp[3].x, temp[4].xy__, 2D[0]; 9: MAD temp[0].x, -temp[3].x___, temp[2].x___, const[4].x___; 10: MUL_SAT output[0], temp[0].xxxx, const[2]; CONST[1] = { 1.4600 0.0580 0.5000 1.0000 } CONST[2] = { 1.1000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[0].xyz, input[0].xyz_, const[1].xxx_; 1: MUL temp[0].xyz, temp[0].zxy_, const[1].yyy_; 2: MOV temp[0].w, temp[0].___x; 3: MOV temp[0].x, none.H___; 4: MOV temp[1].x, temp[0].x___; 5: MOV temp[1].y, temp[0]._w__; 6: TEX temp[2].x, temp[1].xy__, 2D[0]; 7: MOV temp[4].xy, temp[0].yz__; 8: TEX temp[3].x, temp[4].xy__, 2D[0]; 9: MAD temp[0].x, -temp[3].x___, temp[2].x___, const[2].x___; 10: MUL_SAT output[0], temp[0].xxxx, const[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[5].xyz, input[0].xyz_, const[1].xxx_; 1: MUL temp[6].xyz, temp[5].zxy_, const[1].yyy_; 2: MOV temp[7].w, temp[6].___x; 3: MOV temp[8].x, none.H___; 4: MOV temp[1].x, temp[8].x___; 5: MOV temp[1].y, temp[7]._w__; 6: TEX temp[9].x, temp[1].xy__, 2D[0]; 7: MOV temp[10].xy, temp[6].yz__; 8: TEX temp[11].x, temp[10].xy__, 2D[0]; 9: MAD temp[12].x, -temp[11].x___, temp[9].x___, const[2].x___; 10: MUL_SAT output[0], temp[12].xxxx, const[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1] MAD temp[5].xyz, src0.xyz, src0.111, src1.xxx 1: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[6].xyz, src0.zxy, src1.yyy, src0.000 2: src0.xyz = temp[6] MAD temp[7].w, src0.x, src0.1, src0.0 3: MAD temp[8].x, src0.H__, src0.111, src0.000 4: src0.xyz = temp[8] MAD temp[1].x, src0.x__, src0.111, src0.000 5: src0.w = temp[7] MAD temp[1].y, src0._w_, src0.111, src0.000 6: TEX temp[9].x, temp[1].xy__, 2D[0]; 7: src0.xyz = temp[6] MAD temp[10].xy, src0.yz_, src0.111, src0.000 8: TEX temp[11].x, temp[10].xy__, 2D[0]; 9: src0.xyz = temp[11], src1.xyz = temp[9], src2.xyz = const[2] MAD temp[12].x, -src0.x__, src1.x__, src2.x__ 10: src0.xyz = temp[12], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xxx, src1.xyz, src0.000 MAD_SAT color[0].w, src0.x, src0.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1] MAD temp[5].xyz, src0.xyz, src0.111, src1.xxx MAD temp[8].w, src0.H, src0.1, src0.0 1: src0.xyz = temp[8], src0.w = temp[8] MAD temp[1].x, src0.w__, src0.111, src0.000 2: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[6].xyz, src0.zxy, src1.yyy, src0.000 3: src0.xyz = temp[6] MAD temp[10].xy, src0.yz_, src0.111, src0.000 MAD temp[7].w, src0.x, src0.1, src0.0 4: src0.w = temp[7] MAD temp[1].y, src0._w_, src0.111, src0.000 5: BEGIN_TEX; 6: TEX temp[11].x, temp[10].xy__, 2D[0]; 7: TEX temp[9].x, temp[1].xy__, 2D[0]; 8: src0.xyz = temp[11], src1.xyz = temp[9], src2.xyz = const[2] MAD temp[12].x, -src0.x__, src1.x__, src2.x__ 9: src0.xyz = temp[12], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xxx, src1.xyz, src0.000 MAD_SAT color[0].w, src0.x, src0.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1] MAD temp[5].xyz, src0.xyz, src0.111, src1.xxx MAD temp[8].w, src0.H, src0.1, src0.0 1: src0.w = temp[8] MAD temp[1].x, src0.w__, src0.111, src0.000 2: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[6].xyz, src0.zxy, src1.yyy, src0.000 3: src0.xyz = temp[6] MAD temp[10].xy, src0.yz_, src0.111, src0.000 MAD temp[7].w, src0.x, src0.1, src0.0 4: src0.w = temp[7] MAD temp[1].y, src0._w_, src0.111, src0.000 5: BEGIN_TEX; 6: TEX temp[11].x, temp[10].xy__, 2D[0]; 7: TEX temp[9].x, temp[1].xy__, 2D[0]; 8: src0.xyz = temp[11], src1.xyz = temp[9], src2.xyz = const[2] MAD temp[12].x, -src0.x__, src1.x__, src2.x__ 9: src0.xyz = temp[12], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xxx, src1.xyz, src0.000 MAD_SAT color[0].w, src0.x, src0.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1] MAD temp[0].xyz, src0.xyz, src0.111, src1.xxx MAD temp[0].w, src0.H, src0.1, src0.0 1: src0.w = temp[0] MAD temp[1].x, src0.w__, src0.11_, src0.00_ 2: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[0].xyz, src0.zxy, src1.yyy, src0.000 3: src0.xyz = temp[0] MAD temp[0].xy, src0.yz_, src0.11_, src0.00_ MAD temp[0].w, src0.x, src0.1, src0.0 4: src0.w = temp[0] MAD temp[1].y, src0._w_, src0.11_, src0.00_ 5: BEGIN_TEX; 6: TEX temp[0].x, temp[0].xy__, 2D[0]; 7: TEX temp[1].x, temp[1].xy__, 2D[0]; 8: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = const[2] MAD temp[0].x, -src0.x__, src1.x__, src2.x__ 9: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xxx, src1.xyz, src0.000 MAD_SAT color[0].w, src0.x, src0.w, src0.0 pc=54************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 4, tex_end: 0 (code_addr: 00000100) 0: xyz: t0 c1 t0 bias-> t0.xyz (03800840) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz 1.0 c1.xxx op: 00014a80 w: 0.5 1.0 0.0 op: 00040892 1: xyz: t0 t0 t0 bias-> t1.x (00840000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t0 c1 t0 bias-> t0.xyz (03800840) w: t0 t0 t0 bias-> (00000000) xyz: t0.zxy c1.yyy 0.0 op: 0005031a w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t0 t0 bias-> t0.xy (01800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.yzx 1.0 0.0 op: 00050a97 w: t0.x 1.0 0.0 op: 00040880 4: xyz: t0 t0 t0 bias-> t1.y (01040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 5, tex_offset: 0, alu_end: 1, tex_end: 1 (code_addr: 00420045) TEX: TEX t0, t0, texture[0] (00008000) TEX t1, t1, texture[0] (00008041) 5: xyz: t0 t1 c2 bias-> t0.x (00822040) w: t0 t0 t0 bias-> (00000000) xyz: -t0.xyz t1.xyz c2.xyz op: 00020220 w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 c0 t0 bias-> o0.xyz (1c000800) w: c0 t0 t0 bias-> o0.w (01000020) xyz: t0.xxx c0.xyz 0.0 op: 40050201 w: t0.x c0.w 0.0 op: 40040480 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: MUL OUT[0], TEMP[0], IN[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[1], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[1].xy__, 2D[0]; 1: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=55************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.w t0.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL SAMP[8] DCL CONST[0] DCL CONST[5..8] DCL TEMP[0..11] IMM FLT32 { 2.0000, -1.0000, 1.0000, 4.0000} IMM FLT32 { 0.3000, 0.5900, 0.1100, 0.0000} IMM FLT32 { 1.0000, 4.0000, 3.0000, 0.5000} 0: MAD TEMP[0].xy, IN[3], CONST[0], CONST[0].zwzw 1: TEX TEMP[1], IN[6], SAMP[0], 2D 2: TEX TEMP[2], IN[6], SAMP[1], 2D 3: MUL_SAT TEMP[2], TEMP[2], IN[3].wwww 4: DP3 TEMP[3].x, IN[8], IN[8] 5: RSQ TEMP[3].x, TEMP[3].xxxx 6: MUL TEMP[3], TEMP[3].xxxx, IN[8] 7: DP3 TEMP[4].x, IN[2], IN[2] 8: RSQ TEMP[4].x, TEMP[4].xxxx 9: MUL TEMP[4], TEMP[4].xxxx, IN[2] 10: TEX TEMP[5], IN[3], SAMP[3], 2D 11: MOV TEMP[5].x, TEMP[5].wwww 12: MAD TEMP[5], TEMP[5], IMM[0].xxxx, IMM[0].yyyy 13: TEX TEMP[6], TEMP[0], SAMP[4], 2D 14: MOV TEMP[6].x, TEMP[6].wwww 15: MAD TEMP[6].xy, TEMP[6], IMM[0].xxxx, IMM[0].yyyy 16: MAD TEMP[5].xy, TEMP[2].xxxx, TEMP[6], TEMP[5] 17: MOV TEMP[5].z, IMM[1].wwww 18: DP3 TEMP[7].x, TEMP[5], TEMP[5] 19: ADD TEMP[7].x, IMM[2].xxxx, -TEMP[7].xxxx 20: RSQ TEMP[7].x, TEMP[7].xxxx 21: RCP TEMP[5].z, TEMP[7].xxxx 22: DP3_SAT TEMP[4].x, TEMP[4], TEMP[5] 23: TXP TEMP[7], IN[5], SAMP[5], 2D 24: MUL TEMP[4], TEMP[4].xxxx, TEMP[7] 25: TEX TEMP[7].x, IN[4], SAMP[6], 2D 26: MUL TEMP[4], TEMP[4], TEMP[7].xxxx 27: MUL TEMP[1], TEMP[1], IN[0] 28: MUL TEMP[8], TEMP[1], CONST[5] 29: DP3 TEMP[3].x, TEMP[3], TEMP[5] 30: MAD_SAT TEMP[7].x, TEMP[3].xxxx, IMM[2].yyyy, -IMM[2].zzzz 31: MUL TEMP[7].x, TEMP[7].xxxx, TEMP[7].xxxx 32: MUL TEMP[7], TEMP[7].xxxx, CONST[6] 33: TEX TEMP[9], IN[7], SAMP[7], 2D 34: ADD TEMP[9], TEMP[9], TEMP[9] 35: TEX TEMP[10], TEMP[0], SAMP[8], 2D 36: ADD TEMP[10], TEMP[10], -IMM[2].wwww 37: MAD TEMP[9], TEMP[2].xxxx, TEMP[10], TEMP[9] 38: MAD TEMP[8], TEMP[7], TEMP[9], TEMP[8] 39: MUL TEMP[11].xyz, TEMP[4], TEMP[8] 40: MAD TEMP[11].xyz, TEMP[1], CONST[7], TEMP[11] 41: LRP OUT[0].xyz, IN[1].xxxx, CONST[8], TEMP[11] 42: MUL TEMP[7], TEMP[7], TEMP[9] 43: MUL TEMP[7], TEMP[7], TEMP[4] 44: DP3 OUT[0].w, TEMP[7], IMM[1] 45: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3 output[0].w, temp[7], const[10]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[7].x, input[4], 2D[6]; 26: MUL temp[4], temp[4], temp[7].xxxx; 27: MUL temp[1], temp[1], input[0]; 28: MUL temp[8], temp[1], const[5]; 29: DP3 temp[3].x, temp[3], temp[5]; 30: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 31: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 32: MUL temp[7], temp[7].xxxx, const[6]; 33: TEX temp[9], input[7], 2D[7]; 34: ADD temp[9], temp[9], temp[9]; 35: TEX temp[10], temp[0], 2D[8]; 36: ADD temp[10], temp[10], -const[11].wwww; 37: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 38: MAD temp[8], temp[7], temp[9], temp[8]; 39: MUL temp[11].xyz, temp[4], temp[8]; 40: MAD temp[11].xyz, temp[1], const[7], temp[11]; 41: LRP_SAT output[0].xyz, input[1].xxxx, const[8], temp[11]; 42: MUL temp[7], temp[7], temp[9]; 43: MUL temp[7], temp[7], temp[4]; 44: DP3_SAT output[0].w, temp[7], const[10]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, temp[3].xxxx; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, temp[4].xxxx; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, temp[7].xxxx; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[6]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[7]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[8]; 37: ADD temp[10], temp[10], -const[11].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: MAD temp[11].xyz, temp[1], const[7], temp[11]; 42: LRP_SAT output[0].xyz, input[1].xxxx, const[8], temp[11]; 43: MUL temp[7], temp[7], temp[9]; 44: MUL temp[7], temp[7], temp[4]; 45: DP3_SAT output[0].w, temp[7], const[10]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].xy, input[3], const[0], const[0].zwzw; 1: TEX temp[1], input[6], 2D[0]; 2: TEX temp[2], input[6], 2D[1]; 3: MUL_SAT temp[2], temp[2], input[3].wwww; 4: DP3 temp[3].x, input[8], input[8]; 5: RSQ temp[3].x, |temp[3].xxxx|; 6: MUL temp[3], temp[3].xxxx, input[8]; 7: DP3 temp[4].x, input[2], input[2]; 8: RSQ temp[4].x, |temp[4].xxxx|; 9: MUL temp[4], temp[4].xxxx, input[2]; 10: TEX temp[5], input[3], 2D[3]; 11: MOV temp[5].x, temp[5].wwww; 12: MAD temp[5], temp[5], const[9].xxxx, const[9].yyyy; 13: TEX temp[6], temp[0], 2D[4]; 14: MOV temp[6].x, temp[6].wwww; 15: MAD temp[6].xy, temp[6], const[9].xxxx, const[9].yyyy; 16: MAD temp[5].xy, temp[2].xxxx, temp[6], temp[5]; 17: MOV temp[5].z, const[10].wwww; 18: DP3 temp[7].x, temp[5], temp[5]; 19: ADD temp[7].x, const[11].xxxx, -temp[7].xxxx; 20: RSQ temp[7].x, |temp[7].xxxx|; 21: RCP temp[5].z, temp[7].xxxx; 22: DP3_SAT temp[4].x, temp[4], temp[5]; 23: TXP temp[7], input[5], 2D[5]; 24: MUL temp[4], temp[4].xxxx, temp[7]; 25: TEX temp[12], input[4], 2D[6]; 26: MOV temp[7].x, temp[12]; 27: MUL temp[4], temp[4], temp[7].xxxx; 28: MUL temp[1], temp[1], input[0]; 29: MUL temp[8], temp[1], const[5]; 30: DP3 temp[3].x, temp[3], temp[5]; 31: MAD_SAT temp[7].x, temp[3].xxxx, const[11].yyyy, -const[11].zzzz; 32: MUL temp[7].x, temp[7].xxxx, temp[7].xxxx; 33: MUL temp[7], temp[7].xxxx, const[6]; 34: TEX temp[9], input[7], 2D[7]; 35: ADD temp[9], temp[9], temp[9]; 36: TEX temp[10], temp[0], 2D[8]; 37: ADD temp[10], temp[10], -const[11].wwww; 38: MAD temp[9], temp[2].xxxx, temp[10], temp[9]; 39: MAD temp[8], temp[7], temp[9], temp[8]; 40: MUL temp[11].xyz, temp[4], temp[8]; 41: MAD temp[11].xyz, temp[1], const[7], temp[11]; 42: ADD temp[13].xyz, const[8], -temp[11]; 43: MAD_SAT output[0].xyz, input[1].xxxx, temp[13], temp[11]; 44: MUL temp[7], temp[7], temp[9]; 45: MUL temp[7], temp[7], temp[4]; 46: DP3_SAT output[0].w, temp[7], const[10]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: TEX temp[2].x, input[6].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[3]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[9].xx__, const[9].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[4]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[9].xx__, const[9].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[10].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[11].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[6]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[7]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[11].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: ADD temp[13].xyz, const[8].xyz_, -temp[11].xyz_; 43: MAD_SAT output[0].xyz, input[1].xxx_, temp[13].xyz_, temp[11].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 45: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[7].xyz_, const[10].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: TEX temp[2].x, input[6].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[3]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[9].xx__, const[9].yy__; 13: TEX temp[6].yw, temp[0].xy__, 2D[4]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[9].xx__, const[9].yy__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, const[10].__w_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, const[11].x___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[6]; 26: MOV temp[7].x, temp[12].x___; 27: MUL temp[4].xyz, temp[4].xyz_, temp[7].xxx_; 28: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 29: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 30: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 31: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 32: MUL temp[7].x, temp[7].x___, temp[7].x___; 33: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 34: TEX temp[9].xyz, input[7].xy__, 2D[7]; 35: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 36: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 37: ADD temp[10].xyz, temp[10].xyz_, -const[11].www_; 38: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 39: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 40: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 41: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 42: ADD temp[13].xyz, const[8].xyz_, -temp[11].xyz_; 43: MAD_SAT output[0].xyz, input[1].xxx_, temp[13].xyz_, temp[11].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 45: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[7].xyz_, const[10].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].xy, input[3].xy__, const[0].xy__, const[0].zw__; 1: TEX temp[1].xyz, input[6].xy__, 2D[0]; 2: TEX temp[2].x, input[6].xy__, 2D[1]; 3: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 4: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 5: RSQ temp[3].x, |temp[3].x___|; 6: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 7: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 8: RSQ temp[4].x, |temp[4].x___|; 9: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 10: TEX temp[5].yw, input[3].xy__, 2D[3]; 11: MOV temp[5].x, temp[5].w___; 12: MAD temp[5].xy, temp[5].xy__, const[9].xx__, none.-1-1__; 13: TEX temp[6].yw, temp[0].xy__, 2D[4]; 14: MOV temp[6].x, temp[6].w___; 15: MAD temp[6].xy, temp[6].xy__, const[9].xx__, none.-1-1__; 16: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 17: MOV temp[5].z, none.__0_; 18: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 19: ADD temp[7].x, none.1___, -temp[7].x___; 20: RSQ temp[7].x, |temp[7].x___|; 21: RCP temp[5].z, temp[7].x___; 22: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 23: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 24: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 25: TEX temp[12].x, input[4].xy__, 2D[6]; 26: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 27: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 28: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 29: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 30: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 31: MUL temp[7].x, temp[7].x___, temp[7].x___; 32: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 33: TEX temp[9].xyz, input[7].xy__, 2D[7]; 34: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 35: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 36: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 37: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 38: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 39: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 40: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 41: MAD_SAT output[0].xyz, input[1].xxx_, (const[8] - temp[11]).xyz_, temp[11].xyz_; 42: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 43: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 44: DP3_SAT output[0].w, temp[7].xyz_, const[10].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: TEX temp[2].x, input[6].xy__, 2D[1]; 5: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 6: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 7: RSQ temp[3].x, |temp[3].x___|; 8: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 9: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 10: RSQ temp[4].x, |temp[4].x___|; 11: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: MOV temp[5].x, temp[5].w___; 14: MAD temp[5].xy, temp[5].xy__, const[9].xx__, none.-1-1__; 15: TEX temp[6].yw, temp[0].xy__, 2D[4]; 16: MOV temp[6].x, temp[6].w___; 17: MAD temp[6].xy, temp[6].xy__, const[9].xx__, none.-1-1__; 18: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[7].x, none.1___, -temp[7].x___; 22: RSQ temp[7].x, |temp[7].x___|; 23: RCP temp[5].z, temp[7].x___; 24: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 25: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 26: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 27: TEX temp[12].x, input[4].xy__, 2D[6]; 28: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 29: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 30: MUL temp[8].xyz, temp[1].xyz_, const[5].xyz_; 31: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 32: MAD_SAT temp[7].x, temp[3].x___, const[11].y___, -const[11].z___; 33: MUL temp[7].x, temp[7].x___, temp[7].x___; 34: MUL temp[7].xyz, temp[7].xxx_, const[6].xyz_; 35: TEX temp[9].xyz, input[7].xy__, 2D[7]; 36: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 37: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 38: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 39: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 40: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 41: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 42: MAD temp[11].xyz, temp[1].xyz_, const[7].xyz_, temp[11].xyz_; 43: MAD_SAT output[0].xyz, input[1].xxx_, (const[8] - temp[11]).xyz_, temp[11].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 45: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[7].xyz_, const[10].xyz_; CONST[5] = { 2.0000 -1.0000 1.0000 4.0000 } CONST[6] = { 0.3000 0.5900 0.1100 0.0000 } CONST[7] = { 1.0000 4.0000 3.0000 0.5000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[0].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[1].xyz, input[6].xy__, 2D[0]; 4: TEX temp[2].x, input[6].xy__, 2D[1]; 5: MUL_SAT temp[2].x, temp[2].x___, input[3].w___; 6: DP3 temp[3].x, input[8].xyz_, input[8].xyz_; 7: RSQ temp[3].x, |temp[3].x___|; 8: MUL temp[3].xyz, temp[3].xxx_, input[8].xyz_; 9: DP3 temp[4].x, input[2].xyz_, input[2].xyz_; 10: RSQ temp[4].x, |temp[4].x___|; 11: MUL temp[4].xyz, temp[4].xxx_, input[2].xyz_; 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: MOV temp[5].x, temp[5].w___; 14: MAD temp[5].xy, temp[5].xy__, const[5].xx__, none.-1-1__; 15: TEX temp[6].yw, temp[0].xy__, 2D[4]; 16: MOV temp[6].x, temp[6].w___; 17: MAD temp[6].xy, temp[6].xy__, const[5].xx__, none.-1-1__; 18: MAD temp[5].xy, temp[2].xx__, temp[6].xy__, temp[5].xy__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[7].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[7].x, none.1___, -temp[7].x___; 22: RSQ temp[7].x, |temp[7].x___|; 23: RCP temp[5].z, temp[7].x___; 24: DP3_SAT temp[4].x, temp[4].xyz_, temp[5].xyz_; 25: TXP temp[7].xyz, input[5].xy_w, 2D[5]; 26: MUL temp[4].xyz, temp[4].xxx_, temp[7].xyz_; 27: TEX temp[12].x, input[4].xy__, 2D[6]; 28: MUL temp[4].xyz, temp[4].xyz_, temp[12].xxx_; 29: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 30: MUL temp[8].xyz, temp[1].xyz_, const[1].xyz_; 31: DP3 temp[3].x, temp[3].xyz_, temp[5].xyz_; 32: MAD_SAT temp[7].x, temp[3].x___, const[7].y___, -const[7].z___; 33: MUL temp[7].x, temp[7].x___, temp[7].x___; 34: MUL temp[7].xyz, temp[7].xxx_, const[2].xyz_; 35: TEX temp[9].xyz, input[7].xy__, 2D[7]; 36: ADD temp[9].xyz, temp[9].xyz_, temp[9].xyz_; 37: TEX temp[10].xyz, temp[0].xy__, 2D[8]; 38: ADD temp[10].xyz, temp[10].xyz_, -none.HHH_; 39: MAD temp[9].xyz, temp[2].xxx_, temp[10].xyz_, temp[9].xyz_; 40: MAD temp[8].xyz, temp[7].xyz_, temp[9].xyz_, temp[8].xyz_; 41: MUL temp[11].xyz, temp[4].xyz_, temp[8].xyz_; 42: MAD temp[11].xyz, temp[1].xyz_, const[3].xyz_, temp[11].xyz_; 43: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[11]).xyz_, temp[11].xyz_; 44: MUL temp[7].xyz, temp[7].xyz_, temp[9].xyz_; 45: MUL temp[7].xyz, temp[7].xyz_, temp[4].xyz_; 46: DP3_SAT output[0].w, temp[7].xyz_, const[6].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[13].x, const[0].z___; 1: MOV temp[13].y, const[0]._w__; 2: MAD temp[14].xy, input[3].xy__, const[0].xy__, temp[13].xy__; 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: TEX temp[16].x, input[6].xy__, 2D[1]; 5: MUL_SAT temp[17].x, temp[16].x___, input[3].w___; 6: DP3 temp[18].x, input[8].xyz_, input[8].xyz_; 7: RSQ temp[19].x, |temp[18].x___|; 8: MUL temp[20].xyz, temp[19].xxx_, input[8].xyz_; 9: DP3 temp[21].x, input[2].xyz_, input[2].xyz_; 10: RSQ temp[22].x, |temp[21].x___|; 11: MUL temp[23].xyz, temp[22].xxx_, input[2].xyz_; 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: MOV temp[5].x, temp[5].w___; 14: MAD temp[24].xy, temp[5].xy__, const[5].xx__, none.-1-1__; 15: TEX temp[6].yw, temp[14].xy__, 2D[4]; 16: MOV temp[6].x, temp[6].w___; 17: MAD temp[25].xy, temp[6].xy__, const[5].xx__, none.-1-1__; 18: MAD temp[5].xy, temp[17].xx__, temp[25].xy__, temp[24].xy__; 19: MOV temp[5].z, none.__0_; 20: DP3 temp[26].x, temp[5].xyz_, temp[5].xyz_; 21: ADD temp[27].x, none.1___, -temp[26].x___; 22: RSQ temp[28].x, |temp[27].x___|; 23: RCP temp[5].z, temp[28].x___; 24: DP3_SAT temp[29].x, temp[23].xyz_, temp[5].xyz_; 25: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 26: MUL temp[31].xyz, temp[29].xxx_, temp[30].xyz_; 27: TEX temp[32].x, input[4].xy__, 2D[6]; 28: MUL temp[33].xyz, temp[31].xyz_, temp[32].xxx_; 29: MUL temp[34].xyz, temp[15].xyz_, input[0].xyz_; 30: MUL temp[35].xyz, temp[34].xyz_, const[1].xyz_; 31: DP3 temp[36].x, temp[20].xyz_, temp[5].xyz_; 32: MAD_SAT temp[37].x, temp[36].x___, const[7].y___, -const[7].z___; 33: MUL temp[38].x, temp[37].x___, temp[37].x___; 34: MUL temp[39].xyz, temp[38].xxx_, const[2].xyz_; 35: TEX temp[40].xyz, input[7].xy__, 2D[7]; 36: ADD temp[41].xyz, temp[40].xyz_, temp[40].xyz_; 37: TEX temp[42].xyz, temp[14].xy__, 2D[8]; 38: ADD temp[43].xyz, temp[42].xyz_, -none.HHH_; 39: MAD temp[44].xyz, temp[17].xxx_, temp[43].xyz_, temp[41].xyz_; 40: MAD temp[45].xyz, temp[39].xyz_, temp[44].xyz_, temp[35].xyz_; 41: MUL temp[46].xyz, temp[33].xyz_, temp[45].xyz_; 42: MAD temp[47].xyz, temp[34].xyz_, const[3].xyz_, temp[46].xyz_; 43: MAD_SAT output[0].xyz, input[1].xxx_, (const[4] - temp[47]).xyz_, temp[47].xyz_; 44: MUL temp[48].xyz, temp[39].xyz_, temp[44].xyz_; 45: MUL temp[49].xyz, temp[48].xyz_, temp[33].xyz_; 46: DP3_SAT output[0].w, temp[49].xyz_, const[6].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 1: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 2: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 3: TEX temp[15].xyz, input[6].xy__, 2D[0]; 4: TEX temp[16].x, input[6].xy__, 2D[1]; 5: src0.xyz = temp[16], src0.w = input[3] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 6: src0.xyz = input[8] DP3 temp[18].x, src0.xyz, src0.xyz 7: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 8: src0.xyz = temp[19], src1.xyz = input[8] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 9: src0.xyz = input[2] DP3 temp[21].x, src0.xyz, src0.xyz 10: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 11: src0.xyz = temp[22], src1.xyz = input[2] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 12: TEX temp[5].yw, input[3].xy__, 2D[3]; 13: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 14: src0.xyz = temp[5], src1.xyz = const[5] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 15: TEX temp[6].yw, temp[14].xy__, 2D[4]; 16: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 17: src0.xyz = temp[6], src1.xyz = const[5] MAD temp[25].xy, src0.xy_, src1.xx_, -src0.11_ 18: src0.xyz = temp[17], src1.xyz = temp[25], src2.xyz = temp[24] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 19: MAD temp[5].z, src0.__0, src0.111, src0.000 20: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 21: src0.xyz = temp[26] MAD temp[27].x, src0.1__, src0.111, -src0.x__ 22: src0.xyz = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.x| 23: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 24: src0.xyz = temp[23], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 25: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 26: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 27: TEX temp[32].x, input[4].xy__, 2D[6]; 28: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 29: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 30: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 31: src0.xyz = temp[20], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 32: src0.xyz = temp[36], src1.xyz = const[7] MAD_SAT temp[37].x, src0.x__, src1.y__, -src1.z__ 33: src0.xyz = temp[37] MAD temp[38].x, src0.x__, src0.x__, src0.000 34: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 35: TEX temp[40].xyz, input[7].xy__, 2D[7]; 36: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 37: TEX temp[42].xyz, temp[14].xy__, 2D[8]; 38: src0.xyz = temp[42] MAD temp[43].xyz, src0.xyz, src0.111, -src0.HHH 39: src0.xyz = temp[17], src1.xyz = temp[43], src2.xyz = temp[41] MAD temp[44].xyz, src0.xxx, src1.xyz, src2.xyz 40: src0.xyz = temp[39], src1.xyz = temp[44], src2.xyz = temp[35] MAD temp[45].xyz, src0.xyz, src1.xyz, src2.xyz 41: src0.xyz = temp[33], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xyz, src2.xyz 43: src0.xyz = temp[47], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 44: src0.xyz = temp[39], src1.xyz = temp[44] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 45: src0.xyz = temp[48], src1.xyz = temp[33] MAD temp[49].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[49], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[16].x, input[6].xy__, 2D[1]; 3: TEX temp[5].yw, input[3].xy__, 2D[3]; 4: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 5: TEX temp[32].x, input[4].xy__, 2D[6]; 6: TEX temp[40].xyz, input[7].xy__, 2D[7]; 7: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[5], src1.xyz = const[5] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[16], src0.w = input[3] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 11: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 12: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 13: MAD temp[5].z, src0.__0, src0.111, src0.000 14: src0.xyz = input[2] DP3 temp[21].x, src0.xyz, src0.xyz 15: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 16: src0.xyz = temp[22], src1.xyz = input[2] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 17: src0.xyz = input[8] DP3 temp[18].x, src0.xyz, src0.xyz 18: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 19: src0.xyz = temp[19], src1.xyz = input[8] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 20: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 21: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 22: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[42].xyz, temp[14].xy__, 2D[8]; 25: TEX temp[6].yw, temp[14].xy__, 2D[4]; 26: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 27: src0.xyz = temp[6], src1.xyz = const[5] MAD temp[25].xy, src0.xy_, src1.xx_, -src0.11_ 28: src0.xyz = temp[17], src1.xyz = temp[25], src2.xyz = temp[24] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 29: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 30: src0.xyz = temp[42], src1.xyz = temp[26] MAD temp[43].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[27].w, src0.1, src0.1, -src1.x 31: src0.xyz = temp[27], src0.w = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.w| 32: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 33: src0.xyz = temp[23], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 34: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 36: src0.xyz = temp[20], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 37: src0.xyz = temp[17], src1.xyz = temp[43], src2.xyz = temp[41] MAD temp[44].xyz, src0.xxx, src1.xyz, src2.xyz 38: src0.xyz = temp[36], src1.xyz = const[7] MAD_SAT temp[37].w, src0.x, src1.y, -src1.z 39: src0.xyz = temp[37], src0.w = temp[37] MAD temp[38].x, src0.w__, src0.w__, src0.000 40: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 41: src0.xyz = temp[39], src1.xyz = temp[44], src2.xyz = temp[35] MAD temp[45].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = temp[33], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xyz, src2.xyz 44: src0.xyz = temp[47], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 45: src0.xyz = temp[39], src1.xyz = temp[44] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[48], src1.xyz = temp[33] MAD temp[49].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[49], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].xyz, input[6].xy__, 2D[0]; 2: TEX temp[16].x, input[6].xy__, 2D[1]; 3: TEX temp[5].yw, input[3].xy__, 2D[3]; 4: TXP temp[30].xyz, input[5].xy_w, 2D[5]; 5: TEX temp[32].x, input[4].xy__, 2D[6]; 6: TEX temp[40].xyz, input[7].xy__, 2D[7]; 7: src0.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[5] MAD temp[5].x, src0.w__, src0.111, src0.000 9: src0.xyz = temp[5], src1.xyz = const[5] MAD temp[24].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[16], src0.w = input[3] MAD_SAT temp[17].x, src0.x__, src0.w__, src0.000 11: src0.xyz = temp[15], src1.xyz = input[0] MAD temp[34].xyz, src0.xyz, src1.xyz, src0.000 12: src0.xyz = temp[34], src1.xyz = const[1] MAD temp[35].xyz, src0.xyz, src1.xyz, src0.000 13: MAD temp[5].z, src0.__0, src0.111, src0.000 14: src0.xyz = input[2] DP3 temp[21].x, src0.xyz, src0.xyz 15: src0.xyz = temp[21] REPL_ALPHA temp[22].x RSQ, |src0.x| 16: src0.xyz = temp[22], src1.xyz = input[2] MAD temp[23].xyz, src0.xxx, src1.xyz, src0.000 17: src0.xyz = input[8] DP3 temp[18].x, src0.xyz, src0.xyz 18: src0.xyz = temp[18] REPL_ALPHA temp[19].x RSQ, |src0.x| 19: src0.xyz = temp[19], src1.xyz = input[8] MAD temp[20].xyz, src0.xxx, src1.xyz, src0.000 20: src0.w = const[0] MAD temp[13].y, src0._w_, src0.111, src0.000 21: src0.xyz = const[0] MAD temp[13].x, src0.z__, src0.111, src0.000 22: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[13] MAD temp[14].xy, src0.xy_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[42].xyz, temp[14].xy__, 2D[8]; 25: TEX temp[6].yw, temp[14].xy__, 2D[4]; 26: src0.w = temp[6] MAD temp[6].x, src0.w__, src0.111, src0.000 27: src0.xyz = temp[6], src1.xyz = const[5] MAD temp[25].xy, src0.xy_, src1.xx_, -src0.11_ 28: src0.xyz = temp[17], src1.xyz = temp[25], src2.xyz = temp[24] MAD temp[5].xy, src0.xx_, src1.xy_, src2.xy_ 29: src0.xyz = temp[5] DP3 temp[26].x, src0.xyz, src0.xyz 30: src0.xyz = temp[42], src1.xyz = temp[26] MAD temp[43].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[27].w, src0.1, src0.1, -src1.x 31: src0.w = temp[27] REPL_ALPHA temp[28].x RSQ, |src0.w| 32: src0.xyz = temp[28] REPL_ALPHA temp[5].z RCP, src0.x 33: src0.xyz = temp[23], src1.xyz = temp[5] DP3_SAT temp[29].x, src0.xyz, src1.xyz 34: src0.xyz = temp[29], src1.xyz = temp[30] MAD temp[31].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 36: src0.xyz = temp[20], src1.xyz = temp[5] DP3 temp[36].x, src0.xyz, src1.xyz 37: src0.xyz = temp[17], src1.xyz = temp[43], src2.xyz = temp[41] MAD temp[44].xyz, src0.xxx, src1.xyz, src2.xyz 38: src0.xyz = temp[36], src1.xyz = const[7] MAD_SAT temp[37].w, src0.x, src1.y, -src1.z 39: src0.w = temp[37] MAD temp[38].x, src0.w__, src0.w__, src0.000 40: src0.xyz = temp[38], src1.xyz = const[2] MAD temp[39].xyz, src0.xxx, src1.xyz, src0.000 41: src0.xyz = temp[39], src1.xyz = temp[44], src2.xyz = temp[35] MAD temp[45].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = temp[33], src1.xyz = temp[45] MAD temp[46].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = temp[34], src1.xyz = const[3], src2.xyz = temp[46] MAD temp[47].xyz, src0.xyz, src1.xyz, src2.xyz 44: src0.xyz = temp[47], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 45: src0.xyz = temp[39], src1.xyz = temp[44] MAD temp[48].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[48], src1.xyz = temp[33] MAD temp[49].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[49], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9].xyz, input[6].xy__, 2D[0]; 2: TEX temp[6].x, input[6].xy__, 2D[1]; 3: TEX temp[10].yw, input[3].xy__, 2D[3]; 4: TXP temp[5].xyz, input[5].xy_w, 2D[5]; 5: TEX temp[4].x, input[4].xy__, 2D[6]; 6: TEX temp[7].xyz, input[7].xy__, 2D[7]; 7: src0.xyz = temp[7] MAD temp[7].xyz, src0.xyz, src0.111, src0.xyz 8: src0.w = temp[10] MAD temp[10].x, src0.w__, src0.11_, src0.00_ 9: src0.xyz = temp[10], src1.xyz = const[5] MAD temp[10].xy, src0.xy_, src1.xx_, -src0.11_ 10: src0.xyz = temp[6], src0.w = input[3] MAD_SAT temp[1].y, src0._x_, src0._w_, src0._0_ 11: src0.xyz = temp[9], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 12: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[6].xyz, src0.xyz, src1.xyz, src0.000 13: MAD temp[9].z, src0.__0, src0.111, src0.000 14: src0.xyz = input[2] DP3 temp[1].z, src0.xyz, src0.xyz 15: src0.xyz = temp[1] REPL_ALPHA temp[1].z RSQ, |src0.z| 16: src0.xyz = temp[1], src1.xyz = input[2] MAD temp[2].xyz, src0.zzz, src1.xyz, src0.000 17: src0.xyz = input[8] DP3 temp[1].z, src0.xyz, src0.xyz 18: src0.xyz = temp[1] REPL_ALPHA temp[1].z RSQ, |src0.z| 19: src0.xyz = temp[1], src1.xyz = input[8] MAD temp[8].xyz, src0.zzz, src1.xyz, src0.000 20: src0.w = const[0] MAD temp[11].y, src0._w_, src0.11_, src0.00_ 21: src0.xyz = const[0] MAD temp[11].x, src0.z__, src0.11_, src0.00_ 22: src0.xyz = input[3], src1.xyz = const[0], src2.xyz = temp[11] MAD temp[3].xy, src0.xy_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[11].xyz, temp[3].xy__, 2D[8]; 25: TEX temp[3].yw, temp[3].xy__, 2D[4]; 26: src0.w = temp[3] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 27: src0.xyz = temp[3], src1.xyz = const[5] MAD temp[3].xy, src0.xy_, src1.xx_, -src0.11_ 28: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[10] MAD temp[9].xy, src0.yy_, src1.xy_, src2.xy_ 29: src0.xyz = temp[9] DP3 temp[1].z, src0.xyz, src0.xyz 30: src0.xyz = temp[11], src1.xyz = temp[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[0].w, src0.1, src0.1, -src1.z 31: src0.w = temp[0] REPL_ALPHA temp[1].z RSQ, |src0.w| 32: src0.xyz = temp[1] REPL_ALPHA temp[1].z RCP, src0.z 33: src0.xyz = temp[2], src1.xyz = temp[9], src2.xyz = temp[1] DP3_SAT temp[2].x, src0.xyz, src2.xyz 34: src0.xyz = temp[2], src1.xyz = temp[5] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 35: src0.xyz = temp[2], src1.xyz = temp[4] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 36: src0.xyz = temp[8], src1.xyz = temp[9], src2.xyz = temp[1] DP3 temp[1].z, src0.xyz, src2.xyz 37: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = temp[7] MAD temp[3].xyz, src0.yyy, src1.xyz, src2.xyz 38: src0.xyz = temp[1], src1.xyz = const[7] MAD_SAT temp[0].w, src0.z, src1.y, -src1.z 39: src0.w = temp[0] MAD temp[1].y, src0._w_, src0._w_, src0._0_ 40: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[4].xyz, src0.yyy, src1.xyz, src0.000 41: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = temp[6] MAD temp[5].xyz, src0.xyz, src1.xyz, src2.xyz 42: src0.xyz = temp[2], src1.xyz = temp[5] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 43: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[5] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 44: src0.xyz = temp[0], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 45: src0.xyz = temp[4], src1.xyz = temp[3] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 46: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 47: src0.xyz = temp[0], src1.xyz = const[6] DP3_SAT, src0.xyz, src1.xyz DP3_SAT color[0].w, src0._, src0._ pc=56************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 5 (code_addr: 000a03c0) TEX: TEX t9, t6, texture[0] (00008246) TEX t6, t6, texture[1] (00008986) TEX t10, t3, texture[3] (00009a83) TXP t5, t5, texture[5] (0001a945) TEX t4, t4, texture[6] (0000b104) TEX t7, t7, texture[7] (0000b9c7) 0: xyz: t7 t0 t0 bias-> t7.xyz (039c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 t7.xyz op: 00000a80 w: t7.x t7.x t7.x op: 00000000 1: xyz: t0 t0 t0 bias-> t10.x (00a80000) w: t10 t0 t0 bias-> (0000000a) xyz: t10.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t10 c5 t0 bias-> t10.xy (01a8094a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xyz c5.xxx -1.0 op: 000d4280 w: t10.x t10.x t10.x op: 00000000 3: xyz: t6 t0 t0 bias-> t1.y (01040006) w: t3 t0 t0 bias-> (00000003) xyz: t6.xxx t3.www 0.0 op: 40050601 w: t6.x t6.x t6.x op: 00000000 4: xyz: t9 t0 t0 bias-> t0.xyz (03800009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t0.xyz 0.0 op: 00050200 w: t9.x t9.x t9.x op: 00000000 5: xyz: t0 c1 t0 bias-> t6.xyz (03980840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 6: xyz: t0 t0 t0 bias-> t9.z (02240000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 7: xyz: t2 t0 t0 bias-> t1.z (02040002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 8: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.z| t1.x t1.x op: 05800042 9: xyz: t1 t2 t0 bias-> t2.xyz (03880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz t2.xyz 0.0 op: 00050203 w: t1.x t1.x t1.x op: 00000000 10: xyz: t8 t0 t0 bias-> t1.z (02040008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 11: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.z| t1.x t1.x op: 05800042 12: xyz: t1 t8 t0 bias-> t8.xyz (03a00201) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz t8.xyz 0.0 op: 00050203 w: t1.x t1.x t1.x op: 00000000 13: xyz: t0 t0 t0 bias-> t11.y (012c0000) w: c0 t0 t0 bias-> (00000020) xyz: c0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 14: xyz: c0 t0 t0 bias-> t11.x (00ac0020) w: t0 t0 t0 bias-> (00000000) xyz: c0.zzz 1.0 0.0 op: 00050a83 w: c0.x c0.x c0.x op: 00000000 15: xyz: t3 c0 t11 bias-> t3.xy (018cb803) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c0.xyz t11.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 16, tex_offset: 6, alu_end: 21, tex_end: 1 (code_addr: 00426550) TEX: TEX t11, t3, texture[8] (0000c2c3) TEX t3, t3, texture[4] (0000a0c3) 16: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 17: xyz: t3 c5 t0 bias-> t3.xy (018c0943) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c5.xxx -1.0 op: 000d4280 w: t3.x t3.x t3.x op: 00000000 18: xyz: t1 t3 t10 bias-> t9.xy (01a4a0c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t10.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 19: xyz: t9 t0 t0 bias-> t1.z (02040009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t9.xyz t9.xxx op: 00804000 w: t9.x t9.x t9.x op: 00000000 20: xyz: t11 t1 t0 bias-> t3.xyz (038c004b) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t11.xyz 1.0 -0.5 op: 000d8a80 w: 1.0 1.0 -t1.z op: 00094891 21: xyz: t0 t0 t0 bias-> t1.z (02040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 22: xyz: t1 t0 t0 bias-> t1.z (02040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.z t1.x t1.x op: 05000002 23: xyz: t2 t9 t1 bias-> t2.x (00881242) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t1.xyz t2.xxx op: 40804400 w: t2.x t2.x t2.x op: 00000000 24: xyz: t2 t5 t0 bias-> t2.xyz (03880142) w: t0 t0 t0 bias-> (00000000) xyz: t2.xxx t5.xyz 0.0 op: 00050201 w: t2.x t2.x t2.x op: 00000000 25: 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 26: xyz: t8 t9 t1 bias-> t1.z (02041248) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t1.xyz t8.xxx op: 00804400 w: t8.x t8.x t8.x op: 00000000 27: xyz: t1 t3 t7 bias-> t3.xyz (038c70c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy t3.xyz t7.xyz op: 00020202 w: t1.x t1.x t1.x op: 00000000 28: xyz: t1 c7 t0 bias-> (000009c1) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xxx t1.xxx t1.xxx op: 00004081 w: t1.z c7.y -c7.z op: 40094202 29: xyz: t32 t0 t0 bias-> t1.y (01040000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t0.www 0.0 op: 0005060c w: t32.x t32.x t32.x op: 00000000 30: xyz: t1 c2 t0 bias-> t4.xyz (03900881) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c2.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 31: xyz: t4 t3 t6 bias-> t5.xyz (039460c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t6.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 32: xyz: t2 t5 t0 bias-> t5.xyz (03940142) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t5.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 33: xyz: t0 c3 t5 bias-> t0.xyz (038058c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.xyz t5.xyz op: 80020200 NOP w: t0.x t0.x t0.x op: 00000000 34: xyz: t0 c4 t1 sub-> o0.xyz (1c001900) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.x t0.x t0.x op: 00000000 35: xyz: t4 t3 t0 bias-> t0.xyz (038000c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz 0.0 op: 00050200 w: t4.x t4.x t4.x op: 00000000 36: xyz: t0 t2 t0 bias-> t0.xyz (03800080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 37: xyz: t0 c6 t0 bias-> (00000980) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz c6.xyz t0.xxx op: 40804200 w: 1.0 1.0 t0.x op: 40800891 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL OUT[0], COLOR DCL CONST[0] 0: MOV OUT[0], IN[0] 1: LRP OUT[0].xyz, IN[1].xxxx, CONST[0], IN[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; 1: LRP output[0].xyz, input[1].xxxx, const[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; 1: LRP output[0].xyz, input[1].xxxx, const[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; 1: LRP output[0].xyz, input[1].xxxx, const[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; 1: LRP output[0].xyz, input[1].xxxx, const[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; 1: LRP output[0].xyz, input[1].xxxx, const[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; 1: LRP_SAT output[0].xyz, input[1].xxxx, const[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; 1: LRP_SAT output[0].xyz, input[1].xxxx, const[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; 1: ADD temp[0].xyz, const[0], -input[0]; 2: MAD_SAT output[0].xyz, input[1].xxxx, temp[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0].w, input[0].___w; 1: ADD temp[0].xyz, const[0].xyz_, -input[0].xyz_; 2: MAD_SAT output[0].xyz, input[1].xxx_, temp[0].xyz_, input[0].xyz_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV_SAT output[0].w, input[0].___w; 1: ADD temp[0].xyz, const[0].xyz_, -input[0].xyz_; 2: MAD_SAT output[0].xyz, input[1].xxx_, temp[0].xyz_, input[0].xyz_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0].w, input[0].___w; 1: MAD_SAT output[0].xyz, input[1].xxx_, (const[0] - input[0]).xyz_, input[0].xyz_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0].w, input[0].___w; 1: MAD_SAT output[0].xyz, input[1].xxx_, (const[0] - input[0]).xyz_, input[0].xyz_; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0].w, input[0].___w; 1: MAD_SAT output[0].xyz, input[1].xxx_, (const[0] - input[0]).xyz_, input[0].xyz_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV_SAT output[0].w, input[0].___w; 1: MAD_SAT output[0].xyz, input[1].xxx_, (const[0] - input[0]).xyz_, input[0].xyz_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] MAD_SAT color[0].w, src0.w, src0.1, src0.0 1: src0.xyz = input[0], src1.xyz = const[0], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0], src1.xyz = const[0], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT 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], src1.xyz = const[0], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT 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], src1.xyz = const[0], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 pc=57************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 c0 t1 sub-> o0.xyz (1c001800) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t1.xxx srcp.xyz t0.xyz op: 40200789 w: t0.w 1.0 0.0 op: 40040889 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[2] DCL TEMP[0..1] IMM FLT32 { 8.0000, 4.0000, 2.0000, 0.0000} IMM FLT32 { 0.5000, 0.2500, 0.1250, 0.0625} IMM FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: MUL TEMP[0].xyz, IN[3], IMM[0].xxxx 1: TEX TEMP[0].x, TEMP[0], SAMP[0], 3D 2: MOV TEMP[0].w, TEMP[0].xxxx 3: MUL TEMP[1].xyz, IN[3], IMM[0].yyyy 4: TEX TEMP[1].x, TEMP[1], SAMP[0], 3D 5: MOV TEMP[0].z, TEMP[1].xxxx 6: MUL TEMP[1].xyz, IN[3], IMM[0].zzzz 7: TEX TEMP[1].x, TEMP[1], SAMP[0], 3D 8: MOV TEMP[0].y, TEMP[1].xxxx 9: TEX TEMP[0].x, IN[3], SAMP[0], 3D 10: DP4 TEMP[0].z, TEMP[0], IMM[1] 11: MAD TEMP[0].xy, TEMP[0].zzzz, CONST[2], IN[2] 12: TEX TEMP[0].x, TEMP[0], SAMP[2], 2D 13: MUL TEMP[0].x, TEMP[0], IMM[0].zzzz 14: ADD TEMP[0].y, TEMP[0].xxxx, -IMM[2].xxxx 15: MOV TEMP[0].w, IMM[0] 16: TEX TEMP[0].x, TEMP[0].zwzw, SAMP[1], 2D 17: ADD TEMP[0].x, TEMP[0], TEMP[0].yyyy 18: MOV TEMP[0].y, IMM[0].wwww 19: ADD TEMP[0].x, TEMP[0], -IN[0] 20: TEX TEMP[0], TEMP[0], SAMP[3], 2D 21: MAD TEMP[1].x, -IN[1], IN[1], IMM[2].xyyx 22: MUL TEMP[0], TEMP[0], IN[0].wwww 23: MUL OUT[0], TEMP[0], TEMP[1].xxxx 24: END Fragment Program: before compilation # Radeon Compiler Program 0: MUL temp[0].xyz, input[3], const[3].xxxx; 1: TEX temp[0].x, temp[0], 3D[0]; 2: MOV temp[0].w, temp[0].xxxx; 3: MUL temp[1].xyz, input[3], const[3].yyyy; 4: TEX temp[1].x, temp[1], 3D[0]; 5: MOV temp[0].z, temp[1].xxxx; 6: MUL temp[1].xyz, input[3], const[3].zzzz; 7: TEX temp[1].x, temp[1], 3D[0]; 8: MOV temp[0].y, temp[1].xxxx; 9: TEX temp[0].x, input[3], 3D[0]; 10: DP4 temp[0].z, temp[0], const[4]; 11: MAD temp[0].xy, temp[0].zzzz, const[2], input[2]; 12: TEX temp[0].x, temp[0], 2D[2]; 13: MUL temp[0].x, temp[0], const[3].zzzz; 14: ADD temp[0].y, temp[0].xxxx, -temp[0].1111; 15: MOV temp[0].w, const[3]; 16: TEX temp[0].x, temp[0].zwzw, 2D[1]; 17: ADD temp[0].x, temp[0], temp[0].yyyy; 18: MOV temp[0].y, const[3].wwww; 19: ADD temp[0].x, temp[0], -input[0]; 20: TEX temp[0], temp[0], 2D[3]; 21: MAD temp[1].x, -input[1], input[1], temp[0].1001; 22: MUL temp[0], temp[0], input[0].wwww; 23: MUL output[0], temp[0], temp[1].xxxx; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3], const[3].xxxx; 1: TEX temp[0].x, temp[0], 3D[0]; 2: MOV temp[0].w, temp[0].xxxx; 3: MUL temp[1].xyz, input[3], const[3].yyyy; 4: TEX temp[1].x, temp[1], 3D[0]; 5: MOV temp[0].z, temp[1].xxxx; 6: MUL temp[1].xyz, input[3], const[3].zzzz; 7: TEX temp[1].x, temp[1], 3D[0]; 8: MOV temp[0].y, temp[1].xxxx; 9: TEX temp[0].x, input[3], 3D[0]; 10: DP4 temp[0].z, temp[0], const[4]; 11: MAD temp[0].xy, temp[0].zzzz, const[2], input[2]; 12: TEX temp[0].x, temp[0], 2D[2]; 13: MUL temp[0].x, temp[0], const[3].zzzz; 14: ADD temp[0].y, temp[0].xxxx, -temp[0].1111; 15: MOV temp[0].w, const[3]; 16: TEX temp[0].x, temp[0].zwzw, 2D[1]; 17: ADD temp[0].x, temp[0], temp[0].yyyy; 18: MOV temp[0].y, const[3].wwww; 19: ADD temp[0].x, temp[0], -input[0]; 20: TEX temp[0], temp[0], 2D[3]; 21: MAD temp[1].x, -input[1], input[1], temp[0].1001; 22: MUL temp[0], temp[0], input[0].wwww; 23: MUL output[0], temp[0], temp[1].xxxx; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3], const[3].xxxx; 1: TEX temp[0].x, temp[0], 3D[0]; 2: MOV temp[0].w, temp[0].xxxx; 3: MUL temp[1].xyz, input[3], const[3].yyyy; 4: TEX temp[1].x, temp[1], 3D[0]; 5: MOV temp[0].z, temp[1].xxxx; 6: MUL temp[1].xyz, input[3], const[3].zzzz; 7: TEX temp[1].x, temp[1], 3D[0]; 8: MOV temp[0].y, temp[1].xxxx; 9: TEX temp[0].x, input[3], 3D[0]; 10: DP4 temp[0].z, temp[0], const[4]; 11: MAD temp[0].xy, temp[0].zzzz, const[2], input[2]; 12: TEX temp[0].x, temp[0], 2D[2]; 13: MUL temp[0].x, temp[0], const[3].zzzz; 14: ADD temp[0].y, temp[0].xxxx, -temp[0].1111; 15: MOV temp[0].w, const[3]; 16: TEX temp[0].x, temp[0].zwzw, 2D[1]; 17: ADD temp[0].x, temp[0], temp[0].yyyy; 18: MOV temp[0].y, const[3].wwww; 19: ADD temp[0].x, temp[0], -input[0]; 20: TEX temp[0], temp[0], 2D[3]; 21: MAD temp[1].x, -input[1], input[1], temp[0].1001; 22: MUL temp[0], temp[0], input[0].wwww; 23: MUL output[0], temp[0], temp[1].xxxx; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3], const[3].xxxx; 1: TEX temp[0].x, temp[0], 3D[0]; 2: MOV temp[0].w, temp[0].xxxx; 3: MUL temp[1].xyz, input[3], const[3].yyyy; 4: TEX temp[1].x, temp[1], 3D[0]; 5: MOV temp[0].z, temp[1].xxxx; 6: MUL temp[1].xyz, input[3], const[3].zzzz; 7: TEX temp[1].x, temp[1], 3D[0]; 8: MOV temp[0].y, temp[1].xxxx; 9: TEX temp[0].x, input[3], 3D[0]; 10: DP4 temp[0].z, temp[0], const[4]; 11: MAD temp[0].xy, temp[0].zzzz, const[2], input[2]; 12: TEX temp[0].x, temp[0], 2D[2]; 13: MUL temp[0].x, temp[0], const[3].zzzz; 14: ADD temp[0].y, temp[0].xxxx, -temp[0].1111; 15: MOV temp[0].w, const[3]; 16: TEX temp[0].x, temp[0].zwzw, 2D[1]; 17: ADD temp[0].x, temp[0], temp[0].yyyy; 18: MOV temp[0].y, const[3].wwww; 19: ADD temp[0].x, temp[0], -input[0]; 20: TEX temp[0], temp[0], 2D[3]; 21: MAD temp[1].x, -input[1], input[1], temp[0].1001; 22: MUL temp[0], temp[0], input[0].wwww; 23: MUL output[0], temp[0], temp[1].xxxx; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3], const[3].xxxx; 1: TEX temp[0].x, temp[0], 3D[0]; 2: MOV temp[0].w, temp[0].xxxx; 3: MUL temp[1].xyz, input[3], const[3].yyyy; 4: TEX temp[1].x, temp[1], 3D[0]; 5: MOV temp[0].z, temp[1].xxxx; 6: MUL temp[1].xyz, input[3], const[3].zzzz; 7: TEX temp[1].x, temp[1], 3D[0]; 8: MOV temp[0].y, temp[1].xxxx; 9: TEX temp[0].x, input[3], 3D[0]; 10: DP4 temp[0].z, temp[0], const[4]; 11: MAD temp[0].xy, temp[0].zzzz, const[2], input[2]; 12: TEX temp[0].x, temp[0], 2D[2]; 13: MUL temp[0].x, temp[0], const[3].zzzz; 14: ADD temp[0].y, temp[0].xxxx, -temp[0].1111; 15: MOV temp[0].w, const[3]; 16: TEX temp[0].x, temp[0].zwzw, 2D[1]; 17: ADD temp[0].x, temp[0], temp[0].yyyy; 18: MOV temp[0].y, const[3].wwww; 19: ADD temp[0].x, temp[0], -input[0]; 20: TEX temp[0], temp[0], 2D[3]; 21: MAD temp[1].x, -input[1], input[1], temp[0].1001; 22: MUL temp[0], temp[0], input[0].wwww; 23: MUL output[0], temp[0], temp[1].xxxx; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3], const[3].xxxx; 1: TEX temp[0].x, temp[0], 3D[0]; 2: MOV temp[0].w, temp[0].xxxx; 3: MUL temp[1].xyz, input[3], const[3].yyyy; 4: TEX temp[1].x, temp[1], 3D[0]; 5: MOV temp[0].z, temp[1].xxxx; 6: MUL temp[1].xyz, input[3], const[3].zzzz; 7: TEX temp[1].x, temp[1], 3D[0]; 8: MOV temp[0].y, temp[1].xxxx; 9: TEX temp[0].x, input[3], 3D[0]; 10: DP4 temp[0].z, temp[0], const[4]; 11: MAD temp[0].xy, temp[0].zzzz, const[2], input[2]; 12: TEX temp[0].x, temp[0], 2D[2]; 13: MUL temp[0].x, temp[0], const[3].zzzz; 14: ADD temp[0].y, temp[0].xxxx, -temp[0].1111; 15: MOV temp[0].w, const[3]; 16: TEX temp[0].x, temp[0].zwzw, 2D[1]; 17: ADD temp[0].x, temp[0], temp[0].yyyy; 18: MOV temp[0].y, const[3].wwww; 19: ADD temp[0].x, temp[0], -input[0]; 20: TEX temp[0], temp[0], 2D[3]; 21: MAD temp[1].x, -input[1], input[1], temp[0].1001; 22: MUL temp[0], temp[0], input[0].wwww; 23: MUL_SAT output[0], temp[0], temp[1].xxxx; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3], const[3].xxxx; 1: TEX temp[2], temp[0], 3D[0]; 2: MOV temp[0].x, temp[2]; 3: MOV temp[0].w, temp[0].xxxx; 4: MUL temp[1].xyz, input[3], const[3].yyyy; 5: TEX temp[3], temp[1], 3D[0]; 6: MOV temp[1].x, temp[3]; 7: MOV temp[0].z, temp[1].xxxx; 8: MUL temp[1].xyz, input[3], const[3].zzzz; 9: TEX temp[4], temp[1], 3D[0]; 10: MOV temp[1].x, temp[4]; 11: MOV temp[0].y, temp[1].xxxx; 12: TEX temp[5], input[3], 3D[0]; 13: MOV temp[0].x, temp[5]; 14: DP4 temp[0].z, temp[0], const[4]; 15: MAD temp[0].xy, temp[0].zzzz, const[2], input[2]; 16: TEX temp[6], temp[0], 2D[2]; 17: MOV temp[0].x, temp[6]; 18: MUL temp[0].x, temp[0], const[3].zzzz; 19: ADD temp[0].y, temp[0].xxxx, -temp[0].1111; 20: MOV temp[0].w, const[3]; 21: TEX temp[7], temp[0].zwzw, 2D[1]; 22: MOV temp[0].x, temp[7]; 23: ADD temp[0].x, temp[0], temp[0].yyyy; 24: MOV temp[0].y, const[3].wwww; 25: ADD temp[0].x, temp[0], -input[0]; 26: TEX temp[0], temp[0], 2D[3]; 27: MAD temp[1].x, -input[1], input[1], temp[0].1001; 28: MUL temp[0], temp[0], input[0].wwww; 29: MUL_SAT output[0], temp[0], temp[1].xxxx; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3], const[3].xxxx; 1: TEX temp[2], temp[0], 3D[0]; 2: MOV temp[0].x, temp[2]; 3: MOV temp[0].w, temp[0].xxxx; 4: MUL temp[1].xyz, input[3], const[3].yyyy; 5: TEX temp[3], temp[1], 3D[0]; 6: MOV temp[1].x, temp[3]; 7: MOV temp[0].z, temp[1].xxxx; 8: MUL temp[1].xyz, input[3], const[3].zzzz; 9: TEX temp[4], temp[1], 3D[0]; 10: MOV temp[1].x, temp[4]; 11: MOV temp[0].y, temp[1].xxxx; 12: TEX temp[5], input[3], 3D[0]; 13: MOV temp[0].x, temp[5]; 14: DP4 temp[0].z, temp[0], const[4]; 15: MAD temp[0].xy, temp[0].zzzz, const[2], input[2]; 16: TEX temp[6], temp[0], 2D[2]; 17: MOV temp[0].x, temp[6]; 18: MUL temp[0].x, temp[0], const[3].zzzz; 19: ADD temp[0].y, temp[0].xxxx, -temp[0].1111; 20: MOV temp[0].w, const[3]; 21: TEX temp[7], temp[0].zwzw, 2D[1]; 22: MOV temp[0].x, temp[7]; 23: ADD temp[0].x, temp[0], temp[0].yyyy; 24: MOV temp[0].y, const[3].wwww; 25: ADD temp[0].x, temp[0], -input[0]; 26: TEX temp[0], temp[0], 2D[3]; 27: MAD temp[1].x, -input[1], input[1], temp[0].1001; 28: MUL temp[0], temp[0], input[0].wwww; 29: MUL_SAT output[0], temp[0], temp[1].xxxx; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3].xyz_, const[3].xxx_; 1: TEX temp[2].x, temp[0].xyz_, 3D[0]; 2: MOV temp[0].x, temp[2].x___; 3: MOV temp[0].w, temp[0].___x; 4: MUL temp[1].xyz, input[3].xyz_, const[3].yyy_; 5: TEX temp[3].x, temp[1].xyz_, 3D[0]; 6: MOV temp[1].x, temp[3].x___; 7: MOV temp[0].z, temp[1].__x_; 8: MUL temp[1].xyz, input[3].xyz_, const[3].zzz_; 9: TEX temp[4].x, temp[1].xyz_, 3D[0]; 10: MOV temp[1].x, temp[4].x___; 11: MOV temp[0].y, temp[1]._x__; 12: TEX temp[5].x, input[3].xyz_, 3D[0]; 13: MOV temp[0].x, temp[5].x___; 14: DP4 temp[0].z, temp[0], const[4]; 15: MAD temp[0].xy, temp[0].zz__, const[2].xy__, input[2].xy__; 16: TEX temp[6].x, temp[0].xy__, 2D[2]; 17: MOV temp[0].x, temp[6].x___; 18: MUL temp[0].x, temp[0].x___, const[3].z___; 19: ADD temp[0].y, temp[0]._x__, -temp[0]._1__; 20: MOV temp[0].w, const[3].___w; 21: TEX temp[7].x, temp[0].zw__, 2D[1]; 22: MOV temp[0].x, temp[7].x___; 23: ADD temp[0].x, temp[0].x___, temp[0].y___; 24: MOV temp[0].y, const[3]._w__; 25: ADD temp[0].x, temp[0].x___, -input[0].x___; 26: TEX temp[0], temp[0].xy__, 2D[3]; 27: MAD temp[1].x, -input[1].x___, input[1].x___, temp[0].1___; 28: MUL temp[0], temp[0], input[0].wwww; 29: MUL_SAT output[0], temp[0], temp[1].xxxx; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3].xyz_, const[3].xxx_; 1: TEX temp[2].x, temp[0].xyz_, 3D[0]; 2: MOV temp[0].x, temp[2].x___; 3: MOV temp[0].w, temp[0].___x; 4: MUL temp[1].xyz, input[3].xyz_, const[3].yyy_; 5: TEX temp[3].x, temp[1].xyz_, 3D[0]; 6: MOV temp[1].x, temp[3].x___; 7: MOV temp[0].z, temp[1].__x_; 8: MUL temp[1].xyz, input[3].xyz_, const[3].zzz_; 9: TEX temp[4].x, temp[1].xyz_, 3D[0]; 10: MOV temp[1].x, temp[4].x___; 11: MOV temp[0].y, temp[1]._x__; 12: TEX temp[5].x, input[3].xyz_, 3D[0]; 13: MOV temp[0].x, temp[5].x___; 14: DP4 temp[0].z, temp[0], const[4]; 15: MAD temp[0].xy, temp[0].zz__, const[2].xy__, input[2].xy__; 16: TEX temp[6].x, temp[0].xy__, 2D[2]; 17: MOV temp[0].x, temp[6].x___; 18: MUL temp[0].x, temp[0].x___, const[3].z___; 19: ADD temp[0].y, temp[0]._x__, -temp[0]._1__; 20: MOV temp[0].w, const[3].___w; 21: TEX temp[7].x, temp[0].zw__, 2D[1]; 22: MOV temp[0].x, temp[7].x___; 23: ADD temp[0].x, temp[0].x___, temp[0].y___; 24: MOV temp[0].y, const[3]._w__; 25: ADD temp[0].x, temp[0].x___, -input[0].x___; 26: TEX temp[0], temp[0].xy__, 2D[3]; 27: MAD temp[1].x, -input[1].x___, input[1].x___, temp[0].1___; 28: MUL temp[0], temp[0], input[0].wwww; 29: MUL_SAT output[0], temp[0], temp[1].xxxx; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3].xyz_, const[3].xxx_; 1: TEX temp[2].x, temp[0].xyz_, 3D[0]; 2: MOV temp[0].w, temp[2].___x; 3: MUL temp[1].xyz, input[3].xyz_, const[3].yyy_; 4: TEX temp[3].x, temp[1].xyz_, 3D[0]; 5: MOV temp[0].z, temp[3].__x_; 6: MUL temp[1].xyz, input[3].xyz_, const[3].zzz_; 7: TEX temp[4].x, temp[1].xyz_, 3D[0]; 8: MOV temp[0].y, temp[4]._x__; 9: TEX temp[5].x, input[3].xyz_, 3D[0]; 10: MOV temp[0].x, temp[5].x___; 11: DP4 temp[0].z, temp[0], const[4]; 12: MAD temp[0].xy, temp[0].zz__, const[2].xy__, input[2].xy__; 13: TEX temp[6].x, temp[0].xy__, 2D[2]; 14: MUL temp[0].x, temp[6].x___, const[3].z___; 15: ADD temp[0].y, temp[0]._x__, -none._1__; 16: MOV temp[0].w, none.___0; 17: TEX temp[7].x, temp[0].zw__, 2D[1]; 18: ADD temp[0].x, temp[7].x___, temp[0].y___; 19: MOV temp[0].y, none._0__; 20: ADD temp[0].x, temp[0].x___, -input[0].x___; 21: TEX temp[0], temp[0].xy__, 2D[3]; 22: MAD temp[1].x, -input[1].x___, input[1].x___, none.1___; 23: MUL temp[0], temp[0], input[0].wwww; 24: MUL_SAT output[0], temp[0], temp[1].xxxx; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3].xyz_, const[3].xxx_; 1: TEX temp[2].x, temp[0].xyz_, 3D[0]; 2: MOV temp[0].w, temp[2].___x; 3: MUL temp[1].xyz, input[3].xyz_, const[3].yyy_; 4: TEX temp[3].x, temp[1].xyz_, 3D[0]; 5: MOV temp[0].z, temp[3].__x_; 6: MUL temp[1].xyz, input[3].xyz_, const[3].zzz_; 7: TEX temp[4].x, temp[1].xyz_, 3D[0]; 8: MOV temp[0].y, temp[4]._x__; 9: TEX temp[5].x, input[3].xyz_, 3D[0]; 10: MOV temp[0].x, temp[5].x___; 11: DP4 temp[0].z, temp[0], const[4]; 12: MAD temp[0].xy, temp[0].zz__, const[2].xy__, input[2].xy__; 13: TEX temp[6].x, temp[0].xy__, 2D[2]; 14: MUL temp[0].x, temp[6].x___, const[3].z___; 15: ADD temp[0].y, temp[0]._x__, -none._1__; 16: MOV temp[0].w, none.___0; 17: MOV temp[8].x, temp[0].z___; 18: MOV temp[8].y, temp[0]._w__; 19: TEX temp[7].x, temp[8].xy__, 2D[1]; 20: ADD temp[0].x, temp[7].x___, temp[0].y___; 21: MOV temp[0].y, none._0__; 22: ADD temp[0].x, temp[0].x___, -input[0].x___; 23: TEX temp[0], temp[0].xy__, 2D[3]; 24: MAD temp[1].x, -input[1].x___, input[1].x___, none.1___; 25: MUL temp[0], temp[0], input[0].wwww; 26: MUL_SAT output[0], temp[0], temp[1].xxxx; CONST[1] = { 8.0000 4.0000 2.0000 0.0000 } CONST[2] = { 0.5000 0.2500 0.1250 0.0625 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xyz, input[3].xyz_, const[1].xxx_; 1: TEX temp[2].x, temp[0].xyz_, 3D[0]; 2: MOV temp[0].w, temp[2].___x; 3: MUL temp[1].xyz, input[3].xyz_, const[1].yyy_; 4: TEX temp[3].x, temp[1].xyz_, 3D[0]; 5: MOV temp[0].z, temp[3].__x_; 6: MUL temp[1].xyz, input[3].xyz_, const[1].zzz_; 7: TEX temp[4].x, temp[1].xyz_, 3D[0]; 8: MOV temp[0].y, temp[4]._x__; 9: TEX temp[5].x, input[3].xyz_, 3D[0]; 10: MOV temp[0].x, temp[5].x___; 11: DP4 temp[0].z, temp[0], const[2]; 12: MAD temp[0].xy, temp[0].zz__, const[0].xy__, input[2].xy__; 13: TEX temp[6].x, temp[0].xy__, 2D[2]; 14: MUL temp[0].x, temp[6].x___, const[1].z___; 15: ADD temp[0].y, temp[0]._x__, -none._1__; 16: MOV temp[0].w, none.___0; 17: MOV temp[8].x, temp[0].z___; 18: MOV temp[8].y, temp[0]._w__; 19: TEX temp[7].x, temp[8].xy__, 2D[1]; 20: ADD temp[0].x, temp[7].x___, temp[0].y___; 21: MOV temp[0].y, none._0__; 22: ADD temp[0].x, temp[0].x___, -input[0].x___; 23: TEX temp[0], temp[0].xy__, 2D[3]; 24: MAD temp[1].x, -input[1].x___, input[1].x___, none.1___; 25: MUL temp[0], temp[0], input[0].wwww; 26: MUL_SAT output[0], temp[0], temp[1].xxxx; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MUL temp[9].xyz, input[3].xyz_, const[1].xxx_; 1: TEX temp[10].x, temp[9].xyz_, 3D[0]; 2: MOV temp[0].w, temp[10].___x; 3: MUL temp[11].xyz, input[3].xyz_, const[1].yyy_; 4: TEX temp[12].x, temp[11].xyz_, 3D[0]; 5: MOV temp[0].z, temp[12].__x_; 6: MUL temp[13].xyz, input[3].xyz_, const[1].zzz_; 7: TEX temp[14].x, temp[13].xyz_, 3D[0]; 8: MOV temp[0].y, temp[14]._x__; 9: TEX temp[15].x, input[3].xyz_, 3D[0]; 10: MOV temp[0].x, temp[15].x___; 11: DP4 temp[16].z, temp[0], const[2]; 12: MAD temp[17].xy, temp[16].zz__, const[0].xy__, input[2].xy__; 13: TEX temp[18].x, temp[17].xy__, 2D[2]; 14: MUL temp[19].x, temp[18].x___, const[1].z___; 15: ADD temp[20].y, temp[19]._x__, -none._1__; 16: MOV temp[21].w, none.___0; 17: MOV temp[8].x, temp[16].z___; 18: MOV temp[8].y, temp[21]._w__; 19: TEX temp[22].x, temp[8].xy__, 2D[1]; 20: ADD temp[23].x, temp[22].x___, temp[20].y___; 21: MOV temp[0].y, none._0__; 22: ADD temp[0].x, temp[23].x___, -input[0].x___; 23: TEX temp[24], temp[0].xy__, 2D[3]; 24: MAD temp[25].x, -input[1].x___, input[1].x___, none.1___; 25: MUL temp[26], temp[24], input[0].wwww; 26: MUL_SAT output[0], temp[26], temp[25].xxxx; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 1: TEX temp[10].x, temp[9].xyz_, 3D[0]; 2: src0.xyz = temp[10] MAD temp[0].w, src0.x, src0.1, src0.0 3: src0.xyz = input[3], src1.xyz = const[1] MAD temp[11].xyz, src0.xyz, src1.yyy, src0.000 4: TEX temp[12].x, temp[11].xyz_, 3D[0]; 5: src0.xyz = temp[12] MAD temp[0].z, src0.__x, src0.111, src0.000 6: src0.xyz = input[3], src1.xyz = const[1] MAD temp[13].xyz, src0.xyz, src1.zzz, src0.000 7: TEX temp[14].x, temp[13].xyz_, 3D[0]; 8: src0.xyz = temp[14] MAD temp[0].y, src0._x_, src0.111, src0.000 9: TEX temp[15].x, input[3].xyz_, 3D[0]; 10: src0.xyz = temp[15] MAD temp[0].x, src0.x__, src0.111, src0.000 11: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[2], src1.w = const[2] DP4 temp[16].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 12: src0.xyz = temp[16], src1.xyz = const[0], src2.xyz = input[2] MAD temp[17].xy, src0.zz_, src1.xy_, src2.xy_ 13: TEX temp[18].x, temp[17].xy__, 2D[2]; 14: src0.xyz = temp[18], src1.xyz = const[1] MAD temp[19].x, src0.x__, src1.z__, src0.000 15: src0.xyz = temp[19] MAD temp[20].y, src0._x_, src0.111, -src0._1_ 16: MAD temp[21].w, src0.0, src0.1, src0.0 17: src0.xyz = temp[16] MAD temp[8].x, src0.z__, src0.111, src0.000 18: src0.w = temp[21] MAD temp[8].y, src0._w_, src0.111, src0.000 19: TEX temp[22].x, temp[8].xy__, 2D[1]; 20: src0.xyz = temp[22], src1.xyz = temp[20] MAD temp[23].x, src0.x__, src0.111, src1.y__ 21: MAD temp[0].y, src0._0_, src0.111, src0.000 22: src0.xyz = temp[23], src1.xyz = input[0] MAD temp[0].x, src0.x__, src0.111, -src1.x__ 23: TEX temp[24], temp[0].xy__, 2D[3]; 24: src0.xyz = input[1] MAD temp[25].x, -src0.x__, src0.x__, src0.1__ 25: src0.xyz = temp[24], src0.w = temp[24], src1.w = input[0] MAD temp[26].xyz, src0.xyz, src1.www, src0.000 MAD temp[26].w, src0.w, src1.w, src0.0 26: src0.xyz = temp[26], src0.w = temp[26], src1.xyz = temp[25] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src1.x, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].x, input[3].xyz_, 3D[0]; 2: src0.xyz = temp[15] MAD temp[0].x, src0.x__, src0.111, src0.000 MAD temp[21].w, src0.0, src0.1, src0.0 3: src0.w = temp[21] MAD temp[8].y, src0._w_, src0.111, src0.000 4: src0.xyz = input[1] MAD temp[25].x, -src0.x__, src0.x__, src0.1__ 5: src0.xyz = input[3], src1.xyz = const[1] MAD temp[13].xyz, src0.xyz, src1.zzz, src0.000 6: src0.xyz = input[3], src1.xyz = const[1] MAD temp[11].xyz, src0.xyz, src1.yyy, src0.000 7: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 8: BEGIN_TEX; 9: TEX temp[14].x, temp[13].xyz_, 3D[0]; 10: TEX temp[12].x, temp[11].xyz_, 3D[0]; 11: TEX temp[10].x, temp[9].xyz_, 3D[0]; 12: src0.xyz = temp[12], src1.xyz = temp[10] MAD temp[0].z, src0.__x, src0.111, src0.000 MAD temp[0].w, src1.x, src0.1, src0.0 13: src0.xyz = temp[14] MAD temp[0].y, src0._x_, src0.111, src0.000 14: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[2], src1.w = const[2] DP4 temp[16].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 15: src0.xyz = temp[16], src1.xyz = const[0], src2.xyz = input[2] MAD temp[17].xy, src0.zz_, src1.xy_, src2.xy_ 16: src0.xyz = temp[16] MAD temp[8].x, src0.z__, src0.111, src0.000 17: MAD temp[0].y, src0._0_, src0.111, src0.000 18: BEGIN_TEX; 19: TEX temp[18].x, temp[17].xy__, 2D[2]; 20: TEX temp[22].x, temp[8].xy__, 2D[1]; 21: src0.xyz = temp[18], src1.xyz = const[1] MAD temp[19].x, src0.x__, src1.z__, src0.000 22: src0.xyz = temp[19] MAD temp[20].y, src0._x_, src0.111, -src0._1_ 23: src0.xyz = temp[22], src1.xyz = temp[20] MAD temp[23].x, src0.x__, src0.111, src1.y__ 24: src0.xyz = temp[23], src1.xyz = input[0] MAD temp[0].x, src0.x__, src0.111, -src1.x__ 25: BEGIN_TEX; 26: TEX temp[24], temp[0].xy__, 2D[3]; 27: src0.xyz = temp[24], src0.w = temp[24], src1.w = input[0] MAD temp[26].xyz, src0.xyz, src1.www, src0.000 MAD temp[26].w, src0.w, src1.w, src0.0 28: src0.xyz = temp[26], src0.w = temp[26], src1.xyz = temp[25] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src1.x, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[15].x, input[3].xyz_, 3D[0]; 2: src0.xyz = temp[15] MAD temp[0].x, src0.x__, src0.111, src0.000 MAD temp[21].w, src0.0, src0.1, src0.0 3: src0.w = temp[21] MAD temp[8].y, src0._w_, src0.111, src0.000 4: src0.xyz = input[1] MAD temp[25].x, -src0.x__, src0.x__, src0.1__ 5: src0.xyz = input[3], src1.xyz = const[1] MAD temp[13].xyz, src0.xyz, src1.zzz, src0.000 6: src0.xyz = input[3], src1.xyz = const[1] MAD temp[11].xyz, src0.xyz, src1.yyy, src0.000 7: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 8: BEGIN_TEX; 9: TEX temp[14].x, temp[13].xyz_, 3D[0]; 10: TEX temp[12].x, temp[11].xyz_, 3D[0]; 11: TEX temp[10].x, temp[9].xyz_, 3D[0]; 12: src0.xyz = temp[12], src1.xyz = temp[10] MAD temp[0].z, src0.__x, src0.111, src0.000 MAD temp[0].w, src1.x, src0.1, src0.0 13: src0.xyz = temp[14] MAD temp[0].y, src0._x_, src0.111, src0.000 14: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[2], src1.w = const[2] DP4 temp[16].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 15: src0.xyz = temp[16], src1.xyz = const[0], src2.xyz = input[2] MAD temp[17].xy, src0.zz_, src1.xy_, src2.xy_ 16: src0.xyz = temp[16] MAD temp[8].x, src0.z__, src0.111, src0.000 17: MAD temp[0].y, src0._0_, src0.111, src0.000 18: BEGIN_TEX; 19: TEX temp[18].x, temp[17].xy__, 2D[2]; 20: TEX temp[22].x, temp[8].xy__, 2D[1]; 21: src0.xyz = temp[18], src1.xyz = const[1] MAD temp[19].x, src0.x__, src1.z__, src0.000 22: src0.xyz = temp[19] MAD temp[20].y, src0._x_, src0.111, -src0._1_ 23: src0.xyz = temp[22], src1.xyz = temp[20] MAD temp[23].x, src0.x__, src0.111, src1.y__ 24: src0.xyz = temp[23], src1.xyz = input[0] MAD temp[0].x, src0.x__, src0.111, -src1.x__ 25: BEGIN_TEX; 26: TEX temp[24], temp[0].xy__, 2D[3]; 27: src0.xyz = temp[24], src0.w = temp[24], src1.w = input[0] MAD temp[26].xyz, src0.xyz, src1.www, src0.000 MAD temp[26].w, src0.w, src1.w, src0.0 28: src0.xyz = temp[26], src0.w = temp[26], src1.xyz = temp[25] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src1.x, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[4].x, input[3].xyz_, 3D[0]; 2: src0.xyz = temp[4] MAD temp[4].x, src0.x__, src0.111, src0.000 MAD temp[1].w, src0.0, src0.1, src0.0 3: src0.w = temp[1] MAD temp[5].y, src0._w_, src0.11_, src0.00_ 4: src0.xyz = input[1] MAD temp[0].y, -src0._x_, src0._x_, src0._1_ 5: src0.xyz = input[3], src1.xyz = const[1] MAD temp[1].xyz, src0.xyz, src1.zzz, src0.000 6: src0.xyz = input[3], src1.xyz = const[1] MAD temp[6].xyz, src0.xyz, src1.yyy, src0.000 7: src0.xyz = input[3], src1.xyz = const[1] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 8: BEGIN_TEX; 9: TEX temp[1].x, temp[1].xyz_, 3D[0]; 10: TEX temp[6].x, temp[6].xyz_, 3D[0]; 11: TEX temp[3].x, temp[3].xyz_, 3D[0]; 12: src0.xyz = temp[6], src1.xyz = temp[3] MAD temp[4].z, src0.__x, src0.111, src0.000 MAD temp[2].w, src1.x, src0.1, src0.0 13: src0.xyz = temp[1] MAD temp[4].y, src0._x_, src0.111, src0.000 14: src0.xyz = temp[4], src0.w = temp[2], src1.xyz = const[2], src1.w = const[2] DP4 temp[0].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 15: src0.xyz = temp[0], src1.xyz = const[0], src2.xyz = input[2] MAD temp[1].xy, src0.zz_, src1.xy_, src2.xy_ 16: src0.xyz = temp[0] MAD temp[5].x, src0.z__, src0.11_, src0.00_ 17: MAD temp[2].y, src0._0_, src0.11_, src0.00_ 18: BEGIN_TEX; 19: TEX temp[1].x, temp[1].xy__, 2D[2]; 20: TEX temp[3].x, temp[5].xy__, 2D[1]; 21: src0.xyz = temp[1], src1.xyz = const[1] MAD temp[0].z, src0.__x, src1.__z, src0.__0 22: src0.xyz = temp[0] MAD temp[0].z, src0.__z, src0.__1, -src0.__1 23: src0.xyz = temp[3], src1.xyz = temp[0] MAD temp[0].z, src0.__x, src0.__1, src1.__z 24: src0.xyz = temp[0], src1.xyz = input[0] MAD temp[2].x, src0.z__, src0.11_, -src1.x__ 25: BEGIN_TEX; 26: TEX temp[1], temp[2].xy__, 2D[3]; 27: src0.xyz = temp[1], src0.w = temp[1], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src1.www, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 28: src0.xyz = temp[1], src0.w = temp[0], src1.xyz = temp[0] MAD_SAT color[0].xyz, src0.xyz, src1.yyy, src0.000 MAD_SAT color[0].w, src0.w, src1.y, src0.0 pc=58************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 5, tex_end: 0 (code_addr: 00000140) TEX: TEX t4, t3, texture[0] (00008103) 0: xyz: t4 t0 t0 bias-> t4.x (00900004) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t4.xyz 1.0 0.0 op: 00050a80 w: 0.0 1.0 0.0 op: 00040890 1: xyz: t0 t0 t0 bias-> t5.y (01140000) w: t1 t0 t0 bias-> (00000001) xyz: t1.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t1 t0 t0 bias-> t0.y (01000001) w: t0 t0 t0 bias-> (00000000) xyz: -t1.xxx t1.xxx 1.0 op: 000540a1 w: t1.x t1.x t1.x op: 00000000 3: xyz: t3 c1 t0 bias-> t1.xyz (03840843) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c1.zzz 0.0 op: 00050380 w: t3.x t3.x t3.x op: 00000000 4: xyz: t3 c1 t0 bias-> t6.xyz (03980843) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c1.yyy 0.0 op: 00050300 w: t3.x t3.x t3.x op: 00000000 5: xyz: t3 c1 t0 bias-> t3.xyz (038c0843) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c1.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 6, tex_offset: 1, alu_end: 5, tex_end: 2 (code_addr: 00041146) TEX: TEX t1, t1, texture[0] (00008041) TEX t6, t6, texture[0] (00008186) TEX t3, t3, texture[0] (000080c3) 6: xyz: t6 t3 t0 bias-> t4.z (021000c6) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t6.xxx 1.0 0.0 op: 00050a81 w: t3.x 1.0 0.0 op: 00040883 7: xyz: t1 t0 t0 bias-> t4.y (01100001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx 1.0 0.0 op: 00050a81 w: t1.x t1.x t1.x op: 00000000 8: xyz: t4 c2 t0 bias-> t0.z (02000884) w: t2 c2 t0 bias-> (00000882) xyz: t4.xyz c2.xyz t4.xxx op: 01004200 w: t2.w c2.w t4.x op: 00800509 9: xyz: t0 c0 t2 bias-> t1.xy (01842800) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz c0.xyz t2.xyz op: 00020203 w: t0.x t0.x t0.x op: 00000000 10: xyz: t0 t0 t0 bias-> t5.x (00940000) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz 1.0 0.0 op: 00050a83 w: t0.x t0.x t0.x op: 00000000 11: xyz: t0 t0 t0 bias-> t2.y (01080000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 NODE 2: alu_offset: 12, tex_offset: 4, alu_end: 3, tex_end: 1 (code_addr: 000240cc) TEX: TEX t1, t1, texture[2] (00009041) TEX t3, t5, texture[1] (000088c5) 12: xyz: t1 c1 t0 bias-> t0.z (02000841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx c1.xyz 0.0 op: 00050201 w: t1.x t1.x t1.x op: 00000000 13: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 -1.0 op: 000d4a80 w: t0.x t0.x t0.x op: 00000000 14: xyz: t3 t0 t0 bias-> t0.z (02000003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xxx 1.0 t0.xyz op: 00010a81 w: t3.x t3.x t3.x op: 00000000 15: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t0 t0 t0 bias-> (00000000) xyz: t0.zzz 1.0 -t0.xyz op: 00090a83 w: t0.x t0.x t0.x op: 00000000 NODE 3: alu_offset: 16, tex_offset: 6, alu_end: 1, tex_end: 0 (code_addr: 00406050) TEX: TEX t1, t2, texture[3] (00009842) 16: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.xyz t0.www 0.0 op: 00050680 w: t1.w t0.w 0.0 op: 00040509 17: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t1.xyz t0.yyy 0.0 op: 40050300 w: t0.w t0.y 0.0 op: 40040209 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[2], PERSPECTIVE DCL IN[4], GENERIC[4], PERSPECTIVE DCL IN[5], GENERIC[5], PERSPECTIVE DCL IN[6], GENERIC[6], PERSPECTIVE DCL IN[7], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL CONST[0] DCL CONST[4..7] DCL TEMP[0..7] IMM FLT32 { 2.0000, -1.0000, 0.0000, 1.0000} 0: TEX TEMP[0], IN[4], SAMP[0], 2D 1: SUB TEMP[0].w, TEMP[0].wwww, CONST[0] 2: KIL TEMP[0].wwww 3: TEX TEMP[1], IN[2], SAMP[1], 2D 4: MOV TEMP[1].x, TEMP[1].wwww 5: MAD TEMP[1].xy, TEMP[1], IMM[0].xxxx, IMM[0].yyyy 6: MOV TEMP[1].z, IMM[0].zzzz 7: DP3 TEMP[2].x, TEMP[1], TEMP[1] 8: ADD TEMP[2].x, IMM[0].wwww, -TEMP[2].xxxx 9: RSQ TEMP[2].x, TEMP[2].xxxx 10: RCP TEMP[1].z, TEMP[2].xxxx 11: DP3 TEMP[3].x, IN[5], TEMP[1] 12: DP3 TEMP[3].y, IN[6], TEMP[1] 13: DP3 TEMP[3].z, IN[7], TEMP[1] 14: TEX TEMP[4], TEMP[3], SAMP[2], CUBE 15: MUL TEMP[4], TEMP[4], CONST[4] 16: MUL TEMP[5], TEMP[0], CONST[5] 17: MUL TEMP[5], TEMP[4], TEMP[5] 18: DP3 TEMP[2], IN[3], TEMP[3] 19: ADD TEMP[2], TEMP[2], TEMP[2] 20: MAD TEMP[6], -TEMP[3], TEMP[2].xxxx, IN[3] 21: TEX TEMP[4], TEMP[6], SAMP[3], CUBE 22: TEX TEMP[7], IN[4], SAMP[4], 2D 23: ADD TEMP[6], TEMP[7], TEMP[7] 24: MAD TEMP[5], TEMP[6], TEMP[4], TEMP[5] 25: MUL TEMP[5], CONST[6].xxxx, TEMP[5] 26: LRP TEMP[5].xyz, IN[1].xxxx, CONST[7], TEMP[5] 27: MUL OUT[0], TEMP[5], IN[0] 28: MOV OUT[0].w, CONST[6].yyyy 29: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: SUB temp[0].w, temp[0].wwww, const[0]; 2: KIL temp[0].wwww; 3: TEX temp[1], input[2], 2D[1]; 4: MOV temp[1].x, temp[1].wwww; 5: MAD temp[1].xy, temp[1], const[8].xxxx, const[8].yyyy; 6: MOV temp[1].z, const[8].zzzz; 7: DP3 temp[2].x, temp[1], temp[1]; 8: ADD temp[2].x, const[8].wwww, -temp[2].xxxx; 9: RSQ temp[2].x, temp[2].xxxx; 10: RCP temp[1].z, temp[2].xxxx; 11: DP3 temp[3].x, input[5], temp[1]; 12: DP3 temp[3].y, input[6], temp[1]; 13: DP3 temp[3].z, input[7], temp[1]; 14: TEX temp[4], temp[3], CUBE[2]; 15: MUL temp[4], temp[4], const[4]; 16: MUL temp[5], temp[0], const[5]; 17: MUL temp[5], temp[4], temp[5]; 18: DP3 temp[2], input[3], temp[3]; 19: ADD temp[2], temp[2], temp[2]; 20: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 21: TEX temp[4], temp[6], CUBE[3]; 22: TEX temp[7], input[4], 2D[4]; 23: ADD temp[6], temp[7], temp[7]; 24: MAD temp[5], temp[6], temp[4], temp[5]; 25: MUL temp[5], const[6].xxxx, temp[5]; 26: LRP temp[5].xyz, input[1].xxxx, const[7], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[6].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: SUB temp[0].w, temp[0].wwww, const[0]; 2: KIL temp[0].wwww; 3: TEX temp[1], input[2], 2D[1]; 4: MOV temp[1].x, temp[1].wwww; 5: MAD temp[1].xy, temp[1], const[8].xxxx, const[8].yyyy; 6: MOV temp[1].z, const[8].zzzz; 7: DP3 temp[2].x, temp[1], temp[1]; 8: ADD temp[2].x, const[8].wwww, -temp[2].xxxx; 9: RSQ temp[2].x, temp[2].xxxx; 10: RCP temp[1].z, temp[2].xxxx; 11: DP3 temp[3].x, input[5], temp[1]; 12: DP3 temp[3].y, input[6], temp[1]; 13: DP3 temp[3].z, input[7], temp[1]; 14: TEX temp[4], temp[3], CUBE[2]; 15: MUL temp[4], temp[4], const[4]; 16: MUL temp[5], temp[0], const[5]; 17: MUL temp[5], temp[4], temp[5]; 18: DP3 temp[2], input[3], temp[3]; 19: ADD temp[2], temp[2], temp[2]; 20: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 21: TEX temp[4], temp[6], CUBE[3]; 22: TEX temp[7], input[4], 2D[4]; 23: ADD temp[6], temp[7], temp[7]; 24: MAD temp[5], temp[6], temp[4], temp[5]; 25: MUL temp[5], const[6].xxxx, temp[5]; 26: LRP temp[5].xyz, input[1].xxxx, const[7], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: SUB temp[0].w, temp[0].wwww, const[0]; 2: KIL temp[0].wwww; 3: TEX temp[1], input[2], 2D[1]; 4: MOV temp[1].x, temp[1].wwww; 5: MAD temp[1].xy, temp[1], const[8].xxxx, const[8].yyyy; 6: MOV temp[1].z, const[8].zzzz; 7: DP3 temp[2].x, temp[1], temp[1]; 8: ADD temp[2].x, const[8].wwww, -temp[2].xxxx; 9: RSQ temp[2].x, temp[2].xxxx; 10: RCP temp[1].z, temp[2].xxxx; 11: DP3 temp[3].x, input[5], temp[1]; 12: DP3 temp[3].y, input[6], temp[1]; 13: DP3 temp[3].z, input[7], temp[1]; 14: TEX temp[4], temp[3], CUBE[2]; 15: MUL temp[4], temp[4], const[4]; 16: MUL temp[5], temp[0], const[5]; 17: MUL temp[5], temp[4], temp[5]; 18: DP3 temp[2], input[3], temp[3]; 19: ADD temp[2], temp[2], temp[2]; 20: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 21: TEX temp[4], temp[6], CUBE[3]; 22: TEX temp[7], input[4], 2D[4]; 23: ADD temp[6], temp[7], temp[7]; 24: MAD temp[5], temp[6], temp[4], temp[5]; 25: MUL temp[5], const[6].xxxx, temp[5]; 26: LRP temp[5].xyz, input[1].xxxx, const[7], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[6].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: SUB temp[0].w, temp[0].wwww, const[0]; 2: KIL temp[0].wwww; 3: TEX temp[1], input[2], 2D[1]; 4: MOV temp[1].x, temp[1].wwww; 5: MAD temp[1].xy, temp[1], const[8].xxxx, const[8].yyyy; 6: MOV temp[1].z, const[8].zzzz; 7: DP3 temp[2].x, temp[1], temp[1]; 8: ADD temp[2].x, const[8].wwww, -temp[2].xxxx; 9: RSQ temp[2].x, temp[2].xxxx; 10: RCP temp[1].z, temp[2].xxxx; 11: DP3 temp[3].x, input[5], temp[1]; 12: DP3 temp[3].y, input[6], temp[1]; 13: DP3 temp[3].z, input[7], temp[1]; 14: TEX temp[4], temp[3], CUBE[2]; 15: MUL temp[4], temp[4], const[4]; 16: MUL temp[5], temp[0], const[5]; 17: MUL temp[5], temp[4], temp[5]; 18: DP3 temp[2], input[3], temp[3]; 19: ADD temp[2], temp[2], temp[2]; 20: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 21: TEX temp[4], temp[6], CUBE[3]; 22: TEX temp[7], input[4], 2D[4]; 23: ADD temp[6], temp[7], temp[7]; 24: MAD temp[5], temp[6], temp[4], temp[5]; 25: MUL temp[5], const[6].xxxx, temp[5]; 26: LRP temp[5].xyz, input[1].xxxx, const[7], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[6].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: SUB temp[0].w, temp[0].wwww, const[0]; 2: KIL temp[0].wwww; 3: TEX temp[1], input[2], 2D[1]; 4: MOV temp[1].x, temp[1].wwww; 5: MAD temp[1].xy, temp[1], const[8].xxxx, const[8].yyyy; 6: MOV temp[1].z, const[8].zzzz; 7: DP3 temp[2].x, temp[1], temp[1]; 8: ADD temp[2].x, const[8].wwww, -temp[2].xxxx; 9: RSQ temp[2].x, temp[2].xxxx; 10: RCP temp[1].z, temp[2].xxxx; 11: DP3 temp[3].x, input[5], temp[1]; 12: DP3 temp[3].y, input[6], temp[1]; 13: DP3 temp[3].z, input[7], temp[1]; 14: TEX temp[4], temp[3], CUBE[2]; 15: MUL temp[4], temp[4], const[4]; 16: MUL temp[5], temp[0], const[5]; 17: MUL temp[5], temp[4], temp[5]; 18: DP3 temp[2], input[3], temp[3]; 19: ADD temp[2], temp[2], temp[2]; 20: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 21: TEX temp[4], temp[6], CUBE[3]; 22: TEX temp[7], input[4], 2D[4]; 23: ADD temp[6], temp[7], temp[7]; 24: MAD temp[5], temp[6], temp[4], temp[5]; 25: MUL temp[5], const[6].xxxx, temp[5]; 26: LRP temp[5].xyz, input[1].xxxx, const[7], temp[5]; 27: MUL output[0], temp[5], input[0]; 28: MOV output[0].w, const[6].yyyy; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: SUB temp[0].w, temp[0].wwww, const[0]; 2: KIL temp[0].wwww; 3: TEX temp[1], input[2], 2D[1]; 4: MOV temp[1].x, temp[1].wwww; 5: MAD temp[1].xy, temp[1], const[8].xxxx, const[8].yyyy; 6: MOV temp[1].z, const[8].zzzz; 7: DP3 temp[2].x, temp[1], temp[1]; 8: ADD temp[2].x, const[8].wwww, -temp[2].xxxx; 9: RSQ temp[2].x, temp[2].xxxx; 10: RCP temp[1].z, temp[2].xxxx; 11: DP3 temp[3].x, input[5], temp[1]; 12: DP3 temp[3].y, input[6], temp[1]; 13: DP3 temp[3].z, input[7], temp[1]; 14: TEX temp[4], temp[3], CUBE[2]; 15: MUL temp[4], temp[4], const[4]; 16: MUL temp[5], temp[0], const[5]; 17: MUL temp[5], temp[4], temp[5]; 18: DP3 temp[2], input[3], temp[3]; 19: ADD temp[2], temp[2], temp[2]; 20: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 21: TEX temp[4], temp[6], CUBE[3]; 22: TEX temp[7], input[4], 2D[4]; 23: ADD temp[6], temp[7], temp[7]; 24: MAD temp[5], temp[6], temp[4], temp[5]; 25: MUL temp[5], const[6].xxxx, temp[5]; 26: LRP temp[5].xyz, input[1].xxxx, const[7], temp[5]; 27: MUL_SAT output[0], temp[5], input[0]; 28: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: SUB temp[0].w, temp[0].wwww, const[0]; 2: KIL temp[0].wwww; 3: TEX temp[1], input[2], 2D[1]; 4: MOV temp[1].x, temp[1].wwww; 5: MAD temp[1].xy, temp[1], const[8].xxxx, const[8].yyyy; 6: MOV temp[1].z, const[8].zzzz; 7: DP3 temp[2].x, temp[1], temp[1]; 8: ADD temp[2].x, const[8].wwww, -temp[2].xxxx; 9: RSQ temp[2].x, temp[2].xxxx; 10: RCP temp[1].z, temp[2].xxxx; 11: DP3 temp[3].x, input[5], temp[1]; 12: DP3 temp[3].y, input[6], temp[1]; 13: DP3 temp[3].z, input[7], temp[1]; 14: TEX temp[4], temp[3], CUBE[2]; 15: MUL temp[4], temp[4], const[4]; 16: MUL temp[5], temp[0], const[5]; 17: MUL temp[5], temp[4], temp[5]; 18: DP3 temp[2], input[3], temp[3]; 19: ADD temp[2], temp[2], temp[2]; 20: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 21: TEX temp[4], temp[6], CUBE[3]; 22: TEX temp[7], input[4], 2D[4]; 23: ADD temp[6], temp[7], temp[7]; 24: MAD temp[5], temp[6], temp[4], temp[5]; 25: MUL temp[5], const[6].xxxx, temp[5]; 26: LRP temp[5].xyz, input[1].xxxx, const[7], temp[5]; 27: MUL_SAT output[0], temp[5], input[0]; 28: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[0]; 1: ADD temp[0].w, temp[0].wwww, -const[0]; 2: KIL temp[0].wwww; 3: TEX temp[1], input[2], 2D[1]; 4: MOV temp[1].x, temp[1].wwww; 5: MAD temp[1].xy, temp[1], const[8].xxxx, const[8].yyyy; 6: MOV temp[1].z, const[8].zzzz; 7: DP3 temp[2].x, temp[1], temp[1]; 8: ADD temp[2].x, const[8].wwww, -temp[2].xxxx; 9: RSQ temp[2].x, |temp[2].xxxx|; 10: RCP temp[1].z, temp[2].xxxx; 11: DP3 temp[3].x, input[5], temp[1]; 12: DP3 temp[3].y, input[6], temp[1]; 13: DP3 temp[3].z, input[7], temp[1]; 14: TEX temp[4], temp[3], CUBE[2]; 15: MUL temp[4], temp[4], const[4]; 16: MUL temp[5], temp[0], const[5]; 17: MUL temp[5], temp[4], temp[5]; 18: DP3 temp[2], input[3], temp[3]; 19: ADD temp[2], temp[2], temp[2]; 20: MAD temp[6], -temp[3], temp[2].xxxx, input[3]; 21: TEX temp[4], temp[6], CUBE[3]; 22: TEX temp[7], input[4], 2D[4]; 23: ADD temp[6], temp[7], temp[7]; 24: MAD temp[5], temp[6], temp[4], temp[5]; 25: MUL temp[5], const[6].xxxx, temp[5]; 26: ADD temp[8].xyz, const[7], -temp[5]; 27: MAD temp[5].xyz, input[1].xxxx, temp[8], temp[5]; 28: MUL_SAT output[0], temp[5], input[0]; 29: MOV_SAT output[0].w, const[6].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[0]; 1: ADD temp[0].w, temp[0].___w, -const[0].___w; 2: KIL temp[0].wwww; 3: TEX temp[1].yw, input[2].xy__, 2D[1]; 4: MOV temp[1].x, temp[1].w___; 5: MAD temp[1].xy, temp[1].xy__, const[8].xx__, const[8].yy__; 6: MOV temp[1].z, const[8].__z_; 7: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 8: ADD temp[2].x, const[8].w___, -temp[2].x___; 9: RSQ temp[2].x, |temp[2].x___|; 10: RCP temp[1].z, temp[2].x___; 11: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 12: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 13: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 14: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 15: MUL temp[4].xyz, temp[4].xyz_, const[4].xyz_; 16: MUL temp[5].xyz, temp[0].xyz_, const[5].xyz_; 17: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 18: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 19: ADD temp[2].x, temp[2].x___, temp[2].x___; 20: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 21: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 22: TEX temp[7].xyz, input[4].xy__, 2D[4]; 23: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 24: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 25: MUL temp[5].xyz, const[6].xxx_, temp[5].xyz_; 26: ADD temp[8].xyz, const[7].xyz_, -temp[5].xyz_; 27: MAD temp[5].xyz, input[1].xxx_, temp[8].xyz_, temp[5].xyz_; 28: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 29: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[0]; 1: ADD temp[0].w, temp[0].___w, -const[0].___w; 2: KIL temp[0].wwww; 3: TEX temp[1].yw, input[2].xy__, 2D[1]; 4: MOV temp[1].x, temp[1].w___; 5: MAD temp[1].xy, temp[1].xy__, const[8].xx__, const[8].yy__; 6: MOV temp[1].z, const[8].__z_; 7: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 8: ADD temp[2].x, const[8].w___, -temp[2].x___; 9: RSQ temp[2].x, |temp[2].x___|; 10: RCP temp[1].z, temp[2].x___; 11: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 12: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 13: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 14: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 15: MUL temp[4].xyz, temp[4].xyz_, const[4].xyz_; 16: MUL temp[5].xyz, temp[0].xyz_, const[5].xyz_; 17: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 18: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 19: ADD temp[2].x, temp[2].x___, temp[2].x___; 20: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 21: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 22: TEX temp[7].xyz, input[4].xy__, 2D[4]; 23: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 24: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 25: MUL temp[5].xyz, const[6].xxx_, temp[5].xyz_; 26: ADD temp[8].xyz, const[7].xyz_, -temp[5].xyz_; 27: MAD temp[5].xyz, input[1].xxx_, temp[8].xyz_, temp[5].xyz_; 28: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 29: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[0]; 1: ADD temp[0].w, temp[0].___w, -const[0].___w; 2: KIL temp[0].wwww; 3: TEX temp[1].yw, input[2].xy__, 2D[1]; 4: MOV temp[1].x, temp[1].w___; 5: MAD temp[1].xy, temp[1].xy__, const[8].xx__, none.-1-1__; 6: MOV temp[1].z, none.__0_; 7: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 8: ADD temp[2].x, none.1___, -temp[2].x___; 9: RSQ temp[2].x, |temp[2].x___|; 10: RCP temp[1].z, temp[2].x___; 11: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 12: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 13: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 14: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 15: MUL temp[4].xyz, temp[4].xyz_, const[4].xyz_; 16: MUL temp[5].xyz, temp[0].xyz_, const[5].xyz_; 17: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 18: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 19: ADD temp[2].x, temp[2].x___, temp[2].x___; 20: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 21: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 22: TEX temp[7].xyz, input[4].xy__, 2D[4]; 23: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 24: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 25: MUL temp[5].xyz, const[6].xxx_, temp[5].xyz_; 26: MAD temp[5].xyz, input[1].xxx_, (const[7] - temp[5]).xyz_, temp[5].xyz_; 27: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 28: MOV_SAT output[0].w, const[6].___y; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[0]; 1: ADD temp[0].w, temp[0].___w, -const[0].___w; 2: MOV temp[8], temp[0].wwww; 3: KIL temp[8]; 4: TEX temp[1].yw, input[2].xy__, 2D[1]; 5: MOV temp[1].x, temp[1].w___; 6: MAD temp[1].xy, temp[1].xy__, const[8].xx__, none.-1-1__; 7: MOV temp[1].z, none.__0_; 8: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 9: ADD temp[2].x, none.1___, -temp[2].x___; 10: RSQ temp[2].x, |temp[2].x___|; 11: RCP temp[1].z, temp[2].x___; 12: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 13: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 14: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 15: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 16: MUL temp[4].xyz, temp[4].xyz_, const[4].xyz_; 17: MUL temp[5].xyz, temp[0].xyz_, const[5].xyz_; 18: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 19: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 20: ADD temp[2].x, temp[2].x___, temp[2].x___; 21: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 22: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 23: TEX temp[7].xyz, input[4].xy__, 2D[4]; 24: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 25: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 26: MUL temp[5].xyz, const[6].xxx_, temp[5].xyz_; 27: MAD temp[5].xyz, input[1].xxx_, (const[7] - temp[5]).xyz_, temp[5].xyz_; 28: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 29: MOV_SAT output[0].w, const[6].___y; CONST[5] = { 2.0000 -1.0000 0.0000 1.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[0]; 1: ADD temp[0].w, temp[0].___w, -const[0].___w; 2: MOV temp[8], temp[0].wwww; 3: KIL temp[8]; 4: TEX temp[1].yw, input[2].xy__, 2D[1]; 5: MOV temp[1].x, temp[1].w___; 6: MAD temp[1].xy, temp[1].xy__, const[5].xx__, none.-1-1__; 7: MOV temp[1].z, none.__0_; 8: DP3 temp[2].x, temp[1].xyz_, temp[1].xyz_; 9: ADD temp[2].x, none.1___, -temp[2].x___; 10: RSQ temp[2].x, |temp[2].x___|; 11: RCP temp[1].z, temp[2].x___; 12: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 13: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 14: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 15: TEX temp[4].xyz, temp[3].xyz_, CUBE[2]; 16: MUL temp[4].xyz, temp[4].xyz_, const[1].xyz_; 17: MUL temp[5].xyz, temp[0].xyz_, const[2].xyz_; 18: MUL temp[5].xyz, temp[4].xyz_, temp[5].xyz_; 19: DP3 temp[2].x, input[3].xyz_, temp[3].xyz_; 20: ADD temp[2].x, temp[2].x___, temp[2].x___; 21: MAD temp[6].xyz, -temp[3].xyz_, temp[2].xxx_, input[3].xyz_; 22: TEX temp[4].xyz, temp[6].xyz_, CUBE[3]; 23: TEX temp[7].xyz, input[4].xy__, 2D[4]; 24: ADD temp[6].xyz, temp[7].xyz_, temp[7].xyz_; 25: MAD temp[5].xyz, temp[6].xyz_, temp[4].xyz_, temp[5].xyz_; 26: MUL temp[5].xyz, const[3].xxx_, temp[5].xyz_; 27: MAD temp[5].xyz, input[1].xxx_, (const[4] - temp[5]).xyz_, temp[5].xyz_; 28: MUL_SAT output[0].xyz, temp[5].xyz_, input[0].xyz_; 29: MOV_SAT output[0].w, const[3].___y; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[9], input[4].xy__, 2D[0]; 1: ADD temp[10].w, temp[9].___w, -const[0].___w; 2: MOV temp[11], temp[10].wwww; 3: KIL temp[11]; 4: TEX temp[1].yw, input[2].xy__, 2D[1]; 5: MOV temp[1].x, temp[1].w___; 6: MAD temp[1].xy, temp[1].xy__, const[5].xx__, none.-1-1__; 7: MOV temp[1].z, none.__0_; 8: DP3 temp[12].x, temp[1].xyz_, temp[1].xyz_; 9: ADD temp[13].x, none.1___, -temp[12].x___; 10: RSQ temp[14].x, |temp[13].x___|; 11: RCP temp[1].z, temp[14].x___; 12: DP3 temp[3].x, input[5].xyz_, temp[1].xyz_; 13: DP3 temp[3].y, input[6].xyz_, temp[1].xyz_; 14: DP3 temp[3].z, input[7].xyz_, temp[1].xyz_; 15: TEX temp[15].xyz, temp[3].xyz_, CUBE[2]; 16: MUL temp[16].xyz, temp[15].xyz_, const[1].xyz_; 17: MUL temp[17].xyz, temp[9].xyz_, const[2].xyz_; 18: MUL temp[18].xyz, temp[16].xyz_, temp[17].xyz_; 19: DP3 temp[19].x, input[3].xyz_, temp[3].xyz_; 20: ADD temp[20].x, temp[19].x___, temp[19].x___; 21: MAD temp[21].xyz, -temp[3].xyz_, temp[20].xxx_, input[3].xyz_; 22: TEX temp[22].xyz, temp[21].xyz_, CUBE[3]; 23: TEX temp[23].xyz, input[4].xy__, 2D[4]; 24: ADD temp[24].xyz, temp[23].xyz_, temp[23].xyz_; 25: MAD temp[25].xyz, temp[24].xyz_, temp[22].xyz_, temp[18].xyz_; 26: MUL temp[26].xyz, const[3].xxx_, temp[25].xyz_; 27: MAD temp[27].xyz, input[1].xxx_, (const[4] - temp[26]).xyz_, temp[26].xyz_; 28: MUL_SAT output[0].xyz, temp[27].xyz_, input[0].xyz_; 29: MOV_SAT output[0].w, const[3].___y; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[9], input[4].xy__, 2D[0]; 1: src0.w = temp[9], src1.w = const[0] MAD temp[10].w, src0.w, src0.1, -src1.w 2: src0.w = temp[10] MAD temp[11].xyz, src0.www, src0.111, src0.000 MAD temp[11].w, src0.w, src0.1, src0.0 3: KIL temp[11]; 4: TEX temp[1].yw, input[2].xy__, 2D[1]; 5: src0.w = temp[1] MAD temp[1].x, src0.w__, src0.111, src0.000 6: src0.xyz = temp[1], src1.xyz = const[5] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 7: MAD temp[1].z, src0.__0, src0.111, src0.000 8: src0.xyz = temp[1] DP3 temp[12].x, src0.xyz, src0.xyz 9: src0.xyz = temp[12] MAD temp[13].x, src0.1__, src0.111, -src0.x__ 10: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 11: src0.xyz = temp[14] REPL_ALPHA temp[1].z RCP, src0.x 12: src0.xyz = input[5], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz 13: src0.xyz = input[6], src1.xyz = temp[1] DP3 temp[3].y, src0.xyz, src1.xyz 14: src0.xyz = input[7], src1.xyz = temp[1] DP3 temp[3].z, src0.xyz, src1.xyz 15: TEX temp[15].xyz, temp[3].xyz_, CUBE[2]; 16: src0.xyz = temp[15], src1.xyz = const[1] MAD temp[16].xyz, src0.xyz, src1.xyz, src0.000 17: src0.xyz = temp[9], src1.xyz = const[2] MAD temp[17].xyz, src0.xyz, src1.xyz, src0.000 18: src0.xyz = temp[16], src1.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 19: src0.xyz = input[3], src1.xyz = temp[3] DP3 temp[19].x, src0.xyz, src1.xyz 20: src0.xyz = temp[19] MAD temp[20].x, src0.x__, src0.111, src0.x__ 21: src0.xyz = temp[3], src1.xyz = temp[20], src2.xyz = input[3] MAD temp[21].xyz, -src0.xyz, src1.xxx, src2.xyz 22: TEX temp[22].xyz, temp[21].xyz_, CUBE[3]; 23: TEX temp[23].xyz, input[4].xy__, 2D[4]; 24: src0.xyz = temp[23] MAD temp[24].xyz, src0.xyz, src0.111, src0.xyz 25: src0.xyz = temp[24], src1.xyz = temp[22], src2.xyz = temp[18] MAD temp[25].xyz, src0.xyz, src1.xyz, src2.xyz 26: src0.xyz = const[3], src1.xyz = temp[25] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 27: src0.xyz = temp[26], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[27].xyz, src2.xxx, srcp.xyz, src0.xyz 28: src0.xyz = temp[27], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 29: src0.xyz = const[3] MAD_SAT color[0].w, src0.y, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9], input[4].xy__, 2D[0]; 2: TEX temp[1].yw, input[2].xy__, 2D[1]; 3: TEX temp[23].xyz, input[4].xy__, 2D[4]; 4: src0.xyz = temp[23], src0.w = temp[9], src1.w = const[0] MAD temp[24].xyz, src0.xyz, src0.111, src0.xyz MAD temp[10].w, src0.w, src0.1, -src1.w 5: src0.w = temp[10] MAD temp[11].xyz, src0.www, src0.111, src0.000 MAD temp[11].w, src0.w, src0.1, src0.0 6: src0.xyz = const[3], src0.w = temp[1] MAD temp[1].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.y, src0.1, src0.0 7: src0.xyz = temp[1], src1.xyz = const[5] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 8: src0.xyz = temp[9], src1.xyz = const[2] MAD temp[17].xyz, src0.xyz, src1.xyz, src0.000 9: MAD temp[1].z, src0.__0, src0.111, src0.000 10: src0.xyz = temp[1] DP3 temp[12].x, src0.xyz, src0.xyz 11: src0.xyz = temp[12] MAD temp[13].x, src0.1__, src0.111, -src0.x__ 12: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 13: src0.xyz = temp[14] REPL_ALPHA temp[1].z RCP, src0.x 14: src0.xyz = input[5], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz 15: src0.xyz = input[6], src1.xyz = temp[1] DP3 temp[3].y, src0.xyz, src1.xyz 16: src0.xyz = input[7], src1.xyz = temp[1] DP3 temp[3].z, src0.xyz, src1.xyz 17: src0.xyz = input[3], src1.xyz = temp[3] DP3 temp[19].x, src0.xyz, src1.xyz 18: src0.xyz = temp[19] MAD temp[20].x, src0.x__, src0.111, src0.x__ 19: src0.xyz = temp[3], src1.xyz = temp[20], src2.xyz = input[3] MAD temp[21].xyz, -src0.xyz, src1.xxx, src2.xyz 20: BEGIN_TEX; 21: KIL temp[11]; 22: TEX temp[15].xyz, temp[3].xyz_, CUBE[2]; 23: TEX temp[22].xyz, temp[21].xyz_, CUBE[3]; 24: src0.xyz = temp[15], src1.xyz = const[1] MAD temp[16].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = temp[16], src1.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 26: src0.xyz = temp[24], src1.xyz = temp[22], src2.xyz = temp[18] MAD temp[25].xyz, src0.xyz, src1.xyz, src2.xyz 27: src0.xyz = const[3], src1.xyz = temp[25] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 28: src0.xyz = temp[26], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[27].xyz, src2.xxx, srcp.xyz, src0.xyz 29: src0.xyz = temp[27], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[9], input[4].xy__, 2D[0]; 2: TEX temp[1].yw, input[2].xy__, 2D[1]; 3: TEX temp[23].xyz, input[4].xy__, 2D[4]; 4: src0.xyz = temp[23], src0.w = temp[9], src1.w = const[0] MAD temp[24].xyz, src0.xyz, src0.111, src0.xyz MAD temp[10].w, src0.w, src0.1, -src1.w 5: src0.w = temp[10] MAD temp[11].xyz, src0.www, src0.111, src0.000 MAD temp[11].w, src0.w, src0.1, src0.0 6: src0.xyz = const[3], src0.w = temp[1] MAD temp[1].x, src0.w__, src0.111, src0.000 MAD_SAT color[0].w, src0.y, src0.1, src0.0 7: src0.xyz = temp[1], src1.xyz = const[5] MAD temp[1].xy, src0.xy_, src1.xx_, -src0.11_ 8: src0.xyz = temp[9], src1.xyz = const[2] MAD temp[17].xyz, src0.xyz, src1.xyz, src0.000 9: MAD temp[1].z, src0.__0, src0.111, src0.000 10: src0.xyz = temp[1] DP3 temp[12].x, src0.xyz, src0.xyz 11: src0.xyz = temp[12] MAD temp[13].x, src0.1__, src0.111, -src0.x__ 12: src0.xyz = temp[13] REPL_ALPHA temp[14].x RSQ, |src0.x| 13: src0.xyz = temp[14] REPL_ALPHA temp[1].z RCP, src0.x 14: src0.xyz = input[5], src1.xyz = temp[1] DP3 temp[3].x, src0.xyz, src1.xyz 15: src0.xyz = input[6], src1.xyz = temp[1] DP3 temp[3].y, src0.xyz, src1.xyz 16: src0.xyz = input[7], src1.xyz = temp[1] DP3 temp[3].z, src0.xyz, src1.xyz 17: src0.xyz = input[3], src1.xyz = temp[3] DP3 temp[19].x, src0.xyz, src1.xyz 18: src0.xyz = temp[19] MAD temp[20].x, src0.x__, src0.111, src0.x__ 19: src0.xyz = temp[3], src1.xyz = temp[20], src2.xyz = input[3] MAD temp[21].xyz, -src0.xyz, src1.xxx, src2.xyz 20: BEGIN_TEX; 21: KIL temp[11]; 22: TEX temp[15].xyz, temp[3].xyz_, CUBE[2]; 23: TEX temp[22].xyz, temp[21].xyz_, CUBE[3]; 24: src0.xyz = temp[15], src1.xyz = const[1] MAD temp[16].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = temp[16], src1.xyz = temp[17] MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 26: src0.xyz = temp[24], src1.xyz = temp[22], src2.xyz = temp[18] MAD temp[25].xyz, src0.xyz, src1.xyz, src2.xyz 27: src0.xyz = const[3], src1.xyz = temp[25] MAD temp[26].xyz, src0.xxx, src1.xyz, src0.000 28: src0.xyz = temp[26], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[27].xyz, src2.xxx, srcp.xyz, src0.xyz 29: src0.xyz = temp[27], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8], input[4].xy__, 2D[0]; 2: TEX temp[2].yw, input[2].xy__, 2D[1]; 3: TEX temp[4].xyz, input[4].xy__, 2D[4]; 4: src0.xyz = temp[4], src0.w = temp[8], src1.w = const[0] MAD temp[4].xyz, src0.xyz, src0.111, src0.xyz MAD temp[0].w, src0.w, src0.1, -src1.w 5: src0.w = temp[0] MAD temp[9].xyz, src0.www, src0.111, src0.000 MAD temp[9].w, src0.w, src0.1, src0.0 6: src0.xyz = const[3], src0.w = temp[2] MAD temp[2].x, src0.w__, src0.11_, src0.00_ MAD_SAT color[0].w, src0.y, src0.1, src0.0 7: src0.xyz = temp[2], src1.xyz = const[5] MAD temp[2].xy, src0.xy_, src1.xx_, -src0.11_ 8: src0.xyz = temp[8], src1.xyz = const[2] MAD temp[8].xyz, src0.xyz, src1.xyz, src0.000 9: MAD temp[2].z, src0.__0, src0.111, src0.000 10: src0.xyz = temp[2] DP3 temp[1].y, src0.xyz, src0.xyz 11: src0.xyz = temp[1] MAD temp[1].y, src0._1_, src0._1_, -src0._y_ 12: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 13: src0.xyz = temp[1] REPL_ALPHA temp[2].z RCP, src0.y 14: src0.xyz = input[5], src1.xyz = temp[2] DP3 temp[5].x, src0.xyz, src1.xyz 15: src0.xyz = input[6], src1.xyz = temp[2] DP3 temp[5].y, src0.xyz, src1.xyz 16: src0.xyz = input[7], src1.xyz = temp[2] DP3 temp[5].z, src0.xyz, src1.xyz 17: src0.xyz = input[3], src1.xyz = temp[5] DP3 temp[1].y, src0.xyz, src1.xyz 18: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._1_, src0._y_ 19: src0.xyz = temp[5], src1.xyz = temp[1], src2.xyz = input[3] MAD temp[2].xyz, -src0.xyz, src1.yyy, src2.xyz 20: BEGIN_TEX; 21: KIL temp[9]; 22: TEX temp[3].xyz, temp[5].xyz_, CUBE[2]; 23: TEX temp[2].xyz, temp[2].xyz_, CUBE[3]; 24: src0.xyz = temp[3], src1.xyz = const[1] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = temp[3], src1.xyz = temp[8] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 26: src0.xyz = temp[4], src1.xyz = temp[2], src2.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 27: src0.xyz = const[3], src1.xyz = temp[2] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 28: src0.xyz = temp[2], src1.xyz = const[4], src2.xyz = input[1], srcp.xyz = (src1 - src0) MAD temp[1].xyz, src2.xxx, srcp.xyz, src0.xyz 29: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 pc=59************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 15, tex_end: 2 (code_addr: 004403c0) TEX: TEX t8, t4, texture[0] (00008204) TEX t2, t2, texture[1] (00008882) TEX t4, t4, texture[4] (0000a104) 0: xyz: t4 t0 t0 bias-> t4.xyz (03900004) w: t8 c0 t0 bias-> t0.w (00800808) xyz: t4.xyz 1.0 t4.xyz op: 00000a80 w: t8.w 1.0 -c0.w op: 000a8889 1: xyz: t0 t0 t0 bias-> t9.xyz (03a40000) w: t0 t0 t0 bias-> t9.w (00a40000) xyz: t0.www 1.0 0.0 op: 00050a8c w: t0.w 1.0 0.0 op: 00040889 2: xyz: c3 t0 t0 bias-> t2.x (00880023) w: t2 t0 t0 bias-> o0.w (01000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: c3.y 1.0 0.0 op: 40040881 3: xyz: t2 c5 t0 bias-> t2.xy (01880942) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c5.xxx -1.0 op: 000d4280 w: t2.x t2.x t2.x op: 00000000 4: xyz: t8 c2 t0 bias-> t8.xyz (03a00888) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz c2.xyz 0.0 op: 00050200 w: t8.x t8.x t8.x op: 00000000 5: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 6: xyz: t2 t0 t0 bias-> t1.y (01040002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t2.xyz t2.xxx op: 00804000 w: t2.x t2.x t2.x op: 00000000 7: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 8: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 9: xyz: t1 t0 t0 bias-> t2.z (02080001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: t1.y t1.x t1.x op: 05000001 10: xyz: t5 t2 t0 bias-> t5.x (00940085) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t2.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 11: xyz: t6 t2 t0 bias-> t5.y (01140086) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t2.xyz t6.xxx op: 00804200 w: t6.x t6.x t6.x op: 00000000 12: xyz: t7 t2 t0 bias-> t5.z (02140087) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t2.xyz t7.xxx op: 00804200 w: t7.x t7.x t7.x op: 00000000 13: xyz: t3 t5 t0 bias-> t1.y (01040143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 14: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 t1.xyz op: 00000a80 w: t1.x t1.x t1.x op: 00000000 15: xyz: t5 t1 t3 bias-> t2.xyz (03883045) w: t0 t0 t0 bias-> (00000000) xyz: -t5.xyz t1.yyy t3.xyz op: 00020320 w: t5.x t5.x t5.x op: 00000000 NODE 1: alu_offset: 16, tex_offset: 3, alu_end: 5, tex_end: 2 (code_addr: 00443150) TEX: KIL t0, t9, texture[0] (00010009) TEX t3, t5, texture[2] (000090c5) TEX t2, t2, texture[3] (00009882) 16: xyz: t3 c1 t0 bias-> t3.xyz (038c0843) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c1.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 17: xyz: t3 t8 t0 bias-> t3.xyz (038c0203) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t8.xyz 0.0 op: 00050200 w: t3.x t3.x t3.x op: 00000000 18: xyz: t4 t2 t3 bias-> t2.xyz (03883084) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t2.xyz t3.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 19: xyz: c3 t2 t0 bias-> t2.xyz (038800a3) w: t0 t0 t0 bias-> (00000000) xyz: c3.xxx t2.xyz 0.0 op: 80050201 NOP w: c3.x c3.x c3.x op: 00000000 20: xyz: t2 c4 t1 sub-> t1.xyz (03841902) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx srcp.xyz t2.xyz op: 00200789 w: t2.x t2.x t2.x op: 00000000 21: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 40050200 w: t1.x t1.x t1.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: MOV OUT[0].xyz, TEMP[0] 2: MUL OUT[0].w, TEMP[0], IN[0].wwww 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MOV output[0].xyz, temp[0]; 2: MUL output[0].w, temp[0], input[0].wwww; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MOV output[0].xyz, temp[0]; 2: MUL output[0].w, temp[0], input[0].wwww; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MOV output[0].xyz, temp[0]; 2: MUL output[0].w, temp[0], input[0].wwww; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MOV output[0].xyz, temp[0]; 2: MUL output[0].w, temp[0], input[0].wwww; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MOV output[0].xyz, temp[0]; 2: MUL output[0].w, temp[0], input[0].wwww; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MOV_SAT output[0].xyz, temp[0]; 2: MUL_SAT output[0].w, temp[0], input[0].wwww; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MOV_SAT output[0].xyz, temp[0]; 2: MUL_SAT output[0].w, temp[0], input[0].wwww; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MOV_SAT output[0].xyz, temp[0]; 2: MUL_SAT output[0].w, temp[0], input[0].wwww; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MOV_SAT output[0].xyz, temp[0].xyz_; 2: MUL_SAT output[0].w, temp[0].___w, input[0].___w; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MOV_SAT output[0].xyz, temp[0].xyz_; 2: MUL_SAT output[0].w, temp[0].___w, input[0].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MOV_SAT output[0].xyz, temp[0].xyz_; 2: MUL_SAT output[0].w, temp[0].___w, input[0].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MOV_SAT output[0].xyz, temp[0].xyz_; 2: MUL_SAT output[0].w, temp[0].___w, input[0].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MOV_SAT output[0].xyz, temp[0].xyz_; 2: MUL_SAT output[0].w, temp[0].___w, input[0].___w; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[1], input[1].xy__, 2D[0]; 1: MOV_SAT output[0].xyz, temp[1].xyz_; 2: MUL_SAT output[0].w, temp[1].___w, input[0].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[1].xy__, 2D[0]; 1: src0.xyz = temp[1] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 2: src0.w = temp[1], src1.w = input[0] MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 pc=60************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz 1.0 0.0 op: 40050a80 w: t1.w t0.w 0.0 op: 40040509 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR[1], LINEAR DCL OUT[0], COLOR DCL CONST[0] 0: MOV OUT[0], CONST[0] 1: MOV OUT[0].w, IN[0].xxxx 2: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], const[0]; 1: MOV output[0].w, input[0].xxxx; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], const[0]; 1: MOV output[0].w, input[0].xxxx; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], const[0]; 1: MOV output[0].w, input[0].xxxx; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], const[0]; 1: MOV output[0].w, input[0].xxxx; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], const[0]; 1: MOV output[0].w, input[0].xxxx; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], const[0]; 1: MOV_SAT output[0].w, input[0].xxxx; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], const[0]; 1: MOV_SAT output[0].w, input[0].xxxx; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], const[0]; 1: MOV_SAT output[0].w, input[0].xxxx; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0].xyz, const[0].xyz_; 1: MOV_SAT output[0].w, input[0].___x; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV_SAT output[0].xyz, const[0].xyz_; 1: MOV_SAT output[0].w, input[0].___x; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0].xyz, const[0].xyz_; 1: MOV_SAT output[0].w, input[0].___x; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0].xyz, const[0].xyz_; 1: MOV_SAT output[0].w, input[0].___x; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0].xyz, const[0].xyz_; 1: MOV_SAT output[0].w, input[0].___x; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV_SAT output[0].xyz, const[0].xyz_; 1: MOV_SAT output[0].w, input[0].___x; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 1: src0.xyz = input[0] MAD_SAT color[0].w, src0.x, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[0], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src1.x, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[0], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src1.x, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[0], src1.xyz = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src1.x, src0.1, src0.0 pc=61************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: c0 t0 t0 bias-> o0.xyz (1c000020) w: t0 t0 t0 bias-> o0.w (01000000) xyz: c0.xyz 1.0 0.0 op: 40050a80 w: t0.x 1.0 0.0 op: 40040883 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR[1], LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[2], PERSPECTIVE DCL IN[4], GENERIC[3], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[0] DCL TEMP[0..2] IMM FLT32 { 2.0000, 1.0000, 4.0000, 0.0100} 0: ADD TEMP[0].xy, IN[1], -CONST[0] 1: TEX TEMP[0].yw, TEMP[0], SAMP[1], 2D 2: MUL TEMP[0].xy, TEMP[0].ywzw, IMM[0].xxxx 3: ADD TEMP[1].xy, TEMP[0], -IMM[0].yyyy 4: MUL TEMP[0].xy, TEMP[1].yxzw, TEMP[1].yxzw 5: ADD TEMP[2].x, TEMP[0], TEMP[0].yyyy 6: TEX TEMP[0], IN[1], SAMP[0], 2D 7: ADD TEMP[1].z, -TEMP[2].xxxx, IMM[0].yyyy 8: MUL TEMP[2], TEMP[0], IN[0] 9: RSQ TEMP[0].x, TEMP[1].zzzz 10: RCP TEMP[1].z, TEMP[0].xxxx 11: MOV TEMP[1].xy, TEMP[1].yxzw 12: DP3 TEMP[0].z, IN[4], TEMP[1] 13: DP3 TEMP[0].x, IN[2], TEMP[1] 14: DP3 TEMP[0].y, IN[3], TEMP[1] 15: TEX TEMP[0].xyz, TEMP[0], SAMP[2], CUBE 16: MUL TEMP[0].xyz, TEMP[0], TEMP[2] 17: MUL OUT[0].xyz, TEMP[0], IMM[0].zzzz 18: SLT TEMP[0].x, TEMP[0].wwww, IMM[0].wwww 19: MOV OUT[0].w, TEMP[2] 20: KIL -TEMP[0].xxxx 21: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], -const[0]; 1: TEX temp[0].yw, temp[0], 2D[1]; 2: MUL temp[0].xy, temp[0].ywzw, const[1].xxxx; 3: ADD temp[1].xy, temp[0], -const[1].yyyy; 4: MUL temp[0].xy, temp[1].yxzw, temp[1].yxzw; 5: ADD temp[2].x, temp[0], temp[0].yyyy; 6: TEX temp[0], input[1], 2D[0]; 7: ADD temp[1].z, -temp[2].xxxx, const[1].yyyy; 8: MUL temp[2], temp[0], input[0]; 9: RSQ temp[0].x, temp[1].zzzz; 10: RCP temp[1].z, temp[0].xxxx; 11: MOV temp[1].xy, temp[1].yxzw; 12: DP3 temp[0].z, input[4], temp[1]; 13: DP3 temp[0].x, input[2], temp[1]; 14: DP3 temp[0].y, input[3], temp[1]; 15: TEX temp[0].xyz, temp[0], CUBE[2]; 16: MUL temp[0].xyz, temp[0], temp[2]; 17: MUL output[0].xyz, temp[0], const[1].zzzz; 18: SLT temp[0].x, temp[0].wwww, const[1].wwww; 19: MOV output[0].w, temp[2]; 20: KIL -temp[0].xxxx; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], -const[0]; 1: TEX temp[0].yw, temp[0], 2D[1]; 2: MUL temp[0].xy, temp[0].ywzw, const[1].xxxx; 3: ADD temp[1].xy, temp[0], -const[1].yyyy; 4: MUL temp[0].xy, temp[1].yxzw, temp[1].yxzw; 5: ADD temp[2].x, temp[0], temp[0].yyyy; 6: TEX temp[0], input[1], 2D[0]; 7: ADD temp[1].z, -temp[2].xxxx, const[1].yyyy; 8: MUL temp[2], temp[0], input[0]; 9: RSQ temp[0].x, temp[1].zzzz; 10: RCP temp[1].z, temp[0].xxxx; 11: MOV temp[1].xy, temp[1].yxzw; 12: DP3 temp[0].z, input[4], temp[1]; 13: DP3 temp[0].x, input[2], temp[1]; 14: DP3 temp[0].y, input[3], temp[1]; 15: TEX temp[0].xyz, temp[0], CUBE[2]; 16: MUL temp[0].xyz, temp[0], temp[2]; 17: MUL output[0].xyz, temp[0], const[1].zzzz; 18: SLT temp[0].x, temp[0].wwww, const[1].wwww; 19: MOV output[0].w, temp[2]; 20: KIL -temp[0].xxxx; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], -const[0]; 1: TEX temp[0].yw, temp[0], 2D[1]; 2: MUL temp[0].xy, temp[0].ywzw, const[1].xxxx; 3: ADD temp[1].xy, temp[0], -const[1].yyyy; 4: MUL temp[0].xy, temp[1].yxzw, temp[1].yxzw; 5: ADD temp[2].x, temp[0], temp[0].yyyy; 6: TEX temp[0], input[1], 2D[0]; 7: ADD temp[1].z, -temp[2].xxxx, const[1].yyyy; 8: MUL temp[2], temp[0], input[0]; 9: RSQ temp[0].x, temp[1].zzzz; 10: RCP temp[1].z, temp[0].xxxx; 11: MOV temp[1].xy, temp[1].yxzw; 12: DP3 temp[0].z, input[4], temp[1]; 13: DP3 temp[0].x, input[2], temp[1]; 14: DP3 temp[0].y, input[3], temp[1]; 15: TEX temp[0].xyz, temp[0], CUBE[2]; 16: MUL temp[0].xyz, temp[0], temp[2]; 17: MUL output[0].xyz, temp[0], const[1].zzzz; 18: SLT temp[0].x, temp[0].wwww, const[1].wwww; 19: MOV output[0].w, temp[2]; 20: KIL -temp[0].xxxx; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], -const[0]; 1: TEX temp[0].yw, temp[0], 2D[1]; 2: MUL temp[0].xy, temp[0].ywzw, const[1].xxxx; 3: ADD temp[1].xy, temp[0], -const[1].yyyy; 4: MUL temp[0].xy, temp[1].yxzw, temp[1].yxzw; 5: ADD temp[2].x, temp[0], temp[0].yyyy; 6: TEX temp[0], input[1], 2D[0]; 7: ADD temp[1].z, -temp[2].xxxx, const[1].yyyy; 8: MUL temp[2], temp[0], input[0]; 9: RSQ temp[0].x, temp[1].zzzz; 10: RCP temp[1].z, temp[0].xxxx; 11: MOV temp[1].xy, temp[1].yxzw; 12: DP3 temp[0].z, input[4], temp[1]; 13: DP3 temp[0].x, input[2], temp[1]; 14: DP3 temp[0].y, input[3], temp[1]; 15: TEX temp[0].xyz, temp[0], CUBE[2]; 16: MUL temp[0].xyz, temp[0], temp[2]; 17: MUL output[0].xyz, temp[0], const[1].zzzz; 18: SLT temp[0].x, temp[0].wwww, const[1].wwww; 19: MOV output[0].w, temp[2]; 20: KIL -temp[0].xxxx; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], -const[0]; 1: TEX temp[0].yw, temp[0], 2D[1]; 2: MUL temp[0].xy, temp[0].ywzw, const[1].xxxx; 3: ADD temp[1].xy, temp[0], -const[1].yyyy; 4: MUL temp[0].xy, temp[1].yxzw, temp[1].yxzw; 5: ADD temp[2].x, temp[0], temp[0].yyyy; 6: TEX temp[0], input[1], 2D[0]; 7: ADD temp[1].z, -temp[2].xxxx, const[1].yyyy; 8: MUL temp[2], temp[0], input[0]; 9: RSQ temp[0].x, temp[1].zzzz; 10: RCP temp[1].z, temp[0].xxxx; 11: MOV temp[1].xy, temp[1].yxzw; 12: DP3 temp[0].z, input[4], temp[1]; 13: DP3 temp[0].x, input[2], temp[1]; 14: DP3 temp[0].y, input[3], temp[1]; 15: TEX temp[0].xyz, temp[0], CUBE[2]; 16: MUL temp[0].xyz, temp[0], temp[2]; 17: MUL output[0].xyz, temp[0], const[1].zzzz; 18: SLT temp[0].x, temp[0].wwww, const[1].wwww; 19: MOV output[0].w, temp[2]; 20: KIL -temp[0].xxxx; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], -const[0]; 1: TEX temp[0].yw, temp[0], 2D[1]; 2: MUL temp[0].xy, temp[0].ywzw, const[1].xxxx; 3: ADD temp[1].xy, temp[0], -const[1].yyyy; 4: MUL temp[0].xy, temp[1].yxzw, temp[1].yxzw; 5: ADD temp[2].x, temp[0], temp[0].yyyy; 6: TEX temp[0], input[1], 2D[0]; 7: ADD temp[1].z, -temp[2].xxxx, const[1].yyyy; 8: MUL temp[2], temp[0], input[0]; 9: RSQ temp[0].x, temp[1].zzzz; 10: RCP temp[1].z, temp[0].xxxx; 11: MOV temp[1].xy, temp[1].yxzw; 12: DP3 temp[0].z, input[4], temp[1]; 13: DP3 temp[0].x, input[2], temp[1]; 14: DP3 temp[0].y, input[3], temp[1]; 15: TEX temp[0].xyz, temp[0], CUBE[2]; 16: MUL temp[0].xyz, temp[0], temp[2]; 17: MUL_SAT output[0].xyz, temp[0], const[1].zzzz; 18: SLT temp[0].x, temp[0].wwww, const[1].wwww; 19: MOV_SAT output[0].w, temp[2]; 20: KIL -temp[0].xxxx; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], -const[0]; 1: TEX temp[3], temp[0], 2D[1]; 2: MOV temp[0].yw, temp[3]; 3: MUL temp[0].xy, temp[0].ywzw, const[1].xxxx; 4: ADD temp[1].xy, temp[0], -const[1].yyyy; 5: MUL temp[0].xy, temp[1].yxzw, temp[1].yxzw; 6: ADD temp[2].x, temp[0], temp[0].yyyy; 7: TEX temp[0], input[1], 2D[0]; 8: ADD temp[1].z, -temp[2].xxxx, const[1].yyyy; 9: MUL temp[2], temp[0], input[0]; 10: RSQ temp[0].x, temp[1].zzzz; 11: RCP temp[1].z, temp[0].xxxx; 12: MOV temp[1].xy, temp[1].yxzw; 13: DP3 temp[0].z, input[4], temp[1]; 14: DP3 temp[0].x, input[2], temp[1]; 15: DP3 temp[0].y, input[3], temp[1]; 16: TEX temp[4], temp[0], CUBE[2]; 17: MOV temp[0].xyz, temp[4]; 18: MUL temp[0].xyz, temp[0], temp[2]; 19: MUL_SAT output[0].xyz, temp[0], const[1].zzzz; 20: SLT temp[0].x, temp[0].wwww, const[1].wwww; 21: MOV_SAT output[0].w, temp[2]; 22: KIL -temp[0].xxxx; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], -const[0]; 1: TEX temp[3], temp[0], 2D[1]; 2: MOV temp[0].yw, temp[3]; 3: MUL temp[0].xy, temp[0].ywzw, const[1].xxxx; 4: ADD temp[1].xy, temp[0], -const[1].yyyy; 5: MUL temp[0].xy, temp[1].yxzw, temp[1].yxzw; 6: ADD temp[2].x, temp[0], temp[0].yyyy; 7: TEX temp[0], input[1], 2D[0]; 8: ADD temp[1].z, -temp[2].xxxx, const[1].yyyy; 9: MUL temp[2], temp[0], input[0]; 10: RSQ temp[0].x, |temp[1].zzzz|; 11: RCP temp[1].z, temp[0].xxxx; 12: MOV temp[1].xy, temp[1].yxzw; 13: DP3 temp[0].z, input[4], temp[1]; 14: DP3 temp[0].x, input[2], temp[1]; 15: DP3 temp[0].y, input[3], temp[1]; 16: TEX temp[4], temp[0], CUBE[2]; 17: MOV temp[0].xyz, temp[4]; 18: MUL temp[0].xyz, temp[0], temp[2]; 19: MUL_SAT output[0].xyz, temp[0], const[1].zzzz; 20: ADD temp[5].x, temp[0].wwww, -const[1].wwww; 21: CMP temp[0].x, temp[5], none.1111, none.0000; 22: MOV_SAT output[0].w, temp[2]; 23: KIL -temp[0].xxxx; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, -const[0].xy__; 1: TEX temp[3].yw, temp[0].xy__, 2D[1]; 2: MOV temp[0].yw, temp[3]._y_w; 3: MUL temp[0].xy, temp[0].yw__, const[1].xx__; 4: ADD temp[1].xy, temp[0].xy__, -const[1].yy__; 5: MUL temp[0].xy, temp[1].yx__, temp[1].yx__; 6: ADD temp[2].x, temp[0].x___, temp[0].y___; 7: TEX temp[0], input[1].xy__, 2D[0]; 8: ADD temp[1].z, -temp[2].__x_, const[1].__y_; 9: MUL temp[2], temp[0], input[0]; 10: RSQ temp[0].x, |temp[1].z___|; 11: RCP temp[1].z, temp[0].x___; 12: MOV temp[1].xy, temp[1].yx__; 13: DP3 temp[0].z, input[4].xyz_, temp[1].xyz_; 14: DP3 temp[0].x, input[2].xyz_, temp[1].xyz_; 15: DP3 temp[0].y, input[3].xyz_, temp[1].xyz_; 16: TEX temp[4].xyz, temp[0].xyz_, CUBE[2]; 17: MOV temp[0].xyz, temp[4].xyz_; 18: MUL temp[0].xyz, temp[0].xyz_, temp[2].xyz_; 19: MUL_SAT output[0].xyz, temp[0].xyz_, const[1].zzz_; 20: ADD temp[5].x, temp[0].w___, -const[1].w___; 21: CMP temp[0].x, temp[5].x___, none.1___, none.0___; 22: MOV_SAT output[0].w, temp[2].___w; 23: KIL -temp[0].xxxx; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, -const[0].xy__; 1: TEX temp[3].yw, temp[0].xy__, 2D[1]; 2: MOV temp[0].yw, temp[3]._y_w; 3: MUL temp[0].xy, temp[0].yw__, const[1].xx__; 4: ADD temp[1].xy, temp[0].xy__, -const[1].yy__; 5: MUL temp[0].xy, temp[1].yx__, temp[1].yx__; 6: ADD temp[2].x, temp[0].x___, temp[0].y___; 7: TEX temp[0], input[1].xy__, 2D[0]; 8: ADD temp[1].z, -temp[2].__x_, const[1].__y_; 9: MUL temp[2], temp[0], input[0]; 10: RSQ temp[0].x, |temp[1].z___|; 11: RCP temp[1].z, temp[0].x___; 12: MOV temp[1].xy, temp[1].yx__; 13: DP3 temp[0].z, input[4].xyz_, temp[1].xyz_; 14: DP3 temp[0].x, input[2].xyz_, temp[1].xyz_; 15: DP3 temp[0].y, input[3].xyz_, temp[1].xyz_; 16: TEX temp[4].xyz, temp[0].xyz_, CUBE[2]; 17: MOV temp[0].xyz, temp[4].xyz_; 18: MUL temp[0].xyz, temp[0].xyz_, temp[2].xyz_; 19: MUL_SAT output[0].xyz, temp[0].xyz_, const[1].zzz_; 20: ADD temp[5].x, temp[0].w___, -const[1].w___; 21: CMP temp[0].x, temp[5].x___, none.1___, none.0___; 22: MOV_SAT output[0].w, temp[2].___w; 23: KIL -temp[0].xxxx; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, -const[0].xy__; 1: TEX temp[3].yw, temp[0].xy__, 2D[1]; 2: MUL temp[0].xy, temp[3].yw__, const[1].xx__; 3: ADD temp[1].xy, temp[0].xy__, -none.11__; 4: MUL temp[0].xy, temp[1].yx__, temp[1].yx__; 5: ADD temp[2].x, temp[0].x___, temp[0].y___; 6: TEX temp[0], input[1].xy__, 2D[0]; 7: ADD temp[1].z, -temp[2].__x_, none.__1_; 8: MUL temp[2], temp[0], input[0]; 9: RSQ temp[0].x, |temp[1].z___|; 10: RCP temp[1].z, temp[0].x___; 11: MOV temp[1].xy, temp[1].yx__; 12: DP3 temp[0].z, input[4].xyz_, temp[1].xyz_; 13: DP3 temp[0].x, input[2].xyz_, temp[1].xyz_; 14: DP3 temp[0].y, input[3].xyz_, temp[1].xyz_; 15: TEX temp[4].xyz, temp[0].xyz_, CUBE[2]; 16: MUL temp[0].xyz, temp[4].xyz_, temp[2].xyz_; 17: MUL_SAT output[0].xyz, temp[0].xyz_, const[1].zzz_; 18: CMP temp[0].x, (temp[0] - const[1]).w___, none.1___, none.0___; 19: MOV_SAT output[0].w, temp[2].___w; 20: KIL -temp[0].xxxx; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, -const[0].xy__; 1: TEX temp[3].yw, temp[0].xy__, 2D[1]; 2: MOV temp[5].x, temp[3].y___; 3: MOV temp[5].y, temp[3]._w__; 4: MUL temp[0].xy, temp[5].xy__, const[1].xx__; 5: ADD temp[1].xy, temp[0].xy__, -none.11__; 6: MOV temp[6].y, temp[1]._x__; 7: MOV temp[6].x, temp[1].y___; 8: MOV temp[7].y, temp[1]._x__; 9: MOV temp[7].x, temp[1].y___; 10: MUL temp[0].xy, temp[6].xy__, temp[7].xy__; 11: ADD temp[2].x, temp[0].x___, temp[0].y___; 12: TEX temp[0], input[1].xy__, 2D[0]; 13: ADD temp[1].z, -temp[2].__x_, none.__1_; 14: MUL temp[2], temp[0], input[0]; 15: RSQ temp[0].x, |temp[1].z___|; 16: RCP temp[1].z, temp[0].x___; 17: MOV temp[8].y, temp[1]._x__; 18: MOV temp[8].x, temp[1].y___; 19: MOV temp[1].xy, temp[8].xy__; 20: DP3 temp[0].z, input[4].xyz_, temp[1].xyz_; 21: DP3 temp[0].x, input[2].xyz_, temp[1].xyz_; 22: DP3 temp[0].y, input[3].xyz_, temp[1].xyz_; 23: TEX temp[4].xyz, temp[0].xyz_, CUBE[2]; 24: MUL temp[0].xyz, temp[4].xyz_, temp[2].xyz_; 25: MUL_SAT output[0].xyz, temp[0].xyz_, const[1].zzz_; 26: CMP temp[0].x, (temp[0] - const[1]).w___, none.1___, none.0___; 27: MOV_SAT output[0].w, temp[2].___w; 28: MOV temp[9], -temp[0].xxxx; 29: KIL temp[9]; CONST[1] = { 2.0000 1.0000 4.0000 0.0100 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, -const[0].xy__; 1: TEX temp[3].yw, temp[0].xy__, 2D[1]; 2: MOV temp[5].x, temp[3].y___; 3: MOV temp[5].y, temp[3]._w__; 4: MUL temp[0].xy, temp[5].xy__, const[1].xx__; 5: ADD temp[1].xy, temp[0].xy__, -none.11__; 6: MOV temp[6].y, temp[1]._x__; 7: MOV temp[6].x, temp[1].y___; 8: MOV temp[7].y, temp[1]._x__; 9: MOV temp[7].x, temp[1].y___; 10: MUL temp[0].xy, temp[6].xy__, temp[7].xy__; 11: ADD temp[2].x, temp[0].x___, temp[0].y___; 12: TEX temp[0], input[1].xy__, 2D[0]; 13: ADD temp[1].z, -temp[2].__x_, none.__1_; 14: MUL temp[2], temp[0], input[0]; 15: RSQ temp[0].x, |temp[1].z___|; 16: RCP temp[1].z, temp[0].x___; 17: MOV temp[8].y, temp[1]._x__; 18: MOV temp[8].x, temp[1].y___; 19: MOV temp[1].xy, temp[8].xy__; 20: DP3 temp[0].z, input[4].xyz_, temp[1].xyz_; 21: DP3 temp[0].x, input[2].xyz_, temp[1].xyz_; 22: DP3 temp[0].y, input[3].xyz_, temp[1].xyz_; 23: TEX temp[4].xyz, temp[0].xyz_, CUBE[2]; 24: MUL temp[0].xyz, temp[4].xyz_, temp[2].xyz_; 25: MUL_SAT output[0].xyz, temp[0].xyz_, const[1].zzz_; 26: CMP temp[0].x, (temp[0] - const[1]).w___, none.1___, none.0___; 27: MOV_SAT output[0].w, temp[2].___w; 28: MOV temp[9], -temp[0].xxxx; 29: KIL temp[9]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[10].xy, input[1].xy__, -const[0].xy__; 1: TEX temp[11].yw, temp[10].xy__, 2D[1]; 2: MOV temp[5].x, temp[11].y___; 3: MOV temp[5].y, temp[11]._w__; 4: MUL temp[12].xy, temp[5].xy__, const[1].xx__; 5: ADD temp[13].xy, temp[12].xy__, -none.11__; 6: MOV temp[6].y, temp[13]._x__; 7: MOV temp[6].x, temp[13].y___; 8: MOV temp[7].y, temp[13]._x__; 9: MOV temp[7].x, temp[13].y___; 10: MUL temp[14].xy, temp[6].xy__, temp[7].xy__; 11: ADD temp[15].x, temp[14].x___, temp[14].y___; 12: TEX temp[16], input[1].xy__, 2D[0]; 13: ADD temp[17].z, -temp[15].__x_, none.__1_; 14: MUL temp[18], temp[16], input[0]; 15: RSQ temp[19].x, |temp[17].z___|; 16: RCP temp[1].z, temp[19].x___; 17: MOV temp[8].y, temp[13]._x__; 18: MOV temp[8].x, temp[13].y___; 19: MOV temp[1].xy, temp[8].xy__; 20: DP3 temp[0].z, input[4].xyz_, temp[1].xyz_; 21: DP3 temp[0].x, input[2].xyz_, temp[1].xyz_; 22: DP3 temp[0].y, input[3].xyz_, temp[1].xyz_; 23: TEX temp[20].xyz, temp[0].xyz_, CUBE[2]; 24: MUL temp[21].xyz, temp[20].xyz_, temp[18].xyz_; 25: MUL_SAT output[0].xyz, temp[21].xyz_, const[1].zzz_; 26: CMP temp[22].x, (temp[16] - const[1]).w___, none.1___, none.0___; 27: MOV_SAT output[0].w, temp[18].___w; 28: MOV temp[23], -temp[22].xxxx; 29: KIL temp[23]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[0] MAD temp[10].xy, src0.xy_, src0.111, -src1.xy_ 1: TEX temp[11].yw, temp[10].xy__, 2D[1]; 2: src0.xyz = temp[11] MAD temp[5].x, src0.y__, src0.111, src0.000 3: src0.w = temp[11] MAD temp[5].y, src0._w_, src0.111, src0.000 4: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[12].xy, src0.xy_, src1.xx_, src0.000 5: src0.xyz = temp[12] MAD temp[13].xy, src0.xy_, src0.111, -src0.11_ 6: src0.xyz = temp[13] MAD temp[6].y, src0._x_, src0.111, src0.000 7: src0.xyz = temp[13] MAD temp[6].x, src0.y__, src0.111, src0.000 8: src0.xyz = temp[13] MAD temp[7].y, src0._x_, src0.111, src0.000 9: src0.xyz = temp[13] MAD temp[7].x, src0.y__, src0.111, src0.000 10: src0.xyz = temp[6], src1.xyz = temp[7] MAD temp[14].xy, src0.xy_, src1.xy_, src0.000 11: src0.xyz = temp[14] MAD temp[15].x, src0.x__, src0.111, src0.y__ 12: TEX temp[16], input[1].xy__, 2D[0]; 13: src0.xyz = temp[15] MAD temp[17].z, -src0.__x, src0.111, src0.__1 14: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = input[0], src1.w = input[0] MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[18].w, src0.w, src1.w, src0.0 15: src0.xyz = temp[17] REPL_ALPHA temp[19].x RSQ, |src0.z| 16: src0.xyz = temp[19] REPL_ALPHA temp[1].z RCP, src0.x 17: src0.xyz = temp[13] MAD temp[8].y, src0._x_, src0.111, src0.000 18: src0.xyz = temp[13] MAD temp[8].x, src0.y__, src0.111, src0.000 19: src0.xyz = temp[8] MAD temp[1].xy, src0.xy_, src0.111, src0.000 20: src0.xyz = input[4], src1.xyz = temp[1] DP3 temp[0].z, src0.xyz, src1.xyz 21: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[0].x, src0.xyz, src1.xyz 22: src0.xyz = input[3], src1.xyz = temp[1] DP3 temp[0].y, src0.xyz, src1.xyz 23: TEX temp[20].xyz, temp[0].xyz_, CUBE[2]; 24: src0.xyz = temp[20], src1.xyz = temp[18] MAD temp[21].xyz, src0.xyz, src1.xyz, src0.000 25: src0.xyz = temp[21], src1.xyz = const[1] MAD_SAT color[0].xyz, src0.xyz, src1.zzz, src0.000 26: src0.w = const[1], src1.w = temp[16], srcp.w = (src1 - src0) CMP temp[22].x, src0.0__, src0.1__, srcp.w__ 27: src0.w = temp[18] MAD_SAT color[0].w, src0.w, src0.1, src0.0 28: src0.xyz = temp[22] MAD temp[23].xyz, -src0.xxx, src0.111, src0.000 MAD temp[23].w, -src0.x, src0.1, src0.0 29: KIL temp[23]; Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[16], input[1].xy__, 2D[0]; 2: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = input[0], src1.w = input[0] MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[18].w, src0.w, src1.w, src0.0 3: src0.w = const[1], src1.w = temp[16], src2.w = temp[18], srcp.w = (src1 - src0) CMP temp[22].x, src0.0__, src0.1__, srcp.w__ MAD_SAT color[0].w, src2.w, src0.1, src0.0 4: src0.xyz = temp[22] MAD temp[23].xyz, -src0.xxx, src0.111, src0.000 MAD temp[23].w, -src0.x, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD temp[10].xy, src0.xy_, src0.111, -src1.xy_ 6: BEGIN_TEX; 7: KIL temp[23]; 8: TEX temp[11].yw, temp[10].xy__, 2D[1]; 9: src0.w = temp[11] MAD temp[5].y, src0._w_, src0.111, src0.000 10: src0.xyz = temp[11] MAD temp[5].x, src0.y__, src0.111, src0.000 11: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[12].xy, src0.xy_, src1.xx_, src0.000 12: src0.xyz = temp[12] MAD temp[13].xy, src0.xy_, src0.111, -src0.11_ 13: src0.xyz = temp[13] MAD temp[6].x, src0.y__, src0.111, src0.000 14: src0.xyz = temp[13] MAD temp[7].x, src0.y__, src0.111, src0.000 15: src0.xyz = temp[13] MAD temp[8].x, src0.y__, src0.111, src0.000 16: src0.xyz = temp[13] MAD temp[6].y, src0._x_, src0.111, src0.000 17: src0.xyz = temp[13] MAD temp[7].y, src0._x_, src0.111, src0.000 18: src0.xyz = temp[6], src1.xyz = temp[7] MAD temp[14].xy, src0.xy_, src1.xy_, src0.000 19: src0.xyz = temp[13], src1.xyz = temp[14] MAD temp[8].y, src0._x_, src0.111, src0.000 MAD temp[15].w, src1.x, src0.1, src1.y 20: src0.xyz = temp[8], src0.w = temp[15] MAD temp[1].xy, src0.xy_, src0.111, src0.000 MAD temp[17].w, -src0.w, src0.1, src0.1 21: src0.xyz = temp[17], src0.w = temp[17] REPL_ALPHA temp[19].x RSQ, |src0.w| 22: src0.xyz = temp[19] REPL_ALPHA temp[1].z RCP, src0.x 23: src0.xyz = input[4], src1.xyz = temp[1] DP3 temp[0].z, src0.xyz, src1.xyz 24: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[0].x, src0.xyz, src1.xyz 25: src0.xyz = input[3], src1.xyz = temp[1] DP3 temp[0].y, src0.xyz, src1.xyz 26: BEGIN_TEX; 27: TEX temp[20].xyz, temp[0].xyz_, CUBE[2]; 28: src0.xyz = temp[20], src1.xyz = temp[18] MAD temp[21].xyz, src0.xyz, src1.xyz, src0.000 29: src0.xyz = temp[21], src1.xyz = const[1] MAD_SAT color[0].xyz, src0.xyz, src1.zzz, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[16], input[1].xy__, 2D[0]; 2: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = input[0], src1.w = input[0] MAD temp[18].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[18].w, src0.w, src1.w, src0.0 3: src0.w = const[1], src1.w = temp[16], src2.w = temp[18], srcp.w = (src1 - src0) CMP temp[22].x, src0.0__, src0.1__, srcp.w__ MAD_SAT color[0].w, src2.w, src0.1, src0.0 4: src0.xyz = temp[22] MAD temp[23].xyz, -src0.xxx, src0.111, src0.000 MAD temp[23].w, -src0.x, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD temp[10].xy, src0.xy_, src0.111, -src1.xy_ 6: BEGIN_TEX; 7: KIL temp[23]; 8: TEX temp[11].yw, temp[10].xy__, 2D[1]; 9: src0.w = temp[11] MAD temp[5].y, src0._w_, src0.111, src0.000 10: src0.xyz = temp[11] MAD temp[5].x, src0.y__, src0.111, src0.000 11: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[12].xy, src0.xy_, src1.xx_, src0.000 12: src0.xyz = temp[12] MAD temp[13].xy, src0.xy_, src0.111, -src0.11_ 13: src0.xyz = temp[13] MAD temp[6].x, src0.y__, src0.111, src0.000 14: src0.xyz = temp[13] MAD temp[7].x, src0.y__, src0.111, src0.000 15: src0.xyz = temp[13] MAD temp[8].x, src0.y__, src0.111, src0.000 16: src0.xyz = temp[13] MAD temp[6].y, src0._x_, src0.111, src0.000 17: src0.xyz = temp[13] MAD temp[7].y, src0._x_, src0.111, src0.000 18: src0.xyz = temp[6], src1.xyz = temp[7] MAD temp[14].xy, src0.xy_, src1.xy_, src0.000 19: src0.xyz = temp[13], src1.xyz = temp[14] MAD temp[8].y, src0._x_, src0.111, src0.000 MAD temp[15].w, src1.x, src0.1, src1.y 20: src0.xyz = temp[8], src0.w = temp[15] MAD temp[1].xy, src0.xy_, src0.111, src0.000 MAD temp[17].w, -src0.w, src0.1, src0.1 21: src0.w = temp[17] REPL_ALPHA temp[19].x RSQ, |src0.w| 22: src0.xyz = temp[19] REPL_ALPHA temp[1].z RCP, src0.x 23: src0.xyz = input[4], src1.xyz = temp[1] DP3 temp[0].z, src0.xyz, src1.xyz 24: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[0].x, src0.xyz, src1.xyz 25: src0.xyz = input[3], src1.xyz = temp[1] DP3 temp[0].y, src0.xyz, src1.xyz 26: BEGIN_TEX; 27: TEX temp[20].xyz, temp[0].xyz_, CUBE[2]; 28: src0.xyz = temp[20], src1.xyz = temp[18] MAD temp[21].xyz, src0.xyz, src1.xyz, src0.000 29: src0.xyz = temp[21], src1.xyz = const[1] MAD_SAT color[0].xyz, src0.xyz, src1.zzz, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], input[1].xy__, 2D[0]; 2: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = input[0], src1.w = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.w = const[1], src1.w = temp[5], src2.w = temp[0], srcp.w = (src1 - src0) CMP temp[1].z, src0.__0, src0.__1, srcp.__w MAD_SAT color[0].w, src2.w, src0.1, src0.0 4: src0.xyz = temp[1] MAD temp[5].xyz, -src0.zzz, src0.111, src0.000 MAD temp[5].w, -src0.z, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].xy, src0.xy_, src0.11_, -src1.xy_ 6: BEGIN_TEX; 7: KIL temp[5]; 8: TEX temp[1].yw, temp[1].xy__, 2D[1]; 9: src0.w = temp[1] MAD temp[5].y, src0._w_, src0.11_, src0.00_ 10: src0.xyz = temp[1] MAD temp[5].x, src0.y__, src0.11_, src0.00_ 11: src0.xyz = temp[5], src1.xyz = const[1] MAD temp[1].xy, src0.xy_, src1.xx_, src0.00_ 12: src0.xyz = temp[1] MAD temp[1].xy, src0.xy_, src0.11_, -src0.11_ 13: src0.xyz = temp[1] MAD temp[5].x, src0.y__, src0.11_, src0.00_ 14: src0.xyz = temp[1] MAD temp[6].x, src0.y__, src0.11_, src0.00_ 15: src0.xyz = temp[1] MAD temp[7].x, src0.y__, src0.11_, src0.00_ 16: src0.xyz = temp[1] MAD temp[5].y, src0._x_, src0.11_, src0.00_ 17: src0.xyz = temp[1] MAD temp[6].y, src0._x_, src0.11_, src0.00_ 18: src0.xyz = temp[5], src1.xyz = temp[6] MAD temp[5].xy, src0.xy_, src1.xy_, src0.00_ 19: src0.xyz = temp[1], src1.xyz = temp[5] MAD temp[7].y, src0._x_, src0.11_, src0.00_ MAD temp[0].w, src1.x, src0.1, src1.y 20: src0.xyz = temp[7], src0.w = temp[0] MAD temp[1].xy, src0.xy_, src0.111, src0.000 MAD temp[0].w, -src0.w, src0.1, src0.1 21: src0.w = temp[0] REPL_ALPHA temp[5].x RSQ, |src0.w| 22: src0.xyz = temp[5] REPL_ALPHA temp[1].z RCP, src0.x 23: src0.xyz = input[4], src1.xyz = temp[1] DP3 temp[4].z, src0.xyz, src1.xyz 24: src0.xyz = input[2], src1.xyz = temp[1] DP3 temp[4].x, src0.xyz, src1.xyz 25: src0.xyz = input[3], src1.xyz = temp[1] DP3 temp[4].y, src0.xyz, src1.xyz 26: BEGIN_TEX; 27: TEX temp[1].xyz, temp[4].xyz_, CUBE[2]; 28: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 29: src0.xyz = temp[0], src1.xyz = const[1] MAD_SAT color[0].xyz, src0.xyz, src1.zzz, src0.000 pc=62************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 3, tex_end: 0 (code_addr: 004000c0) TEX: TEX t5, t1, texture[0] (00008141) 0: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: t5 t0 t0 bias-> t0.w (00800005) xyz: t5.xyz t0.xyz 0.0 op: 00050200 w: t5.w t0.w 0.0 op: 00040509 1: xyz: t0 t0 t0 bias-> t1.z (02040000) w: c1 t5 t0 sub-> o0.w (01000161) xyz: 0.0 1.0 srcp.www op: 0404ca94 w: t0.w 1.0 0.0 op: 4024088b 2: xyz: t1 t0 t0 bias-> t5.xyz (03940001) w: t0 t0 t0 bias-> t5.w (00940000) xyz: -t1.zzz 1.0 0.0 op: 00050aa3 w: -t1.z 1.0 0.0 op: 000408a2 3: xyz: t1 c0 t0 bias-> t1.xy (01840801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 -c0.xyz op: 00090a80 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 4, tex_offset: 1, alu_end: 16, tex_end: 1 (code_addr: 00021404) TEX: KIL t0, t5, texture[0] (00010005) TEX t1, t1, texture[1] (00008841) 4: xyz: t0 t0 t0 bias-> t5.y (01140000) w: t1 t0 t0 bias-> (00000001) xyz: t1.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 5: xyz: t1 t0 t0 bias-> t5.x (00940001) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy 1.0 0.0 op: 00050a82 w: t1.x t1.x t1.x op: 00000000 6: xyz: t5 c1 t0 bias-> t1.xy (01840845) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz c1.xxx 0.0 op: 00050280 w: t5.x t5.x t5.x op: 00000000 7: xyz: t1 t0 t0 bias-> t1.xy (01840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 -1.0 op: 000d4a80 w: t1.x t1.x t1.x op: 00000000 8: xyz: t1 t0 t0 bias-> t5.x (00940001) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy 1.0 0.0 op: 00050a82 w: t1.x t1.x t1.x op: 00000000 9: xyz: t1 t0 t0 bias-> t6.x (00980001) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy 1.0 0.0 op: 00050a82 w: t1.x t1.x t1.x op: 00000000 10: xyz: t1 t0 t0 bias-> t7.x (009c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy 1.0 0.0 op: 00050a82 w: t1.x t1.x t1.x op: 00000000 11: xyz: t1 t0 t0 bias-> t5.y (01140001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx 1.0 0.0 op: 00050a81 w: t1.x t1.x t1.x op: 00000000 12: xyz: t1 t0 t0 bias-> t6.y (01180001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx 1.0 0.0 op: 00050a81 w: t1.x t1.x t1.x op: 00000000 13: xyz: t5 t6 t0 bias-> t5.xy (01940185) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t6.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 14: xyz: t1 t5 t0 bias-> t7.y (011c0141) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.xxx 1.0 0.0 op: 00050a81 w: t5.x 1.0 t5.y op: 00010883 15: xyz: t7 t0 t0 bias-> t1.xy (01840007) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t7.xyz 1.0 0.0 op: 00050a80 w: -t0.w 1.0 1.0 op: 000448a9 16: xyz: t0 t0 t0 bias-> t5.x (00940000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 05004081 w: |t0.w| t0.x t0.x op: 05800049 17: xyz: t5 t0 t0 bias-> t1.z (02040005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xxx t5.xxx t5.xxx op: 05004081 w: t5.x t5.x t5.x op: 05000000 18: xyz: t4 t1 t0 bias-> t4.z (02100044) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t1.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 19: xyz: t2 t1 t0 bias-> t4.x (00900042) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t1.xyz t2.xxx op: 00804200 w: t2.x t2.x t2.x op: 00000000 20: xyz: t3 t1 t0 bias-> t4.y (01100043) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t1.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 NODE 2: alu_offset: 21, tex_offset: 3, alu_end: 1, tex_end: 0 (code_addr: 00403055) TEX: TEX t1, t4, texture[2] (00009044) 21: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 22: xyz: t0 c1 t0 bias-> o0.xyz (1c000840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.zzz 0.0 op: 40050380 w: t0.x t0.x t0.x op: 00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[1], PERSPECTIVE DCL IN[3], GENERIC[3], PERSPECTIVE DCL IN[4], GENERIC[4], PERSPECTIVE DCL IN[5], GENERIC[5], PERSPECTIVE DCL IN[6], GENERIC[6], PERSPECTIVE DCL IN[7], GENERIC[7], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL SAMP[7] DCL SAMP[8] DCL SAMP[9] DCL CONST[2] DCL CONST[5..6] DCL TEMP[0..14] IMM FLT32 { 0.0000, 0.5000, 1.0000, 2.0000} IMM FLT32 { -32.0000, 16.0000, 0.0000, 2.0000} IMM FLT32 {100000.0000, 0.0000, 20.0000, 2.0000} IMM FLT32 { 2.0000, 4.0000, 8.0000, 16.0000} 0: SUB TEMP[0], IMM[0].yyyy, IN[1] 1: SUB TEMP[1], IMM[0].yyyy, IN[2] 2: ABS TEMP[0], TEMP[0] 3: ABS TEMP[1], TEMP[1] 4: MAX TEMP[0].xy, TEMP[0].xzwy, TEMP[0].ywxz 5: MAX TEMP[0].zw, TEMP[1].zwxz, TEMP[1].xyyw 6: MAD_SAT TEMP[2].yw, TEMP[0].zxwy, IMM[1].xxxx, IMM[1].yyyy 7: MAD_SAT TEMP[2].x, TEMP[0].zxwy, IMM[1].xxxx, IMM[1].yyyy 8: MAD_SAT TEMP[2].z, TEMP[0].zxwy, IMM[1].xxxx, IMM[1].yyyy 9: MUL TEMP[2], TEMP[2], CONST[2] 10: SUB TEMP[3], IMM[0].zzzz, TEMP[2] 11: MOV TEMP[4], IMM[0].xxxx 12: MOV TEMP[5], IN[7] 13: MUL_SAT TEMP[6], TEMP[2], IMM[2].xxxx 14: MUL TEMP[7], IMM[3], TEMP[6] 15: MUL_SAT TEMP[6].x, TEMP[3].xxxx, IMM[2].xxxx 16: MUL TEMP[0].xy, TEMP[6].xxxx, TEMP[5] 17: MUL TEMP[1].xy, TEMP[5], TEMP[7].xxxx 18: MUL TEMP[8].xy, TEMP[5], TEMP[7].yyyy 19: MUL TEMP[9].xy, TEMP[5], TEMP[7].zzzz 20: MUL TEMP[10].xy, TEMP[5], TEMP[7].wwww 21: TEX TEMP[0], TEMP[0], SAMP[0], 2D 22: TEX TEMP[1], TEMP[1], SAMP[1], 2D 23: TEX TEMP[8], TEMP[8], SAMP[2], 2D 24: TEX TEMP[9], TEMP[9], SAMP[3], 2D 25: TEX TEMP[10], TEMP[10], SAMP[4], 2D 26: MOV TEMP[4], TEMP[0] 27: MUL TEMP[4], TEMP[4], TEMP[3].xxxx 28: MAD TEMP[4], TEMP[1], TEMP[2].xxxx, TEMP[4] 29: MUL TEMP[4], TEMP[4], TEMP[3].yyyy 30: MAD TEMP[4], TEMP[8], TEMP[2].yyyy, TEMP[4] 31: MUL TEMP[4], TEMP[4], TEMP[3].zzzz 32: MAD TEMP[4], TEMP[9], TEMP[2].zzzz, TEMP[4] 33: MUL TEMP[4], TEMP[4], TEMP[3].wwww 34: MAD TEMP[4], TEMP[10], TEMP[2].wwww, TEMP[4] 35: TEX TEMP[11], IN[7].zwzz, SAMP[5], 2D 36: MAD TEMP[0], TEMP[11], IMM[3].xxxx, -IMM[0].zzzz 37: TEX TEMP[12], IN[7], SAMP[6], 2D 38: DP4 TEMP[0], TEMP[12], TEMP[0] 39: MAD TEMP[4], TEMP[0], TEMP[4], TEMP[4] 40: MUL TEMP[4].xyz, TEMP[4], CONST[5] 41: MUL TEMP[4].xyz, TEMP[4], CONST[6].wwww 42: MUL TEMP[4], TEMP[4], TEMP[4].wwww 43: MOV TEMP[13], IMM[0].xyxz 44: MOV TEMP[13].x, IN[6].zzzz 45: TEX TEMP[13], TEMP[13], SAMP[7], 2D 46: MUL TEMP[4], TEMP[4], TEMP[13] 47: TXP TEMP[13], IN[6], SAMP[8], 2D 48: MUL TEMP[4], TEMP[4], TEMP[13] 49: MOV OUT[0].w, IMM[0].xxxx 50: MUL TEMP[4], TEMP[4], IN[0] 51: MAD OUT[0].xyz, IN[4], IMM[2].yyyy, IMM[0].yyyy 52: DP3 TEMP[0].w, IN[3], IN[3] 53: RSQ TEMP[0].w, TEMP[0].wwww 54: MUL TEMP[1].xyz, IN[3], TEMP[0].wwww 55: DP3 TEMP[0].w, IN[4], IN[4] 56: RSQ TEMP[0].w, TEMP[0].wwww 57: MUL TEMP[8].xyz, IN[4], TEMP[0].wwww 58: ADD TEMP[0], TEMP[1], TEMP[8] 59: DP3 TEMP[0].w, TEMP[0], TEMP[0] 60: RSQ TEMP[0].w, TEMP[0].wwww 61: MUL TEMP[0].xyz, TEMP[0], TEMP[0].wwww 62: DP3 TEMP[0].w, TEMP[0], IN[5] 63: MUL TEMP[0].w, TEMP[0].wwww, TEMP[0].wwww 64: MUL TEMP[0].w, TEMP[0].wwww, TEMP[0].wwww 65: TEX TEMP[14], IN[7], SAMP[9], 2D 66: MUL TEMP[0].w, TEMP[0].wwww, IMM[2].zzzz 67: MUL TEMP[0].w, TEMP[0].wwww, TEMP[14].xxxx 68: ADD TEMP[0].w, IMM[0].zzzz, TEMP[0].wwww 69: MUL OUT[0].xyz, TEMP[4], TEMP[0].wwww 70: END Fragment Program: before compilation # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[7]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[7].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[7], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: MUL temp[4].xyz, temp[4], const[5]; 41: MUL temp[4].xyz, temp[4], const[6].wwww; 42: MUL temp[4], temp[4], temp[4].wwww; 43: MOV temp[13], const[7].xyxz; 44: MOV temp[13].x, input[6].zzzz; 45: TEX temp[13], temp[13], 2D[7]; 46: MUL temp[4], temp[4], temp[13]; 47: TXP temp[13], input[6], 2D[8]; 48: MUL temp[4], temp[4], temp[13]; 49: MOV output[0].w, const[7].xxxx; 50: MUL temp[4], temp[4], input[0]; 51: MAD output[0].xyz, input[4], const[9].yyyy, const[7].yyyy; 52: DP3 temp[0].w, input[3], input[3]; 53: RSQ temp[0].w, temp[0].wwww; 54: MUL temp[1].xyz, input[3], temp[0].wwww; 55: DP3 temp[0].w, input[4], input[4]; 56: RSQ temp[0].w, temp[0].wwww; 57: MUL temp[8].xyz, input[4], temp[0].wwww; 58: ADD temp[0], temp[1], temp[8]; 59: DP3 temp[0].w, temp[0], temp[0]; 60: RSQ temp[0].w, temp[0].wwww; 61: MUL temp[0].xyz, temp[0], temp[0].wwww; 62: DP3 temp[0].w, temp[0], input[5]; 63: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 64: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 65: TEX temp[14], input[7], 2D[9]; 66: MUL temp[0].w, temp[0].wwww, const[9].zzzz; 67: MUL temp[0].w, temp[0].wwww, temp[14].xxxx; 68: ADD temp[0].w, const[7].zzzz, temp[0].wwww; 69: MUL output[0].xyz, temp[4], temp[0].wwww; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[7]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[7].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[7], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: MUL temp[4].xyz, temp[4], const[5]; 41: MUL temp[4].xyz, temp[4], const[6].wwww; 42: MUL temp[4], temp[4], temp[4].wwww; 43: MOV temp[13], const[7].xyxz; 44: MOV temp[13].x, input[6].zzzz; 45: TEX temp[13], temp[13], 2D[7]; 46: MUL temp[4], temp[4], temp[13]; 47: TXP temp[13], input[6], 2D[8]; 48: MUL temp[4], temp[4], temp[13]; 49: MOV output[0].w, const[7].xxxx; 50: MUL temp[4], temp[4], input[0]; 51: MAD output[0].xyz, input[4], const[9].yyyy, const[7].yyyy; 52: DP3 temp[0].w, input[3], input[3]; 53: RSQ temp[0].w, temp[0].wwww; 54: MUL temp[1].xyz, input[3], temp[0].wwww; 55: DP3 temp[0].w, input[4], input[4]; 56: RSQ temp[0].w, temp[0].wwww; 57: MUL temp[8].xyz, input[4], temp[0].wwww; 58: ADD temp[0], temp[1], temp[8]; 59: DP3 temp[0].w, temp[0], temp[0]; 60: RSQ temp[0].w, temp[0].wwww; 61: MUL temp[0].xyz, temp[0], temp[0].wwww; 62: DP3 temp[0].w, temp[0], input[5]; 63: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 64: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 65: TEX temp[14], input[7], 2D[9]; 66: MUL temp[0].w, temp[0].wwww, const[9].zzzz; 67: MUL temp[0].w, temp[0].wwww, temp[14].xxxx; 68: ADD temp[0].w, const[7].zzzz, temp[0].wwww; 69: MUL output[0].xyz, temp[4], temp[0].wwww; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[7]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[7].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[7], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: MUL temp[4].xyz, temp[4], const[5]; 41: MUL temp[4].xyz, temp[4], const[6].wwww; 42: MUL temp[4], temp[4], temp[4].wwww; 43: MOV temp[13], const[7].xyxz; 44: MOV temp[13].x, input[6].zzzz; 45: TEX temp[13], temp[13], 2D[7]; 46: MUL temp[4], temp[4], temp[13]; 47: TXP temp[13], input[6], 2D[8]; 48: MUL temp[4], temp[4], temp[13]; 49: MOV output[0].w, const[7].xxxx; 50: MUL temp[4], temp[4], input[0]; 51: MAD output[0].xyz, input[4], const[9].yyyy, const[7].yyyy; 52: DP3 temp[0].w, input[3], input[3]; 53: RSQ temp[0].w, temp[0].wwww; 54: MUL temp[1].xyz, input[3], temp[0].wwww; 55: DP3 temp[0].w, input[4], input[4]; 56: RSQ temp[0].w, temp[0].wwww; 57: MUL temp[8].xyz, input[4], temp[0].wwww; 58: ADD temp[0], temp[1], temp[8]; 59: DP3 temp[0].w, temp[0], temp[0]; 60: RSQ temp[0].w, temp[0].wwww; 61: MUL temp[0].xyz, temp[0], temp[0].wwww; 62: DP3 temp[0].w, temp[0], input[5]; 63: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 64: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 65: TEX temp[14], input[7], 2D[9]; 66: MUL temp[0].w, temp[0].wwww, const[9].zzzz; 67: MUL temp[0].w, temp[0].wwww, temp[14].xxxx; 68: ADD temp[0].w, const[7].zzzz, temp[0].wwww; 69: MUL output[0].xyz, temp[4], temp[0].wwww; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[7]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[7].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[7], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: MUL temp[4].xyz, temp[4], const[5]; 41: MUL temp[4].xyz, temp[4], const[6].wwww; 42: MUL temp[4], temp[4], temp[4].wwww; 43: MOV temp[13], const[7].xyxz; 44: MOV temp[13].x, input[6].zzzz; 45: TEX temp[13], temp[13], 2D[7]; 46: MUL temp[4], temp[4], temp[13]; 47: TXP temp[13], input[6], 2D[8]; 48: MUL temp[4], temp[4], temp[13]; 49: MOV output[0].w, const[7].xxxx; 50: MUL temp[4], temp[4], input[0]; 51: MAD output[0].xyz, input[4], const[9].yyyy, const[7].yyyy; 52: DP3 temp[0].w, input[3], input[3]; 53: RSQ temp[0].w, temp[0].wwww; 54: MUL temp[1].xyz, input[3], temp[0].wwww; 55: DP3 temp[0].w, input[4], input[4]; 56: RSQ temp[0].w, temp[0].wwww; 57: MUL temp[8].xyz, input[4], temp[0].wwww; 58: ADD temp[0], temp[1], temp[8]; 59: DP3 temp[0].w, temp[0], temp[0]; 60: RSQ temp[0].w, temp[0].wwww; 61: MUL temp[0].xyz, temp[0], temp[0].wwww; 62: DP3 temp[0].w, temp[0], input[5]; 63: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 64: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 65: TEX temp[14], input[7], 2D[9]; 66: MUL temp[0].w, temp[0].wwww, const[9].zzzz; 67: MUL temp[0].w, temp[0].wwww, temp[14].xxxx; 68: ADD temp[0].w, const[7].zzzz, temp[0].wwww; 69: MUL output[0].xyz, temp[4], temp[0].wwww; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[7]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[7].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[7], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: MUL temp[4].xyz, temp[4], const[5]; 41: MUL temp[4].xyz, temp[4], const[6].wwww; 42: MUL temp[4], temp[4], temp[4].wwww; 43: MOV temp[13], const[7].xyxz; 44: MOV temp[13].x, input[6].zzzz; 45: TEX temp[13], temp[13], 2D[7]; 46: MUL temp[4], temp[4], temp[13]; 47: TXP temp[13], input[6], 2D[8]; 48: MUL temp[4], temp[4], temp[13]; 49: MOV output[0].w, const[7].xxxx; 50: MUL temp[4], temp[4], input[0]; 51: MAD output[0].xyz, input[4], const[9].yyyy, const[7].yyyy; 52: DP3 temp[0].w, input[3], input[3]; 53: RSQ temp[0].w, temp[0].wwww; 54: MUL temp[1].xyz, input[3], temp[0].wwww; 55: DP3 temp[0].w, input[4], input[4]; 56: RSQ temp[0].w, temp[0].wwww; 57: MUL temp[8].xyz, input[4], temp[0].wwww; 58: ADD temp[0], temp[1], temp[8]; 59: DP3 temp[0].w, temp[0], temp[0]; 60: RSQ temp[0].w, temp[0].wwww; 61: MUL temp[0].xyz, temp[0], temp[0].wwww; 62: DP3 temp[0].w, temp[0], input[5]; 63: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 64: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 65: TEX temp[14], input[7], 2D[9]; 66: MUL temp[0].w, temp[0].wwww, const[9].zzzz; 67: MUL temp[0].w, temp[0].wwww, temp[14].xxxx; 68: ADD temp[0].w, const[7].zzzz, temp[0].wwww; 69: MUL output[0].xyz, temp[4], temp[0].wwww; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[7]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[7].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[7], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: MUL temp[4].xyz, temp[4], const[5]; 41: MUL temp[4].xyz, temp[4], const[6].wwww; 42: MUL temp[4], temp[4], temp[4].wwww; 43: MOV temp[13], const[7].xyxz; 44: MOV temp[13].x, input[6].zzzz; 45: TEX temp[13], temp[13], 2D[7]; 46: MUL temp[4], temp[4], temp[13]; 47: TXP temp[13], input[6], 2D[8]; 48: MUL temp[4], temp[4], temp[13]; 49: MOV_SAT output[0].w, const[7].xxxx; 50: MUL temp[4], temp[4], input[0]; 51: MAD_SAT output[0].xyz, input[4], const[9].yyyy, const[7].yyyy; 52: DP3 temp[0].w, input[3], input[3]; 53: RSQ temp[0].w, temp[0].wwww; 54: MUL temp[1].xyz, input[3], temp[0].wwww; 55: DP3 temp[0].w, input[4], input[4]; 56: RSQ temp[0].w, temp[0].wwww; 57: MUL temp[8].xyz, input[4], temp[0].wwww; 58: ADD temp[0], temp[1], temp[8]; 59: DP3 temp[0].w, temp[0], temp[0]; 60: RSQ temp[0].w, temp[0].wwww; 61: MUL temp[0].xyz, temp[0], temp[0].wwww; 62: DP3 temp[0].w, temp[0], input[5]; 63: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 64: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 65: TEX temp[14], input[7], 2D[9]; 66: MUL temp[0].w, temp[0].wwww, const[9].zzzz; 67: MUL temp[0].w, temp[0].wwww, temp[14].xxxx; 68: ADD temp[0].w, const[7].zzzz, temp[0].wwww; 69: MUL_SAT output[0].xyz, temp[4], temp[0].wwww; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: SUB temp[0], const[7].yyyy, input[1]; 1: SUB temp[1], const[7].yyyy, input[2]; 2: ABS temp[0], temp[0]; 3: ABS temp[1], temp[1]; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: SUB temp[3], const[7].zzzz, temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[7]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[7].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[7], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: MUL temp[4].xyz, temp[4], const[5]; 41: MUL temp[4].xyz, temp[4], const[6].wwww; 42: MUL temp[4], temp[4], temp[4].wwww; 43: MOV temp[13], const[7].xyxz; 44: MOV temp[13].x, input[6].zzzz; 45: TEX temp[13], temp[13], 2D[7]; 46: MUL temp[4], temp[4], temp[13]; 47: TXP temp[13], input[6], 2D[8]; 48: MUL temp[4], temp[4], temp[13]; 49: MOV_SAT output[0].w, const[7].xxxx; 50: MUL temp[4], temp[4], input[0]; 51: MAD_SAT output[0].xyz, input[4], const[9].yyyy, const[7].yyyy; 52: DP3 temp[0].w, input[3], input[3]; 53: RSQ temp[0].w, temp[0].wwww; 54: MUL temp[1].xyz, input[3], temp[0].wwww; 55: DP3 temp[0].w, input[4], input[4]; 56: RSQ temp[0].w, temp[0].wwww; 57: MUL temp[8].xyz, input[4], temp[0].wwww; 58: ADD temp[0], temp[1], temp[8]; 59: DP3 temp[0].w, temp[0], temp[0]; 60: RSQ temp[0].w, temp[0].wwww; 61: MUL temp[0].xyz, temp[0], temp[0].wwww; 62: DP3 temp[0].w, temp[0], input[5]; 63: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 64: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 65: TEX temp[14], input[7], 2D[9]; 66: MUL temp[0].w, temp[0].wwww, const[9].zzzz; 67: MUL temp[0].w, temp[0].wwww, temp[14].xxxx; 68: ADD temp[0].w, const[7].zzzz, temp[0].wwww; 69: MUL_SAT output[0].xyz, temp[4], temp[0].wwww; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0], const[7].yyyy, -input[1]; 1: ADD temp[1], const[7].yyyy, -input[2]; 2: MOV temp[0], |temp[0]|; 3: MOV temp[1], |temp[1]|; 4: MAX temp[0].xy, temp[0].xzwy, temp[0].ywxz; 5: MAX temp[0].zw, temp[1].zwxz, temp[1].xyyw; 6: MAD_SAT temp[2].yw, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 7: MAD_SAT temp[2].x, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 8: MAD_SAT temp[2].z, temp[0].zxwy, const[8].xxxx, const[8].yyyy; 9: MUL temp[2], temp[2], const[2]; 10: ADD temp[3], const[7].zzzz, -temp[2]; 11: MOV temp[4], const[7].xxxx; 12: MOV temp[5], input[7]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].xxxx, const[9].xxxx; 16: MUL temp[0].xy, temp[6].xxxx, temp[5]; 17: MUL temp[1].xy, temp[5], temp[7].xxxx; 18: MUL temp[8].xy, temp[5], temp[7].yyyy; 19: MUL temp[9].xy, temp[5], temp[7].zzzz; 20: MUL temp[10].xy, temp[5], temp[7].wwww; 21: TEX temp[0], temp[0], 2D[0]; 22: TEX temp[1], temp[1], 2D[1]; 23: TEX temp[8], temp[8], 2D[2]; 24: TEX temp[9], temp[9], 2D[3]; 25: TEX temp[10], temp[10], 2D[4]; 26: MOV temp[4], temp[0]; 27: MUL temp[4], temp[4], temp[3].xxxx; 28: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 29: MUL temp[4], temp[4], temp[3].yyyy; 30: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 31: MUL temp[4], temp[4], temp[3].zzzz; 32: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 33: MUL temp[4], temp[4], temp[3].wwww; 34: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 35: TEX temp[11], input[7].zwzz, 2D[5]; 36: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 37: TEX temp[12], input[7], 2D[6]; 38: DP4 temp[0], temp[12], temp[0]; 39: MAD temp[4], temp[0], temp[4], temp[4]; 40: MUL temp[4].xyz, temp[4], const[5]; 41: MUL temp[4].xyz, temp[4], const[6].wwww; 42: MUL temp[4], temp[4], temp[4].wwww; 43: MOV temp[13], const[7].xyxz; 44: MOV temp[13].x, input[6].zzzz; 45: TEX temp[13], temp[13], 2D[7]; 46: MUL temp[4], temp[4], temp[13]; 47: TXP temp[13], input[6], 2D[8]; 48: MUL temp[4], temp[4], temp[13]; 49: MOV_SAT output[0].w, const[7].xxxx; 50: MUL temp[4], temp[4], input[0]; 51: MAD_SAT output[0].xyz, input[4], const[9].yyyy, const[7].yyyy; 52: DP3 temp[0].w, input[3], input[3]; 53: RSQ temp[0].w, |temp[0].wwww|; 54: MUL temp[1].xyz, input[3], temp[0].wwww; 55: DP3 temp[0].w, input[4], input[4]; 56: RSQ temp[0].w, |temp[0].wwww|; 57: MUL temp[8].xyz, input[4], temp[0].wwww; 58: ADD temp[0], temp[1], temp[8]; 59: DP3 temp[0].w, temp[0], temp[0]; 60: RSQ temp[0].w, |temp[0].wwww|; 61: MUL temp[0].xyz, temp[0], temp[0].wwww; 62: DP3 temp[0].w, temp[0], input[5]; 63: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 64: MUL temp[0].w, temp[0].wwww, temp[0].wwww; 65: TEX temp[14], input[7], 2D[9]; 66: MUL temp[0].w, temp[0].wwww, const[9].zzzz; 67: MUL temp[0].w, temp[0].wwww, temp[14].xxxx; 68: ADD temp[0].w, const[7].zzzz, temp[0].wwww; 69: MUL_SAT output[0].xyz, temp[4], temp[0].wwww; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0], const[7].yyyy, -input[1]; 1: ADD temp[1], const[7].yyyy, -input[2]; 2: MOV temp[0], |temp[0]|; 3: MOV temp[1], |temp[1]|; 4: MAX temp[0].xy, temp[0].xz__, temp[0].yw__; 5: MAX temp[0].zw, temp[1].__xz, temp[1].__yw; 6: MAD_SAT temp[2].yw, temp[0]._x_y, const[8]._x_x, const[8]._y_y; 7: MAD_SAT temp[2].x, temp[0].z___, const[8].x___, const[8].y___; 8: MAD_SAT temp[2].z, temp[0].__w_, const[8].__x_, const[8].__y_; 9: MUL temp[2], temp[2], const[2]; 10: ADD temp[3], const[7].zzzz, -temp[2]; 11: MOV temp[5].xy, input[7].xy__; 12: MUL_SAT temp[6], temp[2], const[9].xxxx; 13: MUL temp[7], const[10], temp[6]; 14: MUL_SAT temp[6].x, temp[3].x___, const[9].x___; 15: MUL temp[0].xy, temp[6].xx__, temp[5].xy__; 16: MUL temp[1].xy, temp[5].xy__, temp[7].xx__; 17: MUL temp[8].xy, temp[5].xy__, temp[7].yy__; 18: MUL temp[9].xy, temp[5].xy__, temp[7].zz__; 19: MUL temp[10].xy, temp[5].xy__, temp[7].ww__; 20: TEX temp[0], temp[0].xy__, 2D[0]; 21: TEX temp[1], temp[1].xy__, 2D[1]; 22: TEX temp[8], temp[8].xy__, 2D[2]; 23: TEX temp[9], temp[9].xy__, 2D[3]; 24: TEX temp[10], temp[10].xy__, 2D[4]; 25: MOV temp[4], temp[0]; 26: MUL temp[4], temp[4], temp[3].xxxx; 27: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 28: MUL temp[4], temp[4], temp[3].yyyy; 29: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 30: MUL temp[4], temp[4], temp[3].zzzz; 31: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 32: MUL temp[4], temp[4], temp[3].wwww; 33: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 34: TEX temp[11], input[7].zw__, 2D[5]; 35: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 36: TEX temp[12], input[7].xy__, 2D[6]; 37: DP4 temp[0], temp[12], temp[0]; 38: MAD temp[4], temp[0], temp[4], temp[4]; 39: MUL temp[4].xyz, temp[4].xyz_, const[5].xyz_; 40: MUL temp[4].xyz, temp[4].xyz_, const[6].www_; 41: MUL temp[4].xyz, temp[4].xyz_, temp[4].www_; 42: MOV temp[13].y, const[7]._y__; 43: MOV temp[13].x, input[6].z___; 44: TEX temp[13].xyz, temp[13].xy__, 2D[7]; 45: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 46: TXP temp[13].xyz, input[6].xy_w, 2D[8]; 47: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 48: MOV_SAT output[0].w, const[7].___x; 49: MUL temp[4].xyz, temp[4].xyz_, input[0].xyz_; 50: DP3 temp[0].w, input[3].xyz_, input[3].xyz_; 51: RSQ temp[0].w, |temp[0].w___|; 52: MUL temp[1].xyz, input[3].xyz_, temp[0].www_; 53: DP3 temp[0].w, input[4].xyz_, input[4].xyz_; 54: RSQ temp[0].w, |temp[0].w___|; 55: MUL temp[8].xyz, input[4].xyz_, temp[0].www_; 56: ADD temp[0].xyz, temp[1].xyz_, temp[8].xyz_; 57: DP3 temp[0].w, temp[0].xyz_, temp[0].xyz_; 58: RSQ temp[0].w, |temp[0].w___|; 59: MUL temp[0].xyz, temp[0].xyz_, temp[0].www_; 60: DP3 temp[0].w, temp[0].xyz_, input[5].xyz_; 61: MUL temp[0].w, temp[0].___w, temp[0].___w; 62: MUL temp[0].w, temp[0].___w, temp[0].___w; 63: TEX temp[14].x, input[7].xy__, 2D[9]; 64: MUL temp[0].w, temp[0].___w, const[9].___z; 65: MUL temp[0].w, temp[0].___w, temp[14].___x; 66: ADD temp[0].w, const[7].___z, temp[0].___w; 67: MUL_SAT output[0].xyz, temp[4].xyz_, temp[0].www_; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0], const[7].yyyy, -input[1]; 1: ADD temp[1], const[7].yyyy, -input[2]; 2: MOV temp[0], |temp[0]|; 3: MOV temp[1], |temp[1]|; 4: MAX temp[0].xy, temp[0].xz__, temp[0].yw__; 5: MAX temp[0].zw, temp[1].__xz, temp[1].__yw; 6: MAD_SAT temp[2].yw, temp[0]._x_y, const[8]._x_x, const[8]._y_y; 7: MAD_SAT temp[2].x, temp[0].z___, const[8].x___, const[8].y___; 8: MAD_SAT temp[2].z, temp[0].__w_, const[8].__x_, const[8].__y_; 9: MUL temp[2], temp[2], const[2]; 10: ADD temp[3], const[7].zzzz, -temp[2]; 11: MOV temp[5].xy, input[7].xy__; 12: MUL_SAT temp[6], temp[2], const[9].xxxx; 13: MUL temp[7], const[10], temp[6]; 14: MUL_SAT temp[6].x, temp[3].x___, const[9].x___; 15: MUL temp[0].xy, temp[6].xx__, temp[5].xy__; 16: MUL temp[1].xy, temp[5].xy__, temp[7].xx__; 17: MUL temp[8].xy, temp[5].xy__, temp[7].yy__; 18: MUL temp[9].xy, temp[5].xy__, temp[7].zz__; 19: MUL temp[10].xy, temp[5].xy__, temp[7].ww__; 20: TEX temp[0], temp[0].xy__, 2D[0]; 21: TEX temp[1], temp[1].xy__, 2D[1]; 22: TEX temp[8], temp[8].xy__, 2D[2]; 23: TEX temp[9], temp[9].xy__, 2D[3]; 24: TEX temp[10], temp[10].xy__, 2D[4]; 25: MOV temp[4], temp[0]; 26: MUL temp[4], temp[4], temp[3].xxxx; 27: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 28: MUL temp[4], temp[4], temp[3].yyyy; 29: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 30: MUL temp[4], temp[4], temp[3].zzzz; 31: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 32: MUL temp[4], temp[4], temp[3].wwww; 33: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 34: TEX temp[11], input[7].zw__, 2D[5]; 35: MAD temp[0], temp[11], const[10].xxxx, -const[7].zzzz; 36: TEX temp[12], input[7].xy__, 2D[6]; 37: DP4 temp[0], temp[12], temp[0]; 38: MAD temp[4], temp[0], temp[4], temp[4]; 39: MUL temp[4].xyz, temp[4].xyz_, const[5].xyz_; 40: MUL temp[4].xyz, temp[4].xyz_, const[6].www_; 41: MUL temp[4].xyz, temp[4].xyz_, temp[4].www_; 42: MOV temp[13].y, const[7]._y__; 43: MOV temp[13].x, input[6].z___; 44: TEX temp[13].xyz, temp[13].xy__, 2D[7]; 45: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 46: TXP temp[13].xyz, input[6].xy_w, 2D[8]; 47: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 48: MOV_SAT output[0].w, const[7].___x; 49: MUL temp[4].xyz, temp[4].xyz_, input[0].xyz_; 50: DP3 temp[0].w, input[3].xyz_, input[3].xyz_; 51: RSQ temp[0].w, |temp[0].w___|; 52: MUL temp[1].xyz, input[3].xyz_, temp[0].www_; 53: DP3 temp[0].w, input[4].xyz_, input[4].xyz_; 54: RSQ temp[0].w, |temp[0].w___|; 55: MUL temp[8].xyz, input[4].xyz_, temp[0].www_; 56: ADD temp[0].xyz, temp[1].xyz_, temp[8].xyz_; 57: DP3 temp[0].w, temp[0].xyz_, temp[0].xyz_; 58: RSQ temp[0].w, |temp[0].w___|; 59: MUL temp[0].xyz, temp[0].xyz_, temp[0].www_; 60: DP3 temp[0].w, temp[0].xyz_, input[5].xyz_; 61: MUL temp[0].w, temp[0].___w, temp[0].___w; 62: MUL temp[0].w, temp[0].___w, temp[0].___w; 63: TEX temp[14].x, input[7].xy__, 2D[9]; 64: MUL temp[0].w, temp[0].___w, const[9].___z; 65: MUL temp[0].w, temp[0].___w, temp[14].___x; 66: ADD temp[0].w, const[7].___z, temp[0].___w; 67: MUL_SAT output[0].xyz, temp[4].xyz_, temp[0].www_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0], none.HHHH, -input[1]; 1: ADD temp[1], none.HHHH, -input[2]; 2: MAX temp[0].xy, |temp[0].xz__|, |temp[0].yw__|; 3: MAX temp[0].zw, |temp[1].__xz|, |temp[1].__yw|; 4: MAD_SAT temp[2].yw, temp[0]._x_y, const[8]._x_x, const[8]._y_y; 5: MAD_SAT temp[2].x, temp[0].z___, const[8].x___, const[8].y___; 6: MAD_SAT temp[2].z, temp[0].__w_, const[8].__x_, const[8].__y_; 7: MUL temp[2], temp[2], const[2]; 8: ADD temp[3], none.1111, -temp[2]; 9: MUL_SAT temp[6], temp[2], const[9].xxxx; 10: MUL temp[7], const[10], temp[6]; 11: MUL_SAT temp[6].x, temp[3].x___, const[9].x___; 12: MUL temp[0].xy, temp[6].xx__, input[7].xy__; 13: MUL temp[1].xy, input[7].xy__, temp[7].xx__; 14: MUL temp[8].xy, input[7].xy__, temp[7].yy__; 15: MUL temp[9].xy, input[7].xy__, temp[7].zz__; 16: MUL temp[10].xy, input[7].xy__, temp[7].ww__; 17: TEX temp[0], temp[0].xy__, 2D[0]; 18: TEX temp[1], temp[1].xy__, 2D[1]; 19: TEX temp[8], temp[8].xy__, 2D[2]; 20: TEX temp[9], temp[9].xy__, 2D[3]; 21: TEX temp[10], temp[10].xy__, 2D[4]; 22: MUL temp[4], temp[0], temp[3].xxxx; 23: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 24: MUL temp[4], temp[4], temp[3].yyyy; 25: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 26: MUL temp[4], temp[4], temp[3].zzzz; 27: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 28: MUL temp[4], temp[4], temp[3].wwww; 29: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 30: TEX temp[11], input[7].zw__, 2D[5]; 31: MAD temp[0], temp[11], const[10].xxxx, -none.1111; 32: TEX temp[12], input[7].xy__, 2D[6]; 33: DP4 temp[0], temp[12], temp[0]; 34: MAD temp[4], temp[0], temp[4], temp[4]; 35: MUL temp[4].xyz, temp[4].xyz_, const[5].xyz_; 36: MUL temp[4].xyz, temp[4].xyz_, const[6].www_; 37: MUL temp[4].xyz, temp[4].xyz_, temp[4].www_; 38: MOV temp[13].y, none._H__; 39: MOV temp[13].x, input[6].z___; 40: TEX temp[13].xyz, temp[13].xy__, 2D[7]; 41: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 42: TXP temp[13].xyz, input[6].xy_w, 2D[8]; 43: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 44: MOV_SAT output[0].w, none.___0; 45: MUL temp[4].xyz, temp[4].xyz_, input[0].xyz_; 46: DP3 temp[0].w, input[3].xyz_, input[3].xyz_; 47: RSQ temp[0].w, |temp[0].w___|; 48: MUL temp[1].xyz, input[3].xyz_, temp[0].www_; 49: DP3 temp[0].w, input[4].xyz_, input[4].xyz_; 50: RSQ temp[0].w, |temp[0].w___|; 51: MUL temp[8].xyz, input[4].xyz_, temp[0].www_; 52: DP3 temp[0].w, (temp[8] + temp[1]).xyz_, (temp[8] + temp[1]).xyz_; 53: RSQ temp[0].w, |temp[0].w___|; 54: MUL temp[0].xyz, (temp[8] + temp[1]).xyz_, temp[0].www_; 55: DP3 temp[0].w, temp[0].xyz_, input[5].xyz_; 56: MUL temp[0].w, temp[0].___w, temp[0].___w; 57: MUL temp[0].w, temp[0].___w, temp[0].___w; 58: TEX temp[14].x, input[7].xy__, 2D[9]; 59: MUL temp[0].w, temp[0].___w, const[9].___z; 60: MUL temp[0].w, temp[0].___w, temp[14].___x; 61: ADD temp[0].w, none.___1, temp[0].___w; 62: MUL_SAT output[0].xyz, temp[4].xyz_, temp[0].www_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[0], none.HHHH, -input[1]; 1: ADD temp[1], none.HHHH, -input[2]; 2: MOV temp[5].x, |temp[0].x___|; 3: MOV temp[5].y, |temp[0]._z__|; 4: MOV temp[15].x, |temp[0].y___|; 5: MOV temp[15].y, |temp[0]._w__|; 6: MAX temp[0].xy, temp[5].xy__, temp[15].xy__; 7: MAX temp[0].zw, |temp[1].__xz|, |temp[1].__yw|; 8: MAD_SAT temp[2].yw, temp[0]._x_y, const[8]._x_x, const[8]._y_y; 9: MAD_SAT temp[2].x, temp[0].z___, const[8].x___, const[8].y___; 10: MAD_SAT temp[2].z, temp[0].__w_, const[8].__x_, const[8].__y_; 11: MUL temp[2], temp[2], const[2]; 12: ADD temp[3], none.1111, -temp[2]; 13: MUL_SAT temp[6], temp[2], const[9].xxxx; 14: MUL temp[7], const[10], temp[6]; 15: MUL_SAT temp[6].x, temp[3].x___, const[9].x___; 16: MUL temp[0].xy, temp[6].xx__, input[7].xy__; 17: MUL temp[1].xy, input[7].xy__, temp[7].xx__; 18: MUL temp[8].xy, input[7].xy__, temp[7].yy__; 19: MUL temp[9].xy, input[7].xy__, temp[7].zz__; 20: MUL temp[10].xy, input[7].xy__, temp[7].ww__; 21: TEX temp[0], temp[0].xy__, 2D[0]; 22: TEX temp[1], temp[1].xy__, 2D[1]; 23: TEX temp[8], temp[8].xy__, 2D[2]; 24: TEX temp[9], temp[9].xy__, 2D[3]; 25: TEX temp[10], temp[10].xy__, 2D[4]; 26: MUL temp[4], temp[0], temp[3].xxxx; 27: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 28: MUL temp[4], temp[4], temp[3].yyyy; 29: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 30: MUL temp[4], temp[4], temp[3].zzzz; 31: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 32: MUL temp[4], temp[4], temp[3].wwww; 33: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 34: MOV temp[16].x, input[7].z___; 35: MOV temp[16].y, input[7]._w__; 36: TEX temp[11], temp[16].xy__, 2D[5]; 37: MAD temp[0], temp[11], const[10].xxxx, -none.1111; 38: TEX temp[12], input[7].xy__, 2D[6]; 39: DP4 temp[0], temp[12], temp[0]; 40: MAD temp[4], temp[0], temp[4], temp[4]; 41: MUL temp[4].xyz, temp[4].xyz_, const[5].xyz_; 42: MUL temp[4].xyz, temp[4].xyz_, const[6].www_; 43: MUL temp[4].xyz, temp[4].xyz_, temp[4].www_; 44: MOV temp[13].y, none._H__; 45: MOV temp[13].x, input[6].z___; 46: TEX temp[13].xyz, temp[13].xy__, 2D[7]; 47: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 48: TXP temp[13].xyz, input[6].xy_w, 2D[8]; 49: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 50: MOV_SAT output[0].w, none.___0; 51: MUL temp[4].xyz, temp[4].xyz_, input[0].xyz_; 52: DP3 temp[0].w, input[3].xyz_, input[3].xyz_; 53: RSQ temp[0].w, |temp[0].w___|; 54: MUL temp[1].xyz, input[3].xyz_, temp[0].www_; 55: DP3 temp[0].w, input[4].xyz_, input[4].xyz_; 56: RSQ temp[0].w, |temp[0].w___|; 57: MUL temp[8].xyz, input[4].xyz_, temp[0].www_; 58: DP3 temp[0].w, (temp[8] + temp[1]).xyz_, (temp[8] + temp[1]).xyz_; 59: RSQ temp[0].w, |temp[0].w___|; 60: MUL temp[0].xyz, (temp[8] + temp[1]).xyz_, temp[0].www_; 61: DP3 temp[0].w, temp[0].xyz_, input[5].xyz_; 62: MUL temp[0].w, temp[0].___w, temp[0].___w; 63: MUL temp[0].w, temp[0].___w, temp[0].___w; 64: TEX temp[14].x, input[7].xy__, 2D[9]; 65: MUL temp[0].w, temp[0].___w, const[9].___z; 66: MUL temp[0].w, temp[0].___w, temp[14].___x; 67: ADD temp[0].w, none.___1, temp[0].___w; 68: MUL_SAT output[0].xyz, temp[4].xyz_, temp[0].www_; CONST[3] = { -32.0000 16.0000 0.0000 2.0000 } CONST[4] = { 100000.0000 0.0000 20.0000 2.0000 } CONST[5] = { 2.0000 4.0000 8.0000 16.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[0], none.HHHH, -input[1]; 1: ADD temp[1], none.HHHH, -input[2]; 2: MOV temp[5].x, |temp[0].x___|; 3: MOV temp[5].y, |temp[0]._z__|; 4: MOV temp[15].x, |temp[0].y___|; 5: MOV temp[15].y, |temp[0]._w__|; 6: MAX temp[0].xy, temp[5].xy__, temp[15].xy__; 7: MAX temp[0].zw, |temp[1].__xz|, |temp[1].__yw|; 8: MAD_SAT temp[2].yw, temp[0]._x_y, const[3]._x_x, const[3]._y_y; 9: MAD_SAT temp[2].x, temp[0].z___, const[3].x___, const[3].y___; 10: MAD_SAT temp[2].z, temp[0].__w_, const[3].__x_, const[3].__y_; 11: MUL temp[2], temp[2], const[0]; 12: ADD temp[3], none.1111, -temp[2]; 13: MUL_SAT temp[6], temp[2], const[4].xxxx; 14: MUL temp[7], const[5], temp[6]; 15: MUL_SAT temp[6].x, temp[3].x___, const[4].x___; 16: MUL temp[0].xy, temp[6].xx__, input[7].xy__; 17: MUL temp[1].xy, input[7].xy__, temp[7].xx__; 18: MUL temp[8].xy, input[7].xy__, temp[7].yy__; 19: MUL temp[9].xy, input[7].xy__, temp[7].zz__; 20: MUL temp[10].xy, input[7].xy__, temp[7].ww__; 21: TEX temp[0], temp[0].xy__, 2D[0]; 22: TEX temp[1], temp[1].xy__, 2D[1]; 23: TEX temp[8], temp[8].xy__, 2D[2]; 24: TEX temp[9], temp[9].xy__, 2D[3]; 25: TEX temp[10], temp[10].xy__, 2D[4]; 26: MUL temp[4], temp[0], temp[3].xxxx; 27: MAD temp[4], temp[1], temp[2].xxxx, temp[4]; 28: MUL temp[4], temp[4], temp[3].yyyy; 29: MAD temp[4], temp[8], temp[2].yyyy, temp[4]; 30: MUL temp[4], temp[4], temp[3].zzzz; 31: MAD temp[4], temp[9], temp[2].zzzz, temp[4]; 32: MUL temp[4], temp[4], temp[3].wwww; 33: MAD temp[4], temp[10], temp[2].wwww, temp[4]; 34: MOV temp[16].x, input[7].z___; 35: MOV temp[16].y, input[7]._w__; 36: TEX temp[11], temp[16].xy__, 2D[5]; 37: MAD temp[0], temp[11], const[5].xxxx, -none.1111; 38: TEX temp[12], input[7].xy__, 2D[6]; 39: DP4 temp[0], temp[12], temp[0]; 40: MAD temp[4], temp[0], temp[4], temp[4]; 41: MUL temp[4].xyz, temp[4].xyz_, const[1].xyz_; 42: MUL temp[4].xyz, temp[4].xyz_, const[2].www_; 43: MUL temp[4].xyz, temp[4].xyz_, temp[4].www_; 44: MOV temp[13].y, none._H__; 45: MOV temp[13].x, input[6].z___; 46: TEX temp[13].xyz, temp[13].xy__, 2D[7]; 47: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 48: TXP temp[13].xyz, input[6].xy_w, 2D[8]; 49: MUL temp[4].xyz, temp[4].xyz_, temp[13].xyz_; 50: MOV_SAT output[0].w, none.___0; 51: MUL temp[4].xyz, temp[4].xyz_, input[0].xyz_; 52: DP3 temp[0].w, input[3].xyz_, input[3].xyz_; 53: RSQ temp[0].w, |temp[0].w___|; 54: MUL temp[1].xyz, input[3].xyz_, temp[0].www_; 55: DP3 temp[0].w, input[4].xyz_, input[4].xyz_; 56: RSQ temp[0].w, |temp[0].w___|; 57: MUL temp[8].xyz, input[4].xyz_, temp[0].www_; 58: DP3 temp[0].w, (temp[8] + temp[1]).xyz_, (temp[8] + temp[1]).xyz_; 59: RSQ temp[0].w, |temp[0].w___|; 60: MUL temp[0].xyz, (temp[8] + temp[1]).xyz_, temp[0].www_; 61: DP3 temp[0].w, temp[0].xyz_, input[5].xyz_; 62: MUL temp[0].w, temp[0].___w, temp[0].___w; 63: MUL temp[0].w, temp[0].___w, temp[0].___w; 64: TEX temp[14].x, input[7].xy__, 2D[9]; 65: MUL temp[0].w, temp[0].___w, const[4].___z; 66: MUL temp[0].w, temp[0].___w, temp[14].___x; 67: ADD temp[0].w, none.___1, temp[0].___w; 68: MUL_SAT output[0].xyz, temp[4].xyz_, temp[0].www_; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[17], none.HHHH, -input[1]; 1: ADD temp[18], none.HHHH, -input[2]; 2: MOV temp[5].x, |temp[17].x___|; 3: MOV temp[5].y, |temp[17]._z__|; 4: MOV temp[15].x, |temp[17].y___|; 5: MOV temp[15].y, |temp[17]._w__|; 6: MAX temp[19].xy, temp[5].xy__, temp[15].xy__; 7: MAX temp[20].zw, |temp[18].__xz|, |temp[18].__yw|; 8: MAD_SAT temp[2].yw, temp[19]._x_y, const[3]._x_x, const[3]._y_y; 9: MAD_SAT temp[2].x, temp[20].z___, const[3].x___, const[3].y___; 10: MAD_SAT temp[2].z, temp[20].__w_, const[3].__x_, const[3].__y_; 11: MUL temp[21], temp[2], const[0]; 12: ADD temp[22], none.1111, -temp[21]; 13: MUL_SAT temp[23], temp[21], const[4].xxxx; 14: MUL temp[24], const[5], temp[23]; 15: MUL_SAT temp[25].x, temp[22].x___, const[4].x___; 16: MUL temp[26].xy, temp[25].xx__, input[7].xy__; 17: MUL temp[27].xy, input[7].xy__, temp[24].xx__; 18: MUL temp[28].xy, input[7].xy__, temp[24].yy__; 19: MUL temp[29].xy, input[7].xy__, temp[24].zz__; 20: MUL temp[30].xy, input[7].xy__, temp[24].ww__; 21: TEX temp[31], temp[26].xy__, 2D[0]; 22: TEX temp[32], temp[27].xy__, 2D[1]; 23: TEX temp[33], temp[28].xy__, 2D[2]; 24: TEX temp[34], temp[29].xy__, 2D[3]; 25: TEX temp[35], temp[30].xy__, 2D[4]; 26: MUL temp[36], temp[31], temp[22].xxxx; 27: MAD temp[37], temp[32], temp[21].xxxx, temp[36]; 28: MUL temp[38], temp[37], temp[22].yyyy; 29: MAD temp[39], temp[33], temp[21].yyyy, temp[38]; 30: MUL temp[40], temp[39], temp[22].zzzz; 31: MAD temp[41], temp[34], temp[21].zzzz, temp[40]; 32: MUL temp[42], temp[41], temp[22].wwww; 33: MAD temp[43], temp[35], temp[21].wwww, temp[42]; 34: MOV temp[16].x, input[7].z___; 35: MOV temp[16].y, input[7]._w__; 36: TEX temp[44], temp[16].xy__, 2D[5]; 37: MAD temp[45], temp[44], const[5].xxxx, -none.1111; 38: TEX temp[46], input[7].xy__, 2D[6]; 39: DP4 temp[47], temp[46], temp[45]; 40: MAD temp[48], temp[47], temp[43], temp[43]; 41: MUL temp[49].xyz, temp[48].xyz_, const[1].xyz_; 42: MUL temp[50].xyz, temp[49].xyz_, const[2].www_; 43: MUL temp[51].xyz, temp[50].xyz_, temp[48].www_; 44: MOV temp[13].y, none._H__; 45: MOV temp[13].x, input[6].z___; 46: TEX temp[52].xyz, temp[13].xy__, 2D[7]; 47: MUL temp[53].xyz, temp[51].xyz_, temp[52].xyz_; 48: TXP temp[54].xyz, input[6].xy_w, 2D[8]; 49: MUL temp[55].xyz, temp[53].xyz_, temp[54].xyz_; 50: MOV_SAT output[0].w, none.___0; 51: MUL temp[56].xyz, temp[55].xyz_, input[0].xyz_; 52: DP3 temp[57].w, input[3].xyz_, input[3].xyz_; 53: RSQ temp[58].w, |temp[57].w___|; 54: MUL temp[59].xyz, input[3].xyz_, temp[58].www_; 55: DP3 temp[60].w, input[4].xyz_, input[4].xyz_; 56: RSQ temp[61].w, |temp[60].w___|; 57: MUL temp[62].xyz, input[4].xyz_, temp[61].www_; 58: DP3 temp[63].w, (temp[62] + temp[59]).xyz_, (temp[62] + temp[59]).xyz_; 59: RSQ temp[64].w, |temp[63].w___|; 60: MUL temp[65].xyz, (temp[62] + temp[59]).xyz_, temp[64].www_; 61: DP3 temp[66].w, temp[65].xyz_, input[5].xyz_; 62: MUL temp[67].w, temp[66].___w, temp[66].___w; 63: MUL temp[68].w, temp[67].___w, temp[67].___w; 64: TEX temp[69].x, input[7].xy__, 2D[9]; 65: MUL temp[70].w, temp[68].___w, const[4].___z; 66: MUL temp[71].w, temp[70].___w, temp[69].___x; 67: ADD temp[72].w, none.___1, temp[71].___w; 68: MUL_SAT output[0].xyz, temp[56].xyz_, temp[72].www_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1], src0.w = input[1] MAD temp[17].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[17].w, src0.H, src0.1, -src0.w 1: src0.xyz = input[2], src0.w = input[2] MAD temp[18].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[18].w, src0.H, src0.1, -src0.w 2: src0.xyz = temp[17] MAD temp[5].x, |src0.x__|, src0.111, src0.000 3: src0.xyz = temp[17] MAD temp[5].y, |src0._z_|, src0.111, src0.000 4: src0.xyz = temp[17] MAD temp[15].x, |src0.y__|, src0.111, src0.000 5: src0.w = temp[17] MAD temp[15].y, |src0._w_|, src0.111, src0.000 6: src0.xyz = temp[5], src1.xyz = temp[15] MAX temp[19].xy, src0.xy_, src1.xy_ 7: src0.xyz = temp[18], src0.w = temp[18] MAX temp[20].z, |src0.__x|, |src0.__y| MAX temp[20].w, |src0.z|, |src0.w| 8: src0.xyz = temp[19], src1.xyz = const[3] MAD_SAT temp[2].y, src0._x_, src1._x_, src1._y_ MAD_SAT temp[2].w, src0.y, src1.x, src1.y 9: src0.xyz = temp[20], src1.xyz = const[3] MAD_SAT temp[2].x, src0.z__, src1.x__, src1.y__ 10: src0.xyz = const[3], src0.w = temp[20] MAD_SAT temp[2].z, src0.__w, src0.__x, src0.__y 11: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = const[0], src1.w = const[0] MAD temp[21].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[21].w, src0.w, src1.w, src0.0 12: src0.xyz = temp[21], src0.w = temp[21] MAD temp[22].xyz, src0.111, src0.111, -src0.xyz MAD temp[22].w, src0.1, src0.1, -src0.w 13: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = const[4] MAD_SAT temp[23].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[23].w, src0.w, src1.x, src0.0 14: src0.xyz = const[5], src0.w = const[5], src1.xyz = temp[23], src1.w = temp[23] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[24].w, src0.w, src1.w, src0.0 15: src0.xyz = temp[22], src1.xyz = const[4] MAD_SAT temp[25].x, src0.x__, src1.x__, src0.000 16: src0.xyz = temp[25], src1.xyz = input[7] MAD temp[26].xy, src0.xx_, src1.xy_, src0.000 17: src0.xyz = input[7], src1.xyz = temp[24] MAD temp[27].xy, src0.xy_, src1.xx_, src0.000 18: src0.xyz = input[7], src1.xyz = temp[24] MAD temp[28].xy, src0.xy_, src1.yy_, src0.000 19: src0.xyz = input[7], src1.xyz = temp[24] MAD temp[29].xy, src0.xy_, src1.zz_, src0.000 20: src0.xyz = input[7], src0.w = temp[24] MAD temp[30].xy, src0.xy_, src0.ww_, src0.000 21: TEX temp[31], temp[26].xy__, 2D[0]; 22: TEX temp[32], temp[27].xy__, 2D[1]; 23: TEX temp[33], temp[28].xy__, 2D[2]; 24: TEX temp[34], temp[29].xy__, 2D[3]; 25: TEX temp[35], temp[30].xy__, 2D[4]; 26: src0.xyz = temp[31], src0.w = temp[31], src1.xyz = temp[22] MAD temp[36].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[36].w, src0.w, src1.x, src0.0 27: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = temp[21], src1.w = temp[36], src2.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[37].w, src0.w, src1.x, src1.w 28: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[22] MAD temp[38].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[38].w, src0.w, src1.y, src0.0 29: src0.xyz = temp[33], src0.w = temp[33], src1.xyz = temp[21], src1.w = temp[38], src2.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[39].w, src0.w, src1.y, src1.w 30: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[22] MAD temp[40].xyz, src0.xyz, src1.zzz, src0.000 MAD temp[40].w, src0.w, src1.z, src0.0 31: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[21], src1.w = temp[40], src2.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[41].w, src0.w, src1.z, src1.w 32: src0.xyz = temp[41], src0.w = temp[41], src1.w = temp[22] MAD temp[42].xyz, src0.xyz, src1.www, src0.000 MAD temp[42].w, src0.w, src1.w, src0.0 33: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[42], src1.w = temp[21], src2.w = temp[42] MAD temp[43].xyz, src0.xyz, src1.www, src1.xyz MAD temp[43].w, src0.w, src1.w, src2.w 34: src0.xyz = input[7] MAD temp[16].x, src0.z__, src0.111, src0.000 35: src0.w = input[7] MAD temp[16].y, src0._w_, src0.111, src0.000 36: TEX temp[44], temp[16].xy__, 2D[5]; 37: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = const[5] MAD temp[45].xyz, src0.xyz, src1.xxx, -src0.111 MAD temp[45].w, src0.w, src1.x, -src0.1 38: TEX temp[46], input[7].xy__, 2D[6]; 39: src0.xyz = temp[46], src0.w = temp[46], src1.xyz = temp[45], src1.w = temp[45] DP4 temp[47].xyz, src0.xyz, src1.xyz DP4 temp[47].w, src0.w, src1.w 40: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = temp[43], src1.w = temp[43] MAD temp[48].xyz, src0.xyz, src1.xyz, src1.xyz MAD temp[48].w, src0.w, src1.w, src1.w 41: src0.xyz = temp[48], src1.xyz = const[1] MAD temp[49].xyz, src0.xyz, src1.xyz, src0.000 42: src0.xyz = temp[49], src0.w = const[2] MAD temp[50].xyz, src0.xyz, src0.www, src0.000 43: src0.xyz = temp[50], src0.w = temp[48] MAD temp[51].xyz, src0.xyz, src0.www, src0.000 44: MAD temp[13].y, src0._H_, src0.111, src0.000 45: src0.xyz = input[6] MAD temp[13].x, src0.z__, src0.111, src0.000 46: TEX temp[52].xyz, temp[13].xy__, 2D[7]; 47: src0.xyz = temp[51], src1.xyz = temp[52] MAD temp[53].xyz, src0.xyz, src1.xyz, src0.000 48: TXP temp[54].xyz, input[6].xy_w, 2D[8]; 49: src0.xyz = temp[53], src1.xyz = temp[54] MAD temp[55].xyz, src0.xyz, src1.xyz, src0.000 50: MAD_SAT color[0].w, src0.0, src0.1, src0.0 51: src0.xyz = temp[55], src1.xyz = input[0] MAD temp[56].xyz, src0.xyz, src1.xyz, src0.000 52: src0.xyz = input[3] DP3, src0.xyz, src0.xyz DP3 temp[57].w, src0._, src0._ 53: src0.w = temp[57] RSQ temp[58].w, |src0.w| 54: src0.xyz = input[3], src0.w = temp[58] MAD temp[59].xyz, src0.xyz, src0.www, src0.000 55: src0.xyz = input[4] DP3, src0.xyz, src0.xyz DP3 temp[60].w, src0._, src0._ 56: src0.w = temp[60] RSQ temp[61].w, |src0.w| 57: src0.xyz = input[4], src0.w = temp[61] MAD temp[62].xyz, src0.xyz, src0.www, src0.000 58: src0.xyz = temp[59], src1.xyz = temp[62], srcp.xyz = (src1 + src0) DP3, srcp.xyz, srcp.xyz DP3 temp[63].w, src0._, src0._ 59: src0.w = temp[63] RSQ temp[64].w, |src0.w| 60: src0.xyz = temp[59], src0.w = temp[64], src1.xyz = temp[62], srcp.xyz = (src1 + src0) MAD temp[65].xyz, srcp.xyz, src0.www, src0.000 61: src0.xyz = temp[65], src1.xyz = input[5] DP3, src0.xyz, src1.xyz DP3 temp[66].w, src0._, src0._ 62: src0.w = temp[66] MAD temp[67].w, src0.w, src0.w, src0.0 63: src0.w = temp[67] MAD temp[68].w, src0.w, src0.w, src0.0 64: TEX temp[69].x, input[7].xy__, 2D[9]; 65: src0.xyz = const[4], src0.w = temp[68] MAD temp[70].w, src0.w, src0.z, src0.0 66: src0.xyz = temp[69], src0.w = temp[70] MAD temp[71].w, src0.w, src0.x, src0.0 67: src0.w = temp[71] MAD temp[72].w, src0.1, src0.1, src0.w 68: src0.xyz = temp[56], src0.w = temp[72] MAD_SAT color[0].xyz, src0.xyz, src0.www, src0.000 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[46], input[7].xy__, 2D[6]; 2: TXP temp[54].xyz, input[6].xy_w, 2D[8]; 3: TEX temp[69].x, input[7].xy__, 2D[9]; 4: src0.xyz = input[4] DP3, src0.xyz, src0.xyz DP3 temp[60].w, src0._, src0._ 5: src0.xyz = input[3] DP3, src0.xyz, src0.xyz DP3 temp[57].w, src0._, src0._ 6: src0.xyz = input[2], src0.w = input[2] MAD temp[18].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[18].w, src0.H, src0.1, -src0.w 7: src0.xyz = temp[18], src0.w = temp[18] MAX temp[20].z, |src0.__x|, |src0.__y| MAX temp[20].w, |src0.z|, |src0.w| 8: src0.xyz = input[1], src0.w = input[1] MAD temp[17].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[17].w, src0.H, src0.1, -src0.w 9: src0.w = temp[17], src1.w = temp[57] MAD temp[15].y, |src0._w_|, src0.111, src0.000 RSQ temp[58].w, |src1.w| 10: src0.xyz = input[3], src0.w = temp[58], src1.w = temp[60] MAD temp[59].xyz, src0.xyz, src0.www, src0.000 RSQ temp[61].w, |src1.w| 11: src0.xyz = input[4], src0.w = temp[61] MAD temp[62].xyz, src0.xyz, src0.www, src0.000 MAD_SAT color[0].w, src0.0, src0.1, src0.0 12: src0.xyz = temp[59], src1.xyz = temp[62], srcp.xyz = (src1 + src0) DP3, srcp.xyz, srcp.xyz DP3 temp[63].w, src0._, src0._ 13: src0.xyz = temp[17], src0.w = temp[63] MAD temp[5].y, |src0._z_|, src0.111, src0.000 RSQ temp[64].w, |src0.w| 14: src0.xyz = temp[59], src0.w = temp[64], src1.xyz = temp[62], srcp.xyz = (src1 + src0) MAD temp[65].xyz, srcp.xyz, src0.www, src0.000 15: src0.xyz = temp[65], src1.xyz = input[5] DP3, src0.xyz, src1.xyz DP3 temp[66].w, src0._, src0._ 16: src0.xyz = temp[17], src0.w = temp[66] MAD temp[15].x, |src0.y__|, src0.111, src0.000 MAD temp[67].w, src0.w, src0.w, src0.0 17: src0.xyz = temp[17], src0.w = temp[67] MAD temp[5].x, |src0.x__|, src0.111, src0.000 MAD temp[68].w, src0.w, src0.w, src0.0 18: src0.xyz = temp[5], src0.w = temp[68], src1.xyz = temp[15], src2.xyz = const[4] MAX temp[19].xy, src0.xy_, src1.xy_ MAD temp[70].w, src0.w, src2.z, src0.0 19: src0.xyz = temp[19], src1.xyz = const[3] MAD_SAT temp[2].y, src0._x_, src1._x_, src1._y_ MAD_SAT temp[2].w, src0.y, src1.x, src1.y 20: src0.xyz = const[3], src0.w = temp[20], src1.xyz = temp[69], src1.w = temp[70] MAD_SAT temp[2].z, src0.__w, src0.__x, src0.__y MAD temp[71].w, src1.w, src1.x, src0.0 21: src0.xyz = temp[20], src0.w = temp[71], src1.xyz = const[3] MAD_SAT temp[2].x, src0.z__, src1.x__, src1.y__ MAD temp[72].w, src0.1, src0.1, src0.w 22: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = const[0], src1.w = const[0] MAD temp[21].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[21].w, src0.w, src1.w, src0.0 23: src0.xyz = temp[21], src0.w = temp[21] MAD temp[22].xyz, src0.111, src0.111, -src0.xyz MAD temp[22].w, src0.1, src0.1, -src0.w 24: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = const[4] MAD_SAT temp[23].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[23].w, src0.w, src1.x, src0.0 25: src0.xyz = const[5], src0.w = const[5], src1.xyz = temp[23], src1.w = temp[23] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[24].w, src0.w, src1.w, src0.0 26: src0.xyz = input[7], src0.w = temp[24] MAD temp[30].xy, src0.xy_, src0.ww_, src0.000 27: src0.xyz = input[7], src1.xyz = temp[24] MAD temp[29].xy, src0.xy_, src1.zz_, src0.000 28: src0.xyz = input[7], src1.xyz = temp[24] MAD temp[28].xy, src0.xy_, src1.yy_, src0.000 29: src0.xyz = input[7], src1.xyz = temp[24] MAD temp[27].xy, src0.xy_, src1.xx_, src0.000 30: src0.xyz = temp[22], src1.xyz = const[4] MAD_SAT temp[25].x, src0.x__, src1.x__, src0.000 31: src0.xyz = temp[25], src1.xyz = input[7] MAD temp[26].xy, src0.xx_, src1.xy_, src0.000 32: src0.xyz = input[6] MAD temp[13].x, src0.z__, src0.111, src0.000 33: MAD temp[13].y, src0._H_, src0.111, src0.000 34: src0.w = input[7] MAD temp[16].y, src0._w_, src0.111, src0.000 35: src0.xyz = input[7] MAD temp[16].x, src0.z__, src0.111, src0.000 36: BEGIN_TEX; 37: TEX temp[35], temp[30].xy__, 2D[4]; 38: TEX temp[34], temp[29].xy__, 2D[3]; 39: TEX temp[33], temp[28].xy__, 2D[2]; 40: TEX temp[32], temp[27].xy__, 2D[1]; 41: TEX temp[31], temp[26].xy__, 2D[0]; 42: TEX temp[52].xyz, temp[13].xy__, 2D[7]; 43: TEX temp[44], temp[16].xy__, 2D[5]; 44: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = const[5] MAD temp[45].xyz, src0.xyz, src1.xxx, -src0.111 MAD temp[45].w, src0.w, src1.x, -src0.1 45: src0.xyz = temp[46], src0.w = temp[46], src1.xyz = temp[45], src1.w = temp[45] DP4 temp[47].xyz, src0.xyz, src1.xyz DP4 temp[47].w, src0.w, src1.w 46: src0.xyz = temp[31], src0.w = temp[31], src1.xyz = temp[22] MAD temp[36].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[36].w, src0.w, src1.x, src0.0 47: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = temp[21], src1.w = temp[36], src2.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[37].w, src0.w, src1.x, src1.w 48: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[22] MAD temp[38].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[38].w, src0.w, src1.y, src0.0 49: src0.xyz = temp[33], src0.w = temp[33], src1.xyz = temp[21], src1.w = temp[38], src2.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[39].w, src0.w, src1.y, src1.w 50: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[22] MAD temp[40].xyz, src0.xyz, src1.zzz, src0.000 MAD temp[40].w, src0.w, src1.z, src0.0 51: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[21], src1.w = temp[40], src2.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[41].w, src0.w, src1.z, src1.w 52: src0.xyz = temp[41], src0.w = temp[41], src1.w = temp[22] MAD temp[42].xyz, src0.xyz, src1.www, src0.000 MAD temp[42].w, src0.w, src1.w, src0.0 53: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[42], src1.w = temp[21], src2.w = temp[42] MAD temp[43].xyz, src0.xyz, src1.www, src1.xyz MAD temp[43].w, src0.w, src1.w, src2.w 54: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = temp[43], src1.w = temp[43] MAD temp[48].xyz, src0.xyz, src1.xyz, src1.xyz MAD temp[48].w, src0.w, src1.w, src1.w 55: src0.xyz = temp[48], src1.xyz = const[1] MAD temp[49].xyz, src0.xyz, src1.xyz, src0.000 56: src0.xyz = temp[49], src0.w = const[2] MAD temp[50].xyz, src0.xyz, src0.www, src0.000 57: src0.xyz = temp[50], src0.w = temp[48] MAD temp[51].xyz, src0.xyz, src0.www, src0.000 58: src0.xyz = temp[51], src1.xyz = temp[52] MAD temp[53].xyz, src0.xyz, src1.xyz, src0.000 59: src0.xyz = temp[53], src1.xyz = temp[54] MAD temp[55].xyz, src0.xyz, src1.xyz, src0.000 60: src0.xyz = temp[55], src1.xyz = input[0] MAD temp[56].xyz, src0.xyz, src1.xyz, src0.000 61: src0.xyz = temp[56], src0.w = temp[72] MAD_SAT color[0].xyz, src0.xyz, src0.www, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[46], input[7].xy__, 2D[6]; 2: TXP temp[54].xyz, input[6].xy_w, 2D[8]; 3: TEX temp[69].x, input[7].xy__, 2D[9]; 4: src0.xyz = input[4] DP3, src0.xyz, src0.xyz DP3 temp[60].w, src0._, src0._ 5: src0.xyz = input[3] DP3, src0.xyz, src0.xyz DP3 temp[57].w, src0._, src0._ 6: src0.xyz = input[2], src0.w = input[2] MAD temp[18].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[18].w, src0.H, src0.1, -src0.w 7: src0.xyz = temp[18], src0.w = temp[18] MAX temp[20].z, |src0.__x|, |src0.__y| MAX temp[20].w, |src0.z|, |src0.w| 8: src0.xyz = input[1], src0.w = input[1] MAD temp[17].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[17].w, src0.H, src0.1, -src0.w 9: src0.w = temp[17], src1.w = temp[57] MAD temp[15].y, |src0._w_|, src0.111, src0.000 RSQ temp[58].w, |src1.w| 10: src0.xyz = input[3], src0.w = temp[58], src1.w = temp[60] MAD temp[59].xyz, src0.xyz, src0.www, src0.000 RSQ temp[61].w, |src1.w| 11: src0.xyz = input[4], src0.w = temp[61] MAD temp[62].xyz, src0.xyz, src0.www, src0.000 MAD_SAT color[0].w, src0.0, src0.1, src0.0 12: src0.xyz = temp[59], src1.xyz = temp[62], srcp.xyz = (src1 + src0) DP3, srcp.xyz, srcp.xyz DP3 temp[63].w, src0._, src0._ 13: src0.xyz = temp[17], src0.w = temp[63] MAD temp[5].y, |src0._z_|, src0.111, src0.000 RSQ temp[64].w, |src0.w| 14: src0.xyz = temp[59], src0.w = temp[64], src1.xyz = temp[62], srcp.xyz = (src1 + src0) MAD temp[65].xyz, srcp.xyz, src0.www, src0.000 15: src0.xyz = temp[65], src1.xyz = input[5] DP3, src0.xyz, src1.xyz DP3 temp[66].w, src0._, src0._ 16: src0.xyz = temp[17], src0.w = temp[66] MAD temp[15].x, |src0.y__|, src0.111, src0.000 MAD temp[67].w, src0.w, src0.w, src0.0 17: src0.xyz = temp[17], src0.w = temp[67] MAD temp[5].x, |src0.x__|, src0.111, src0.000 MAD temp[68].w, src0.w, src0.w, src0.0 18: src0.xyz = temp[5], src0.w = temp[68], src1.xyz = temp[15], src2.xyz = const[4] MAX temp[19].xy, src0.xy_, src1.xy_ MAD temp[70].w, src0.w, src2.z, src0.0 19: src0.xyz = temp[19], src1.xyz = const[3] MAD_SAT temp[2].y, src0._x_, src1._x_, src1._y_ MAD_SAT temp[2].w, src0.y, src1.x, src1.y 20: src0.xyz = const[3], src0.w = temp[20], src1.xyz = temp[69], src1.w = temp[70] MAD_SAT temp[2].z, src0.__w, src0.__x, src0.__y MAD temp[71].w, src1.w, src1.x, src0.0 21: src0.xyz = temp[20], src0.w = temp[71], src1.xyz = const[3] MAD_SAT temp[2].x, src0.z__, src1.x__, src1.y__ MAD temp[72].w, src0.1, src0.1, src0.w 22: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = const[0], src1.w = const[0] MAD temp[21].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[21].w, src0.w, src1.w, src0.0 23: src0.xyz = temp[21], src0.w = temp[21] MAD temp[22].xyz, src0.111, src0.111, -src0.xyz MAD temp[22].w, src0.1, src0.1, -src0.w 24: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = const[4] MAD_SAT temp[23].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[23].w, src0.w, src1.x, src0.0 25: src0.xyz = const[5], src0.w = const[5], src1.xyz = temp[23], src1.w = temp[23] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[24].w, src0.w, src1.w, src0.0 26: src0.xyz = input[7], src0.w = temp[24] MAD temp[30].xy, src0.xy_, src0.ww_, src0.000 27: src0.xyz = input[7], src1.xyz = temp[24] MAD temp[29].xy, src0.xy_, src1.zz_, src0.000 28: src0.xyz = input[7], src1.xyz = temp[24] MAD temp[28].xy, src0.xy_, src1.yy_, src0.000 29: src0.xyz = input[7], src1.xyz = temp[24] MAD temp[27].xy, src0.xy_, src1.xx_, src0.000 30: src0.xyz = temp[22], src1.xyz = const[4] MAD_SAT temp[25].x, src0.x__, src1.x__, src0.000 31: src0.xyz = temp[25], src1.xyz = input[7] MAD temp[26].xy, src0.xx_, src1.xy_, src0.000 32: src0.xyz = input[6] MAD temp[13].x, src0.z__, src0.111, src0.000 33: MAD temp[13].y, src0._H_, src0.111, src0.000 34: src0.w = input[7] MAD temp[16].y, src0._w_, src0.111, src0.000 35: src0.xyz = input[7] MAD temp[16].x, src0.z__, src0.111, src0.000 36: BEGIN_TEX; 37: TEX temp[35], temp[30].xy__, 2D[4]; 38: TEX temp[34], temp[29].xy__, 2D[3]; 39: TEX temp[33], temp[28].xy__, 2D[2]; 40: TEX temp[32], temp[27].xy__, 2D[1]; 41: TEX temp[31], temp[26].xy__, 2D[0]; 42: TEX temp[52].xyz, temp[13].xy__, 2D[7]; 43: TEX temp[44], temp[16].xy__, 2D[5]; 44: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = const[5] MAD temp[45].xyz, src0.xyz, src1.xxx, -src0.111 MAD temp[45].w, src0.w, src1.x, -src0.1 45: src0.xyz = temp[46], src0.w = temp[46], src1.xyz = temp[45], src1.w = temp[45] DP4 temp[47].xyz, src0.xyz, src1.xyz DP4 temp[47].w, src0.w, src1.w 46: src0.xyz = temp[31], src0.w = temp[31], src1.xyz = temp[22] MAD temp[36].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[36].w, src0.w, src1.x, src0.0 47: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = temp[21], src1.w = temp[36], src2.xyz = temp[36] MAD temp[37].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[37].w, src0.w, src1.x, src1.w 48: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[22] MAD temp[38].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[38].w, src0.w, src1.y, src0.0 49: src0.xyz = temp[33], src0.w = temp[33], src1.xyz = temp[21], src1.w = temp[38], src2.xyz = temp[38] MAD temp[39].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[39].w, src0.w, src1.y, src1.w 50: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[22] MAD temp[40].xyz, src0.xyz, src1.zzz, src0.000 MAD temp[40].w, src0.w, src1.z, src0.0 51: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[21], src1.w = temp[40], src2.xyz = temp[40] MAD temp[41].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[41].w, src0.w, src1.z, src1.w 52: src0.xyz = temp[41], src0.w = temp[41], src1.w = temp[22] MAD temp[42].xyz, src0.xyz, src1.www, src0.000 MAD temp[42].w, src0.w, src1.w, src0.0 53: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[42], src1.w = temp[21], src2.w = temp[42] MAD temp[43].xyz, src0.xyz, src1.www, src1.xyz MAD temp[43].w, src0.w, src1.w, src2.w 54: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = temp[43], src1.w = temp[43] MAD temp[48].xyz, src0.xyz, src1.xyz, src1.xyz MAD temp[48].w, src0.w, src1.w, src1.w 55: src0.xyz = temp[48], src1.xyz = const[1] MAD temp[49].xyz, src0.xyz, src1.xyz, src0.000 56: src0.xyz = temp[49], src0.w = const[2] MAD temp[50].xyz, src0.xyz, src0.www, src0.000 57: src0.xyz = temp[50], src0.w = temp[48] MAD temp[51].xyz, src0.xyz, src0.www, src0.000 58: src0.xyz = temp[51], src1.xyz = temp[52] MAD temp[53].xyz, src0.xyz, src1.xyz, src0.000 59: src0.xyz = temp[53], src1.xyz = temp[54] MAD temp[55].xyz, src0.xyz, src1.xyz, src0.000 60: src0.xyz = temp[55], src1.xyz = input[0] MAD temp[56].xyz, src0.xyz, src1.xyz, src0.000 61: src0.xyz = temp[56], src0.w = temp[72] MAD_SAT color[0].xyz, src0.xyz, src0.www, src0.000 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[8], input[7].xy__, 2D[6]; 2: TXP temp[9].xyz, input[6].xy_w, 2D[8]; 3: TEX temp[10].x, input[7].xy__, 2D[9]; 4: src0.xyz = input[4] DP3, src0.xyz, src0.xyz DP3 temp[0].w, src0._, src0._ 5: src0.xyz = input[3] DP3, src0.xyz, src0.xyz DP3 temp[3].w, src0._, src0._ 6: src0.xyz = input[2], src0.w = input[2] MAD temp[2].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[2].w, src0.H, src0.1, -src0.w 7: src0.xyz = temp[2], src0.w = temp[2] MAX temp[2].x, |src0.x__|, |src0.y__| MAX temp[2].w, |src0.z|, |src0.w| 8: src0.xyz = input[1], src0.w = input[1] MAD temp[1].xyz, src0.HHH, src0.111, -src0.xyz MAD temp[1].w, src0.H, src0.1, -src0.w 9: src0.w = temp[1], src1.w = temp[3] MAD temp[11].y, |src0._w_|, src0.11_, src0.00_ RSQ temp[1].w, |src1.w| 10: src0.xyz = input[3], src0.w = temp[1], src1.w = temp[0] MAD temp[3].xyz, src0.xyz, src0.www, src0.000 RSQ temp[0].w, |src1.w| 11: src0.xyz = input[4], src0.w = temp[0] MAD temp[4].xyz, src0.xyz, src0.www, src0.000 MAD_SAT color[0].w, src0.0, src0.1, src0.0 12: src0.xyz = temp[3], src1.xyz = temp[4], srcp.xyz = (src1 + src0) DP3, srcp.xyz, srcp.xyz DP3 temp[0].w, src0._, src0._ 13: src0.xyz = temp[1], src0.w = temp[0] MAD temp[12].y, |src0._z_|, src0.11_, src0.00_ RSQ temp[0].w, |src0.w| 14: src0.xyz = temp[3], src0.w = temp[0], src1.xyz = temp[4], srcp.xyz = (src1 + src0) MAD temp[3].xyz, srcp.xyz, src0.www, src0.000 15: src0.xyz = temp[3], src1.xyz = input[5] DP3, src0.xyz, src1.xyz DP3 temp[0].w, src0._, src0._ 16: src0.xyz = temp[1], src0.w = temp[0] MAD temp[11].x, |src0.y__|, src0.11_, src0.00_ MAD temp[0].w, src0.w, src0.w, src0.0 17: src0.xyz = temp[1], src0.w = temp[0] MAD temp[12].x, |src0.x__|, src0.11_, src0.00_ MAD temp[0].w, src0.w, src0.w, src0.0 18: src0.xyz = temp[12], src0.w = temp[0], src1.xyz = temp[11], src2.xyz = const[4] MAX temp[1].xy, src0.xy_, src1.xy_ MAD temp[0].w, src0.w, src2.z, src0.0 19: src0.xyz = temp[1], src1.xyz = const[3] MAD_SAT temp[1].y, src0._x_, src1._x_, src1._y_ MAD_SAT temp[1].w, src0.y, src1.x, src1.y 20: src0.xyz = const[3], src0.w = temp[2], src1.xyz = temp[10], src1.w = temp[0] MAD_SAT temp[1].z, src0.__w, src0.__x, src0.__y MAD temp[0].w, src1.w, src1.x, src0.0 21: src0.xyz = temp[2], src0.w = temp[0], src1.xyz = const[3] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD temp[0].w, src0.1, src0.1, src0.w 22: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[0], src1.w = const[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 23: src0.xyz = temp[1], src0.w = temp[1] MAD temp[2].xyz, src0.111, src0.111, -src0.xyz MAD temp[2].w, src0.1, src0.1, -src0.w 24: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[4] MAD_SAT temp[3].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[3].w, src0.w, src1.x, src0.0 25: src0.xyz = const[5], src0.w = const[5], src1.xyz = temp[3], src1.w = temp[3] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[3].w, src0.w, src1.w, src0.0 26: src0.xyz = input[7], src0.w = temp[3] MAD temp[4].xy, src0.xy_, src0.ww_, src0.00_ 27: src0.xyz = input[7], src1.xyz = temp[3] MAD temp[5].xy, src0.xy_, src1.zz_, src0.00_ 28: src0.xyz = input[7], src1.xyz = temp[3] MAD temp[10].xy, src0.xy_, src1.yy_, src0.00_ 29: src0.xyz = input[7], src1.xyz = temp[3] MAD temp[3].xy, src0.xy_, src1.xx_, src0.00_ 30: src0.xyz = temp[2], src1.xyz = const[4] MAD_SAT temp[3].z, src0.__x, src1.__x, src0.__0 31: src0.xyz = temp[3], src1.xyz = input[7] MAD temp[11].xy, src0.zz_, src1.xy_, src0.00_ 32: src0.xyz = input[6] MAD temp[6].x, src0.z__, src0.11_, src0.00_ 33: MAD temp[6].y, src0._H_, src0.11_, src0.00_ 34: src0.w = input[7] MAD temp[12].y, src0._w_, src0.11_, src0.00_ 35: src0.xyz = input[7] MAD temp[12].x, src0.z__, src0.11_, src0.00_ 36: BEGIN_TEX; 37: TEX temp[4], temp[4].xy__, 2D[4]; 38: TEX temp[5], temp[5].xy__, 2D[3]; 39: TEX temp[7], temp[10].xy__, 2D[2]; 40: TEX temp[3], temp[3].xy__, 2D[1]; 41: TEX temp[10], temp[11].xy__, 2D[0]; 42: TEX temp[6].xyz, temp[6].xy__, 2D[7]; 43: TEX temp[11], temp[12].xy__, 2D[5]; 44: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = const[5] MAD temp[11].xyz, src0.xyz, src1.xxx, -src0.111 MAD temp[11].w, src0.w, src1.x, -src0.1 45: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[8].xyz, src0.xyz, src1.xyz DP4 temp[8].w, src0.w, src1.w 46: src0.xyz = temp[10], src0.w = temp[10], src1.xyz = temp[2] MAD temp[10].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[10].w, src0.w, src1.x, src0.0 47: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[1], src1.w = temp[10], src2.xyz = temp[10] MAD temp[3].xyz, src0.xyz, src1.xxx, src2.xyz MAD temp[3].w, src0.w, src1.x, src1.w 48: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[2] MAD temp[3].xyz, src0.xyz, src1.yyy, src0.000 MAD temp[3].w, src0.w, src1.y, src0.0 49: src0.xyz = temp[7], src0.w = temp[7], src1.xyz = temp[1], src1.w = temp[3], src2.xyz = temp[3] MAD temp[3].xyz, src0.xyz, src1.yyy, src2.xyz MAD temp[3].w, src0.w, src1.y, src1.w 50: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.zzz, src0.000 MAD temp[3].w, src0.w, src1.z, src0.0 51: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = temp[1], src1.w = temp[3], src2.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.zzz, src2.xyz MAD temp[3].w, src0.w, src1.z, src1.w 52: src0.xyz = temp[1], src0.w = temp[3], src1.w = temp[2] MAD temp[1].xyz, src0.xyz, src1.www, src0.000 MAD temp[2].w, src0.w, src1.w, src0.0 53: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[1], src1.w = temp[1], src2.w = temp[2] MAD temp[1].xyz, src0.xyz, src1.www, src1.xyz MAD temp[1].w, src0.w, src1.w, src2.w 54: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = temp[1], src1.w = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src1.xyz MAD temp[1].w, src0.w, src1.w, src1.w 55: src0.xyz = temp[1], src1.xyz = const[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 56: src0.xyz = temp[1], src0.w = const[2] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 57: src0.xyz = temp[1], src0.w = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 58: src0.xyz = temp[1], src1.xyz = temp[6] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 59: src0.xyz = temp[1], src1.xyz = temp[9] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 60: src0.xyz = temp[1], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 61: src0.xyz = temp[0], src0.w = temp[0] MAD_SAT color[0].xyz, src0.xyz, src0.www, src0.000 pc=63************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 31, tex_end: 2 (code_addr: 004407c0) TEX: TEX t8, t7, texture[6] (0000b207) TXP t9, t6, texture[8] (0001c246) TEX t10, t7, texture[9] (0000ca87) 0: xyz: t4 t0 t0 bias-> (00000004) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t4.xyz t4.xyz t4.xxx op: 00804000 w: 1.0 1.0 t4.x op: 00800891 1: xyz: t3 t0 t0 bias-> (00000003) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: 1.0 1.0 t3.x op: 00800891 2: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t2 t0 t0 bias-> t2.w (00880002) xyz: 0.5 1.0 -t2.xyz op: 00080a96 w: 0.5 1.0 -t2.w op: 000a4892 3: xyz: t2 t0 t0 bias-> t2.x (00880002) w: t2 t0 t0 bias-> t2.w (00880002) xyz: |t2.xyz| |t2.yyy| t2.xxx op: 02806140 w: |t2.z| |t2.w| t2.x op: 018024c2 4: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t1 t0 t0 bias-> t1.w (00840001) xyz: 0.5 1.0 -t1.xyz op: 00080a96 w: 0.5 1.0 -t1.w op: 000a4892 5: xyz: t0 t0 t0 bias-> t11.y (012c0000) w: t1 t3 t0 bias-> t1.w (008400c1) xyz: |t1.www| 1.0 0.0 op: 00050acc w: |t3.w| t0.x t0.x op: 0580004a 6: xyz: t3 t0 t0 bias-> t3.xyz (038c0003) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t3.xyz t1.www 0.0 op: 00050600 w: |t0.w| t3.x t3.x op: 0580004a 7: xyz: t4 t0 t0 bias-> t4.xyz (03900004) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t4.xyz t0.www 0.0 op: 80050600 NOP w: 0.0 1.0 0.0 op: 40040890 8: xyz: t3 t4 t0 add-> (00000103) w: t0 t0 t0 bias-> t0.w (00800000) xyz: srcp.xyz srcp.xyz t3.xxx op: 00c0478f w: 1.0 1.0 t3.x op: 00800891 9: xyz: t1 t0 t0 bias-> t12.y (01300001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: |t1.zzz| 1.0 0.0 op: 00050ac3 w: |t0.w| t1.x t1.x op: 05800049 10: xyz: t3 t4 t0 add-> t3.xyz (038c0103) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz t0.www 0.0 op: 0045060f w: t3.x t3.x t3.x op: 00000000 11: xyz: t3 t5 t0 bias-> (00000143) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t3.xyz t5.xyz t3.xxx op: 00804200 w: 1.0 1.0 t3.x op: 00800891 12: xyz: t1 t0 t0 bias-> t11.x (00ac0001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: |t1.yyy| 1.0 0.0 op: 00050ac2 w: t0.w t0.w 0.0 op: 00040489 13: xyz: t1 t0 t0 bias-> t12.x (00b00001) w: t0 t0 t0 bias-> t0.w (00800000) xyz: |t1.xyz| 1.0 0.0 op: 00050ac0 w: t0.w t0.w 0.0 op: 00040489 14: xyz: t12 t11 c4 bias-> t1.xy (018642cc) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t12.xyz t11.xyz t12.xxx op: 02804200 w: t0.w c4.z 0.0 op: 00040409 15: xyz: t1 c3 t0 bias-> t1.y (010408c1) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xxx c3.xxx c3.xyz op: 40010281 w: t1.y c3.x c3.y op: 40010181 16: xyz: c3 t10 t0 bias-> t1.z (020402a3) w: t2 t0 t0 bias-> t0.w (00800002) xyz: t2.www c3.xxx c3.yyy op: 4000808c w: t0.w t10.x 0.0 op: 0004018a 17: xyz: t2 c3 t0 bias-> t1.x (008408c2) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xyz c3.xyz c3.yyy op: 40018200 w: 1.0 1.0 t0.w op: 00024891 18: xyz: t1 c0 t0 bias-> t1.xyz (03840801) 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 19: xyz: t1 t0 t0 bias-> t2.xyz (03880001) w: t1 t0 t0 bias-> t2.w (00880001) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: 1.0 1.0 -t1.w op: 000a4891 20: xyz: t1 c4 t0 bias-> t3.xyz (038c0901) w: t1 t0 t0 bias-> t3.w (008c0001) xyz: t1.xyz c4.xxx 0.0 op: 40050280 w: t1.w c4.x 0.0 op: 40040189 21: xyz: c5 t3 t0 bias-> t3.xyz (038c00e5) w: c5 t3 t0 bias-> t3.w (008c00e5) xyz: c5.xyz t3.xyz 0.0 op: 00050200 w: c5.w t3.w 0.0 op: 00040509 22: xyz: t7 t0 t0 bias-> t4.xy (01900007) w: t3 t0 t0 bias-> (00000003) xyz: t7.xyz t3.www 0.0 op: 00050600 w: t7.x t7.x t7.x op: 00000000 23: xyz: t7 t3 t0 bias-> t5.xy (019400c7) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t3.zzz 0.0 op: 00050380 w: t7.x t7.x t7.x op: 00000000 24: xyz: t7 t3 t0 bias-> t10.xy (01a800c7) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t3.yyy 0.0 op: 00050300 w: t7.x t7.x t7.x op: 00000000 25: xyz: t7 t3 t0 bias-> t3.xy (018c00c7) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t3.xxx 0.0 op: 00050280 w: t7.x t7.x t7.x op: 00000000 26: xyz: t2 c4 t0 bias-> t3.z (020c0902) w: t0 t0 t0 bias-> (00000000) xyz: t2.xxx c4.xxx 0.0 op: 40050281 w: t2.x t2.x t2.x op: 00000000 27: xyz: t3 t7 t0 bias-> t11.xy (01ac01c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.zzz t7.xyz 0.0 op: 00050203 w: t3.x t3.x t3.x op: 00000000 28: xyz: t6 t0 t0 bias-> t6.x (00980006) w: t0 t0 t0 bias-> (00000000) xyz: t6.zzz 1.0 0.0 op: 00050a83 w: t6.x t6.x t6.x op: 00000000 29: xyz: t0 t0 t0 bias-> t6.y (01180000) w: t0 t0 t0 bias-> (00000000) xyz: 0.5 1.0 0.0 op: 00050a96 w: t0.x t0.x t0.x op: 00000000 30: xyz: t0 t0 t0 bias-> t12.y (01300000) w: t7 t0 t0 bias-> (00000007) xyz: t7.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 31: xyz: t7 t0 t0 bias-> t12.x (00b00007) w: t0 t0 t0 bias-> (00000000) xyz: t7.zzz 1.0 0.0 op: 00050a83 w: t7.x t7.x t7.x op: 00000000 NODE 1: alu_offset: 32, tex_offset: 3, alu_end: 17, tex_end: 6 (code_addr: 004c3460) TEX: TEX t4, t4, texture[4] (0000a104) TEX t5, t5, texture[3] (00009945) TEX t7, t10, texture[2] (000091ca) TEX t3, t3, texture[1] (000088c3) TEX t10, t11, texture[0] (0000828b) TEX t6, t6, texture[7] (0000b986) TEX t11, t12, texture[5] (0000aacc) 32: xyz: t11 c5 t0 bias-> t11.xyz (03ac094b) w: t11 t0 t0 bias-> t11.w (00ac000b) xyz: t11.xyz c5.xxx -1.0 op: 000d4280 w: t11.w c5.x -1.0 op: 000c4189 33: xyz: t8 t11 t0 bias-> t8.xyz (03a002c8) w: t8 t11 t0 bias-> t8.w (00a002c8) xyz: t8.xyz t11.xyz t8.xxx op: 01004200 w: t8.w t11.w t8.x op: 00800509 34: xyz: t10 t2 t0 bias-> t10.xyz (03a8008a) w: t10 t0 t0 bias-> t10.w (00a8000a) xyz: t10.xyz t2.xxx 0.0 op: 00050280 w: t10.w t2.x 0.0 op: 00040189 35: xyz: t3 t1 t10 bias-> t3.xyz (038ca043) w: t3 t10 t0 bias-> t3.w (008c0283) xyz: t3.xyz t1.xxx t10.xyz op: 00020280 w: t3.w t1.x t10.w op: 00028189 36: xyz: t3 t2 t0 bias-> t3.xyz (038c0083) w: t3 t0 t0 bias-> t3.w (008c0003) xyz: t3.xyz t2.yyy 0.0 op: 00050300 w: t3.w t2.y 0.0 op: 00040209 37: xyz: t7 t1 t3 bias-> t3.xyz (038c3047) w: t7 t3 t0 bias-> t3.w (008c00c7) xyz: t7.xyz t1.yyy t3.xyz op: 00020300 w: t7.w t1.y t3.w op: 00028209 38: xyz: t3 t2 t0 bias-> t2.xyz (03880083) w: t3 t0 t0 bias-> t3.w (008c0003) xyz: t3.xyz t2.zzz 0.0 op: 00050380 w: t3.w t2.z 0.0 op: 00040289 39: xyz: t5 t1 t2 bias-> t1.xyz (03842045) w: t5 t3 t0 bias-> t3.w (008c00c5) xyz: t5.xyz t1.zzz t2.xyz op: 00020380 w: t5.w t1.z t3.w op: 00028289 40: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t3 t2 t0 bias-> t2.w (00880083) xyz: t1.xyz t2.www 0.0 op: 00050680 w: t3.w t2.w 0.0 op: 00040509 41: xyz: t4 t1 t0 bias-> t1.xyz (03840044) w: t4 t1 t2 bias-> t1.w (00842044) xyz: t4.xyz t1.www t1.xyz op: 00010680 w: t4.w t1.w t2.w op: 0002c509 42: xyz: t8 t1 t0 bias-> t1.xyz (03840048) w: t8 t1 t0 bias-> t1.w (00840048) xyz: t8.xyz t1.xyz t1.xyz op: 00010200 w: t8.w t1.w t1.w op: 00028509 43: xyz: t1 c1 t0 bias-> t1.xyz (03840841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c1.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 44: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: c2 t0 t0 bias-> (00000022) xyz: t1.xyz c2.www 0.0 op: 00050600 w: t1.x t1.x t1.x op: 00000000 45: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t1 t0 t0 bias-> (00000001) xyz: t1.xyz t1.www 0.0 op: 00050600 w: t1.x t1.x t1.x op: 00000000 46: xyz: t1 t6 t0 bias-> t1.xyz (03840181) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t6.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 47: xyz: t1 t9 t0 bias-> t1.xyz (03840241) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t9.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 48: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz 0.0 op: 00050200 w: t1.x t1.x t1.x op: 00000000 49: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.www 0.0 op: 40050600 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], COLOR, LINEAR DCL IN[2], COLOR[1], LINEAR DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL IN[5], GENERIC[3], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL IN[7], GENERIC[5], PERSPECTIVE DCL IN[8], GENERIC[6], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL CONST[2..3] DCL CONST[1] DCL TEMP[0..6] IMM FLT32 { 0.0625, 1.0000, 4.0000, 3.0000} 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[3].xxxx, CONST[3].yyyy 2: DP3 TEMP[1].x, IN[8], IN[8] 3: RSQ TEMP[1].x, TEMP[1].xxxx 4: MUL TEMP[1], TEMP[1].xxxx, IN[8] 5: MUL TEMP[2].xy, TEMP[0], IMM[0].xxxx 6: TEX TEMP[2], TEMP[2], SAMP[0], 2D 7: SLT TEMP[2].w, IN[8].wwww, TEMP[2].wwww 8: KIL -TEMP[2].wwww 9: DP3 TEMP[3].x, IN[3], IN[3] 10: RSQ TEMP[3], TEMP[3].xxxx 11: MUL TEMP[3], TEMP[3].xxxx, IN[3] 12: MOV TEMP[3], IMM[0].yyyy 13: TXP TEMP[2], IN[5], SAMP[2], 2D 14: MUL TEMP[3], TEMP[3], TEMP[2] 15: TEX TEMP[2], IN[4], SAMP[3], 2D 16: MUL TEMP[3], TEMP[3], TEMP[2] 17: TEX TEMP[4], IN[6], SAMP[4], 2D 18: MUL TEMP[5], TEMP[4], CONST[1] 19: MOV TEMP[1], TEMP[1].zzzz 20: MAD_SAT TEMP[2].x, TEMP[1].xxxx, IMM[0].zzzz, -IMM[0].wwww 21: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[2].xxxx 22: MUL TEMP[2], TEMP[2].xxxx, CONST[2] 23: TEX TEMP[6], IN[7], SAMP[5], 2D 24: ADD TEMP[6], TEMP[6], TEMP[6] 25: MAD TEMP[5], TEMP[2], TEMP[6], TEMP[5] 26: MUL TEMP[5], TEMP[3], TEMP[5] 27: MUL TEMP[5], TEMP[5], IN[1] 28: SUB TEMP[2].x, IMM[0].yyyy, IN[2].xxxx 29: MUL OUT[0].xyz, TEMP[5], TEMP[2].xxxx 30: MOV OUT[0].w, IMM[0].yyyy 31: 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[5].xyz0, const[6].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[3].xxxx, const[3].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[4].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[4].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: MOV temp[1], temp[1].zzzz; 23: MAD_SAT temp[2].x, temp[1].xxxx, const[4].zzzz, -const[4].wwww; 24: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 25: MUL temp[2], temp[2].xxxx, const[2]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[2], temp[6], temp[5]; 29: MUL temp[5], temp[3], temp[5]; 30: MUL temp[5], temp[5], input[1]; 31: SUB temp[2].x, const[4].yyyy, input[2].xxxx; 32: MUL output[0].xyz, temp[5], temp[2].xxxx; 33: MOV output[0].w, const[4].yyyy; 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[5].xyz0, const[6].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[3].xxxx, const[3].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[4].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[4].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: MOV temp[1], temp[1].zzzz; 23: MAD_SAT temp[2].x, temp[1].xxxx, const[4].zzzz, -const[4].wwww; 24: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 25: MUL temp[2], temp[2].xxxx, const[2]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[2], temp[6], temp[5]; 29: MUL temp[5], temp[3], temp[5]; 30: MUL temp[5], temp[5], input[1]; 31: SUB temp[2].x, const[4].yyyy, input[2].xxxx; 32: MUL output[0].xyz, temp[5], temp[2].xxxx; 33: MOV output[0].w, const[4].yyyy; 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[5].xyz0, const[6].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[3].xxxx, const[3].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[4].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[4].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: MOV temp[1], temp[1].zzzz; 23: MAD_SAT temp[2].x, temp[1].xxxx, const[4].zzzz, -const[4].wwww; 24: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 25: MUL temp[2], temp[2].xxxx, const[2]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[2], temp[6], temp[5]; 29: MUL temp[5], temp[3], temp[5]; 30: MUL temp[5], temp[5], input[1]; 31: SUB temp[2].x, const[4].yyyy, input[2].xxxx; 32: MUL output[0].xyz, temp[5], temp[2].xxxx; 33: MOV output[0].w, const[4].yyyy; 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[5].xyz0, const[6].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[3].xxxx, const[3].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[4].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[4].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: MOV temp[1], temp[1].zzzz; 23: MAD_SAT temp[2].x, temp[1].xxxx, const[4].zzzz, -const[4].wwww; 24: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 25: MUL temp[2], temp[2].xxxx, const[2]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[2], temp[6], temp[5]; 29: MUL temp[5], temp[3], temp[5]; 30: MUL temp[5], temp[5], input[1]; 31: SUB temp[2].x, const[4].yyyy, input[2].xxxx; 32: MUL output[0].xyz, temp[5], temp[2].xxxx; 33: MOV output[0].w, const[4].yyyy; 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[5].xyz0, const[6].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[3].xxxx, const[3].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[4].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[4].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: MOV temp[1], temp[1].zzzz; 23: MAD_SAT temp[2].x, temp[1].xxxx, const[4].zzzz, -const[4].wwww; 24: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 25: MUL temp[2], temp[2].xxxx, const[2]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[2], temp[6], temp[5]; 29: MUL temp[5], temp[3], temp[5]; 30: MUL temp[5], temp[5], input[1]; 31: SUB temp[2].x, const[4].yyyy, input[2].xxxx; 32: MUL output[0].xyz, temp[5], temp[2].xxxx; 33: MOV output[0].w, const[4].yyyy; Fragment Program: after 'saturate output writes' # 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[5].xyz0, const[6].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[3].xxxx, const[3].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[4].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[4].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: MOV temp[1], temp[1].zzzz; 23: MAD_SAT temp[2].x, temp[1].xxxx, const[4].zzzz, -const[4].wwww; 24: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 25: MUL temp[2], temp[2].xxxx, const[2]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[2], temp[6], temp[5]; 29: MUL temp[5], temp[3], temp[5]; 30: MUL temp[5], temp[5], input[1]; 31: SUB temp[2].x, const[4].yyyy, input[2].xxxx; 32: MUL_SAT output[0].xyz, temp[5], temp[2].xxxx; 33: MOV_SAT output[0].w, const[4].yyyy; 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[5].xyz0, const[6].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[3].xxxx, const[3].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, temp[1].xxxx; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[4].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: SLT temp[2].w, input[8].wwww, temp[2].wwww; 11: KIL -temp[2].wwww; 12: DP3 temp[3].x, input[3], input[3]; 13: RSQ temp[3], temp[3].xxxx; 14: MUL temp[3], temp[3].xxxx, input[3]; 15: MOV temp[3], const[4].yyyy; 16: TXP temp[2], input[5], 2D[2]; 17: MUL temp[3], temp[3], temp[2]; 18: TEX temp[2], input[4], 2D[3]; 19: MUL temp[3], temp[3], temp[2]; 20: TEX temp[4], input[6], 2D[4]; 21: MUL temp[5], temp[4], const[1]; 22: MOV temp[1], temp[1].zzzz; 23: MAD_SAT temp[2].x, temp[1].xxxx, const[4].zzzz, -const[4].wwww; 24: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 25: MUL temp[2], temp[2].xxxx, const[2]; 26: TEX temp[6], input[7], 2D[5]; 27: ADD temp[6], temp[6], temp[6]; 28: MAD temp[5], temp[2], temp[6], temp[5]; 29: MUL temp[5], temp[3], temp[5]; 30: MUL temp[5], temp[5], input[1]; 31: SUB temp[2].x, const[4].yyyy, input[2].xxxx; 32: MUL_SAT output[0].xyz, temp[5], temp[2].xxxx; 33: MOV_SAT output[0].w, const[4].yyyy; 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[5].xyz0, const[6].xyz0; 3: MOV temp[0], temp[7]; 4: MAD temp[0].y, temp[7], const[3].xxxx, const[3].yyyy; 5: DP3 temp[1].x, input[8], input[8]; 6: RSQ temp[1].x, |temp[1].xxxx|; 7: MUL temp[1], temp[1].xxxx, input[8]; 8: MUL temp[2].xy, temp[0], const[4].xxxx; 9: TEX temp[2], temp[2], 2D[0]; 10: ADD temp[8].w, input[8].wwww, -temp[2].wwww; 11: CMP temp[2].w, temp[8], none.1111, none.0000; 12: KIL -temp[2].wwww; 13: DP3 temp[3].x, input[3], input[3]; 14: RSQ temp[3], |temp[3].xxxx|; 15: MUL temp[3], temp[3].xxxx, input[3]; 16: MOV temp[3], const[4].yyyy; 17: TXP temp[2], input[5], 2D[2]; 18: MUL temp[3], temp[3], temp[2]; 19: TEX temp[2], input[4], 2D[3]; 20: MUL temp[3], temp[3], temp[2]; 21: TEX temp[4], input[6], 2D[4]; 22: MUL temp[5], temp[4], const[1]; 23: MOV temp[1], temp[1].zzzz; 24: MAD_SAT temp[2].x, temp[1].xxxx, const[4].zzzz, -const[4].wwww; 25: MUL temp[2].x, temp[2].xxxx, temp[2].xxxx; 26: MUL temp[2], temp[2].xxxx, const[2]; 27: TEX temp[6], input[7], 2D[5]; 28: ADD temp[6], temp[6], temp[6]; 29: MAD temp[5], temp[2], temp[6], temp[5]; 30: MUL temp[5], temp[3], temp[5]; 31: MUL temp[5], temp[5], input[1]; 32: ADD temp[2].x, const[4].yyyy, -input[2].xxxx; 33: MUL_SAT output[0].xyz, temp[5], temp[2].xxxx; 34: MOV_SAT output[0].w, const[4].yyyy; 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[5].xy__, const[6].xy__; 3: MOV temp[0].x, temp[7].x___; 4: MAD temp[0].y, temp[7]._y__, const[3]._x__, const[3]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[4].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: ADD temp[8].w, input[8].___w, -temp[2].___w; 11: CMP temp[2].w, temp[8].___w, none.___1, none.___0; 12: KIL -temp[2].wwww; 13: MOV temp[3].xyz, const[4].yyy_; 14: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 15: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 16: TEX temp[2].xyz, input[4].xy__, 2D[3]; 17: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 18: TEX temp[4].xyz, input[6].xy__, 2D[4]; 19: MUL temp[5].xyz, temp[4].xyz_, const[1].xyz_; 20: MOV temp[1].x, temp[1].z___; 21: MAD_SAT temp[2].x, temp[1].x___, const[4].z___, -const[4].w___; 22: MUL temp[2].x, temp[2].x___, temp[2].x___; 23: MUL temp[2].xyz, temp[2].xxx_, const[2].xyz_; 24: TEX temp[6].xyz, input[7].xy__, 2D[5]; 25: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 26: MAD temp[5].xyz, temp[2].xyz_, temp[6].xyz_, temp[5].xyz_; 27: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 28: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 29: ADD temp[2].x, const[4].y___, -input[2].x___; 30: MUL_SAT output[0].xyz, temp[5].xyz_, temp[2].xxx_; 31: MOV_SAT output[0].w, const[4].___y; 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[5].xy__, const[6].xy__; 3: MOV temp[0].x, temp[7].x___; 4: MAD temp[0].y, temp[7]._y__, const[3]._x__, const[3]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[4].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: ADD temp[8].w, input[8].___w, -temp[2].___w; 11: CMP temp[2].w, temp[8].___w, none.___1, none.___0; 12: KIL -temp[2].wwww; 13: MOV temp[3].xyz, const[4].yyy_; 14: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 15: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 16: TEX temp[2].xyz, input[4].xy__, 2D[3]; 17: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 18: TEX temp[4].xyz, input[6].xy__, 2D[4]; 19: MUL temp[5].xyz, temp[4].xyz_, const[1].xyz_; 20: MOV temp[1].x, temp[1].z___; 21: MAD_SAT temp[2].x, temp[1].x___, const[4].z___, -const[4].w___; 22: MUL temp[2].x, temp[2].x___, temp[2].x___; 23: MUL temp[2].xyz, temp[2].xxx_, const[2].xyz_; 24: TEX temp[6].xyz, input[7].xy__, 2D[5]; 25: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 26: MAD temp[5].xyz, temp[2].xyz_, temp[6].xyz_, temp[5].xyz_; 27: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 28: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 29: ADD temp[2].x, const[4].y___, -input[2].x___; 30: MUL_SAT output[0].xyz, temp[5].xyz_, temp[2].xxx_; 31: MOV_SAT output[0].w, const[4].___y; Fragment Program: after 'dataflow optimize' # 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[5].xy__, const[6].xy__; 3: MOV temp[0].x, temp[7].x___; 4: MAD temp[0].y, temp[7]._y__, const[3]._x__, const[3]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[4].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: CMP temp[2].w, (input[8] - temp[2]).___w, none.___1, none.___0; 11: KIL -temp[2].wwww; 12: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 13: MOV temp[3].xyz, temp[2].xyz_; 14: TEX temp[2].xyz, input[4].xy__, 2D[3]; 15: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 16: TEX temp[4].xyz, input[6].xy__, 2D[4]; 17: MUL temp[5].xyz, temp[4].xyz_, const[1].xyz_; 18: MAD_SAT temp[2].x, temp[1].z___, const[4].z___, -const[4].w___; 19: MUL temp[2].x, temp[2].x___, temp[2].x___; 20: MUL temp[2].xyz, temp[2].xxx_, const[2].xyz_; 21: TEX temp[6].xyz, input[7].xy__, 2D[5]; 22: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 23: MAD temp[5].xyz, temp[2].xyz_, temp[6].xyz_, temp[5].xyz_; 24: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 25: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 26: ADD temp[2].x, none.1___, -input[2].x___; 27: MUL_SAT output[0].xyz, temp[5].xyz_, temp[2].xxx_; 28: MOV_SAT output[0].w, none.___1; Fragment Program: after 'dataflow swizzles' # 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[5].xy__, const[6].xy__; 3: MOV temp[0].x, temp[7].x___; 4: MAD temp[0].y, temp[7]._y__, const[3]._x__, const[3]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[4].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: CMP temp[2].w, (input[8] - temp[2]).___w, none.___1, none.___0; 11: MOV temp[8], -temp[2].wwww; 12: KIL temp[8]; 13: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 14: MOV temp[3].xyz, temp[2].xyz_; 15: TEX temp[2].xyz, input[4].xy__, 2D[3]; 16: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 17: TEX temp[4].xyz, input[6].xy__, 2D[4]; 18: MUL temp[5].xyz, temp[4].xyz_, const[1].xyz_; 19: MAD_SAT temp[2].x, temp[1].z___, const[4].z___, -const[4].w___; 20: MUL temp[2].x, temp[2].x___, temp[2].x___; 21: MUL temp[2].xyz, temp[2].xxx_, const[2].xyz_; 22: TEX temp[6].xyz, input[7].xy__, 2D[5]; 23: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 24: MAD temp[5].xyz, temp[2].xyz_, temp[6].xyz_, temp[5].xyz_; 25: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 26: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 27: ADD temp[2].x, none.1___, -input[2].x___; 28: MUL_SAT output[0].xyz, temp[5].xyz_, temp[2].xxx_; 29: MOV_SAT output[0].w, none.___1; CONST[3] = { 0.0625 1.0000 4.0000 3.0000 } Fragment Program: after 'dead constants' # 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[4].xy__, const[5].xy__; 3: MOV temp[0].x, temp[7].x___; 4: MAD temp[0].y, temp[7]._y__, const[2]._x__, const[2]._y__; 5: DP3 temp[1].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[1].x, |temp[1].x___|; 7: MUL temp[1].z, temp[1].__x_, input[8].__z_; 8: MUL temp[2].xy, temp[0].xy__, const[3].xx__; 9: TEX temp[2].w, temp[2].xy__, 2D[0]; 10: CMP temp[2].w, (input[8] - temp[2]).___w, none.___1, none.___0; 11: MOV temp[8], -temp[2].wwww; 12: KIL temp[8]; 13: TXP temp[2].xyz, input[5].xy_w, 2D[2]; 14: MOV temp[3].xyz, temp[2].xyz_; 15: TEX temp[2].xyz, input[4].xy__, 2D[3]; 16: MUL temp[3].xyz, temp[3].xyz_, temp[2].xyz_; 17: TEX temp[4].xyz, input[6].xy__, 2D[4]; 18: MUL temp[5].xyz, temp[4].xyz_, const[0].xyz_; 19: MAD_SAT temp[2].x, temp[1].z___, const[3].z___, -const[3].w___; 20: MUL temp[2].x, temp[2].x___, temp[2].x___; 21: MUL temp[2].xyz, temp[2].xxx_, const[1].xyz_; 22: TEX temp[6].xyz, input[7].xy__, 2D[5]; 23: ADD temp[6].xyz, temp[6].xyz_, temp[6].xyz_; 24: MAD temp[5].xyz, temp[2].xyz_, temp[6].xyz_, temp[5].xyz_; 25: MUL temp[5].xyz, temp[3].xyz_, temp[5].xyz_; 26: MUL temp[5].xyz, temp[5].xyz_, input[1].xyz_; 27: ADD temp[2].x, none.1___, -input[2].x___; 28: MUL_SAT output[0].xyz, temp[5].xyz_, temp[2].xxx_; 29: MOV_SAT output[0].w, none.___1; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[9].w, input[0].w___; 1: MUL temp[10].xy, input[0].xy__, temp[9].ww__; 2: MAD temp[11].xy, temp[10].xy__, const[4].xy__, const[5].xy__; 3: MOV temp[0].x, temp[11].x___; 4: MAD temp[0].y, temp[11]._y__, const[2]._x__, const[2]._y__; 5: DP3 temp[12].x, input[8].xyz_, input[8].xyz_; 6: RSQ temp[13].x, |temp[12].x___|; 7: MUL temp[14].z, temp[13].__x_, input[8].__z_; 8: MUL temp[15].xy, temp[0].xy__, const[3].xx__; 9: TEX temp[16].w, temp[15].xy__, 2D[0]; 10: CMP temp[17].w, (input[8] - temp[16]).___w, none.___1, none.___0; 11: MOV temp[18], -temp[17].wwww; 12: KIL temp[18]; 13: TXP temp[19].xyz, input[5].xy_w, 2D[2]; 14: MOV temp[20].xyz, temp[19].xyz_; 15: TEX temp[21].xyz, input[4].xy__, 2D[3]; 16: MUL temp[22].xyz, temp[20].xyz_, temp[21].xyz_; 17: TEX temp[23].xyz, input[6].xy__, 2D[4]; 18: MUL temp[24].xyz, temp[23].xyz_, const[0].xyz_; 19: MAD_SAT temp[25].x, temp[14].z___, const[3].z___, -const[3].w___; 20: MUL temp[26].x, temp[25].x___, temp[25].x___; 21: MUL temp[27].xyz, temp[26].xxx_, const[1].xyz_; 22: TEX temp[28].xyz, input[7].xy__, 2D[5]; 23: ADD temp[29].xyz, temp[28].xyz_, temp[28].xyz_; 24: MAD temp[30].xyz, temp[27].xyz_, temp[29].xyz_, temp[24].xyz_; 25: MUL temp[31].xyz, temp[22].xyz_, temp[30].xyz_; 26: MUL temp[32].xyz, temp[31].xyz_, input[1].xyz_; 27: ADD temp[33].x, none.1___, -input[2].x___; 28: MUL_SAT output[0].xyz, temp[32].xyz_, temp[33].xxx_; 29: MOV_SAT output[0].w, none.___1; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[9].w, src0.w 1: src0.xyz = input[0], src0.w = temp[9] MAD temp[10].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[10], src1.xyz = const[4], src2.xyz = const[5] MAD temp[11].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[11] MAD temp[0].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[11], src1.xyz = const[2] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = input[8] DP3 temp[12].x, src0.xyz, src0.xyz 6: src0.xyz = temp[12] REPL_ALPHA temp[13].x RSQ, |src0.x| 7: src0.xyz = temp[13], src1.xyz = input[8] MAD temp[14].z, src0.__x, src1.__z, src0.000 8: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[15].xy, src0.xy_, src1.xx_, src0.000 9: TEX temp[16].w, temp[15].xy__, 2D[0]; 10: src0.w = temp[16], src1.w = input[8], srcp.w = (src1 - src0) CMP temp[17].w, src0.0, src0.1, srcp.w 11: src0.w = temp[17] MAD temp[18].xyz, -src0.www, src0.111, src0.000 MAD temp[18].w, -src0.w, src0.1, src0.0 12: KIL temp[18]; 13: TXP temp[19].xyz, input[5].xy_w, 2D[2]; 14: src0.xyz = temp[19] MAD temp[20].xyz, src0.xyz, src0.111, src0.000 15: TEX temp[21].xyz, input[4].xy__, 2D[3]; 16: src0.xyz = temp[20], src1.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 17: TEX temp[23].xyz, input[6].xy__, 2D[4]; 18: src0.xyz = temp[23], src1.xyz = const[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 19: src0.xyz = temp[14], src0.w = const[3], src1.xyz = const[3] MAD_SAT temp[25].x, src0.z__, src1.z__, -src0.w__ 20: src0.xyz = temp[25] MAD temp[26].x, src0.x__, src0.x__, src0.000 21: src0.xyz = temp[26], src1.xyz = const[1] MAD temp[27].xyz, src0.xxx, src1.xyz, src0.000 22: TEX temp[28].xyz, input[7].xy__, 2D[5]; 23: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.xyz 24: src0.xyz = temp[27], src1.xyz = temp[29], src2.xyz = temp[24] MAD temp[30].xyz, src0.xyz, src1.xyz, src2.xyz 25: src0.xyz = temp[22], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xyz, src0.000 26: src0.xyz = temp[31], src1.xyz = input[1] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 27: src0.xyz = input[2] MAD temp[33].x, src0.1__, src0.111, -src0.x__ 28: src0.xyz = temp[32], src1.xyz = temp[33] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 29: MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[19].xyz, input[5].xy_w, 2D[2]; 2: TEX temp[21].xyz, input[4].xy__, 2D[3]; 3: TEX temp[23].xyz, input[6].xy__, 2D[4]; 4: TEX temp[28].xyz, input[7].xy__, 2D[5]; 5: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src0.1, src0.1, src0.0 6: src0.xyz = temp[23], src0.w = input[0], src1.xyz = const[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 RCP temp[9].w, src0.w 7: src0.xyz = input[0], src0.w = temp[9] MAD temp[10].xy, src0.xy_, src0.ww_, src0.000 8: src0.xyz = temp[10], src1.xyz = const[4], src2.xyz = const[5] MAD temp[11].xy, src0.xy_, src1.xy_, src2.xy_ 9: src0.xyz = temp[11], src1.xyz = const[2] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 10: src0.xyz = temp[11] MAD temp[0].x, src0.x__, src0.111, src0.000 11: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[15].xy, src0.xy_, src1.xx_, src0.000 12: src0.xyz = temp[19] MAD temp[20].xyz, src0.xyz, src0.111, src0.000 13: src0.xyz = temp[20], src1.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = input[2] MAD temp[33].x, src0.1__, src0.111, -src0.x__ 15: src0.xyz = input[8] DP3 temp[12].x, src0.xyz, src0.xyz 16: src0.xyz = temp[12] REPL_ALPHA temp[13].x RSQ, |src0.x| 17: src0.xyz = temp[13], src1.xyz = input[8] MAD temp[14].z, src0.__x, src1.__z, src0.000 18: src0.xyz = temp[14], src0.w = const[3], src1.xyz = const[3] MAD_SAT temp[25].x, src0.z__, src1.z__, -src0.w__ 19: src0.xyz = temp[25] MAD temp[26].x, src0.x__, src0.x__, src0.000 20: src0.xyz = temp[26], src1.xyz = const[1] MAD temp[27].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[27], src1.xyz = temp[29], src2.xyz = temp[24] MAD temp[30].xyz, src0.xyz, src1.xyz, src2.xyz 22: src0.xyz = temp[22], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[31], src1.xyz = input[1] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[32], src1.xyz = temp[33] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 25: BEGIN_TEX; 26: TEX temp[16].w, temp[15].xy__, 2D[0]; 27: src0.w = temp[16], src1.w = input[8], srcp.w = (src1 - src0) CMP temp[17].w, src0.0, src0.1, srcp.w 28: src0.w = temp[17] MAD temp[18].xyz, -src0.www, src0.111, src0.000 MAD temp[18].w, -src0.w, src0.1, src0.0 29: BEGIN_TEX; 30: KIL temp[18]; Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[19].xyz, input[5].xy_w, 2D[2]; 2: TEX temp[21].xyz, input[4].xy__, 2D[3]; 3: TEX temp[23].xyz, input[6].xy__, 2D[4]; 4: TEX temp[28].xyz, input[7].xy__, 2D[5]; 5: src0.xyz = temp[28] MAD temp[29].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src0.1, src0.1, src0.0 6: src0.xyz = temp[23], src0.w = input[0], src1.xyz = const[0] MAD temp[24].xyz, src0.xyz, src1.xyz, src0.000 RCP temp[9].w, src0.w 7: src0.xyz = input[0], src0.w = temp[9] MAD temp[10].xy, src0.xy_, src0.ww_, src0.000 8: src0.xyz = temp[10], src1.xyz = const[4], src2.xyz = const[5] MAD temp[11].xy, src0.xy_, src1.xy_, src2.xy_ 9: src0.xyz = temp[11], src1.xyz = const[2] MAD temp[0].y, src0._y_, src1._x_, src1._y_ 10: src0.xyz = temp[11] MAD temp[0].x, src0.x__, src0.111, src0.000 11: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[15].xy, src0.xy_, src1.xx_, src0.000 12: src0.xyz = temp[19] MAD temp[20].xyz, src0.xyz, src0.111, src0.000 13: src0.xyz = temp[20], src1.xyz = temp[21] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = input[2] MAD temp[33].x, src0.1__, src0.111, -src0.x__ 15: src0.xyz = input[8] DP3 temp[12].x, src0.xyz, src0.xyz 16: src0.xyz = temp[12] REPL_ALPHA temp[13].x RSQ, |src0.x| 17: src0.xyz = temp[13], src1.xyz = input[8] MAD temp[14].z, src0.__x, src1.__z, src0.000 18: src0.xyz = temp[14], src0.w = const[3], src1.xyz = const[3] MAD_SAT temp[25].x, src0.z__, src1.z__, -src0.w__ 19: src0.xyz = temp[25] MAD temp[26].x, src0.x__, src0.x__, src0.000 20: src0.xyz = temp[26], src1.xyz = const[1] MAD temp[27].xyz, src0.xxx, src1.xyz, src0.000 21: src0.xyz = temp[27], src1.xyz = temp[29], src2.xyz = temp[24] MAD temp[30].xyz, src0.xyz, src1.xyz, src2.xyz 22: src0.xyz = temp[22], src1.xyz = temp[30] MAD temp[31].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[31], src1.xyz = input[1] MAD temp[32].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[32], src1.xyz = temp[33] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 25: BEGIN_TEX; 26: TEX temp[16].w, temp[15].xy__, 2D[0]; 27: src0.w = temp[16], src1.w = input[8], srcp.w = (src1 - src0) CMP temp[17].w, src0.0, src0.1, srcp.w 28: src0.w = temp[17] MAD temp[18].xyz, -src0.www, src0.111, src0.000 MAD temp[18].w, -src0.w, src0.1, src0.0 29: BEGIN_TEX; 30: KIL temp[18]; Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[2].xyz, input[4].xy_w, 2D[2]; 2: TEX temp[3].xyz, input[3].xy__, 2D[3]; 3: TEX temp[4].xyz, input[5].xy__, 2D[4]; 4: TEX temp[5].xyz, input[6].xy__, 2D[5]; 5: src0.xyz = temp[5] MAD temp[5].xyz, src0.xyz, src0.111, src0.xyz MAD_SAT color[0].w, src0.1, src0.1, src0.0 6: src0.xyz = temp[4], src0.w = input[8], src1.xyz = const[0] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 RCP temp[0].w, src0.w 7: src0.xyz = input[8], src0.w = temp[0] MAD temp[6].xy, src0.xy_, src0.ww_, src0.00_ 8: src0.xyz = temp[6], src1.xyz = const[4], src2.xyz = const[5] MAD temp[1].yz, src0._xy, src1._xy, src2._xy 9: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[6].y, src0._z_, src1._x_, src1._y_ 10: src0.xyz = temp[1] MAD temp[6].x, src0.y__, src0.11_, src0.00_ 11: src0.xyz = temp[6], src1.xyz = const[3] MAD temp[6].xy, src0.xy_, src1.xx_, src0.00_ 12: src0.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, src0.000 13: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = input[1] MAD temp[1].x, src0.1__, src0.1__, -src0.x__ 15: src0.xyz = input[7] DP3 temp[1].y, src0.xyz, src0.xyz 16: src0.xyz = temp[1] REPL_ALPHA temp[1].y RSQ, |src0.y| 17: src0.xyz = temp[1], src1.xyz = input[7] MAD temp[1].y, src0._y_, src1._z_, src0._0_ 18: src0.xyz = temp[1], src0.w = const[3], src1.xyz = const[3] MAD_SAT temp[1].y, src0._y_, src1._z_, -src0._w_ 19: src0.xyz = temp[1] MAD temp[1].y, src0._y_, src0._y_, src0._0_ 20: src0.xyz = temp[1], src1.xyz = const[1] MAD temp[3].xyz, src0.yyy, src1.xyz, src0.000 21: src0.xyz = temp[3], src1.xyz = temp[5], src2.xyz = temp[4] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 22: src0.xyz = temp[2], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[2], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[0], src1.xyz = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 25: BEGIN_TEX; 26: TEX temp[0].w, temp[6].xy__, 2D[0]; 27: src0.w = temp[0], src1.w = input[7], srcp.w = (src1 - src0) CMP temp[0].w, src0.0, src0.1, srcp.w 28: src0.w = temp[0] MAD temp[0].xyz, -src0.www, src0.111, src0.000 MAD temp[0].w, -src0.w, src0.1, src0.0 29: BEGIN_TEX; 30: KIL temp[0]; pc=64************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 19, tex_end: 3 (code_addr: 004604c0) TEX: TXP t2, t4, texture[2] (00019084) TEX t3, t3, texture[3] (000098c3) TEX t4, t5, texture[4] (0000a105) TEX t5, t6, texture[5] (0000a946) 0: xyz: t5 t0 t0 bias-> t5.xyz (03940005) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t5.xyz 1.0 t5.xyz op: 00000a80 w: 1.0 1.0 0.0 op: 40040891 1: xyz: t4 c0 t0 bias-> t4.xyz (03900804) w: t8 t0 t0 bias-> t0.w (00800008) xyz: t4.xyz c0.xyz 0.0 op: 00050200 w: t8.w t4.x t4.x op: 05000009 2: xyz: t8 t0 t0 bias-> t6.xy (01980008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t0.www 0.0 op: 00050600 w: t8.x t8.x t8.x op: 00000000 3: xyz: t6 c4 c5 bias-> t1.yz (03065906) w: t0 t0 t0 bias-> (00000000) xyz: t6.zxy c4.zxy c5.zxy op: 00070d9a w: t6.x t6.x t6.x op: 00000000 4: xyz: t1 c2 t0 bias-> t6.y (01180881) w: t0 t0 t0 bias-> (00000000) xyz: t1.zzz c2.xxx c2.xyz op: 00010283 w: t1.x t1.x t1.x op: 00000000 5: xyz: t1 t0 t0 bias-> t6.x (00980001) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy 1.0 0.0 op: 00050a82 w: t1.x t1.x t1.x op: 00000000 6: xyz: t6 c3 t0 bias-> t6.xy (019808c6) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c3.xxx 0.0 op: 00050280 w: t6.x t6.x t6.x op: 00000000 7: 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 8: 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 9: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 1.0 -t1.xyz op: 00080a95 w: t1.x t1.x t1.x op: 00000000 10: xyz: t7 t0 t0 bias-> t1.y (01040007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t7.xyz t7.xxx op: 00804000 w: t7.x t7.x t7.x op: 00000000 11: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t1.xxx t1.xxx op: 05004081 w: |t1.y| t1.x t1.x op: 05800041 12: xyz: t1 t7 t0 bias-> t1.y (010401c1) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t7.zzz 0.0 op: 00050380 w: t1.x t1.x t1.x op: 00000000 13: xyz: t1 c3 t0 bias-> t1.y (010408c1) w: c3 t0 t0 bias-> (00000023) xyz: t1.xyz c3.zzz -c3.www op: 400b0380 w: t1.x t1.x t1.x op: 00000000 14: xyz: t1 t0 t0 bias-> t1.y (01040001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xyz 0.0 op: 00050000 w: t1.x t1.x t1.x op: 00000000 15: xyz: t1 c1 t0 bias-> t3.xyz (038c0841) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy c1.xyz 0.0 op: 00050202 w: t1.x t1.x t1.x op: 00000000 16: xyz: t3 t5 t4 bias-> t3.xyz (038c4143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xyz t4.xyz op: 00020200 w: t3.x t3.x t3.x op: 00000000 17: 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 18: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 19: xyz: t0 t1 t0 bias-> o0.xyz (1c000040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t1.xxx 0.0 op: 40050280 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 20, tex_offset: 4, alu_end: 1, tex_end: 0 (code_addr: 00004054) TEX: TEX t0, t6, texture[0] (00008006) 20: xyz: t0 t0 t0 bias-> (00000000) w: t0 t7 t0 sub-> t0.w (008001c0) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: 0.0 1.0 srcp.w op: 0323c890 21: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t0.www 1.0 0.0 op: 00050aac w: -t0.w 1.0 0.0 op: 000408a9 NODE 2: alu_offset: 22, tex_offset: 5, alu_end: 0, tex_end: 0 (code_addr: 00005016) TEX: KIL t0, t0, texture[0] (00010000) 22: 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