r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] 0: MOV OUT[0], IN[0] 1: MOV OUT[1], IN[1] 2: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 2: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: DRM version: 2.13.0, Name: ATI R420, ID: 0x4a50, GB: 4, Z: 1 r300: GART size: 61 MB, VRAM size: 256 MB r300: AA compression RAM: YES, Z compression RAM: YES, HiZ RAM: YES r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR DCL SAMP[0] 0: TEX OUT[0], IN[0], SAMP[0], 2D 1: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=0************************************* Hardware program ---------------- code_offset_ext: 00000000 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 vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL OUT[3], GENERIC[2] DCL OUT[4], GENERIC[3] DCL TEMP[0] IMM FLT32 { 0.0078, 1.0000, 0.0625, -0.0156} IMM FLT32 { 0.0005, -0.0078, 0.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL OUT[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].zw, IMM[0].yyyy 3: MUL TEMP[0].xw, IN[2].xxxx, IMM[0].zzzz 4: FRC TEMP[0].y, TEMP[0].xxxx 5: FLR TEMP[0].w, TEMP[0] 6: ADD TEMP[0].x, TEMP[0].yyyy, IMM[0].wwww 7: MAD OUT[1].x, IN[0], IMM[0].zzzz, TEMP[0] 8: MOV OUT[1].y, IN[0] 9: MOV OUT[1].z, IN[1] 10: MUL OUT[1].w, TEMP[0], IMM[1].xxxx 11: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].yyyy 12: MAD OUT[2].x, IN[0], IMM[0].zzzz, TEMP[0] 13: MOV OUT[2].y, IN[0] 14: MOV OUT[2].z, IN[1] 15: MUL OUT[2].w, TEMP[0], IMM[1].xxxx 16: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].zzzz 17: MAD OUT[3].x, IN[0], IMM[0].zzzz, TEMP[0] 18: MOV OUT[3].y, IN[0] 19: MOV OUT[3].z, IN[1] 20: MUL OUT[3].w, TEMP[0], IMM[1].xxxx 21: ADD TEMP[0].x, TEMP[0].yyyy, IMM[0].xxxx 22: MAD OUT[4].x, IN[0], IMM[0].zzzz, TEMP[0] 23: MOV OUT[4].y, IN[0] 24: MOV OUT[4].z, IN[1] 25: MUL OUT[4].w, TEMP[0], IMM[1].xxxx 26: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FRC temp[2].w, temp[0]; 6: ADD temp[0].w, temp[0], -temp[2]; 7: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 8: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 9: MOV output[1].y, input[0]; 10: MOV output[1].z, input[1]; 11: MUL output[1].w, temp[0], const[1].xxxx; 12: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 13: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 14: MOV output[2].y, input[0]; 15: MOV output[2].z, input[1]; 16: MUL output[2].w, temp[0], const[1].xxxx; 17: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 18: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 19: MOV output[3].y, input[0]; 20: MOV output[3].z, input[1]; 21: MUL output[3].w, temp[0], const[1].xxxx; 22: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 23: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 24: MOV output[4].y, input[0]; 25: MOV output[4].z, input[1]; 26: MUL output[4].w, temp[0], const[1].xxxx; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FRC temp[2].w, temp[0]; 6: ADD temp[0].w, temp[0], -temp[2]; 7: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 8: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 9: MOV output[1].y, input[0]; 10: MOV output[1].z, input[1]; 11: MUL output[1].w, temp[0], const[1].xxxx; 12: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 13: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 14: MOV output[2].y, input[0]; 15: MOV output[2].z, input[1]; 16: MUL output[2].w, temp[0], const[1].xxxx; 17: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 18: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 19: MOV output[3].y, input[0]; 20: MOV output[3].z, input[1]; 21: MUL output[3].w, temp[0], const[1].xxxx; 22: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 23: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 24: MOV output[4].y, input[0]; 25: MOV output[4].z, input[1]; 26: MUL output[4].w, temp[0], const[1].xxxx; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].zw, const[0].__yy; 3: MUL temp[0].xw, input[2].x__x, const[0].z__z; 4: FRC temp[0].y, temp[0]._x__; 5: FRC temp[2].w, temp[0].___w; 6: ADD temp[0].w, temp[0].___w, -temp[2].___w; 7: ADD temp[0].x, temp[0].y___, const[0].w___; 8: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 9: MOV output[1].y, input[0]._y__; 10: MOV output[1].z, input[1].__z_; 11: MUL output[1].w, temp[0].___w, const[1].___x; 12: ADD temp[0].x, temp[0].y___, const[1].y___; 13: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 14: MOV output[2].y, input[0]._y__; 15: MOV output[2].z, input[1].__z_; 16: MUL output[2].w, temp[0].___w, const[1].___x; 17: ADD temp[0].x, temp[0].y___, const[1].z___; 18: MAD output[3].x, input[0].x___, const[0].z___, temp[0].x___; 19: MOV output[3].y, input[0]._y__; 20: MOV output[3].z, input[1].__z_; 21: MUL output[3].w, temp[0].___w, const[1].___x; 22: ADD temp[0].x, temp[0].y___, const[0].x___; 23: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 24: MOV output[4].y, input[0]._y__; 25: MOV output[4].z, input[1].__z_; 26: MUL output[4].w, temp[0].___w, const[1].___x; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].zw, none.__11; 3: MUL temp[0].xw, input[2].x__x, const[0].z__z; 4: FRC temp[0].y, temp[0]._x__; 5: FRC temp[2].w, temp[0].___w; 6: ADD temp[0].w, temp[0].___w, -temp[2].___w; 7: ADD temp[0].x, temp[0].y___, const[0].w___; 8: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 9: MOV output[1].y, input[0]._y__; 10: MOV output[1].z, input[1].__z_; 11: MUL output[1].w, temp[0].___w, const[1].___x; 12: ADD temp[0].x, temp[0].y___, const[1].y___; 13: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 14: MOV output[2].y, input[0]._y__; 15: MOV output[2].z, input[1].__z_; 16: MUL output[2].w, temp[0].___w, const[1].___x; 17: MAD output[3].x, input[0].x___, const[0].z___, temp[0].y___; 18: MOV output[3].y, input[0]._y__; 19: MOV output[3].z, input[1].__z_; 20: MUL output[3].w, temp[0].___w, const[1].___x; 21: ADD temp[0].x, temp[0].y___, const[0].x___; 22: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 23: MOV output[4].y, input[0]._y__; 24: MOV output[4].z, input[1].__z_; 25: MUL output[4].w, temp[0].___w, const[1].___x; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[3]; 2: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].zw, none.__11; 4: MUL temp[0].xw, input[2].x__x, const[0].z__z; 5: FRC temp[0].y, temp[0]._x__; 6: FRC temp[2].w, temp[0].___w; 7: ADD temp[0].w, temp[0].___w, -temp[2].___w; 8: ADD temp[0].x, temp[0].y___, const[0].w___; 9: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 10: MOV output[1].y, input[0]._y__; 11: MOV output[1].z, input[1].__z_; 12: MUL output[1].w, temp[0].___w, const[1].___x; 13: ADD temp[0].x, temp[0].y___, const[1].y___; 14: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 15: MOV output[2].y, input[0]._y__; 16: MOV output[2].z, input[1].__z_; 17: MUL output[2].w, temp[0].___w, const[1].___x; 18: MAD output[3].x, input[0].x___, const[0].z___, temp[0].y___; 19: MOV output[3].y, input[0]._y__; 20: MOV output[3].z, input[1].__z_; 21: MUL output[3].w, temp[0].___w, const[1].___x; 22: ADD temp[0].x, temp[0].y___, const[0].x___; 23: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 24: MOV output[4].y, input[0]._y__; 25: MOV output[4].z, input[1].__z_; 26: MUL output[4].w, temp[0].___w, const[1].___x; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].zw, none.__11; 4: MUL temp[0].xw, input[2].x__x, const[0].z__z; 5: FRC temp[0].y, temp[0]._x__; 6: FRC temp[2].w, temp[0].___w; 7: ADD temp[0].w, temp[0].___w, -temp[2].___w; 8: ADD temp[0].x, temp[0].y___, const[0].w___; 9: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 10: MOV output[1].y, input[0]._y__; 11: MOV output[1].z, input[1].__z_; 12: MUL output[1].w, temp[0].___w, const[1].___x; 13: ADD temp[0].x, temp[0].y___, const[1].y___; 14: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 15: MOV output[2].y, input[0]._y__; 16: MOV output[2].z, input[1].__z_; 17: MUL output[2].w, temp[0].___w, const[1].___x; 18: MAD output[3].x, input[0].x___, const[0].z___, temp[0].y___; 19: MOV output[3].y, input[0]._y__; 20: MOV output[3].z, input[1].__z_; 21: MUL output[3].w, temp[0].___w, const[1].___x; 22: ADD temp[0].x, temp[0].y___, const[0].x___; 23: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 24: MOV output[4].y, input[0]._y__; 25: MOV output[4].z, input[1].__z_; 26: MUL output[4].w, temp[0].___w, const[1].___x; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; CONST[0] = { 0.0078 1.0000 0.0625 -0.0156 } CONST[1] = { 0.0005 -0.0078 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].zw, none.__11; 4: MUL temp[0].xw, input[2].x__x, const[0].z__z; 5: FRC temp[0].y, temp[0]._x__; 6: FRC temp[2].w, temp[0].___w; 7: ADD temp[0].w, temp[0].___w, -temp[2].___w; 8: ADD temp[0].x, temp[0].y___, const[0].w___; 9: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 10: MOV output[1].y, input[0]._y__; 11: MOV output[1].z, input[1].__z_; 12: MUL output[1].w, temp[0].___w, const[1].___x; 13: ADD temp[0].x, temp[0].y___, const[1].y___; 14: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 15: MOV output[2].y, input[0]._y__; 16: MOV output[2].z, input[1].__z_; 17: MUL output[2].w, temp[0].___w, const[1].___x; 18: MAD output[3].x, input[0].x___, const[0].z___, temp[0].y___; 19: MOV output[3].y, input[0]._y__; 20: MOV output[3].z, input[1].__z_; 21: MUL output[3].w, temp[0].___w, const[1].___x; 22: ADD temp[0].x, temp[0].y___, const[0].x___; 23: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 24: MOV output[4].y, input[0]._y__; 25: MOV output[4].z, input[1].__z_; 26: MUL output[4].w, temp[0].___w, const[1].___x; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Final vertex program code: 0: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 4: op: 0x00900002 dst: 0t op: VE_MULTIPLY src0: 0x003f0041 reg: 2i swiz: X/ U/ U/ X src1: 0x00bf4002 reg: 0c swiz: Z/ U/ U/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00200006 dst: 0t op: VE_FRACTION src0: 0x01f8e000 reg: 0t swiz: U/ X/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 6: op: 0x00804006 dst: 2t op: VE_FRACTION src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 7: op: 0x00800003 dst: 0t op: VE_ADD src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x1effe040 reg: 2t swiz: -U/-U/-U/-W src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 8: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U src1: 0x01ff6002 reg: 0c swiz: W/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 9: op: 0x00102204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U 10: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 11: op: 0x00402203 dst: 1o op: VE_ADD src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 12: op: 0x00802202 dst: 1o op: VE_MULTIPLY src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x003fe022 reg: 1c swiz: U/ U/ U/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 13: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U src1: 0x01ff2022 reg: 1c swiz: Y/ U/ U/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 14: op: 0x00104204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U 15: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 16: op: 0x00404203 dst: 2o op: VE_ADD src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 17: op: 0x00804202 dst: 2o op: VE_MULTIPLY src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x003fe022 reg: 1c swiz: U/ U/ U/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 18: op: 0x00106204 dst: 3o op: VE_MULTIPLY_ADD src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U 19: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 20: op: 0x00406203 dst: 3o op: VE_ADD src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 21: op: 0x00806202 dst: 3o op: VE_MULTIPLY src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x003fe022 reg: 1c swiz: U/ U/ U/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 22: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U src1: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 23: op: 0x00108204 dst: 4o op: VE_MULTIPLY_ADD src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U 24: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 25: op: 0x00408203 dst: 4o op: VE_ADD src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 26: op: 0x00808202 dst: 4o op: VE_MULTIPLY src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x003fe022 reg: 1c swiz: U/ U/ U/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 27: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 28: op: 0x00f0a203 dst: 5o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL OUT[3], GENERIC[2] DCL OUT[4], GENERIC[3] DCL TEMP[0] IMM FLT32 { 0.0156, 1.0000, 0.0625, -0.0156} IMM FLT32 { 0.0005, -0.0078, 0.0000, 0.0078} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL OUT[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].zw, IMM[0].yyyy 3: MUL TEMP[0].xw, IN[2].xxxx, IMM[0].zzzz 4: FRC TEMP[0].y, TEMP[0].xxxx 5: FLR TEMP[0].w, TEMP[0] 6: ADD TEMP[0].x, TEMP[0].yyyy, IMM[0].wwww 7: MAD OUT[1].x, IN[0], IMM[0].zzzz, TEMP[0] 8: MOV OUT[1].y, IN[0] 9: MOV OUT[1].z, IN[1] 10: MUL OUT[1].w, TEMP[0], IMM[1].xxxx 11: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].yyyy 12: MAD OUT[2].x, IN[0], IMM[0].zzzz, TEMP[0] 13: MOV OUT[2].y, IN[0] 14: MOV OUT[2].z, IN[1] 15: MUL OUT[2].w, TEMP[0], IMM[1].xxxx 16: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].zzzz 17: MAD OUT[3].x, IN[0], IMM[0].zzzz, TEMP[0] 18: MOV OUT[3].y, IN[0] 19: MOV OUT[3].z, IN[1] 20: MUL OUT[3].w, TEMP[0], IMM[1].xxxx 21: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].wwww 22: MAD OUT[4].x, IN[0], IMM[0].zzzz, TEMP[0] 23: MOV OUT[4].y, IN[0] 24: MOV OUT[4].z, IN[1] 25: MUL OUT[4].w, TEMP[0], IMM[1].xxxx 26: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FRC temp[2].w, temp[0]; 6: ADD temp[0].w, temp[0], -temp[2]; 7: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 8: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 9: MOV output[1].y, input[0]; 10: MOV output[1].z, input[1]; 11: MUL output[1].w, temp[0], const[1].xxxx; 12: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 13: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 14: MOV output[2].y, input[0]; 15: MOV output[2].z, input[1]; 16: MUL output[2].w, temp[0], const[1].xxxx; 17: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 18: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 19: MOV output[3].y, input[0]; 20: MOV output[3].z, input[1]; 21: MUL output[3].w, temp[0], const[1].xxxx; 22: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 23: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 24: MOV output[4].y, input[0]; 25: MOV output[4].z, input[1]; 26: MUL output[4].w, temp[0], const[1].xxxx; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FRC temp[2].w, temp[0]; 6: ADD temp[0].w, temp[0], -temp[2]; 7: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 8: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 9: MOV output[1].y, input[0]; 10: MOV output[1].z, input[1]; 11: MUL output[1].w, temp[0], const[1].xxxx; 12: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 13: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 14: MOV output[2].y, input[0]; 15: MOV output[2].z, input[1]; 16: MUL output[2].w, temp[0], const[1].xxxx; 17: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 18: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 19: MOV output[3].y, input[0]; 20: MOV output[3].z, input[1]; 21: MUL output[3].w, temp[0], const[1].xxxx; 22: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 23: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 24: MOV output[4].y, input[0]; 25: MOV output[4].z, input[1]; 26: MUL output[4].w, temp[0], const[1].xxxx; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].zw, const[0].__yy; 3: MUL temp[0].xw, input[2].x__x, const[0].z__z; 4: FRC temp[0].y, temp[0]._x__; 5: FRC temp[2].w, temp[0].___w; 6: ADD temp[0].w, temp[0].___w, -temp[2].___w; 7: ADD temp[0].x, temp[0].y___, const[0].w___; 8: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 9: MOV output[1].y, input[0]._y__; 10: MOV output[1].z, input[1].__z_; 11: MUL output[1].w, temp[0].___w, const[1].___x; 12: ADD temp[0].x, temp[0].y___, const[1].y___; 13: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 14: MOV output[2].y, input[0]._y__; 15: MOV output[2].z, input[1].__z_; 16: MUL output[2].w, temp[0].___w, const[1].___x; 17: ADD temp[0].x, temp[0].y___, const[1].z___; 18: MAD output[3].x, input[0].x___, const[0].z___, temp[0].x___; 19: MOV output[3].y, input[0]._y__; 20: MOV output[3].z, input[1].__z_; 21: MUL output[3].w, temp[0].___w, const[1].___x; 22: ADD temp[0].x, temp[0].y___, const[1].w___; 23: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 24: MOV output[4].y, input[0]._y__; 25: MOV output[4].z, input[1].__z_; 26: MUL output[4].w, temp[0].___w, const[1].___x; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].zw, none.__11; 3: MUL temp[0].xw, input[2].x__x, const[0].z__z; 4: FRC temp[0].y, temp[0]._x__; 5: FRC temp[2].w, temp[0].___w; 6: ADD temp[0].w, temp[0].___w, -temp[2].___w; 7: ADD temp[0].x, temp[0].y___, const[0].w___; 8: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 9: MOV output[1].y, input[0]._y__; 10: MOV output[1].z, input[1].__z_; 11: MUL output[1].w, temp[0].___w, const[1].___x; 12: ADD temp[0].x, temp[0].y___, const[1].y___; 13: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 14: MOV output[2].y, input[0]._y__; 15: MOV output[2].z, input[1].__z_; 16: MUL output[2].w, temp[0].___w, const[1].___x; 17: MAD output[3].x, input[0].x___, const[0].z___, temp[0].y___; 18: MOV output[3].y, input[0]._y__; 19: MOV output[3].z, input[1].__z_; 20: MUL output[3].w, temp[0].___w, const[1].___x; 21: ADD temp[0].x, temp[0].y___, const[1].w___; 22: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 23: MOV output[4].y, input[0]._y__; 24: MOV output[4].z, input[1].__z_; 25: MUL output[4].w, temp[0].___w, const[1].___x; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[3]; 2: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].zw, none.__11; 4: MUL temp[0].xw, input[2].x__x, const[0].z__z; 5: FRC temp[0].y, temp[0]._x__; 6: FRC temp[2].w, temp[0].___w; 7: ADD temp[0].w, temp[0].___w, -temp[2].___w; 8: ADD temp[0].x, temp[0].y___, const[0].w___; 9: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 10: MOV output[1].y, input[0]._y__; 11: MOV output[1].z, input[1].__z_; 12: MUL output[1].w, temp[0].___w, const[1].___x; 13: ADD temp[0].x, temp[0].y___, const[1].y___; 14: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 15: MOV output[2].y, input[0]._y__; 16: MOV output[2].z, input[1].__z_; 17: MUL output[2].w, temp[0].___w, const[1].___x; 18: MAD output[3].x, input[0].x___, const[0].z___, temp[0].y___; 19: MOV output[3].y, input[0]._y__; 20: MOV output[3].z, input[1].__z_; 21: MUL output[3].w, temp[0].___w, const[1].___x; 22: ADD temp[0].x, temp[0].y___, const[1].w___; 23: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 24: MOV output[4].y, input[0]._y__; 25: MOV output[4].z, input[1].__z_; 26: MUL output[4].w, temp[0].___w, const[1].___x; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].zw, none.__11; 4: MUL temp[0].xw, input[2].x__x, const[0].z__z; 5: FRC temp[0].y, temp[0]._x__; 6: FRC temp[2].w, temp[0].___w; 7: ADD temp[0].w, temp[0].___w, -temp[2].___w; 8: ADD temp[0].x, temp[0].y___, const[0].w___; 9: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 10: MOV output[1].y, input[0]._y__; 11: MOV output[1].z, input[1].__z_; 12: MUL output[1].w, temp[0].___w, const[1].___x; 13: ADD temp[0].x, temp[0].y___, const[1].y___; 14: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 15: MOV output[2].y, input[0]._y__; 16: MOV output[2].z, input[1].__z_; 17: MUL output[2].w, temp[0].___w, const[1].___x; 18: MAD output[3].x, input[0].x___, const[0].z___, temp[0].y___; 19: MOV output[3].y, input[0]._y__; 20: MOV output[3].z, input[1].__z_; 21: MUL output[3].w, temp[0].___w, const[1].___x; 22: ADD temp[0].x, temp[0].y___, const[1].w___; 23: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 24: MOV output[4].y, input[0]._y__; 25: MOV output[4].z, input[1].__z_; 26: MUL output[4].w, temp[0].___w, const[1].___x; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; CONST[0] = { 0.0156 1.0000 0.0625 -0.0156 } CONST[1] = { 0.0005 -0.0078 0.0000 0.0078 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[1].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].zw, none.__11; 4: MUL temp[0].xw, input[2].x__x, const[0].z__z; 5: FRC temp[0].y, temp[0]._x__; 6: FRC temp[2].w, temp[0].___w; 7: ADD temp[0].w, temp[0].___w, -temp[2].___w; 8: ADD temp[0].x, temp[0].y___, const[0].w___; 9: MAD output[1].x, input[0].x___, const[0].z___, temp[0].x___; 10: MOV output[1].y, input[0]._y__; 11: MOV output[1].z, input[1].__z_; 12: MUL output[1].w, temp[0].___w, const[1].___x; 13: ADD temp[0].x, temp[0].y___, const[1].y___; 14: MAD output[2].x, input[0].x___, const[0].z___, temp[0].x___; 15: MOV output[2].y, input[0]._y__; 16: MOV output[2].z, input[1].__z_; 17: MUL output[2].w, temp[0].___w, const[1].___x; 18: MAD output[3].x, input[0].x___, const[0].z___, temp[0].y___; 19: MOV output[3].y, input[0]._y__; 20: MOV output[3].z, input[1].__z_; 21: MUL output[3].w, temp[0].___w, const[1].___x; 22: ADD temp[0].x, temp[0].y___, const[1].w___; 23: MAD output[4].x, input[0].x___, const[0].z___, temp[0].x___; 24: MOV output[4].y, input[0]._y__; 25: MOV output[4].z, input[1].__z_; 26: MUL output[4].w, temp[0].___w, const[1].___x; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Final vertex program code: 0: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 4: op: 0x00900002 dst: 0t op: VE_MULTIPLY src0: 0x003f0041 reg: 2i swiz: X/ U/ U/ X src1: 0x00bf4002 reg: 0c swiz: Z/ U/ U/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00200006 dst: 0t op: VE_FRACTION src0: 0x01f8e000 reg: 0t swiz: U/ X/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 6: op: 0x00804006 dst: 2t op: VE_FRACTION src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 7: op: 0x00800003 dst: 0t op: VE_ADD src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x1effe040 reg: 2t swiz: -U/-U/-U/-W src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 8: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U src1: 0x01ff6002 reg: 0c swiz: W/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 9: op: 0x00102204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U 10: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 11: op: 0x00402203 dst: 1o op: VE_ADD src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 12: op: 0x00802202 dst: 1o op: VE_MULTIPLY src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x003fe022 reg: 1c swiz: U/ U/ U/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 13: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U src1: 0x01ff2022 reg: 1c swiz: Y/ U/ U/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 14: op: 0x00104204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U 15: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 16: op: 0x00404203 dst: 2o op: VE_ADD src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 17: op: 0x00804202 dst: 2o op: VE_MULTIPLY src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x003fe022 reg: 1c swiz: U/ U/ U/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 18: op: 0x00106204 dst: 3o op: VE_MULTIPLY_ADD src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U 19: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 20: op: 0x00406203 dst: 3o op: VE_ADD src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 21: op: 0x00806202 dst: 3o op: VE_MULTIPLY src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x003fe022 reg: 1c swiz: U/ U/ U/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 22: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U src1: 0x01ff6022 reg: 1c swiz: W/ U/ U/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 23: op: 0x00108204 dst: 4o op: VE_MULTIPLY_ADD src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U 24: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 25: op: 0x00408203 dst: 4o op: VE_ADD src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 26: op: 0x00808202 dst: 4o op: VE_MULTIPLY src0: 0x00ffe000 reg: 0t swiz: U/ U/ U/ W src1: 0x003fe022 reg: 1c swiz: U/ U/ U/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 27: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 28: op: 0x00f0a203 dst: 5o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL TEMP[0] IMM FLT32 { 0.0078, 1.0000, 0.0039, 0.0000} 0: MAD OUT[0].xy, IN[1], IMM[0].xxxx, IMM[0].xxxx 1: MOV OUT[0].zw, IMM[0].yyyy 2: MUL TEMP[0].xy, IN[1], IMM[0].xxxx 3: MOV OUT[1].x, TEMP[0].xxxx 4: MOV OUT[1].y, TEMP[0].yyyy 5: ADD OUT[2].x, TEMP[0].xxxx, IMM[0].zzzz 6: MOV OUT[2].y, TEMP[0].yyyy 7: END Vertex Program: before compilation # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[1].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[1].zw, const[0].__yy; 2: MUL temp[0].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[0].x___; 4: MOV output[1].y, temp[0]._y__; 5: ADD output[2].x, temp[0].x___, const[0].z___; 6: MOV output[2].y, temp[0]._y__; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[1].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[1].zw, none.__11; 2: MUL temp[0].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[0].x___; 4: MOV output[1].y, temp[0]._y__; 5: ADD output[2].x, temp[0].x___, const[0].z___; 6: MOV output[2].y, temp[0]._y__; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MAD temp[1].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[1].zw, none.__11; 2: MUL temp[0].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[0].x___; 4: MOV output[1].y, temp[0]._y__; 5: ADD output[2].x, temp[0].x___, const[0].z___; 6: MOV output[2].y, temp[0]._y__; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MAD temp[0].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[0].zw, none.__11; 2: MUL temp[1].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[1].x___; 4: MOV output[1].y, temp[1]._y__; 5: ADD output[2].x, temp[1].x___, const[0].z___; 6: MOV output[2].y, temp[1]._y__; 7: MOV output[0], temp[0]; 8: MOV output[3], temp[0]; CONST[0] = { 0.0078 1.0000 0.0039 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MAD temp[0].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[0].zw, none.__11; 2: MUL temp[1].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[1].x___; 4: MOV output[1].y, temp[1]._y__; 5: ADD output[2].x, temp[1].x___, const[0].z___; 6: MOV output[2].y, temp[1]._y__; 7: MOV output[0], temp[0]; 8: MOV output[3], temp[0]; Final vertex program code: 0: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01f80002 reg: 0c swiz: X/ X/ U/ U 1: op: 0x00c00003 dst: 0t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00102203 dst: 1o op: VE_ADD src0: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 4: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x01f9e020 reg: 1t swiz: U/ Y/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 5: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x01f9e020 reg: 1t swiz: U/ Y/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 7: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL OUT[3], GENERIC[2] DCL OUT[4], GENERIC[3] DCL TEMP[0..1] IMM FLT32 { 0.0078, 1.0000, 0.0039, 0.0000} IMM FLT32 { 0.5000, 0.0000, 0.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MUL TEMP[1].xy, IN[1], IMM[0].xxxx 5: MOV OUT[1].x, TEMP[1].xxxx 6: MOV OUT[1].y, TEMP[0].yyyy 7: ADD OUT[2].x, TEMP[1].xxxx, IMM[0].zzzz 8: MOV OUT[2].y, TEMP[0].yyyy 9: MOV OUT[3].x, IMM[0].wwww 10: MOV OUT[3].y, IN[0].xxxx 11: ADD OUT[4].x, IMM[0].wwww, IMM[1].xxxx 12: MOV OUT[4].y, IN[0].xxxx 13: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[2].xy, temp[0].xy__; 3: MOV temp[2].zw, const[0].__yy; 4: MUL temp[1].x, input[1].x___, const[0].x___; 5: MOV output[1].x, temp[1].x___; 6: MOV output[1].y, temp[0]._y__; 7: ADD output[2].x, temp[1].x___, const[0].z___; 8: MOV output[2].y, temp[0]._y__; 9: MOV output[3].x, const[0].w___; 10: MOV output[3].y, input[0]._x__; 11: ADD output[4].x, const[0].w___, const[1].x___; 12: MOV output[4].y, input[0]._x__; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[2].xy, temp[0].xy__; 3: MOV temp[2].zw, none.__11; 4: MUL temp[1].x, input[1].x___, const[0].x___; 5: MOV output[1].x, temp[1].x___; 6: MOV output[1].y, temp[0]._y__; 7: ADD output[2].x, temp[1].x___, const[0].z___; 8: MOV output[2].y, temp[0]._y__; 9: MOV output[3].x, none.0___; 10: MOV output[3].y, input[0]._x__; 11: MOV output[4].x, const[1].x___; 12: MOV output[4].y, input[0]._x__; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[3]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[2].xy, temp[0].xy__; 4: MOV temp[2].zw, none.__11; 5: MUL temp[1].x, input[1].x___, const[0].x___; 6: MOV output[1].x, temp[1].x___; 7: MOV output[1].y, temp[0]._y__; 8: ADD output[2].x, temp[1].x___, const[0].z___; 9: MOV output[2].y, temp[0]._y__; 10: MOV output[3].x, none.0___; 11: MOV output[3].y, input[0]._x__; 12: MOV output[4].x, const[1].x___; 13: MOV output[4].y, input[0]._x__; 14: MOV output[0], temp[2]; 15: MOV output[5], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MUL temp[2].x, input[1].x___, const[0].x___; 6: MOV output[1].x, temp[2].x___; 7: MOV output[1].y, temp[0]._y__; 8: ADD output[2].x, temp[2].x___, const[0].z___; 9: MOV output[2].y, temp[0]._y__; 10: MOV output[3].x, none.0___; 11: MOV output[3].y, input[0]._x__; 12: MOV output[4].x, const[1].x___; 13: MOV output[4].y, input[0]._x__; 14: MOV output[0], temp[1]; 15: MOV output[5], temp[1]; CONST[0] = { 0.0078 1.0000 0.0039 0.0000 } CONST[1] = { 0.5000 0.0000 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MUL temp[2].x, input[1].x___, const[0].x___; 6: MOV output[1].x, temp[2].x___; 7: MOV output[1].y, temp[0]._y__; 8: ADD output[2].x, temp[2].x___, const[0].z___; 9: MOV output[2].y, temp[0]._y__; 10: MOV output[3].x, none.0___; 11: MOV output[3].y, input[0]._x__; 12: MOV output[4].x, const[1].x___; 13: MOV output[4].y, input[0]._x__; 14: MOV output[0], temp[1]; 15: MOV output[5], temp[1]; Final vertex program code: 0: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 4: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00104002 dst: 2t op: VE_MULTIPLY src0: 0x01ff0021 reg: 1i swiz: X/ U/ U/ U src1: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00102203 dst: 1o op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 7: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x01f9e000 reg: 0t swiz: U/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 9: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x01f9e000 reg: 0t swiz: U/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 10: op: 0x00106203 dst: 3o op: VE_ADD src0: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 11: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x01f8e001 reg: 0i swiz: U/ X/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 12: op: 0x00108203 dst: 4o op: VE_ADD src0: 0x01ff0022 reg: 1c swiz: X/ U/ U/ U src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 13: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x01f8e001 reg: 0i swiz: U/ X/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 14: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 15: op: 0x00f0a203 dst: 5o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL TEMP[0] IMM FLT32 { 0.0156, 1.0000, 0.0078, 0.0000} 0: MAD OUT[0].xy, IN[1], IMM[0].xxxx, IMM[0].xxxx 1: MOV OUT[0].zw, IMM[0].yyyy 2: MUL TEMP[0].xy, IN[1], IMM[0].xxxx 3: MOV OUT[1].x, TEMP[0].xxxx 4: MOV OUT[1].y, TEMP[0].yyyy 5: ADD OUT[2].x, TEMP[0].xxxx, IMM[0].zzzz 6: MOV OUT[2].y, TEMP[0].yyyy 7: END Vertex Program: before compilation # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[1].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[1].zw, const[0].__yy; 2: MUL temp[0].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[0].x___; 4: MOV output[1].y, temp[0]._y__; 5: ADD output[2].x, temp[0].x___, const[0].z___; 6: MOV output[2].y, temp[0]._y__; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[1].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[1].zw, none.__11; 2: MUL temp[0].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[0].x___; 4: MOV output[1].y, temp[0]._y__; 5: ADD output[2].x, temp[0].x___, const[0].z___; 6: MOV output[2].y, temp[0]._y__; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MAD temp[1].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[1].zw, none.__11; 2: MUL temp[0].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[0].x___; 4: MOV output[1].y, temp[0]._y__; 5: ADD output[2].x, temp[0].x___, const[0].z___; 6: MOV output[2].y, temp[0]._y__; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MAD temp[0].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[0].zw, none.__11; 2: MUL temp[1].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[1].x___; 4: MOV output[1].y, temp[1]._y__; 5: ADD output[2].x, temp[1].x___, const[0].z___; 6: MOV output[2].y, temp[1]._y__; 7: MOV output[0], temp[0]; 8: MOV output[3], temp[0]; CONST[0] = { 0.0156 1.0000 0.0078 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MAD temp[0].xy, input[1].xy__, const[0].xx__, const[0].xx__; 1: MOV temp[0].zw, none.__11; 2: MUL temp[1].xy, input[1].xy__, const[0].xx__; 3: MOV output[1].x, temp[1].x___; 4: MOV output[1].y, temp[1]._y__; 5: ADD output[2].x, temp[1].x___, const[0].z___; 6: MOV output[2].y, temp[1]._y__; 7: MOV output[0], temp[0]; 8: MOV output[3], temp[0]; Final vertex program code: 0: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01f80002 reg: 0c swiz: X/ X/ U/ U 1: op: 0x00c00003 dst: 0t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00102203 dst: 1o op: VE_ADD src0: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 4: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x01f9e020 reg: 1t swiz: U/ Y/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 5: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x01f9e020 reg: 1t swiz: U/ Y/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 7: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL OUT[3], GENERIC[2] DCL OUT[4], GENERIC[3] DCL TEMP[0..1] IMM FLT32 { 0.0156, 1.0000, 0.0078, 0.0000} IMM FLT32 { 0.5000, 0.0000, 0.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MUL TEMP[1].xy, IN[1], IMM[0].xxxx 5: MOV OUT[1].x, TEMP[1].xxxx 6: MOV OUT[1].y, TEMP[0].yyyy 7: ADD OUT[2].x, TEMP[1].xxxx, IMM[0].zzzz 8: MOV OUT[2].y, TEMP[0].yyyy 9: MOV OUT[3].x, IMM[0].wwww 10: MOV OUT[3].y, IN[0].xxxx 11: ADD OUT[4].x, IMM[0].wwww, IMM[1].xxxx 12: MOV OUT[4].y, IN[0].xxxx 13: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[2].xy, temp[0].xy__; 3: MOV temp[2].zw, const[0].__yy; 4: MUL temp[1].x, input[1].x___, const[0].x___; 5: MOV output[1].x, temp[1].x___; 6: MOV output[1].y, temp[0]._y__; 7: ADD output[2].x, temp[1].x___, const[0].z___; 8: MOV output[2].y, temp[0]._y__; 9: MOV output[3].x, const[0].w___; 10: MOV output[3].y, input[0]._x__; 11: ADD output[4].x, const[0].w___, const[1].x___; 12: MOV output[4].y, input[0]._x__; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[2].xy, temp[0].xy__; 3: MOV temp[2].zw, none.__11; 4: MUL temp[1].x, input[1].x___, const[0].x___; 5: MOV output[1].x, temp[1].x___; 6: MOV output[1].y, temp[0]._y__; 7: ADD output[2].x, temp[1].x___, const[0].z___; 8: MOV output[2].y, temp[0]._y__; 9: MOV output[3].x, none.0___; 10: MOV output[3].y, input[0]._x__; 11: MOV output[4].x, const[1].x___; 12: MOV output[4].y, input[0]._x__; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[3]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[2].xy, temp[0].xy__; 4: MOV temp[2].zw, none.__11; 5: MUL temp[1].x, input[1].x___, const[0].x___; 6: MOV output[1].x, temp[1].x___; 7: MOV output[1].y, temp[0]._y__; 8: ADD output[2].x, temp[1].x___, const[0].z___; 9: MOV output[2].y, temp[0]._y__; 10: MOV output[3].x, none.0___; 11: MOV output[3].y, input[0]._x__; 12: MOV output[4].x, const[1].x___; 13: MOV output[4].y, input[0]._x__; 14: MOV output[0], temp[2]; 15: MOV output[5], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MUL temp[2].x, input[1].x___, const[0].x___; 6: MOV output[1].x, temp[2].x___; 7: MOV output[1].y, temp[0]._y__; 8: ADD output[2].x, temp[2].x___, const[0].z___; 9: MOV output[2].y, temp[0]._y__; 10: MOV output[3].x, none.0___; 11: MOV output[3].y, input[0]._x__; 12: MOV output[4].x, const[1].x___; 13: MOV output[4].y, input[0]._x__; 14: MOV output[0], temp[1]; 15: MOV output[5], temp[1]; CONST[0] = { 0.0156 1.0000 0.0078 0.0000 } CONST[1] = { 0.5000 0.0000 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MUL temp[2].x, input[1].x___, const[0].x___; 6: MOV output[1].x, temp[2].x___; 7: MOV output[1].y, temp[0]._y__; 8: ADD output[2].x, temp[2].x___, const[0].z___; 9: MOV output[2].y, temp[0]._y__; 10: MOV output[3].x, none.0___; 11: MOV output[3].y, input[0]._x__; 12: MOV output[4].x, const[1].x___; 13: MOV output[4].y, input[0]._x__; 14: MOV output[0], temp[1]; 15: MOV output[5], temp[1]; Final vertex program code: 0: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 4: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00104002 dst: 2t op: VE_MULTIPLY src0: 0x01ff0021 reg: 1i swiz: X/ U/ U/ U src1: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00102203 dst: 1o op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 7: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x01f9e000 reg: 0t swiz: U/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 9: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x01f9e000 reg: 0t swiz: U/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 10: op: 0x00106203 dst: 3o op: VE_ADD src0: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 11: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x01f8e001 reg: 0i swiz: U/ X/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 12: op: 0x00108203 dst: 4o op: VE_ADD src0: 0x01ff0022 reg: 1c swiz: X/ U/ U/ U src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 13: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x01f8e001 reg: 0i swiz: U/ X/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 14: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 15: op: 0x00f0a203 dst: 5o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL TEMP[0] IMM FLT32 { 0.0156, 1.0000, 0.0005, 0.2500} IMM FLT32 { 0.0005, 0.2500, 0.0039, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MAD OUT[1].xy, IMM[1].xxyz, IN[2], TEMP[0] 5: MUL OUT[1].zw, IMM[1].xxyz, IN[2] 6: MAD OUT[2].xy, IMM[1].xxyz, IN[3], TEMP[0] 7: MUL OUT[2].zw, IMM[1].xxyz, IN[3] 8: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].xy, temp[0].xy__; 3: MOV temp[1].zw, const[0].__yy; 4: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 5: MUL output[1].zw, const[1].__yz, input[2].__zw; 6: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 7: MUL output[2].zw, const[1].__yz, input[3].__zw; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].xy, temp[0].xy__; 3: MOV temp[1].zw, none.__11; 4: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 5: MUL output[1].zw, const[1].__yz, input[2].__zw; 6: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 7: MUL output[2].zw, const[1].__yz, input[3].__zw; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[2], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[2]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 6: MUL output[1].zw, const[1].__yz, input[2].__zw; 7: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 8: MUL output[2].zw, const[1].__yz, input[3].__zw; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 6: MUL output[1].zw, const[1].__yz, input[2].__zw; 7: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 8: MUL output[2].zw, const[1].__yz, input[3].__zw; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; CONST[0] = { 0.0156 1.0000 0.0005 0.2500 } CONST[1] = { 0.0005 0.2500 0.0039 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 6: MUL output[1].zw, const[1].__yz, input[2].__zw; 7: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 8: MUL output[2].zw, const[1].__yz, input[3].__zw; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; Final vertex program code: 0: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 4: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00302204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x01f80022 reg: 1c swiz: X/ X/ U/ U src1: 0x01f90041 reg: 2i swiz: X/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 6: op: 0x00c02202 dst: 1o op: VE_MULTIPLY src0: 0x008fe022 reg: 1c swiz: U/ U/ Y/ Z src1: 0x00d7e041 reg: 2i swiz: U/ U/ Z/ W src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 7: op: 0x00304204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x01f80022 reg: 1c swiz: X/ X/ U/ U src1: 0x01f90061 reg: 3i swiz: X/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 8: op: 0x00c04202 dst: 2o op: VE_MULTIPLY src0: 0x008fe022 reg: 1c swiz: U/ U/ Y/ Z src1: 0x00d7e061 reg: 3i swiz: U/ U/ Z/ W src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 9: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 10: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL OUT[3], GENERIC[2] DCL OUT[4], GENERIC[3] DCL TEMP[0..2] IMM FLT32 { 0.0078, 1.0000, 2.0000, 0.0000} IMM FLT32 { 0.5000, 0.0039, -1.0000, -0.0078} IMM FLT32 { -0.0078, 0.0000, 0.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MUL TEMP[0].z, IN[0].xxxx, IMM[0].zzzz 5: MUL TEMP[2].xy, IN[1], IMM[0].xxxx 6: MOV OUT[1].x, IMM[0].wwww 7: MOV OUT[1].y, IN[0].yyyy 8: ADD OUT[2].x, IMM[0].wwww, IMM[1].xxxx 9: MOV OUT[2].y, IN[0].yyyy 10: MOV OUT[3].y, TEMP[2].yyyy 11: MOV OUT[3].x, TEMP[0].xxxx 12: ADD OUT[4].y, TEMP[2].yyyy, IMM[1].yyyy 13: MOV OUT[4].x, TEMP[0].xxxx 14: MOV OUT[3].z, TEMP[0] 15: MOV OUT[4].z, TEMP[0] 16: MUL OUT[1].z, IN[1].zzzz, IMM[1].xxxx 17: MOV OUT[1].w, IMM[1].zzzz 18: IF IN[1].wwww :25 19: CMP TEMP[1].xy, -IN[0].yyyy, IMM[0].wxww, IMM[2].xyxx 20: MUL TEMP[1].z, IN[1].yyyy, IMM[1].xxxx 21: FRC TEMP[1].z, TEMP[1] 22: CMP TEMP[1].y, -TEMP[1].zzzz, TEMP[1].xxxx, TEMP[1].yyyy 23: ADD OUT[0].y, TEMP[0], TEMP[1] 24: CMP OUT[1].w, -TEMP[1].zzzz, IMM[0].wwww, IMM[0].yyyy 25: ENDIF 26: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[1].x, const[0].wwww; 7: MOV output[1].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: IF input[1].wwww; 19: CMP temp[1].xy, -input[0].yyyy, const[0].wxww, const[2].xyxx; 20: MUL temp[1].z, input[1].yyyy, const[1].xxxx; 21: FRC temp[1].z, temp[1]; 22: CMP temp[1].y, -temp[1].zzzz, temp[1].xxxx, temp[1].yyyy; 23: ADD temp[3].y, temp[0], temp[1]; 24: CMP output[1].w, -temp[1].zzzz, const[0].wwww, const[0].yyyy; 25: ENDIF; 26: MOV output[0], temp[3]; 27: MOV output[5], temp[3]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV temp[5].x, const[0].wwww; 7: MOV temp[5].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 17: MOV temp[5].w, const[1].zzzz; 18: MOV temp[4].x, input[1].wwww; 19: MOV temp[6], temp[1]; 20: MOV temp[7], temp[3]; 21: MOV temp[8], temp[5]; 22: CMP temp[6].xy, -input[0].yyyy, const[0].wxww, const[2].xyxx; 23: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 24: FRC temp[6].z, temp[6]; 25: CMP temp[6].y, -temp[6].zzzz, temp[6].xxxx, temp[6].yyyy; 26: ADD temp[7].y, temp[0], temp[6]; 27: CMP temp[8].w, -temp[6].zzzz, const[0].wwww, const[0].yyyy; 28: CMP temp[5], -|temp[4].xxxx|, temp[8], temp[5]; 29: CMP temp[3], -|temp[4].xxxx|, temp[7], temp[3]; 30: CMP temp[1], -|temp[4].xxxx|, temp[6], temp[1]; 31: MOV output[0], temp[3]; 32: MOV output[5], temp[3]; 33: MOV output[1], temp[5]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV temp[5].x, const[0].wwww; 7: MOV temp[5].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 17: MOV temp[5].w, const[1].zzzz; 18: MOV temp[4].x, input[1].wwww; 19: MOV temp[6], temp[1]; 20: MOV temp[7], temp[3]; 21: MOV temp[8], temp[5]; 22: CMP temp[6].xy, -input[0].yyyy, const[0].wxww, const[2].xyxx; 23: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 24: FRC temp[6].z, temp[6]; 25: CMP temp[6].y, -temp[6].zzzz, temp[6].xxxx, temp[6].yyyy; 26: ADD temp[7].y, temp[0], temp[6]; 27: CMP temp[8].w, -temp[6].zzzz, const[0].wwww, const[0].yyyy; 28: CMP temp[5], -|temp[4].xxxx|, temp[8], temp[5]; 29: CMP temp[3], -|temp[4].xxxx|, temp[7], temp[3]; 30: CMP temp[1], -|temp[4].xxxx|, temp[6], temp[1]; 31: MOV output[0], temp[3]; 32: MOV output[5], temp[3]; 33: MOV output[1], temp[5]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV temp[5].x, const[0].wwww; 7: MOV temp[5].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 17: MOV temp[5].w, const[1].zzzz; 18: MOV temp[4].x, input[1].wwww; 19: MOV temp[6], temp[1]; 20: MOV temp[7], temp[3]; 21: MOV temp[8], temp[5]; 22: SLT temp[6].xy, -input[0].yyyy, none.0000; 23: ADD temp[9].xy, const[0].wxww, -const[2].xyxx; 24: MAD temp[6].xy, temp[6], temp[9], const[2].xyxx; 25: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 26: FRC temp[6].z, temp[6]; 27: SLT temp[10].y, -temp[6].zzzz, none.0000; 28: ADD temp[11].y, temp[6].xxxx, -temp[6].yyyy; 29: MAD temp[6].y, temp[10], temp[11], temp[6].yyyy; 30: ADD temp[7].y, temp[0], temp[6]; 31: SLT temp[8].w, -temp[6].zzzz, none.0000; 32: ADD temp[12].w, const[0].wwww, -const[0].yyyy; 33: MAD temp[8].w, temp[8], temp[12], const[0].yyyy; 34: SLT temp[13], -|temp[4].xxxx|, none.0000; 35: ADD temp[14], temp[8], -temp[5]; 36: MAD temp[5], temp[13], temp[14], temp[5]; 37: SLT temp[15], -|temp[4].xxxx|, none.0000; 38: ADD temp[16], temp[7], -temp[3]; 39: MAD temp[3], temp[15], temp[16], temp[3]; 40: SLT temp[17], -|temp[4].xxxx|, none.0000; 41: ADD temp[18], temp[6], -temp[1]; 42: MAD temp[1], temp[17], temp[18], temp[1]; 43: MOV output[0], temp[3]; 44: MOV output[5], temp[3]; 45: MOV output[1], temp[5]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV temp[5].x, const[0].wwww; 7: MOV temp[5].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 17: MOV temp[5].w, const[1].zzzz; 18: MOV temp[4].x, input[1].wwww; 19: MOV temp[6], temp[1]; 20: MOV temp[7], temp[3]; 21: MOV temp[8], temp[5]; 22: SLT temp[6].xy, -input[0].yyyy, none.0000; 23: ADD temp[9].xy, const[0].wxww, -const[2].xyxx; 24: MAD temp[6].xy, temp[6], temp[9], const[2].xyxx; 25: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 26: FRC temp[6].z, temp[6]; 27: SLT temp[10].y, -temp[6].zzzz, none.0000; 28: ADD temp[11].y, temp[6].xxxx, -temp[6].yyyy; 29: MAD temp[6].y, temp[10], temp[11], temp[6].yyyy; 30: ADD temp[7].y, temp[0], temp[6]; 31: SLT temp[8].w, -temp[6].zzzz, none.0000; 32: ADD temp[12].w, const[0].wwww, -const[0].yyyy; 33: MAD temp[8].w, temp[8], temp[12], const[0].yyyy; 34: MAX temp[19], -temp[4].xxxx, temp[4].xxxx; 35: SLT temp[13], temp[19], none.0000; 36: ADD temp[14], temp[8], -temp[5]; 37: MAD temp[5], temp[13], temp[14], temp[5]; 38: MAX temp[20], -temp[4].xxxx, temp[4].xxxx; 39: SLT temp[15], temp[20], none.0000; 40: ADD temp[16], temp[7], -temp[3]; 41: MAD temp[3], temp[15], temp[16], temp[3]; 42: MAX temp[21], -temp[4].xxxx, temp[4].xxxx; 43: SLT temp[17], temp[21], none.0000; 44: ADD temp[18], temp[6], -temp[1]; 45: MAD temp[1], temp[17], temp[18], temp[1]; 46: MOV output[0], temp[3]; 47: MOV output[5], temp[3]; 48: MOV output[1], temp[5]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[3].xy, temp[0].xy__; 3: MOV temp[3].zw, const[0].__yy; 4: MUL temp[0].z, input[0].__x_, const[0].__z_; 5: MUL temp[2].y, input[1]._y__, const[0]._x__; 6: MOV temp[5].x, const[0].w___; 7: MOV temp[5].y, input[0]._y__; 8: ADD output[2].x, const[0].w___, const[1].x___; 9: MOV output[2].y, input[0]._y__; 10: MOV output[3].y, temp[2]._y__; 11: MOV output[3].x, temp[0].x___; 12: ADD output[4].y, temp[2]._y__, const[1]._y__; 13: MOV output[4].x, temp[0].x___; 14: MOV output[3].z, temp[0].__z_; 15: MOV output[4].z, temp[0].__z_; 16: MUL temp[5].z, input[1].__z_, const[1].__x_; 17: MOV temp[5].w, const[1].___z; 18: MOV temp[4].x, input[1].w___; 19: MOV temp[7].xzw, temp[3].x_zw; 20: MOV temp[8].xyz, temp[5].xyz_; 21: SLT temp[6].xy, -input[0].yy__, none.00__; 22: ADD temp[9].xy, const[0].wx__, -const[2].xy__; 23: MAD temp[6].xy, temp[6].xy__, temp[9].xy__, const[2].xy__; 24: MUL temp[6].z, input[1].__y_, const[1].__x_; 25: FRC temp[6].z, temp[6].__z_; 26: SLT temp[10].y, -temp[6]._z__, none._0__; 27: ADD temp[11].y, temp[6]._x__, -temp[6]._y__; 28: MAD temp[6].y, temp[10]._y__, temp[11]._y__, temp[6]._y__; 29: ADD temp[7].y, temp[0]._y__, temp[6]._y__; 30: SLT temp[8].w, -temp[6].___z, none.___0; 31: ADD temp[12].w, const[0].___w, -const[0].___y; 32: MAD temp[8].w, temp[8].___w, temp[12].___w, const[0].___y; 33: MAX temp[19], -temp[4].xxxx, temp[4].xxxx; 34: SLT temp[13], temp[19], none.0000; 35: ADD temp[14], temp[8], -temp[5]; 36: MAD temp[5], temp[13], temp[14], temp[5]; 37: MAX temp[20], -temp[4].xxxx, temp[4].xxxx; 38: SLT temp[15], temp[20], none.0000; 39: ADD temp[16], temp[7], -temp[3]; 40: MAD temp[3], temp[15], temp[16], temp[3]; 41: MOV output[0], temp[3]; 42: MOV output[5], temp[3]; 43: MOV output[1], temp[5]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[3].xy, temp[0].xy__; 3: MOV temp[3].zw, none.__11; 4: MUL temp[0].z, input[0].__x_, const[0].__z_; 5: MUL temp[2].y, input[1]._y__, const[0]._x__; 6: MOV temp[5].x, none.0___; 7: MOV temp[5].y, input[0]._y__; 8: MOV output[2].x, const[1].x___; 9: MOV output[2].y, input[0]._y__; 10: MOV output[3].y, temp[2]._y__; 11: MOV output[3].x, temp[0].x___; 12: ADD output[4].y, temp[2]._y__, const[1]._y__; 13: MOV output[4].x, temp[0].x___; 14: MOV output[3].z, temp[0].__z_; 15: MOV output[4].z, temp[0].__z_; 16: MUL temp[5].z, input[1].__z_, const[1].__x_; 17: MOV temp[5].w, none.___-1; 18: MOV temp[7].xzw, temp[3].x_zw; 19: MOV temp[8].xyz, temp[5].xyz_; 20: SLT temp[6].xy, -input[0].yy__, none.00__; 21: ADD temp[9].xy, const[0].0x__, -const[2].x0__; 22: MAD temp[6].xy, temp[6].xy__, temp[9].xy__, const[2].x0__; 23: MUL temp[6].z, input[1].__y_, const[1].__x_; 24: FRC temp[6].z, temp[6].__z_; 25: SLT temp[10].y, -temp[6]._z__, none._0__; 26: ADD temp[11].y, temp[6]._x__, -temp[6]._y__; 27: MAD temp[6].y, temp[10]._y__, temp[11]._y__, temp[6]._y__; 28: ADD temp[7].y, temp[0]._y__, temp[6]._y__; 29: SLT temp[8].w, -temp[6].___z, none.___0; 30: ADD temp[8].w, -temp[8].___w, none.___1; 31: MAX temp[19], -input[1].wwww, input[1].wwww; 32: SLT temp[13], temp[19], none.0000; 33: ADD temp[14], temp[8], -temp[5]; 34: MAD temp[5], temp[13], temp[14], temp[5]; 35: MAX temp[20], -input[1].wwww, input[1].wwww; 36: SLT temp[15], temp[20], none.0000; 37: ADD temp[16], temp[7], -temp[3]; 38: MAD temp[3], temp[15], temp[16], temp[3]; 39: MOV output[0], temp[3]; 40: MOV output[5], temp[3]; 41: MOV output[1], temp[5]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[1], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[1]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[3].xy, temp[0].xy__; 4: MOV temp[3].zw, none.__11; 5: MUL temp[0].z, input[0].__x_, const[0].__z_; 6: MUL temp[2].y, input[1]._y__, const[0]._x__; 7: MOV temp[5].x, none.0___; 8: MOV temp[5].y, input[0]._y__; 9: MOV output[2].x, const[1].x___; 10: MOV output[2].y, input[0]._y__; 11: MOV output[3].y, temp[2]._y__; 12: MOV output[3].x, temp[0].x___; 13: ADD output[4].y, temp[2]._y__, const[1]._y__; 14: MOV output[4].x, temp[0].x___; 15: MOV output[3].z, temp[0].__z_; 16: MOV output[4].z, temp[0].__z_; 17: MUL temp[5].z, input[1].__z_, const[1].__x_; 18: MOV temp[5].w, none.___-1; 19: MOV temp[7].xzw, temp[3].x_zw; 20: MOV temp[8].xyz, temp[5].xyz_; 21: SLT temp[6].xy, -input[0].yy__, none.00__; 22: MOV temp[4], -const[2].x0__; 23: ADD temp[9].xy, const[0].0x__, temp[4]; 24: MAD temp[6].xy, temp[6].xy__, temp[9].xy__, const[2].x0__; 25: MUL temp[6].z, input[1].__y_, const[1].__x_; 26: FRC temp[6].z, temp[6].__z_; 27: SLT temp[10].y, -temp[6]._z__, none._0__; 28: ADD temp[11].y, temp[6]._x__, -temp[6]._y__; 29: MAD temp[6].y, temp[10]._y__, temp[11]._y__, temp[6]._y__; 30: ADD temp[7].y, temp[0]._y__, temp[6]._y__; 31: SLT temp[8].w, -temp[6].___z, none.___0; 32: ADD temp[8].w, -temp[8].___w, none.___1; 33: MAX temp[19], -input[1].wwww, input[1].wwww; 34: SLT temp[13], temp[19], none.0000; 35: ADD temp[14], temp[8], -temp[5]; 36: MAD temp[5], temp[13], temp[14], temp[5]; 37: MAX temp[20], -input[1].wwww, input[1].wwww; 38: SLT temp[15], temp[20], none.0000; 39: ADD temp[16], temp[7], -temp[3]; 40: MAD temp[3], temp[15], temp[16], temp[3]; 41: MOV output[0], temp[3]; 42: MOV output[5], temp[3]; 43: MOV output[1], temp[5]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MUL temp[0].z, input[0].__x_, const[0].__z_; 6: MUL temp[2].y, input[1]._y__, const[0]._x__; 7: MOV temp[3].x, none.0___; 8: MOV temp[3].y, input[0]._y__; 9: MOV output[2].x, const[1].x___; 10: MOV output[2].y, input[0]._y__; 11: MOV output[3].y, temp[2]._y__; 12: MOV output[3].x, temp[0].x___; 13: ADD output[4].y, temp[2]._y__, const[1]._y__; 14: MOV output[4].x, temp[0].x___; 15: MOV output[3].z, temp[0].__z_; 16: MOV output[4].z, temp[0].__z_; 17: MUL temp[3].z, input[1].__z_, const[1].__x_; 18: MOV temp[3].w, none.___-1; 19: MOV temp[2].xzw, temp[1].x_zw; 20: MOV temp[4].xyz, temp[3].xyz_; 21: SLT temp[5].xy, -input[0].yy__, none.00__; 22: MOV temp[6], -const[2].x0__; 23: ADD temp[6].xy, const[0].0x__, temp[6]; 24: MAD temp[5].xy, temp[5].xy__, temp[6].xy__, const[2].x0__; 25: MUL temp[5].z, input[1].__y_, const[1].__x_; 26: FRC temp[5].z, temp[5].__z_; 27: SLT temp[6].y, -temp[5]._z__, none._0__; 28: ADD temp[7].y, temp[5]._x__, -temp[5]._y__; 29: MAD temp[5].y, temp[6]._y__, temp[7]._y__, temp[5]._y__; 30: ADD temp[2].y, temp[0]._y__, temp[5]._y__; 31: SLT temp[4].w, -temp[5].___z, none.___0; 32: ADD temp[4].w, -temp[4].___w, none.___1; 33: MAX temp[0], -input[1].wwww, input[1].wwww; 34: SLT temp[0], temp[0], none.0000; 35: ADD temp[4], temp[4], -temp[3]; 36: MAD temp[3], temp[0], temp[4], temp[3]; 37: MAX temp[0], -input[1].wwww, input[1].wwww; 38: SLT temp[0], temp[0], none.0000; 39: ADD temp[2], temp[2], -temp[1]; 40: MAD temp[1], temp[0], temp[2], temp[1]; 41: MOV output[0], temp[1]; 42: MOV output[5], temp[1]; 43: MOV output[1], temp[3]; CONST[0] = { 0.0078 1.0000 2.0000 0.0000 } CONST[1] = { 0.5000 0.0039 -1.0000 -0.0078 } CONST[2] = { -0.0078 0.0000 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MUL temp[0].z, input[0].__x_, const[0].__z_; 6: MUL temp[2].y, input[1]._y__, const[0]._x__; 7: MOV temp[3].x, none.0___; 8: MOV temp[3].y, input[0]._y__; 9: MOV output[2].x, const[1].x___; 10: MOV output[2].y, input[0]._y__; 11: MOV output[3].y, temp[2]._y__; 12: MOV output[3].x, temp[0].x___; 13: ADD output[4].y, temp[2]._y__, const[1]._y__; 14: MOV output[4].x, temp[0].x___; 15: MOV output[3].z, temp[0].__z_; 16: MOV output[4].z, temp[0].__z_; 17: MUL temp[3].z, input[1].__z_, const[1].__x_; 18: MOV temp[3].w, none.___-1; 19: MOV temp[2].xzw, temp[1].x_zw; 20: MOV temp[4].xyz, temp[3].xyz_; 21: SLT temp[5].xy, -input[0].yy__, none.00__; 22: MOV temp[6], -const[2].x0__; 23: ADD temp[6].xy, const[0].0x__, temp[6]; 24: MAD temp[5].xy, temp[5].xy__, temp[6].xy__, const[2].x0__; 25: MUL temp[5].z, input[1].__y_, const[1].__x_; 26: FRC temp[5].z, temp[5].__z_; 27: SLT temp[6].y, -temp[5]._z__, none._0__; 28: ADD temp[7].y, temp[5]._x__, -temp[5]._y__; 29: MAD temp[5].y, temp[6]._y__, temp[7]._y__, temp[5]._y__; 30: ADD temp[2].y, temp[0]._y__, temp[5]._y__; 31: SLT temp[4].w, -temp[5].___z, none.___0; 32: ADD temp[4].w, -temp[4].___w, none.___1; 33: MAX temp[0], -input[1].wwww, input[1].wwww; 34: SLT temp[0], temp[0], none.0000; 35: ADD temp[4], temp[4], -temp[3]; 36: MAD temp[3], temp[0], temp[4], temp[3]; 37: MAX temp[0], -input[1].wwww, input[1].wwww; 38: SLT temp[0], temp[0], none.0000; 39: ADD temp[2], temp[2], -temp[1]; 40: MAD temp[1], temp[0], temp[2], temp[1]; 41: MOV output[0], temp[1]; 42: MOV output[5], temp[1]; 43: MOV output[1], temp[3]; Final vertex program code: 0: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 4: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00400002 dst: 0t op: VE_MULTIPLY src0: 0x01c7e001 reg: 0i swiz: U/ U/ X/ U src1: 0x01d7e002 reg: 0c swiz: U/ U/ Z/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00204002 dst: 2t op: VE_MULTIPLY src0: 0x01f9e021 reg: 1i swiz: U/ Y/ U/ U src1: 0x01f8e002 reg: 0c swiz: U/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 7: op: 0x00106003 dst: 3t op: VE_ADD src0: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00206003 dst: 3t op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 9: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x01ff0022 reg: 1c swiz: X/ U/ U/ U src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 10: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 11: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x01f9e040 reg: 2t swiz: U/ Y/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 12: op: 0x00106203 dst: 3o op: VE_ADD src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 13: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x01f9e040 reg: 2t swiz: U/ Y/ U/ U src1: 0x01f9e022 reg: 1c swiz: U/ Y/ U/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 14: op: 0x00108203 dst: 4o op: VE_ADD src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 15: op: 0x00406203 dst: 3o op: VE_ADD src0: 0x01d7e000 reg: 0t swiz: U/ U/ Z/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 16: op: 0x00408203 dst: 4o op: VE_ADD src0: 0x01d7e000 reg: 0t swiz: U/ U/ Z/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 17: op: 0x00406002 dst: 3t op: VE_MULTIPLY src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01c7e022 reg: 1c swiz: U/ U/ X/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 18: op: 0x00806003 dst: 3t op: VE_ADD src0: 0x117fe000 reg: 0t swiz: U/ U/ U/-1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 19: op: 0x00d04003 dst: 2t op: VE_ADD src0: 0x00d70020 reg: 1t swiz: X/ U/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 20: op: 0x00708003 dst: 4t op: VE_ADD src0: 0x01d10060 reg: 3t swiz: X/ Y/ Z/ U src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 21: op: 0x0030a00a dst: 5t op: VE_SET_LESS_THAN src0: 0x1ff92001 reg: 0i swiz: -Y/-Y/-U/-U src1: 0x01fc8000 reg: 0t swiz: 0/ 0/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 22: op: 0x00f0c003 dst: 6t op: VE_ADD src0: 0x1ffc0042 reg: 2c swiz: -X/-0/-U/-U src1: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 src2: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 23: op: 0x0030c003 dst: 6t op: VE_ADD src0: 0x01f88002 reg: 0c swiz: 0/ X/ U/ U src1: 0x00d100c0 reg: 6t swiz: X/ Y/ Z/ W src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 24: op: 0x0030a004 dst: 5t op: VE_MULTIPLY_ADD src0: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U src1: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src2: 0x01fc0042 reg: 2c swiz: X/ 0/ U/ U 25: op: 0x0040a002 dst: 5t op: VE_MULTIPLY src0: 0x01cfe021 reg: 1i swiz: U/ U/ Y/ U src1: 0x01c7e022 reg: 1c swiz: U/ U/ X/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 26: op: 0x0040a006 dst: 5t op: VE_FRACTION src0: 0x01d7e0a0 reg: 5t swiz: U/ U/ Z/ U src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 27: op: 0x0020c00a dst: 6t op: VE_SET_LESS_THAN src0: 0x1ffae0a0 reg: 5t swiz: -U/-Z/-U/-U src1: 0x01fce000 reg: 0t swiz: U/ 0/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 28: op: 0x0020e003 dst: 7t op: VE_ADD src0: 0x01f8e0a0 reg: 5t swiz: U/ X/ U/ U src1: 0x1ff9e0a0 reg: 5t swiz: -U/-Y/-U/-U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 29: op: 0x0020a080 dst: 5t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01f9e0c0 reg: 6t swiz: U/ Y/ U/ U src1: 0x01f9e0e0 reg: 7t swiz: U/ Y/ U/ U src2: 0x01f9e0a0 reg: 5t swiz: U/ Y/ U/ U 30: op: 0x00204003 dst: 2t op: VE_ADD src0: 0x01f9e000 reg: 0t swiz: U/ Y/ U/ U src1: 0x01f9e0a0 reg: 5t swiz: U/ Y/ U/ U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 31: op: 0x0080800a dst: 4t op: VE_SET_LESS_THAN src0: 0x1ebfe0a0 reg: 5t swiz: -U/-U/-U/-Z src1: 0x013fe000 reg: 0t swiz: U/ U/ U/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 32: op: 0x00808003 dst: 4t op: VE_ADD src0: 0x1effe080 reg: 4t swiz: -U/-U/-U/-W src1: 0x017fe000 reg: 0t swiz: U/ U/ U/ 1 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 33: op: 0x00f00007 dst: 0t op: VE_MAXIMUM src0: 0x1edb6021 reg: 1i swiz: -W/-W/-W/-W src1: 0x00db6021 reg: 1i swiz: W/ W/ W/ W src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 34: op: 0x00f0000a dst: 0t op: VE_SET_LESS_THAN src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 35: op: 0x00f08003 dst: 4t op: VE_ADD src0: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W src1: 0x1ed10060 reg: 3t swiz: -X/-Y/-Z/-W src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 36: op: 0x00f06080 dst: 3t op: PVS_MACRO_OP_2CLK_MADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W src2: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W 37: op: 0x00f00007 dst: 0t op: VE_MAXIMUM src0: 0x1edb6021 reg: 1i swiz: -W/-W/-W/-W src1: 0x00db6021 reg: 1i swiz: W/ W/ W/ W src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 38: op: 0x00f0000a dst: 0t op: VE_SET_LESS_THAN src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 39: op: 0x00f04003 dst: 2t op: VE_ADD src0: 0x00d10040 reg: 2t swiz: X/ Y/ Z/ W src1: 0x1ed10020 reg: 1t swiz: -X/-Y/-Z/-W src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 40: op: 0x00f02080 dst: 1t op: PVS_MACRO_OP_2CLK_MADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00d10040 reg: 2t swiz: X/ Y/ Z/ W src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 41: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 42: op: 0x00f0a203 dst: 5o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 43: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL TEMP[0] IMM FLT32 { 0.0156, 1.0000, 0.0005, 0.2500} IMM FLT32 { 0.0005, 0.2500, 0.0039, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MAD OUT[1].xy, IMM[1].xxyz, IN[2], TEMP[0] 5: MUL OUT[1].zw, IMM[1].xxyz, IN[2] 6: MAD OUT[2].xy, IMM[1].xxyz, IN[3], TEMP[0] 7: MUL OUT[2].zw, IMM[1].xxyz, IN[3] 8: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].xy, temp[0].xy__; 3: MOV temp[1].zw, const[0].__yy; 4: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 5: MUL output[1].zw, const[1].__yz, input[2].__zw; 6: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 7: MUL output[2].zw, const[1].__yz, input[3].__zw; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].xy, temp[0].xy__; 3: MOV temp[1].zw, none.__11; 4: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 5: MUL output[1].zw, const[1].__yz, input[2].__zw; 6: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 7: MUL output[2].zw, const[1].__yz, input[3].__zw; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[2], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[2]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 6: MUL output[1].zw, const[1].__yz, input[2].__zw; 7: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 8: MUL output[2].zw, const[1].__yz, input[3].__zw; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 6: MUL output[1].zw, const[1].__yz, input[2].__zw; 7: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 8: MUL output[2].zw, const[1].__yz, input[3].__zw; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; CONST[0] = { 0.0156 1.0000 0.0005 0.2500 } CONST[1] = { 0.0005 0.2500 0.0039 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MAD output[1].xy, const[1].xx__, input[2].xy__, temp[0].xy__; 6: MUL output[1].zw, const[1].__yz, input[2].__zw; 7: MAD output[2].xy, const[1].xx__, input[3].xy__, temp[0].xy__; 8: MUL output[2].zw, const[1].__yz, input[3].__zw; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; Final vertex program code: 0: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 4: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00302204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x01f80022 reg: 1c swiz: X/ X/ U/ U src1: 0x01f90041 reg: 2i swiz: X/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 6: op: 0x00c02202 dst: 1o op: VE_MULTIPLY src0: 0x008fe022 reg: 1c swiz: U/ U/ Y/ Z src1: 0x00d7e041 reg: 2i swiz: U/ U/ Z/ W src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 7: op: 0x00304204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x01f80022 reg: 1c swiz: X/ X/ U/ U src1: 0x01f90061 reg: 3i swiz: X/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 8: op: 0x00c04202 dst: 2o op: VE_MULTIPLY src0: 0x008fe022 reg: 1c swiz: U/ U/ Y/ Z src1: 0x00d7e061 reg: 3i swiz: U/ U/ Z/ W src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 9: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 10: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] DCL OUT[2], GENERIC[1] DCL OUT[3], GENERIC[2] DCL OUT[4], GENERIC[3] DCL TEMP[0..2] IMM FLT32 { 0.0156, 1.0000, 2.0000, 0.0000} IMM FLT32 { 0.5000, 0.0078, -1.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MUL TEMP[0].z, IN[0].xxxx, IMM[0].zzzz 5: MUL TEMP[2].xy, IN[1], IMM[0].xxxx 6: MOV OUT[1].x, IMM[0].wwww 7: MOV OUT[1].y, IN[0].yyyy 8: ADD OUT[2].x, IMM[0].wwww, IMM[1].xxxx 9: MOV OUT[2].y, IN[0].yyyy 10: MOV OUT[3].y, TEMP[2].yyyy 11: MOV OUT[3].x, TEMP[0].xxxx 12: ADD OUT[4].y, TEMP[2].yyyy, IMM[1].yyyy 13: MOV OUT[4].x, TEMP[0].xxxx 14: MOV OUT[3].z, TEMP[0] 15: MOV OUT[4].z, TEMP[0] 16: MUL OUT[1].z, IN[1].zzzz, IMM[1].xxxx 17: MOV OUT[1].w, IMM[1].zzzz 18: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[1].x, const[0].wwww; 7: MOV output[1].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[5], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[1].x, const[0].wwww; 7: MOV output[1].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[5], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[1].x, const[0].wwww; 7: MOV output[1].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[5], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[1].x, const[0].wwww; 7: MOV output[1].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[5], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[1].x, const[0].wwww; 7: MOV output[1].y, input[0].yyyy; 8: ADD output[2].x, const[0].wwww, const[1].xxxx; 9: MOV output[2].y, input[0].yyyy; 10: MOV output[3].y, temp[2].yyyy; 11: MOV output[3].x, temp[0].xxxx; 12: ADD output[4].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: MOV output[3].z, temp[0]; 15: MOV output[4].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[5], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].xy, temp[0].xy__; 3: MOV temp[1].zw, const[0].__yy; 4: MUL temp[0].z, input[0].__x_, const[0].__z_; 5: MUL temp[2].y, input[1]._y__, const[0]._x__; 6: MOV output[1].x, const[0].w___; 7: MOV output[1].y, input[0]._y__; 8: ADD output[2].x, const[0].w___, const[1].x___; 9: MOV output[2].y, input[0]._y__; 10: MOV output[3].y, temp[2]._y__; 11: MOV output[3].x, temp[0].x___; 12: ADD output[4].y, temp[2]._y__, const[1]._y__; 13: MOV output[4].x, temp[0].x___; 14: MOV output[3].z, temp[0].__z_; 15: MOV output[4].z, temp[0].__z_; 16: MUL output[1].z, input[1].__z_, const[1].__x_; 17: MOV output[1].w, const[1].___z; 18: MOV output[0], temp[1]; 19: MOV output[5], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[0].xy, input[1].xy__, input[0].xy__; 1: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 2: MOV temp[1].xy, temp[0].xy__; 3: MOV temp[1].zw, none.__11; 4: MUL temp[0].z, input[0].__x_, const[0].__z_; 5: MUL temp[2].y, input[1]._y__, const[0]._x__; 6: MOV output[1].x, none.0___; 7: MOV output[1].y, input[0]._y__; 8: MOV output[2].x, const[1].x___; 9: MOV output[2].y, input[0]._y__; 10: MOV output[3].y, temp[2]._y__; 11: MOV output[3].x, temp[0].x___; 12: ADD output[4].y, temp[2]._y__, const[1]._y__; 13: MOV output[4].x, temp[0].x___; 14: MOV output[3].z, temp[0].__z_; 15: MOV output[4].z, temp[0].__z_; 16: MUL output[1].z, input[1].__z_, const[1].__x_; 17: MOV output[1].w, none.___-1; 18: MOV output[0], temp[1]; 19: MOV output[5], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[3]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MUL temp[0].z, input[0].__x_, const[0].__z_; 6: MUL temp[2].y, input[1]._y__, const[0]._x__; 7: MOV output[1].x, none.0___; 8: MOV output[1].y, input[0]._y__; 9: MOV output[2].x, const[1].x___; 10: MOV output[2].y, input[0]._y__; 11: MOV output[3].y, temp[2]._y__; 12: MOV output[3].x, temp[0].x___; 13: ADD output[4].y, temp[2]._y__, const[1]._y__; 14: MOV output[4].x, temp[0].x___; 15: MOV output[3].z, temp[0].__z_; 16: MOV output[4].z, temp[0].__z_; 17: MUL output[1].z, input[1].__z_, const[1].__x_; 18: MOV output[1].w, none.___-1; 19: MOV output[0], temp[1]; 20: MOV output[5], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MUL temp[0].z, input[0].__x_, const[0].__z_; 6: MUL temp[2].y, input[1]._y__, const[0]._x__; 7: MOV output[1].x, none.0___; 8: MOV output[1].y, input[0]._y__; 9: MOV output[2].x, const[1].x___; 10: MOV output[2].y, input[0]._y__; 11: MOV output[3].y, temp[2]._y__; 12: MOV output[3].x, temp[0].x___; 13: ADD output[4].y, temp[2]._y__, const[1]._y__; 14: MOV output[4].x, temp[0].x___; 15: MOV output[3].z, temp[0].__z_; 16: MOV output[4].z, temp[0].__z_; 17: MUL output[1].z, input[1].__z_, const[1].__x_; 18: MOV output[1].w, none.___-1; 19: MOV output[0], temp[1]; 20: MOV output[5], temp[1]; CONST[0] = { 0.0156 1.0000 2.0000 0.0000 } CONST[1] = { 0.5000 0.0078 -1.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], input[0].xy__; 1: ADD temp[0].xy, input[1].xy__, temp[0]; 2: MUL temp[0].xy, temp[0].xy__, const[0].xx__; 3: MOV temp[1].xy, temp[0].xy__; 4: MOV temp[1].zw, none.__11; 5: MUL temp[0].z, input[0].__x_, const[0].__z_; 6: MUL temp[2].y, input[1]._y__, const[0]._x__; 7: MOV output[1].x, none.0___; 8: MOV output[1].y, input[0]._y__; 9: MOV output[2].x, const[1].x___; 10: MOV output[2].y, input[0]._y__; 11: MOV output[3].y, temp[2]._y__; 12: MOV output[3].x, temp[0].x___; 13: ADD output[4].y, temp[2]._y__, const[1]._y__; 14: MOV output[4].x, temp[0].x___; 15: MOV output[3].z, temp[0].__z_; 16: MOV output[4].z, temp[0].__z_; 17: MUL output[1].z, input[1].__z_, const[1].__x_; 18: MOV output[1].w, none.___-1; 19: MOV output[0], temp[1]; 20: MOV output[5], temp[1]; Final vertex program code: 0: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80002 reg: 0c swiz: X/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 4: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x016fe000 reg: 0t swiz: U/ U/ 1/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00400002 dst: 0t op: VE_MULTIPLY src0: 0x01c7e001 reg: 0i swiz: U/ U/ X/ U src1: 0x01d7e002 reg: 0c swiz: U/ U/ Z/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00204002 dst: 2t op: VE_MULTIPLY src0: 0x01f9e021 reg: 1i swiz: U/ Y/ U/ U src1: 0x01f8e002 reg: 0c swiz: U/ X/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 7: op: 0x00102203 dst: 1o op: VE_ADD src0: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 9: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x01ff0022 reg: 1c swiz: X/ U/ U/ U src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 10: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x01f9e001 reg: 0i swiz: U/ Y/ U/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 11: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x01f9e040 reg: 2t swiz: U/ Y/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 12: op: 0x00106203 dst: 3o op: VE_ADD src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 13: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x01f9e040 reg: 2t swiz: U/ Y/ U/ U src1: 0x01f9e022 reg: 1c swiz: U/ Y/ U/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 14: op: 0x00108203 dst: 4o op: VE_ADD src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 15: op: 0x00406203 dst: 3o op: VE_ADD src0: 0x01d7e000 reg: 0t swiz: U/ U/ Z/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 16: op: 0x00408203 dst: 4o op: VE_ADD src0: 0x01d7e000 reg: 0t swiz: U/ U/ Z/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 17: op: 0x00402202 dst: 1o op: VE_MULTIPLY src0: 0x01d7e021 reg: 1i swiz: U/ U/ Z/ U src1: 0x01c7e022 reg: 1c swiz: U/ U/ X/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 18: op: 0x00802203 dst: 1o op: VE_ADD src0: 0x117fe000 reg: 0t swiz: U/ U/ U/-1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 19: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 20: op: 0x00f0a203 dst: 5o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL OUT[2], GENERIC[0] DCL OUT[3], GENERIC[1] DCL OUT[4], GENERIC[2] DCL TEMP[0] IMM FLT32 { 0.5000, 0.2500, -0.2500, 0.0000} 0: MOV OUT[0], IN[0] 1: MOV OUT[2], IN[1] 2: MOV OUT[1], IN[2] 3: MUL TEMP[0].x, IN[1].wwww, IMM[0].xxxx 4: MUL TEMP[0].y, IN[1].wwww, IMM[0].yyyy 5: MOV OUT[3].x, IN[1] 6: MAD OUT[3].y, IN[1].yyyy, TEMP[0].xxxx, IMM[0].yyyy 7: MAD OUT[3].z, IN[1].yyyy, TEMP[0].yyyy, IMM[0].yyyy 8: RCP OUT[3].w, TEMP[0].xxxx 9: MOV OUT[4].x, IN[1] 10: MAD OUT[4].y, IN[1].yyyy, TEMP[0].xxxx, IMM[0].zzzz 11: MAD OUT[4].z, IN[1].yyyy, TEMP[0].yyyy, IMM[0].zzzz 12: RCP OUT[4].w, TEMP[0].yyyy 13: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[2], input[1]; 2: MOV output[1], input[2]; 3: MUL temp[0].x, input[1].wwww, const[0].xxxx; 4: MUL temp[0].y, input[1].wwww, const[0].yyyy; 5: MOV output[3].x, input[1]; 6: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 7: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 8: RCP output[3].w, temp[0].xxxx; 9: MOV output[4].x, input[1]; 10: MAD output[4].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 11: MAD output[4].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 12: RCP output[4].w, temp[0].yyyy; 13: MOV output[0], temp[1]; 14: MOV output[5], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[2], input[1]; 2: MOV output[1], input[2]; 3: MUL temp[0].x, input[1].wwww, const[0].xxxx; 4: MUL temp[0].y, input[1].wwww, const[0].yyyy; 5: MOV output[3].x, input[1]; 6: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 7: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 8: RCP output[3].w, temp[0].xxxx; 9: MOV output[4].x, input[1]; 10: MAD output[4].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 11: MAD output[4].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 12: RCP output[4].w, temp[0].yyyy; 13: MOV output[0], temp[1]; 14: MOV output[5], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[2], input[1]; 2: MOV output[1], input[2]; 3: MUL temp[0].x, input[1].wwww, const[0].xxxx; 4: MUL temp[0].y, input[1].wwww, const[0].yyyy; 5: MOV output[3].x, input[1]; 6: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 7: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 8: RCP output[3].w, temp[0].xxxx; 9: MOV output[4].x, input[1]; 10: MAD output[4].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 11: MAD output[4].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 12: RCP output[4].w, temp[0].yyyy; 13: MOV output[0], temp[1]; 14: MOV output[5], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[2], input[1]; 2: MOV output[1], input[2]; 3: MUL temp[0].x, input[1].wwww, const[0].xxxx; 4: MUL temp[0].y, input[1].wwww, const[0].yyyy; 5: MOV output[3].x, input[1]; 6: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 7: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 8: RCP output[3].w, temp[0].xxxx; 9: MOV output[4].x, input[1]; 10: MAD output[4].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 11: MAD output[4].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 12: RCP output[4].w, temp[0].yyyy; 13: MOV output[0], temp[1]; 14: MOV output[5], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[2], input[1]; 2: MOV output[1], input[2]; 3: MUL temp[0].x, input[1].wwww, const[0].xxxx; 4: MUL temp[0].y, input[1].wwww, const[0].yyyy; 5: MOV output[3].x, input[1]; 6: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 7: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 8: RCP output[3].w, temp[0].xxxx; 9: MOV output[4].x, input[1]; 10: MAD output[4].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 11: MAD output[4].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 12: RCP output[4].w, temp[0].yyyy; 13: MOV output[0], temp[1]; 14: MOV output[5], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[2], input[1]; 2: MOV output[1], input[2]; 3: MUL temp[0].x, input[1].w___, const[0].x___; 4: MUL temp[0].y, input[1]._w__, const[0]._y__; 5: MOV output[3].x, input[1].x___; 6: MAD output[3].y, input[1]._y__, temp[0]._x__, const[0]._y__; 7: MAD output[3].z, input[1].__y_, temp[0].__y_, const[0].__y_; 8: RCP output[3].w, temp[0].___x; 9: MOV output[4].x, input[1].x___; 10: MAD output[4].y, input[1]._y__, temp[0]._x__, const[0]._z__; 11: MAD output[4].z, input[1].__y_, temp[0].__y_, const[0].__z_; 12: RCP output[4].w, temp[0].___y; 13: MOV output[0], temp[1]; 14: MOV output[5], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[2], input[1]; 1: MOV output[1], input[2]; 2: MUL temp[0].x, input[1].w___, const[0].x___; 3: MUL temp[0].y, input[1]._w__, const[0]._y__; 4: MOV output[3].x, input[1].x___; 5: MAD output[3].y, input[1]._y__, temp[0]._x__, const[0]._y__; 6: MAD output[3].z, input[1].__y_, temp[0].__y_, const[0].__y_; 7: RCP output[3].w, temp[0].___x; 8: MOV output[4].x, input[1].x___; 9: MAD output[4].y, input[1]._y__, temp[0]._x__, const[0]._z__; 10: MAD output[4].z, input[1].__y_, temp[0].__y_, const[0].__z_; 11: RCP output[4].w, temp[0].___y; 12: MOV output[0], input[0]; 13: MOV output[5], input[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[2], input[1]; 1: MOV output[1], input[2]; 2: MUL temp[0].x, input[1].w___, const[0].x___; 3: MUL temp[0].y, input[1]._w__, const[0]._y__; 4: MOV output[3].x, input[1].x___; 5: MAD output[3].y, input[1]._y__, temp[0]._x__, const[0]._y__; 6: MAD output[3].z, input[1].__y_, temp[0].__y_, const[0].__y_; 7: RCP output[3].w, temp[0].___x; 8: MOV output[4].x, input[1].x___; 9: MAD output[4].y, input[1]._y__, temp[0]._x__, const[0]._z__; 10: MAD output[4].z, input[1].__y_, temp[0].__y_, const[0].__z_; 11: RCP output[4].w, temp[0].___y; 12: MOV output[0], input[0]; 13: MOV output[5], input[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[2], input[1]; 1: MOV output[1], input[2]; 2: MUL temp[0].x, input[1].w___, const[0].x___; 3: MUL temp[0].y, input[1]._w__, const[0]._y__; 4: MOV output[3].x, input[1].x___; 5: MAD output[3].y, input[1]._y__, temp[0]._x__, const[0]._y__; 6: MAD output[3].z, input[1].__y_, temp[0].__y_, const[0].__y_; 7: RCP output[3].w, temp[0].___x; 8: MOV output[4].x, input[1].x___; 9: MAD output[4].y, input[1]._y__, temp[0]._x__, const[0]._z__; 10: MAD output[4].z, input[1].__y_, temp[0].__y_, const[0].__z_; 11: RCP output[4].w, temp[0].___y; 12: MOV output[0], input[0]; 13: MOV output[5], input[0]; CONST[0] = { 0.5000 0.2500 -0.2500 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[2], input[1]; 1: MOV output[1], input[2]; 2: MUL temp[0].x, input[1].w___, const[0].x___; 3: MUL temp[0].y, input[1]._w__, const[0]._y__; 4: MOV output[3].x, input[1].x___; 5: MAD output[3].y, input[1]._y__, temp[0]._x__, const[0]._y__; 6: MAD output[3].z, input[1].__y_, temp[0].__y_, const[0].__y_; 7: RCP output[3].w, temp[0].___x; 8: MOV output[4].x, input[1].x___; 9: MAD output[4].y, input[1]._y__, temp[0]._x__, const[0]._z__; 10: MAD output[4].z, input[1].__y_, temp[0].__y_, const[0].__z_; 11: RCP output[4].w, temp[0].___y; 12: MOV output[0], input[0]; 13: MOV output[5], input[0]; Final vertex program code: 0: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10041 reg: 2i swiz: X/ Y/ Z/ W src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 2: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff6021 reg: 1i swiz: W/ U/ U/ U src1: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00200002 dst: 0t op: VE_MULTIPLY src0: 0x01fbe021 reg: 1i swiz: U/ W/ U/ U src1: 0x01f9e002 reg: 0c swiz: U/ Y/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 4: op: 0x00106203 dst: 3o op: VE_ADD src0: 0x01ff0021 reg: 1i swiz: X/ U/ U/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 5: op: 0x00206204 dst: 3o op: VE_MULTIPLY_ADD src0: 0x01f9e021 reg: 1i swiz: U/ Y/ U/ U src1: 0x01f8e000 reg: 0t swiz: U/ X/ U/ U src2: 0x01f9e002 reg: 0c swiz: U/ Y/ U/ U 6: op: 0x00406204 dst: 3o op: VE_MULTIPLY_ADD src0: 0x01cfe021 reg: 1i swiz: U/ U/ Y/ U src1: 0x01cfe000 reg: 0t swiz: U/ U/ Y/ U src2: 0x01cfe002 reg: 0c swiz: U/ U/ Y/ U 7: op: 0x00806246 dst: 3o op: ME_RECIP_DX src0: 0x00000000 reg: 0t swiz: X/ X/ X/ X src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00108203 dst: 4o op: VE_ADD src0: 0x01ff0021 reg: 1i swiz: X/ U/ U/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 9: op: 0x00208204 dst: 4o op: VE_MULTIPLY_ADD src0: 0x01f9e021 reg: 1i swiz: U/ Y/ U/ U src1: 0x01f8e000 reg: 0t swiz: U/ X/ U/ U src2: 0x01fae002 reg: 0c swiz: U/ Z/ U/ U 10: op: 0x00408204 dst: 4o op: VE_MULTIPLY_ADD src0: 0x01cfe021 reg: 1i swiz: U/ U/ Y/ U src1: 0x01cfe000 reg: 0t swiz: U/ U/ Y/ U src2: 0x01d7e002 reg: 0c swiz: U/ U/ Z/ U 11: op: 0x00808246 dst: 4o op: ME_RECIP_DX src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 12: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 13: op: 0x00f0a203 dst: 5o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 vo_xvmc: Allocated Direct Context vo_xvmc: data_blocks allocated vo_xvmc: mv_blocks allocated vo_xvmc: Motion Compensation context allocated - 8 surfaces vo_xvmc: idct=1 unsigned_intra=0 vo_xvmc: looking for OSD support Subpicture id 0x34344149 vo_xvmc: OSD support by backend rendering (fast) vo_xvmc: Please send feedback to confirm that it works,otherwise send bugreport! [VD_FFMPEG] XVMC-accelerated MPEG-2. r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL IN[1], GENERIC[1], LINEAR DCL IN[2], GENERIC[2], LINEAR DCL IN[3], GENERIC[3], LINEAR DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL TEMP[0..4] IMM FLT32 { 16.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0].x, IN[0], SAMP[1], 2D 1: TEX TEMP[1].x, IN[1], SAMP[1], 2D 2: TEX TEMP[2].x, IN[2], SAMP[1], 2D 3: TEX TEMP[3].x, IN[3], SAMP[1], 2D 4: MOV TEMP[0].y, IN[0].wwww 5: MOV TEMP[1].y, IN[1].wwww 6: MOV TEMP[2].y, IN[2].wwww 7: MOV TEMP[3].y, IN[3].wwww 8: TEX TEMP[0].x, TEMP[0], SAMP[0], 2D 9: TEX TEMP[4].x, IN[0], SAMP[2], 3D 10: TEX TEMP[0].y, TEMP[1], SAMP[0], 2D 11: TEX TEMP[4].y, IN[1], SAMP[2], 3D 12: TEX TEMP[0].z, TEMP[2], SAMP[0], 2D 13: TEX TEMP[4].z, IN[2], SAMP[2], 3D 14: TEX TEMP[0].w, TEMP[3], SAMP[0], 2D 15: TEX TEMP[4].w, IN[3], SAMP[2], 3D 16: MUL TEMP[4], TEMP[4], IMM[0].xxxx 17: MUL OUT[0], TEMP[0], TEMP[4] 18: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[5], input[0], 2D[1]; 1: MOV temp[0].x, temp[5]; 2: TEX temp[6], input[1], 2D[1]; 3: MOV temp[1].x, temp[6]; 4: TEX temp[7], input[2], 2D[1]; 5: MOV temp[2].x, temp[7]; 6: TEX temp[8], input[3], 2D[1]; 7: MOV temp[3].x, temp[8]; 8: MOV temp[0].y, input[0].wwww; 9: MOV temp[1].y, input[1].wwww; 10: MOV temp[2].y, input[2].wwww; 11: MOV temp[3].y, input[3].wwww; 12: TEX temp[9], temp[0], 2D[0]; 13: MOV temp[0].x, temp[9]; 14: TEX temp[10], input[0], 3D[2]; 15: MOV temp[4].x, temp[10]; 16: TEX temp[11], temp[1], 2D[0]; 17: MOV temp[0].y, temp[11]; 18: TEX temp[12], input[1], 3D[2]; 19: MOV temp[4].y, temp[12]; 20: TEX temp[13], temp[2], 2D[0]; 21: MOV temp[0].z, temp[13]; 22: TEX temp[14], input[2], 3D[2]; 23: MOV temp[4].z, temp[14]; 24: TEX temp[15], temp[3], 2D[0]; 25: MOV temp[0].w, temp[15]; 26: TEX temp[16], input[3], 3D[2]; 27: MOV temp[4].w, temp[16]; 28: MUL temp[4], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[4]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[5], input[0], 2D[1]; 1: MOV temp[0].x, temp[5]; 2: TEX temp[6], input[1], 2D[1]; 3: MOV temp[1].x, temp[6]; 4: TEX temp[7], input[2], 2D[1]; 5: MOV temp[2].x, temp[7]; 6: TEX temp[8], input[3], 2D[1]; 7: MOV temp[3].x, temp[8]; 8: MOV temp[0].y, input[0].wwww; 9: MOV temp[1].y, input[1].wwww; 10: MOV temp[2].y, input[2].wwww; 11: MOV temp[3].y, input[3].wwww; 12: TEX temp[9], temp[0], 2D[0]; 13: MOV temp[0].x, temp[9]; 14: TEX temp[10], input[0], 3D[2]; 15: MOV temp[4].x, temp[10]; 16: TEX temp[11], temp[1], 2D[0]; 17: MOV temp[0].y, temp[11]; 18: TEX temp[12], input[1], 3D[2]; 19: MOV temp[4].y, temp[12]; 20: TEX temp[13], temp[2], 2D[0]; 21: MOV temp[0].z, temp[13]; 22: TEX temp[14], input[2], 3D[2]; 23: MOV temp[4].z, temp[14]; 24: TEX temp[15], temp[3], 2D[0]; 25: MOV temp[0].w, temp[15]; 26: TEX temp[16], input[3], 3D[2]; 27: MOV temp[4].w, temp[16]; 28: MUL temp[4], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[4]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[5].x, input[0].xy__, 2D[1]; 1: MOV temp[0].x, temp[5].x___; 2: TEX temp[6].x, input[1].xy__, 2D[1]; 3: MOV temp[1].x, temp[6].x___; 4: TEX temp[7].x, input[2].xy__, 2D[1]; 5: MOV temp[2].x, temp[7].x___; 6: TEX temp[8].x, input[3].xy__, 2D[1]; 7: MOV temp[3].x, temp[8].x___; 8: MOV temp[0].y, input[0]._w__; 9: MOV temp[1].y, input[1]._w__; 10: MOV temp[2].y, input[2]._w__; 11: MOV temp[3].y, input[3]._w__; 12: TEX temp[9].x, temp[0].xy__, 2D[0]; 13: MOV temp[0].x, temp[9].x___; 14: TEX temp[10].x, input[0].xyz_, 3D[2]; 15: MOV temp[4].x, temp[10].x___; 16: TEX temp[11].y, temp[1].xy__, 2D[0]; 17: MOV temp[0].y, temp[11]._y__; 18: TEX temp[12].y, input[1].xyz_, 3D[2]; 19: MOV temp[4].y, temp[12]._y__; 20: TEX temp[13].z, temp[2].xy__, 2D[0]; 21: MOV temp[0].z, temp[13].__z_; 22: TEX temp[14].z, input[2].xyz_, 3D[2]; 23: MOV temp[4].z, temp[14].__z_; 24: TEX temp[15].w, temp[3].xy__, 2D[0]; 25: MOV temp[0].w, temp[15].___w; 26: TEX temp[16].w, input[3].xyz_, 3D[2]; 27: MOV temp[4].w, temp[16].___w; 28: MUL temp[4], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[4]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[5].x, input[0].xy__, 2D[1]; 1: MOV temp[0].x, temp[5].x___; 2: TEX temp[6].x, input[1].xy__, 2D[1]; 3: MOV temp[1].x, temp[6].x___; 4: TEX temp[7].x, input[2].xy__, 2D[1]; 5: MOV temp[2].x, temp[7].x___; 6: TEX temp[8].x, input[3].xy__, 2D[1]; 7: MOV temp[3].x, temp[8].x___; 8: MOV temp[0].y, input[0]._w__; 9: MOV temp[1].y, input[1]._w__; 10: MOV temp[2].y, input[2]._w__; 11: MOV temp[3].y, input[3]._w__; 12: TEX temp[9].x, temp[0].xy__, 2D[0]; 13: MOV temp[0].x, temp[9].x___; 14: TEX temp[10].x, input[0].xyz_, 3D[2]; 15: MOV temp[4].x, temp[10].x___; 16: TEX temp[11].y, temp[1].xy__, 2D[0]; 17: MOV temp[0].y, temp[11]._y__; 18: TEX temp[12].y, input[1].xyz_, 3D[2]; 19: MOV temp[4].y, temp[12]._y__; 20: TEX temp[13].z, temp[2].xy__, 2D[0]; 21: MOV temp[0].z, temp[13].__z_; 22: TEX temp[14].z, input[2].xyz_, 3D[2]; 23: MOV temp[4].z, temp[14].__z_; 24: TEX temp[15].w, temp[3].xy__, 2D[0]; 25: MOV temp[0].w, temp[15].___w; 26: TEX temp[16].w, input[3].xyz_, 3D[2]; 27: MOV temp[4].w, temp[16].___w; 28: MUL temp[4], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[4]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[17].x, input[0].xy__, 2D[1]; 1: MOV temp[0].x, temp[17].x___; 2: TEX temp[18].x, input[1].xy__, 2D[1]; 3: MOV temp[1].x, temp[18].x___; 4: TEX temp[19].x, input[2].xy__, 2D[1]; 5: MOV temp[2].x, temp[19].x___; 6: TEX temp[20].x, input[3].xy__, 2D[1]; 7: MOV temp[3].x, temp[20].x___; 8: MOV temp[0].y, input[0]._w__; 9: MOV temp[1].y, input[1]._w__; 10: MOV temp[2].y, input[2]._w__; 11: MOV temp[3].y, input[3]._w__; 12: TEX temp[21].x, temp[0].xy__, 2D[0]; 13: MOV temp[0].x, temp[21].x___; 14: TEX temp[22].x, input[0].xyz_, 3D[2]; 15: MOV temp[4].x, temp[22].x___; 16: TEX temp[23].y, temp[1].xy__, 2D[0]; 17: MOV temp[0].y, temp[23]._y__; 18: TEX temp[24].y, input[1].xyz_, 3D[2]; 19: MOV temp[4].y, temp[24]._y__; 20: TEX temp[25].z, temp[2].xy__, 2D[0]; 21: MOV temp[0].z, temp[25].__z_; 22: TEX temp[26].z, input[2].xyz_, 3D[2]; 23: MOV temp[4].z, temp[26].__z_; 24: TEX temp[27].w, temp[3].xy__, 2D[0]; 25: MOV temp[0].w, temp[27].___w; 26: TEX temp[28].w, input[3].xyz_, 3D[2]; 27: MOV temp[4].w, temp[28].___w; 28: MUL temp[29], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[29]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[17].x, input[0].xy__, 2D[1]; 1: MOV temp[0].x, temp[17].x___; 2: TEX temp[18].x, input[1].xy__, 2D[1]; 3: MOV temp[1].x, temp[18].x___; 4: TEX temp[19].x, input[2].xy__, 2D[1]; 5: MOV temp[2].x, temp[19].x___; 6: TEX temp[20].x, input[3].xy__, 2D[1]; 7: MOV temp[3].x, temp[20].x___; 8: MOV temp[0].y, input[0]._w__; 9: MOV temp[1].y, input[1]._w__; 10: MOV temp[2].y, input[2]._w__; 11: MOV temp[3].y, input[3]._w__; 12: TEX temp[21].x, temp[0].xy__, 2D[0]; 13: MOV temp[0].x, temp[21].x___; 14: TEX temp[22].x, input[0].xyz_, 3D[2]; 15: MOV temp[4].x, temp[22].x___; 16: TEX temp[23].y, temp[1].xy__, 2D[0]; 17: MOV temp[0].y, temp[23]._y__; 18: TEX temp[24].y, input[1].xyz_, 3D[2]; 19: MOV temp[4].y, temp[24]._y__; 20: TEX temp[25].z, temp[2].xy__, 2D[0]; 21: MOV temp[0].z, temp[25].__z_; 22: TEX temp[26].z, input[2].xyz_, 3D[2]; 23: MOV temp[4].z, temp[26].__z_; 24: TEX temp[27].w, temp[3].xy__, 2D[0]; 25: MOV temp[0].w, temp[27].___w; 26: TEX temp[28].w, input[3].xyz_, 3D[2]; 27: MOV temp[4].w, temp[28].___w; 28: MUL temp[29], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[29]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[17].x, input[0].xy__, 2D[1]; 1: MOV temp[0].x, temp[17].x___; 2: TEX temp[18].x, input[1].xy__, 2D[1]; 3: MOV temp[1].x, temp[18].x___; 4: TEX temp[19].x, input[2].xy__, 2D[1]; 5: MOV temp[2].x, temp[19].x___; 6: TEX temp[20].x, input[3].xy__, 2D[1]; 7: MOV temp[3].x, temp[20].x___; 8: MOV temp[0].y, input[0]._w__; 9: MOV temp[1].y, input[1]._w__; 10: MOV temp[2].y, input[2]._w__; 11: MOV temp[3].y, input[3]._w__; 12: TEX temp[21].x, temp[0].xy__, 2D[0]; 13: MOV temp[0].x, temp[21].x___; 14: TEX temp[22].x, input[0].xyz_, 3D[2]; 15: MOV temp[4].x, temp[22].x___; 16: TEX temp[23].y, temp[1].xy__, 2D[0]; 17: MOV temp[0].y, temp[23]._y__; 18: TEX temp[24].y, input[1].xyz_, 3D[2]; 19: MOV temp[4].y, temp[24]._y__; 20: TEX temp[25].z, temp[2].xy__, 2D[0]; 21: MOV temp[0].z, temp[25].__z_; 22: TEX temp[26].z, input[2].xyz_, 3D[2]; 23: MOV temp[4].z, temp[26].__z_; 24: TEX temp[27].w, temp[3].xy__, 2D[0]; 25: MOV temp[0].w, temp[27].___w; 26: TEX temp[28].w, input[3].xyz_, 3D[2]; 27: MOV temp[4].w, temp[28].___w; 28: MUL temp[29], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[29]; CONST[0] = { 16.0000 0.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[17].x, input[0].xy__, 2D[1]; 1: MOV temp[0].x, temp[17].x___; 2: TEX temp[18].x, input[1].xy__, 2D[1]; 3: MOV temp[1].x, temp[18].x___; 4: TEX temp[19].x, input[2].xy__, 2D[1]; 5: MOV temp[2].x, temp[19].x___; 6: TEX temp[20].x, input[3].xy__, 2D[1]; 7: MOV temp[3].x, temp[20].x___; 8: MOV temp[0].y, input[0]._w__; 9: MOV temp[1].y, input[1]._w__; 10: MOV temp[2].y, input[2]._w__; 11: MOV temp[3].y, input[3]._w__; 12: TEX temp[21].x, temp[0].xy__, 2D[0]; 13: MOV temp[0].x, temp[21].x___; 14: TEX temp[22].x, input[0].xyz_, 3D[2]; 15: MOV temp[4].x, temp[22].x___; 16: TEX temp[23].y, temp[1].xy__, 2D[0]; 17: MOV temp[0].y, temp[23]._y__; 18: TEX temp[24].y, input[1].xyz_, 3D[2]; 19: MOV temp[4].y, temp[24]._y__; 20: TEX temp[25].z, temp[2].xy__, 2D[0]; 21: MOV temp[0].z, temp[25].__z_; 22: TEX temp[26].z, input[2].xyz_, 3D[2]; 23: MOV temp[4].z, temp[26].__z_; 24: TEX temp[27].w, temp[3].xy__, 2D[0]; 25: MOV temp[0].w, temp[27].___w; 26: TEX temp[28].w, input[3].xyz_, 3D[2]; 27: MOV temp[4].w, temp[28].___w; 28: MUL temp[29], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[29]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[17].x, input[0].xy__, 2D[1]; 1: src0.xyz = temp[17] MAD temp[0].x, src0.x__, src0.111, src0.000 2: TEX temp[18].x, input[1].xy__, 2D[1]; 3: src0.xyz = temp[18] MAD temp[1].x, src0.x__, src0.111, src0.000 4: TEX temp[19].x, input[2].xy__, 2D[1]; 5: src0.xyz = temp[19] MAD temp[2].x, src0.x__, src0.111, src0.000 6: TEX temp[20].x, input[3].xy__, 2D[1]; 7: src0.xyz = temp[20] MAD temp[3].x, src0.x__, src0.111, src0.000 8: src0.w = input[0] MAD temp[0].y, src0._w_, src0.111, src0.000 9: src0.w = input[1] MAD temp[1].y, src0._w_, src0.111, src0.000 10: src0.w = input[2] MAD temp[2].y, src0._w_, src0.111, src0.000 11: src0.w = input[3] MAD temp[3].y, src0._w_, src0.111, src0.000 12: TEX temp[21].x, temp[0].xy__, 2D[0]; 13: src0.xyz = temp[21] MAD temp[0].x, src0.x__, src0.111, src0.000 14: TEX temp[22].x, input[0].xyz_, 3D[2]; 15: src0.xyz = temp[22] MAD temp[4].x, src0.x__, src0.111, src0.000 16: TEX temp[23].y, temp[1].xy__, 2D[0]; 17: src0.xyz = temp[23] MAD temp[0].y, src0._y_, src0.111, src0.000 18: TEX temp[24].y, input[1].xyz_, 3D[2]; 19: src0.xyz = temp[24] MAD temp[4].y, src0._y_, src0.111, src0.000 20: TEX temp[25].z, temp[2].xy__, 2D[0]; 21: src0.xyz = temp[25] MAD temp[0].z, src0.__z, src0.111, src0.000 22: TEX temp[26].z, input[2].xyz_, 3D[2]; 23: src0.xyz = temp[26] MAD temp[4].z, src0.__z, src0.111, src0.000 24: TEX temp[27].w, temp[3].xy__, 2D[0]; 25: src0.w = temp[27] MAD temp[0].w, src0.w, src0.1, src0.0 26: TEX temp[28].w, input[3].xyz_, 3D[2]; 27: src0.w = temp[28] MAD temp[4].w, src0.w, src0.1, src0.0 28: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = const[0] MAD temp[29].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[29].w, src0.w, src1.x, src0.0 29: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[29], src1.w = temp[29] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[17].x, input[0].xy__, 2D[1]; 2: TEX temp[18].x, input[1].xy__, 2D[1]; 3: TEX temp[19].x, input[2].xy__, 2D[1]; 4: TEX temp[20].x, input[3].xy__, 2D[1]; 5: TEX temp[22].x, input[0].xyz_, 3D[2]; 6: TEX temp[24].y, input[1].xyz_, 3D[2]; 7: TEX temp[26].z, input[2].xyz_, 3D[2]; 8: TEX temp[28].w, input[3].xyz_, 3D[2] SEM_WAIT SEM_ACQUIRE; 9: src0.w = input[0], src1.w = temp[28] SEM_WAIT MAD temp[0].y, src0._w_, src0.111, src0.000 MAD temp[4].w, src1.w, src0.1, src0.0 10: src0.w = input[1] MAD temp[1].y, src0._w_, src0.111, src0.000 11: src0.w = input[2] MAD temp[2].y, src0._w_, src0.111, src0.000 12: src0.w = input[3] MAD temp[3].y, src0._w_, src0.111, src0.000 13: src0.xyz = temp[17] MAD temp[0].x, src0.x__, src0.111, src0.000 14: src0.xyz = temp[18] MAD temp[1].x, src0.x__, src0.111, src0.000 15: src0.xyz = temp[19] MAD temp[2].x, src0.x__, src0.111, src0.000 16: src0.xyz = temp[20] MAD temp[3].x, src0.x__, src0.111, src0.000 17: src0.xyz = temp[22] MAD temp[4].x, src0.x__, src0.111, src0.000 18: src0.xyz = temp[24] MAD temp[4].y, src0._y_, src0.111, src0.000 19: src0.xyz = temp[26] MAD temp[4].z, src0.__z, src0.111, src0.000 20: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = const[0] MAD temp[29].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[29].w, src0.w, src1.x, src0.0 21: BEGIN_TEX; 22: TEX temp[21].x, temp[0].xy__, 2D[0]; 23: TEX temp[23].y, temp[1].xy__, 2D[0]; 24: TEX temp[25].z, temp[2].xy__, 2D[0]; 25: TEX temp[27].w, temp[3].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 26: src0.xyz = temp[21], src0.w = temp[27] SEM_WAIT MAD temp[0].x, src0.x__, src0.111, src0.000 MAD temp[0].w, src0.w, src0.1, src0.0 27: src0.xyz = temp[23] MAD temp[0].y, src0._y_, src0.111, src0.000 28: src0.xyz = temp[25] MAD temp[0].z, src0.__z, src0.111, src0.000 29: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[29], src1.w = temp[29] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[17].x, input[0].xy__, 2D[1]; 2: TEX temp[18].x, input[1].xy__, 2D[1]; 3: TEX temp[19].x, input[2].xy__, 2D[1]; 4: TEX temp[20].x, input[3].xy__, 2D[1]; 5: TEX temp[22].x, input[0].xyz_, 3D[2]; 6: TEX temp[24].y, input[1].xyz_, 3D[2]; 7: TEX temp[26].z, input[2].xyz_, 3D[2]; 8: TEX temp[28].w, input[3].xyz_, 3D[2] SEM_WAIT SEM_ACQUIRE; 9: src0.w = input[0], src1.w = temp[28] SEM_WAIT MAD temp[0].y, src0._w_, src0.111, src0.000 MAD temp[4].w, src1.w, src0.1, src0.0 10: src0.w = input[1] MAD temp[1].y, src0._w_, src0.111, src0.000 11: src0.w = input[2] MAD temp[2].y, src0._w_, src0.111, src0.000 12: src0.w = input[3] MAD temp[3].y, src0._w_, src0.111, src0.000 13: src0.xyz = temp[17] MAD temp[0].x, src0.x__, src0.111, src0.000 14: src0.xyz = temp[18] MAD temp[1].x, src0.x__, src0.111, src0.000 15: src0.xyz = temp[19] MAD temp[2].x, src0.x__, src0.111, src0.000 16: src0.xyz = temp[20] MAD temp[3].x, src0.x__, src0.111, src0.000 17: src0.xyz = temp[22] MAD temp[4].x, src0.x__, src0.111, src0.000 18: src0.xyz = temp[24] MAD temp[4].y, src0._y_, src0.111, src0.000 19: src0.xyz = temp[26] MAD temp[4].z, src0.__z, src0.111, src0.000 20: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = const[0] MAD temp[29].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[29].w, src0.w, src1.x, src0.0 21: BEGIN_TEX; 22: TEX temp[21].x, temp[0].xy__, 2D[0]; 23: TEX temp[23].y, temp[1].xy__, 2D[0]; 24: TEX temp[25].z, temp[2].xy__, 2D[0]; 25: TEX temp[27].w, temp[3].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 26: src0.xyz = temp[21], src0.w = temp[27] SEM_WAIT MAD temp[0].x, src0.x__, src0.111, src0.000 MAD temp[0].w, src0.w, src0.1, src0.0 27: src0.xyz = temp[23] MAD temp[0].y, src0._y_, src0.111, src0.000 28: src0.xyz = temp[25] MAD temp[0].z, src0.__z, src0.111, src0.000 29: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[29], src1.w = temp[29] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[4].x, input[0].xy__, 2D[1]; 2: TEX temp[5].x, input[1].xy__, 2D[1]; 3: TEX temp[6].x, input[2].xy__, 2D[1]; 4: TEX temp[7].x, input[3].xy__, 2D[1]; 5: TEX temp[8].x, input[0].xyz_, 3D[2]; 6: TEX temp[9].y, input[1].xyz_, 3D[2]; 7: TEX temp[10].z, input[2].xyz_, 3D[2]; 8: TEX temp[11].w, input[3].xyz_, 3D[2] SEM_WAIT SEM_ACQUIRE; 9: src0.w = input[0], src1.w = temp[11] SEM_WAIT MAD temp[0].y, src0._w_, src0.11_, src0.00_ MAD temp[0].w, src1.w, src0.1, src0.0 10: src0.w = input[1] MAD temp[1].y, src0._w_, src0.11_, src0.00_ 11: src0.w = input[2] MAD temp[2].y, src0._w_, src0.11_, src0.00_ 12: src0.w = input[3] MAD temp[3].y, src0._w_, src0.11_, src0.00_ 13: src0.xyz = temp[4] MAD temp[0].x, src0.x__, src0.11_, src0.00_ 14: src0.xyz = temp[5] MAD temp[1].x, src0.x__, src0.11_, src0.00_ 15: src0.xyz = temp[6] MAD temp[2].x, src0.x__, src0.11_, src0.00_ 16: src0.xyz = temp[7] MAD temp[3].x, src0.x__, src0.11_, src0.00_ 17: src0.xyz = temp[8] MAD temp[4].x, src0.x__, src0.111, src0.000 18: src0.xyz = temp[9] MAD temp[4].y, src0._y_, src0.111, src0.000 19: src0.xyz = temp[10] MAD temp[4].z, src0.__z, src0.111, src0.000 20: src0.xyz = temp[4], src0.w = temp[0], src1.xyz = const[0] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[0].w, src0.w, src1.x, src0.0 21: BEGIN_TEX; 22: TEX temp[5].x, temp[0].xy__, 2D[0]; 23: TEX temp[1].y, temp[1].xy__, 2D[0]; 24: TEX temp[2].z, temp[2].xy__, 2D[0]; 25: TEX temp[3].w, temp[3].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 26: src0.xyz = temp[5], src0.w = temp[3] SEM_WAIT MAD temp[0].x, src0.x__, src0.111, src0.000 MAD temp[3].w, src0.w, src0.1, src0.0 27: src0.xyz = temp[1] MAD temp[0].y, src0._y_, src0.111, src0.000 28: src0.xyz = temp[2] MAD temp[0].z, src0.__z, src0.111, src0.000 29: src0.xyz = temp[0], src0.w = temp[3], src1.xyz = temp[4], src1.w = temp[0] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 pc=1************************************* Hardware program ---------------- code_offset_ext: 00000000 NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 11, tex_end: 7 (code_addr: 000e02c0) TEX: TEX t4, t0, texture[1] (00008900) TEX t5, t1, texture[1] (00008941) TEX t6, t2, texture[1] (00008982) TEX t7, t3, texture[1] (000089c3) TEX t8, t0, texture[2] (00009200) TEX t9, t1, texture[2] (00009241) TEX t10, t2, texture[2] (00009282) TEX t11, t3, texture[2] (000092c3) 0: xyz: t0 t0 t0 bias-> t0.y (01000000) w: t0 t11 t0 bias-> t0.w (008002c0) xyz: t0.www 1.0 0.0 op: 00050a8c w: t11.w 1.0 0.0 op: 0004088a 1: xyz: t0 t0 t0 bias-> t1.y (01040000) 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: t0 t0 t0 bias-> t2.y (01080000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t0 t0 bias-> t3.y (010c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 4: xyz: t4 t0 t0 bias-> t0.x (00800004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz 1.0 0.0 op: 00050a80 w: t4.x t4.x t4.x op: 00000000 5: xyz: t5 t0 t0 bias-> t1.x (00840005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz 1.0 0.0 op: 00050a80 w: t5.x t5.x t5.x op: 00000000 6: xyz: t6 t0 t0 bias-> t2.x (00880006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 1.0 0.0 op: 00050a80 w: t6.x t6.x t6.x op: 00000000 7: xyz: t7 t0 t0 bias-> t3.x (008c0007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz 1.0 0.0 op: 00050a80 w: t7.x t7.x t7.x op: 00000000 8: xyz: t8 t0 t0 bias-> t4.x (00900008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz 1.0 0.0 op: 00050a80 w: t8.x t8.x t8.x op: 00000000 9: xyz: t9 t0 t0 bias-> t4.y (01100009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz 1.0 0.0 op: 00050a80 w: t9.x t9.x t9.x op: 00000000 10: xyz: t10 t0 t0 bias-> t4.z (0210000a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xyz 1.0 0.0 op: 00050a80 w: t10.x t10.x t10.x op: 00000000 11: xyz: t4 c0 t0 bias-> t4.xyz (03900804) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t4.xyz c0.xxx 0.0 op: 00050280 w: t0.w c0.x 0.0 op: 00040189 NODE 1: alu_offset: 12, tex_offset: 8, alu_end: 3, tex_end: 3 (code_addr: 004680cc) TEX: TEX t5, t0, texture[0] (00008140) TEX t1, t1, texture[0] (00008041) TEX t2, t2, texture[0] (00008082) TEX t3, t3, texture[0] (000080c3) 12: xyz: t5 t0 t0 bias-> t0.x (00800005) w: t3 t0 t0 bias-> t3.w (008c0003) xyz: t5.xyz 1.0 0.0 op: 00050a80 w: t3.w 1.0 0.0 op: 00040889 13: xyz: t1 t0 t0 bias-> t0.y (01000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 14: xyz: t2 t0 t0 bias-> t0.z (02000002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t2.x t2.x t2.x op: 00000000 15: xyz: t0 t4 t0 bias-> o0.xyz (1c000100) w: t3 t0 t0 bias-> o0.w (01000003) xyz: t0.xyz t4.xyz 0.0 op: 00050200 w: t3.w t0.w 0.0 op: 00040509 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL IN[1], GENERIC[1], LINEAR DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0..15] IMM FLT32 { 0.0000, 0.0010, 0.0020, 0.0029} IMM FLT32 { 0.0039, 0.0049, 0.0059, 0.0068} IMM FLT32 {16384.0000, 0.5000, -0.0000, 0.0000} 0: MOV TEMP[0].x, IN[0] 1: ADD TEMP[0].y, IN[0], IMM[0].xxxx 2: MOV TEMP[1].x, IN[1] 3: ADD TEMP[1].y, IN[1], IMM[0].xxxx 4: MOV TEMP[2].x, IN[0] 5: ADD TEMP[2].y, IN[0], IMM[0].yyyy 6: MOV TEMP[3].x, IN[1] 7: ADD TEMP[3].y, IN[1], IMM[0].yyyy 8: MOV TEMP[4].x, IN[0] 9: ADD TEMP[4].y, IN[0], IMM[0].zzzz 10: MOV TEMP[5].x, IN[1] 11: ADD TEMP[5].y, IN[1], IMM[0].zzzz 12: MOV TEMP[6].x, IN[0] 13: ADD TEMP[6].y, IN[0], IMM[0].wwww 14: MOV TEMP[7].x, IN[1] 15: ADD TEMP[7].y, IN[1], IMM[0].wwww 16: MOV TEMP[8].x, IN[0] 17: ADD TEMP[8].y, IN[0], IMM[1].xxxx 18: MOV TEMP[9].x, IN[1] 19: ADD TEMP[9].y, IN[1], IMM[1].xxxx 20: MOV TEMP[10].x, IN[0] 21: ADD TEMP[10].y, IN[0], IMM[1].yyyy 22: MOV TEMP[11].x, IN[1] 23: ADD TEMP[11].y, IN[1], IMM[1].yyyy 24: MOV TEMP[12].x, IN[0] 25: ADD TEMP[12].y, IN[0], IMM[1].zzzz 26: MOV TEMP[13].x, IN[1] 27: ADD TEMP[13].y, IN[1], IMM[1].zzzz 28: MOV TEMP[14].x, IN[0] 29: ADD TEMP[14].y, IN[0], IMM[1].wwww 30: MOV TEMP[15].x, IN[1] 31: ADD TEMP[15].y, IN[1], IMM[1].wwww 32: TEX TEMP[0], TEMP[0], SAMP[0], 2D 33: TEX TEMP[1], TEMP[1], SAMP[0], 2D 34: TEX TEMP[2], TEMP[2], SAMP[0], 2D 35: TEX TEMP[3], TEMP[3], SAMP[0], 2D 36: TEX TEMP[4], TEMP[4], SAMP[0], 2D 37: TEX TEMP[5], TEMP[5], SAMP[0], 2D 38: TEX TEMP[6], TEMP[6], SAMP[0], 2D 39: TEX TEMP[7], TEMP[7], SAMP[0], 2D 40: TEX TEMP[8], TEMP[8], SAMP[0], 2D 41: TEX TEMP[9], TEMP[9], SAMP[0], 2D 42: TEX TEMP[10], TEMP[10], SAMP[0], 2D 43: TEX TEMP[11], TEMP[11], SAMP[0], 2D 44: TEX TEMP[12], TEMP[12], SAMP[0], 2D 45: TEX TEMP[13], TEMP[13], SAMP[0], 2D 46: TEX TEMP[14], TEMP[14], SAMP[0], 2D 47: TEX TEMP[15], TEMP[15], SAMP[0], 2D 48: ADD TEMP[0], TEMP[0], TEMP[2] 49: ADD TEMP[1], TEMP[1], TEMP[3] 50: ADD TEMP[0], TEMP[0], TEMP[4] 51: ADD TEMP[1], TEMP[1], TEMP[5] 52: ADD TEMP[0], TEMP[0], TEMP[6] 53: ADD TEMP[1], TEMP[1], TEMP[7] 54: ADD TEMP[0], TEMP[0], TEMP[8] 55: ADD TEMP[1], TEMP[1], TEMP[9] 56: ADD TEMP[0], TEMP[0], TEMP[10] 57: ADD TEMP[1], TEMP[1], TEMP[11] 58: ADD TEMP[0], TEMP[0], TEMP[12] 59: ADD TEMP[1], TEMP[1], TEMP[13] 60: ADD TEMP[0], TEMP[0], TEMP[14] 61: ADD TEMP[1], TEMP[1], TEMP[15] 62: ADD TEMP[0], TEMP[0], TEMP[1] 63: DP4 TEMP[0], |TEMP[0]|, IMM[2].xxxx 64: MUL TEMP[0].w, |TEMP[15]|, IMM[2].xxxx 65: FRC TEMP[0], TEMP[0] 66: SGT TEMP[0], IMM[2].yyyy, |TEMP[0]| 67: CMP TEMP[0].w, -TEMP[0], IMM[2].wwww, IMM[2].zzzz 68: MUL TEMP[0].w, TEMP[0], TEMP[0].xxxx 69: MOV OUT[0].xyz, TEMP[15] 70: ADD OUT[0].w, TEMP[0], TEMP[15] 71: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: ADD temp[16], -const[2].yyyy, |temp[0]|; 67: CMP temp[0], temp[16], none.1111, none.0000; 68: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 69: MUL temp[0].w, temp[0], temp[0].xxxx; 70: MOV output[0].xyz, temp[15]; 71: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: ADD temp[0].y, input[0]._y__, const[0]._x__; 2: MOV temp[1].x, input[1].x___; 3: ADD temp[1].y, input[1]._y__, const[0]._x__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: ADD temp[4].y, input[0]._y__, const[0]._z__; 10: MOV temp[5].x, input[1].x___; 11: ADD temp[5].y, input[1]._y__, const[0]._z__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: MOV temp[8].x, input[0].x___; 17: ADD temp[8].y, input[0]._y__, const[1]._x__; 18: MOV temp[9].x, input[1].x___; 19: ADD temp[9].y, input[1]._y__, const[1]._x__; 20: MOV temp[10].x, input[0].x___; 21: ADD temp[10].y, input[0]._y__, const[1]._y__; 22: MOV temp[11].x, input[1].x___; 23: ADD temp[11].y, input[1]._y__, const[1]._y__; 24: MOV temp[12].x, input[0].x___; 25: ADD temp[12].y, input[0]._y__, const[1]._z__; 26: MOV temp[13].x, input[1].x___; 27: ADD temp[13].y, input[1]._y__, const[1]._z__; 28: MOV temp[14].x, input[0].x___; 29: ADD temp[14].y, input[0]._y__, const[1]._w__; 30: MOV temp[15].x, input[1].x___; 31: ADD temp[15].y, input[1]._y__, const[1]._w__; 32: TEX temp[0], temp[0].xy__, 2D[0]; 33: TEX temp[1], temp[1].xy__, 2D[0]; 34: TEX temp[2], temp[2].xy__, 2D[0]; 35: TEX temp[3], temp[3].xy__, 2D[0]; 36: TEX temp[4], temp[4].xy__, 2D[0]; 37: TEX temp[5], temp[5].xy__, 2D[0]; 38: TEX temp[6], temp[6].xy__, 2D[0]; 39: TEX temp[7], temp[7].xy__, 2D[0]; 40: TEX temp[8], temp[8].xy__, 2D[0]; 41: TEX temp[9], temp[9].xy__, 2D[0]; 42: TEX temp[10], temp[10].xy__, 2D[0]; 43: TEX temp[11], temp[11].xy__, 2D[0]; 44: TEX temp[12], temp[12].xy__, 2D[0]; 45: TEX temp[13], temp[13].xy__, 2D[0]; 46: TEX temp[14], temp[14].xy__, 2D[0]; 47: TEX temp[15], temp[15].xy__, 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0].x, |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15].___w|, const[2].___x; 65: FRC temp[0].xw, temp[0].x__w; 66: ADD temp[16].xw, -const[2].y__y, |temp[0].x__w|; 67: CMP temp[0].xw, temp[16].x__w, none.1__1, none.0__0; 68: CMP temp[0].w, -temp[0].___w, const[2].___w, const[2].___z; 69: MUL temp[0].w, temp[0].___w, temp[0].___x; 70: MOV output[0].xyz, temp[15].xyz_; 71: ADD output[0].w, temp[0].___w, temp[15].___w; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: ADD temp[0].y, input[0]._y__, const[0]._x__; 2: MOV temp[1].x, input[1].x___; 3: ADD temp[1].y, input[1]._y__, const[0]._x__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: ADD temp[4].y, input[0]._y__, const[0]._z__; 10: MOV temp[5].x, input[1].x___; 11: ADD temp[5].y, input[1]._y__, const[0]._z__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: MOV temp[8].x, input[0].x___; 17: ADD temp[8].y, input[0]._y__, const[1]._x__; 18: MOV temp[9].x, input[1].x___; 19: ADD temp[9].y, input[1]._y__, const[1]._x__; 20: MOV temp[10].x, input[0].x___; 21: ADD temp[10].y, input[0]._y__, const[1]._y__; 22: MOV temp[11].x, input[1].x___; 23: ADD temp[11].y, input[1]._y__, const[1]._y__; 24: MOV temp[12].x, input[0].x___; 25: ADD temp[12].y, input[0]._y__, const[1]._z__; 26: MOV temp[13].x, input[1].x___; 27: ADD temp[13].y, input[1]._y__, const[1]._z__; 28: MOV temp[14].x, input[0].x___; 29: ADD temp[14].y, input[0]._y__, const[1]._w__; 30: MOV temp[15].x, input[1].x___; 31: ADD temp[15].y, input[1]._y__, const[1]._w__; 32: TEX temp[0], temp[0].xy__, 2D[0]; 33: TEX temp[1], temp[1].xy__, 2D[0]; 34: TEX temp[2], temp[2].xy__, 2D[0]; 35: TEX temp[3], temp[3].xy__, 2D[0]; 36: TEX temp[4], temp[4].xy__, 2D[0]; 37: TEX temp[5], temp[5].xy__, 2D[0]; 38: TEX temp[6], temp[6].xy__, 2D[0]; 39: TEX temp[7], temp[7].xy__, 2D[0]; 40: TEX temp[8], temp[8].xy__, 2D[0]; 41: TEX temp[9], temp[9].xy__, 2D[0]; 42: TEX temp[10], temp[10].xy__, 2D[0]; 43: TEX temp[11], temp[11].xy__, 2D[0]; 44: TEX temp[12], temp[12].xy__, 2D[0]; 45: TEX temp[13], temp[13].xy__, 2D[0]; 46: TEX temp[14], temp[14].xy__, 2D[0]; 47: TEX temp[15], temp[15].xy__, 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0].x, |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15].___w|, const[2].___x; 65: FRC temp[0].xw, temp[0].x__w; 66: ADD temp[16].xw, -const[2].y__y, |temp[0].x__w|; 67: CMP temp[0].xw, temp[16].x__w, none.1__1, none.0__0; 68: CMP temp[0].w, -temp[0].___w, const[2].___w, const[2].___z; 69: MUL temp[0].w, temp[0].___w, temp[0].___x; 70: MOV output[0].xyz, temp[15].xyz_; 71: ADD output[0].w, temp[0].___w, temp[15].___w; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: ADD temp[0].y, input[0]._y__, const[0]._x__; 2: MOV temp[1].x, input[1].x___; 3: ADD temp[1].y, input[1]._y__, const[0]._x__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: ADD temp[4].y, input[0]._y__, const[0]._z__; 10: MOV temp[5].x, input[1].x___; 11: ADD temp[5].y, input[1]._y__, const[0]._z__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: MOV temp[8].x, input[0].x___; 17: ADD temp[8].y, input[0]._y__, const[1]._x__; 18: MOV temp[9].x, input[1].x___; 19: ADD temp[9].y, input[1]._y__, const[1]._x__; 20: MOV temp[10].x, input[0].x___; 21: ADD temp[10].y, input[0]._y__, const[1]._y__; 22: MOV temp[11].x, input[1].x___; 23: ADD temp[11].y, input[1]._y__, const[1]._y__; 24: MOV temp[12].x, input[0].x___; 25: ADD temp[12].y, input[0]._y__, const[1]._z__; 26: MOV temp[13].x, input[1].x___; 27: ADD temp[13].y, input[1]._y__, const[1]._z__; 28: MOV temp[14].x, input[0].x___; 29: ADD temp[14].y, input[0]._y__, const[1]._w__; 30: MOV temp[15].x, input[1].x___; 31: ADD temp[15].y, input[1]._y__, const[1]._w__; 32: TEX temp[17], temp[0].xy__, 2D[0]; 33: TEX temp[18], temp[1].xy__, 2D[0]; 34: TEX temp[19], temp[2].xy__, 2D[0]; 35: TEX temp[20], temp[3].xy__, 2D[0]; 36: TEX temp[21], temp[4].xy__, 2D[0]; 37: TEX temp[22], temp[5].xy__, 2D[0]; 38: TEX temp[23], temp[6].xy__, 2D[0]; 39: TEX temp[24], temp[7].xy__, 2D[0]; 40: TEX temp[25], temp[8].xy__, 2D[0]; 41: TEX temp[26], temp[9].xy__, 2D[0]; 42: TEX temp[27], temp[10].xy__, 2D[0]; 43: TEX temp[28], temp[11].xy__, 2D[0]; 44: TEX temp[29], temp[12].xy__, 2D[0]; 45: TEX temp[30], temp[13].xy__, 2D[0]; 46: TEX temp[31], temp[14].xy__, 2D[0]; 47: TEX temp[32], temp[15].xy__, 2D[0]; 48: ADD temp[33], temp[17], temp[19]; 49: ADD temp[34], temp[18], temp[20]; 50: ADD temp[35], temp[33], temp[21]; 51: ADD temp[36], temp[34], temp[22]; 52: ADD temp[37], temp[35], temp[23]; 53: ADD temp[38], temp[36], temp[24]; 54: ADD temp[39], temp[37], temp[25]; 55: ADD temp[40], temp[38], temp[26]; 56: ADD temp[41], temp[39], temp[27]; 57: ADD temp[42], temp[40], temp[28]; 58: ADD temp[43], temp[41], temp[29]; 59: ADD temp[44], temp[42], temp[30]; 60: ADD temp[45], temp[43], temp[31]; 61: ADD temp[46], temp[44], temp[32]; 62: ADD temp[47], temp[45], temp[46]; 63: DP4 temp[0].x, |temp[47]|, const[2].xxxx; 64: MUL temp[0].w, |temp[32].___w|, const[2].___x; 65: FRC temp[48].xw, temp[0].x__w; 66: ADD temp[49].xw, -const[2].y__y, |temp[48].x__w|; 67: CMP temp[50].xw, temp[49].x__w, none.1__1, none.0__0; 68: CMP temp[51].w, -temp[50].___w, const[2].___w, const[2].___z; 69: MUL temp[52].w, temp[51].___w, temp[50].___x; 70: MOV output[0].xyz, temp[32].xyz_; 71: ADD output[0].w, temp[52].___w, temp[32].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: MOV temp[0].y, input[0]._y__; 2: MOV temp[1].x, input[1].x___; 3: MOV temp[1].y, input[1]._y__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: ADD temp[4].y, input[0]._y__, const[0]._z__; 10: MOV temp[5].x, input[1].x___; 11: ADD temp[5].y, input[1]._y__, const[0]._z__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: MOV temp[8].x, input[0].x___; 17: ADD temp[8].y, input[0]._y__, const[1]._x__; 18: MOV temp[9].x, input[1].x___; 19: ADD temp[9].y, input[1]._y__, const[1]._x__; 20: MOV temp[10].x, input[0].x___; 21: ADD temp[10].y, input[0]._y__, const[1]._y__; 22: MOV temp[11].x, input[1].x___; 23: ADD temp[11].y, input[1]._y__, const[1]._y__; 24: MOV temp[12].x, input[0].x___; 25: ADD temp[12].y, input[0]._y__, const[1]._z__; 26: MOV temp[13].x, input[1].x___; 27: ADD temp[13].y, input[1]._y__, const[1]._z__; 28: MOV temp[14].x, input[0].x___; 29: ADD temp[14].y, input[0]._y__, const[1]._w__; 30: MOV temp[15].x, input[1].x___; 31: ADD temp[15].y, input[1]._y__, const[1]._w__; 32: TEX temp[17], temp[0].xy__, 2D[0]; 33: TEX temp[18], temp[1].xy__, 2D[0]; 34: TEX temp[19], temp[2].xy__, 2D[0]; 35: TEX temp[20], temp[3].xy__, 2D[0]; 36: TEX temp[21], temp[4].xy__, 2D[0]; 37: TEX temp[22], temp[5].xy__, 2D[0]; 38: TEX temp[23], temp[6].xy__, 2D[0]; 39: TEX temp[24], temp[7].xy__, 2D[0]; 40: TEX temp[25], temp[8].xy__, 2D[0]; 41: TEX temp[26], temp[9].xy__, 2D[0]; 42: TEX temp[27], temp[10].xy__, 2D[0]; 43: TEX temp[28], temp[11].xy__, 2D[0]; 44: TEX temp[29], temp[12].xy__, 2D[0]; 45: TEX temp[30], temp[13].xy__, 2D[0]; 46: TEX temp[31], temp[14].xy__, 2D[0]; 47: TEX temp[32], temp[15].xy__, 2D[0]; 48: ADD temp[35], (temp[19] + temp[17]), temp[21]; 49: ADD temp[36], (temp[20] + temp[18]), temp[22]; 50: ADD temp[39], (temp[23] + temp[35]), temp[25]; 51: ADD temp[40], (temp[24] + temp[36]), temp[26]; 52: ADD temp[43], (temp[27] + temp[39]), temp[29]; 53: ADD temp[44], (temp[28] + temp[40]), temp[30]; 54: ADD temp[46], temp[44], temp[32]; 55: ADD temp[47], (temp[31] + temp[43]), temp[46]; 56: DP4 temp[0].x, |temp[47]|, const[2].xxxx; 57: MUL temp[0].w, |temp[32].___w|, const[2].___x; 58: FRC temp[48].xw, temp[0].x__w; 59: ADD temp[49].xw, -none.H__H, |temp[48].x__w|; 60: CMP temp[50].xw, temp[49].x__w, none.1__1, none.0__0; 61: CMP temp[51].w, -temp[50].___w, const[2].___w, const[2].___z; 62: MUL temp[52].w, temp[51].___w, temp[50].___x; 63: MOV output[0].xyz, temp[32].xyz_; 64: ADD output[0].w, temp[52].___w, temp[32].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: MOV temp[0].y, input[0]._y__; 2: MOV temp[1].x, input[1].x___; 3: MOV temp[1].y, input[1]._y__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: ADD temp[4].y, input[0]._y__, const[0]._z__; 10: MOV temp[5].x, input[1].x___; 11: ADD temp[5].y, input[1]._y__, const[0]._z__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: MOV temp[8].x, input[0].x___; 17: ADD temp[8].y, input[0]._y__, const[1]._x__; 18: MOV temp[9].x, input[1].x___; 19: ADD temp[9].y, input[1]._y__, const[1]._x__; 20: MOV temp[10].x, input[0].x___; 21: ADD temp[10].y, input[0]._y__, const[1]._y__; 22: MOV temp[11].x, input[1].x___; 23: ADD temp[11].y, input[1]._y__, const[1]._y__; 24: MOV temp[12].x, input[0].x___; 25: ADD temp[12].y, input[0]._y__, const[1]._z__; 26: MOV temp[13].x, input[1].x___; 27: ADD temp[13].y, input[1]._y__, const[1]._z__; 28: MOV temp[14].x, input[0].x___; 29: ADD temp[14].y, input[0]._y__, const[1]._w__; 30: MOV temp[15].x, input[1].x___; 31: ADD temp[15].y, input[1]._y__, const[1]._w__; 32: TEX temp[17], temp[0].xy__, 2D[0]; 33: TEX temp[18], temp[1].xy__, 2D[0]; 34: TEX temp[19], temp[2].xy__, 2D[0]; 35: TEX temp[20], temp[3].xy__, 2D[0]; 36: TEX temp[21], temp[4].xy__, 2D[0]; 37: TEX temp[22], temp[5].xy__, 2D[0]; 38: TEX temp[23], temp[6].xy__, 2D[0]; 39: TEX temp[24], temp[7].xy__, 2D[0]; 40: TEX temp[25], temp[8].xy__, 2D[0]; 41: TEX temp[26], temp[9].xy__, 2D[0]; 42: TEX temp[27], temp[10].xy__, 2D[0]; 43: TEX temp[28], temp[11].xy__, 2D[0]; 44: TEX temp[29], temp[12].xy__, 2D[0]; 45: TEX temp[30], temp[13].xy__, 2D[0]; 46: TEX temp[31], temp[14].xy__, 2D[0]; 47: TEX temp[32], temp[15].xy__, 2D[0]; 48: ADD temp[35], (temp[19] + temp[17]), temp[21]; 49: ADD temp[36], (temp[20] + temp[18]), temp[22]; 50: ADD temp[39], (temp[23] + temp[35]), temp[25]; 51: ADD temp[40], (temp[24] + temp[36]), temp[26]; 52: ADD temp[43], (temp[27] + temp[39]), temp[29]; 53: ADD temp[44], (temp[28] + temp[40]), temp[30]; 54: ADD temp[46], temp[44], temp[32]; 55: ADD temp[47], (temp[31] + temp[43]), temp[46]; 56: DP4 temp[0].x, |temp[47]|, const[2].xxxx; 57: MUL temp[0].w, |temp[32].___w|, const[2].___x; 58: FRC temp[48].xw, temp[0].x__w; 59: ADD temp[49].xw, -none.H__H, |temp[48].x__w|; 60: CMP temp[50].xw, temp[49].x__w, none.1__1, none.0__0; 61: CMP temp[51].w, -temp[50].___w, const[2].___w, const[2].___z; 62: MUL temp[52].w, temp[51].___w, temp[50].___x; 63: MOV output[0].xyz, temp[32].xyz_; 64: ADD output[0].w, temp[52].___w, temp[32].___w; CONST[0] = { 0.0000 0.0010 0.0020 0.0029 } CONST[1] = { 0.0039 0.0049 0.0059 0.0068 } CONST[2] = { 16384.0000 0.5000 -0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: MOV temp[0].y, input[0]._y__; 2: MOV temp[1].x, input[1].x___; 3: MOV temp[1].y, input[1]._y__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: ADD temp[4].y, input[0]._y__, const[0]._z__; 10: MOV temp[5].x, input[1].x___; 11: ADD temp[5].y, input[1]._y__, const[0]._z__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: MOV temp[8].x, input[0].x___; 17: ADD temp[8].y, input[0]._y__, const[1]._x__; 18: MOV temp[9].x, input[1].x___; 19: ADD temp[9].y, input[1]._y__, const[1]._x__; 20: MOV temp[10].x, input[0].x___; 21: ADD temp[10].y, input[0]._y__, const[1]._y__; 22: MOV temp[11].x, input[1].x___; 23: ADD temp[11].y, input[1]._y__, const[1]._y__; 24: MOV temp[12].x, input[0].x___; 25: ADD temp[12].y, input[0]._y__, const[1]._z__; 26: MOV temp[13].x, input[1].x___; 27: ADD temp[13].y, input[1]._y__, const[1]._z__; 28: MOV temp[14].x, input[0].x___; 29: ADD temp[14].y, input[0]._y__, const[1]._w__; 30: MOV temp[15].x, input[1].x___; 31: ADD temp[15].y, input[1]._y__, const[1]._w__; 32: TEX temp[17], temp[0].xy__, 2D[0]; 33: TEX temp[18], temp[1].xy__, 2D[0]; 34: TEX temp[19], temp[2].xy__, 2D[0]; 35: TEX temp[20], temp[3].xy__, 2D[0]; 36: TEX temp[21], temp[4].xy__, 2D[0]; 37: TEX temp[22], temp[5].xy__, 2D[0]; 38: TEX temp[23], temp[6].xy__, 2D[0]; 39: TEX temp[24], temp[7].xy__, 2D[0]; 40: TEX temp[25], temp[8].xy__, 2D[0]; 41: TEX temp[26], temp[9].xy__, 2D[0]; 42: TEX temp[27], temp[10].xy__, 2D[0]; 43: TEX temp[28], temp[11].xy__, 2D[0]; 44: TEX temp[29], temp[12].xy__, 2D[0]; 45: TEX temp[30], temp[13].xy__, 2D[0]; 46: TEX temp[31], temp[14].xy__, 2D[0]; 47: TEX temp[32], temp[15].xy__, 2D[0]; 48: ADD temp[35], (temp[19] + temp[17]), temp[21]; 49: ADD temp[36], (temp[20] + temp[18]), temp[22]; 50: ADD temp[39], (temp[23] + temp[35]), temp[25]; 51: ADD temp[40], (temp[24] + temp[36]), temp[26]; 52: ADD temp[43], (temp[27] + temp[39]), temp[29]; 53: ADD temp[44], (temp[28] + temp[40]), temp[30]; 54: ADD temp[46], temp[44], temp[32]; 55: ADD temp[47], (temp[31] + temp[43]), temp[46]; 56: DP4 temp[0].x, |temp[47]|, const[2].xxxx; 57: MUL temp[0].w, |temp[32].___w|, const[2].___x; 58: FRC temp[48].xw, temp[0].x__w; 59: ADD temp[49].xw, -none.H__H, |temp[48].x__w|; 60: CMP temp[50].xw, temp[49].x__w, none.1__1, none.0__0; 61: CMP temp[51].w, -temp[50].___w, const[2].___w, const[2].___z; 62: MUL temp[52].w, temp[51].___w, temp[50].___x; 63: MOV output[0].xyz, temp[32].xyz_; 64: ADD output[0].w, temp[52].___w, temp[32].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[0].x, src0.x__, src0.111, src0.000 1: src0.xyz = input[0] MAD temp[0].y, src0._y_, src0.111, src0.000 2: src0.xyz = input[1] MAD temp[1].x, src0.x__, src0.111, src0.000 3: src0.xyz = input[1] MAD temp[1].y, src0._y_, src0.111, src0.000 4: src0.xyz = input[0] MAD temp[2].x, src0.x__, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0._y_, src0.111, src1._y_ 6: src0.xyz = input[1] MAD temp[3].x, src0.x__, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0._y_, src0.111, src1._y_ 8: src0.xyz = input[0] MAD temp[4].x, src0.x__, src0.111, src0.000 9: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0._y_, src0.111, src1._z_ 10: src0.xyz = input[1] MAD temp[5].x, src0.x__, src0.111, src0.000 11: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0._y_, src0.111, src1._z_ 12: src0.xyz = input[0] MAD temp[6].x, src0.x__, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0._y_, src0.111, src0._w_ 14: src0.xyz = input[1] MAD temp[7].x, src0.x__, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0._y_, src0.111, src0._w_ 16: src0.xyz = input[0] MAD temp[8].x, src0.x__, src0.111, src0.000 17: src0.xyz = input[0], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._x_ 18: src0.xyz = input[1] MAD temp[9].x, src0.x__, src0.111, src0.000 19: src0.xyz = input[1], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._x_ 20: src0.xyz = input[0] MAD temp[10].x, src0.x__, src0.111, src0.000 21: src0.xyz = input[0], src1.xyz = const[1] MAD temp[10].y, src0._y_, src0.111, src1._y_ 22: src0.xyz = input[1] MAD temp[11].x, src0.x__, src0.111, src0.000 23: src0.xyz = input[1], src1.xyz = const[1] MAD temp[11].y, src0._y_, src0.111, src1._y_ 24: src0.xyz = input[0] MAD temp[12].x, src0.x__, src0.111, src0.000 25: src0.xyz = input[0], src1.xyz = const[1] MAD temp[12].y, src0._y_, src0.111, src1._z_ 26: src0.xyz = input[1] MAD temp[13].x, src0.x__, src0.111, src0.000 27: src0.xyz = input[1], src1.xyz = const[1] MAD temp[13].y, src0._y_, src0.111, src1._z_ 28: src0.xyz = input[0] MAD temp[14].x, src0.x__, src0.111, src0.000 29: src0.xyz = input[0], src0.w = const[1] MAD temp[14].y, src0._y_, src0.111, src0._w_ 30: src0.xyz = input[1] MAD temp[15].x, src0.x__, src0.111, src0.000 31: src0.xyz = input[1], src0.w = const[1] MAD temp[15].y, src0._y_, src0.111, src0._w_ 32: TEX temp[17], temp[0].xy__, 2D[0]; 33: TEX temp[18], temp[1].xy__, 2D[0]; 34: TEX temp[19], temp[2].xy__, 2D[0]; 35: TEX temp[20], temp[3].xy__, 2D[0]; 36: TEX temp[21], temp[4].xy__, 2D[0]; 37: TEX temp[22], temp[5].xy__, 2D[0]; 38: TEX temp[23], temp[6].xy__, 2D[0]; 39: TEX temp[24], temp[7].xy__, 2D[0]; 40: TEX temp[25], temp[8].xy__, 2D[0]; 41: TEX temp[26], temp[9].xy__, 2D[0]; 42: TEX temp[27], temp[10].xy__, 2D[0]; 43: TEX temp[28], temp[11].xy__, 2D[0]; 44: TEX temp[29], temp[12].xy__, 2D[0]; 45: TEX temp[30], temp[13].xy__, 2D[0]; 46: TEX temp[31], temp[14].xy__, 2D[0]; 47: TEX temp[32], temp[15].xy__, 2D[0]; 48: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[19], src1.w = temp[19], src2.xyz = temp[21], src2.w = temp[21], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[35].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[35].w, srcp.w, src0.1, src2.w 49: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[20], src1.w = temp[20], src2.xyz = temp[22], src2.w = temp[22], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[36].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[36].w, srcp.w, src0.1, src2.w 50: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[23], src1.w = temp[23], src2.xyz = temp[25], src2.w = temp[25], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[39].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[39].w, srcp.w, src0.1, src2.w 51: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[24], src1.w = temp[24], src2.xyz = temp[26], src2.w = temp[26], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[40].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[40].w, srcp.w, src0.1, src2.w 52: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[27], src1.w = temp[27], src2.xyz = temp[29], src2.w = temp[29], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[43].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[43].w, srcp.w, src0.1, src2.w 53: src0.xyz = temp[40], src0.w = temp[40], src1.xyz = temp[28], src1.w = temp[28], src2.xyz = temp[30], src2.w = temp[30], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[44].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[44].w, srcp.w, src0.1, src2.w 54: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[32], src1.w = temp[32] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz MAD temp[46].w, src0.w, src0.1, src1.w 55: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = temp[31], src1.w = temp[31], src2.xyz = temp[46], src2.w = temp[46], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[47].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[47].w, srcp.w, src0.1, src2.w 56: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = const[2] DP4 temp[0].x, |src0.xyz|, src1.xxx DP4, |src0.w|, src1.x 57: src0.xyz = const[2], src0.w = temp[32] MAD temp[0].w, |src0.w|, src0.x, src0.0 58: src0.xyz = temp[0], src0.w = temp[0] FRC temp[48].x, src0.x__ FRC temp[48].w, src0.w 59: src0.xyz = temp[48], src0.w = temp[48] MAD temp[49].x, -src0.H__, |src0.111|, |src0.x__| MAD temp[49].w, -src0.H, |src0.1|, |src0.w| 60: src0.xyz = temp[49], src0.w = temp[49] CMP temp[50].x, src0.0__, src0.1__, src0.x__ CMP temp[50].w, src0.0, src0.1, src0.w 61: src0.xyz = const[2], src0.w = const[2], src1.w = temp[50] CMP temp[51].w, src0.z, src0.w, -src1.w 62: src0.xyz = temp[50], src0.w = temp[51] MAD temp[52].w, src0.w, src0.x, src0.0 63: src0.xyz = temp[32] MAD color[0].xyz, src0.xyz, src0.111, src0.000 64: src0.w = temp[52], src1.w = temp[32] MAD color[0].w, src0.w, src0.1, src1.w Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0._y_, src0.111, src1._y_ 1: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0._y_, src0.111, src1._y_ 2: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0._y_, src0.111, src1._z_ 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0._y_, src0.111, src1._z_ 4: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0._y_, src0.111, src0._w_ 5: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0._y_, src0.111, src0._w_ 6: src0.xyz = input[0], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._x_ 7: src0.xyz = input[1], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._x_ 8: src0.xyz = input[0], src1.xyz = const[1] MAD temp[10].y, src0._y_, src0.111, src1._y_ 9: src0.xyz = input[1], src1.xyz = const[1] MAD temp[11].y, src0._y_, src0.111, src1._y_ 10: src0.xyz = input[0], src1.xyz = const[1] MAD temp[12].y, src0._y_, src0.111, src1._z_ 11: src0.xyz = input[1], src1.xyz = const[1] MAD temp[13].y, src0._y_, src0.111, src1._z_ 12: src0.xyz = input[0], src0.w = const[1] MAD temp[14].y, src0._y_, src0.111, src0._w_ 13: src0.xyz = input[1], src0.w = const[1] MAD temp[15].y, src0._y_, src0.111, src0._w_ 14: src0.xyz = input[0] MAD temp[0].x, src0.x__, src0.111, src0.000 15: src0.xyz = input[0] MAD temp[0].y, src0._y_, src0.111, src0.000 16: src0.xyz = input[1] MAD temp[1].x, src0.x__, src0.111, src0.000 17: src0.xyz = input[1] MAD temp[1].y, src0._y_, src0.111, src0.000 18: src0.xyz = input[0] MAD temp[2].x, src0.x__, src0.111, src0.000 19: src0.xyz = input[1] MAD temp[3].x, src0.x__, src0.111, src0.000 20: src0.xyz = input[0] MAD temp[4].x, src0.x__, src0.111, src0.000 21: src0.xyz = input[1] MAD temp[5].x, src0.x__, src0.111, src0.000 22: src0.xyz = input[0] MAD temp[6].x, src0.x__, src0.111, src0.000 23: src0.xyz = input[1] MAD temp[7].x, src0.x__, src0.111, src0.000 24: BEGIN_TEX; 25: TEX temp[17], temp[0].xy__, 2D[0]; 26: TEX temp[18], temp[1].xy__, 2D[0]; 27: TEX temp[19], temp[2].xy__, 2D[0]; 28: TEX temp[20], temp[3].xy__, 2D[0]; 29: TEX temp[21], temp[4].xy__, 2D[0]; 30: TEX temp[22], temp[5].xy__, 2D[0]; 31: TEX temp[23], temp[6].xy__, 2D[0]; 32: TEX temp[24], temp[7].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 33: src0.xyz = input[0] MAD temp[8].x, src0.x__, src0.111, src0.000 34: src0.xyz = input[1] MAD temp[9].x, src0.x__, src0.111, src0.000 35: src0.xyz = input[0] MAD temp[10].x, src0.x__, src0.111, src0.000 36: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[19], src1.w = temp[19], src2.xyz = temp[21], src2.w = temp[21], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) SEM_WAIT MAD temp[35].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[35].w, srcp.w, src0.1, src2.w 37: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[20], src1.w = temp[20], src2.xyz = temp[22], src2.w = temp[22], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[36].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[36].w, srcp.w, src0.1, src2.w 38: src0.xyz = input[1] MAD temp[11].x, src0.x__, src0.111, src0.000 39: src0.xyz = input[0] MAD temp[12].x, src0.x__, src0.111, src0.000 40: src0.xyz = input[1] MAD temp[13].x, src0.x__, src0.111, src0.000 41: src0.xyz = input[0] MAD temp[14].x, src0.x__, src0.111, src0.000 42: src0.xyz = input[1] MAD temp[15].x, src0.x__, src0.111, src0.000 43: BEGIN_TEX; 44: TEX temp[25], temp[8].xy__, 2D[0]; 45: TEX temp[26], temp[9].xy__, 2D[0]; 46: TEX temp[27], temp[10].xy__, 2D[0]; 47: TEX temp[28], temp[11].xy__, 2D[0]; 48: TEX temp[29], temp[12].xy__, 2D[0]; 49: TEX temp[30], temp[13].xy__, 2D[0]; 50: TEX temp[31], temp[14].xy__, 2D[0]; 51: TEX temp[32], temp[15].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 52: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[23], src1.w = temp[23], src2.xyz = temp[25], src2.w = temp[25], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) SEM_WAIT MAD temp[39].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[39].w, srcp.w, src0.1, src2.w 53: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[24], src1.w = temp[24], src2.xyz = temp[26], src2.w = temp[26], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[40].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[40].w, srcp.w, src0.1, src2.w 54: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[27], src1.w = temp[27], src2.xyz = temp[29], src2.w = temp[29], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[43].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[43].w, srcp.w, src0.1, src2.w 55: src0.xyz = temp[40], src0.w = temp[40], src1.xyz = temp[28], src1.w = temp[28], src2.xyz = temp[30], src2.w = temp[30], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[44].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[44].w, srcp.w, src0.1, src2.w 56: src0.xyz = const[2], src0.w = temp[32] MAD temp[0].w, |src0.w|, src0.x, src0.0 57: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[32], src1.w = temp[32] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz MAD temp[46].w, src0.w, src0.1, src1.w 58: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = temp[31], src1.w = temp[31], src2.xyz = temp[46], src2.w = temp[46], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[47].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[47].w, srcp.w, src0.1, src2.w 59: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = const[2] DP4 temp[0].x, |src0.xyz|, src1.xxx DP4, |src0.w|, src1.x 60: src0.xyz = temp[0], src0.w = temp[0] FRC temp[48].x, src0.x__ FRC temp[48].w, src0.w 61: src0.xyz = temp[48], src0.w = temp[48] MAD temp[49].x, -src0.H__, |src0.111|, |src0.x__| MAD temp[49].w, -src0.H, |src0.1|, |src0.w| 62: src0.xyz = temp[49], src0.w = temp[49] CMP temp[50].x, src0.0__, src0.1__, src0.x__ CMP temp[50].w, src0.0, src0.1, src0.w 63: src0.xyz = const[2], src0.w = const[2], src1.w = temp[50] CMP temp[51].w, src0.z, src0.w, -src1.w 64: src0.xyz = temp[50], src0.w = temp[51] MAD temp[52].w, src0.w, src0.x, src0.0 65: src0.xyz = temp[32], src0.w = temp[52], src1.w = temp[32] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src1.w Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0._y_, src0.111, src1._y_ 1: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0._y_, src0.111, src1._y_ 2: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0._y_, src0.111, src1._z_ 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0._y_, src0.111, src1._z_ 4: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0._y_, src0.111, src0._w_ 5: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0._y_, src0.111, src0._w_ 6: src0.xyz = input[0], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._x_ 7: src0.xyz = input[1], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._x_ 8: src0.xyz = input[0], src1.xyz = const[1] MAD temp[10].y, src0._y_, src0.111, src1._y_ 9: src0.xyz = input[1], src1.xyz = const[1] MAD temp[11].y, src0._y_, src0.111, src1._y_ 10: src0.xyz = input[0], src1.xyz = const[1] MAD temp[12].y, src0._y_, src0.111, src1._z_ 11: src0.xyz = input[1], src1.xyz = const[1] MAD temp[13].y, src0._y_, src0.111, src1._z_ 12: src0.xyz = input[0], src0.w = const[1] MAD temp[14].y, src0._y_, src0.111, src0._w_ 13: src0.xyz = input[1], src0.w = const[1] MAD temp[15].y, src0._y_, src0.111, src0._w_ 14: src0.xyz = input[0] MAD temp[0].x, src0.x__, src0.111, src0.000 15: src0.xyz = input[0] MAD temp[0].y, src0._y_, src0.111, src0.000 16: src0.xyz = input[1] MAD temp[1].x, src0.x__, src0.111, src0.000 17: src0.xyz = input[1] MAD temp[1].y, src0._y_, src0.111, src0.000 18: src0.xyz = input[0] MAD temp[2].x, src0.x__, src0.111, src0.000 19: src0.xyz = input[1] MAD temp[3].x, src0.x__, src0.111, src0.000 20: src0.xyz = input[0] MAD temp[4].x, src0.x__, src0.111, src0.000 21: src0.xyz = input[1] MAD temp[5].x, src0.x__, src0.111, src0.000 22: src0.xyz = input[0] MAD temp[6].x, src0.x__, src0.111, src0.000 23: src0.xyz = input[1] MAD temp[7].x, src0.x__, src0.111, src0.000 24: BEGIN_TEX; 25: TEX temp[17], temp[0].xy__, 2D[0]; 26: TEX temp[18], temp[1].xy__, 2D[0]; 27: TEX temp[19], temp[2].xy__, 2D[0]; 28: TEX temp[20], temp[3].xy__, 2D[0]; 29: TEX temp[21], temp[4].xy__, 2D[0]; 30: TEX temp[22], temp[5].xy__, 2D[0]; 31: TEX temp[23], temp[6].xy__, 2D[0]; 32: TEX temp[24], temp[7].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 33: src0.xyz = input[0] MAD temp[8].x, src0.x__, src0.111, src0.000 34: src0.xyz = input[1] MAD temp[9].x, src0.x__, src0.111, src0.000 35: src0.xyz = input[0] MAD temp[10].x, src0.x__, src0.111, src0.000 36: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[19], src1.w = temp[19], src2.xyz = temp[21], src2.w = temp[21], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) SEM_WAIT MAD temp[35].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[35].w, srcp.w, src0.1, src2.w 37: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[20], src1.w = temp[20], src2.xyz = temp[22], src2.w = temp[22], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[36].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[36].w, srcp.w, src0.1, src2.w 38: src0.xyz = input[1] MAD temp[11].x, src0.x__, src0.111, src0.000 39: src0.xyz = input[0] MAD temp[12].x, src0.x__, src0.111, src0.000 40: src0.xyz = input[1] MAD temp[13].x, src0.x__, src0.111, src0.000 41: src0.xyz = input[0] MAD temp[14].x, src0.x__, src0.111, src0.000 42: src0.xyz = input[1] MAD temp[15].x, src0.x__, src0.111, src0.000 43: BEGIN_TEX; 44: TEX temp[25], temp[8].xy__, 2D[0]; 45: TEX temp[26], temp[9].xy__, 2D[0]; 46: TEX temp[27], temp[10].xy__, 2D[0]; 47: TEX temp[28], temp[11].xy__, 2D[0]; 48: TEX temp[29], temp[12].xy__, 2D[0]; 49: TEX temp[30], temp[13].xy__, 2D[0]; 50: TEX temp[31], temp[14].xy__, 2D[0]; 51: TEX temp[32], temp[15].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 52: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[23], src1.w = temp[23], src2.xyz = temp[25], src2.w = temp[25], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) SEM_WAIT MAD temp[39].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[39].w, srcp.w, src0.1, src2.w 53: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[24], src1.w = temp[24], src2.xyz = temp[26], src2.w = temp[26], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[40].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[40].w, srcp.w, src0.1, src2.w 54: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[27], src1.w = temp[27], src2.xyz = temp[29], src2.w = temp[29], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[43].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[43].w, srcp.w, src0.1, src2.w 55: src0.xyz = temp[40], src0.w = temp[40], src1.xyz = temp[28], src1.w = temp[28], src2.xyz = temp[30], src2.w = temp[30], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[44].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[44].w, srcp.w, src0.1, src2.w 56: src0.xyz = const[2], src0.w = temp[32] MAD temp[0].w, |src0.w|, src0.x, src0.0 57: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[32], src1.w = temp[32] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz MAD temp[46].w, src0.w, src0.1, src1.w 58: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = temp[31], src1.w = temp[31], src2.xyz = temp[46], src2.w = temp[46], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[47].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[47].w, srcp.w, src0.1, src2.w 59: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = const[2] DP4 temp[0].x, |src0.xyz|, src1.xxx DP4, |src0.w|, src1.x 60: src0.xyz = temp[0], src0.w = temp[0] FRC temp[48].x, src0.x__ FRC temp[48].w, src0.w 61: src0.xyz = temp[48], src0.w = temp[48] MAD temp[49].x, -src0.H__, |src0.111|, |src0.x__| MAD temp[49].w, -src0.H, |src0.1|, |src0.w| 62: src0.xyz = temp[49], src0.w = temp[49] CMP temp[50].x, src0.0__, src0.1__, src0.x__ CMP temp[50].w, src0.0, src0.1, src0.w 63: src0.xyz = const[2], src0.w = const[2], src1.w = temp[50] CMP temp[51].w, src0.z, src0.w, -src1.w 64: src0.xyz = temp[50], src0.w = temp[51] MAD temp[52].w, src0.w, src0.x, src0.0 65: src0.xyz = temp[32], src0.w = temp[52], src1.w = temp[32] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src1.w Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0._y_, src0.11_, src1._y_ 1: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0._y_, src0.11_, src1._y_ 2: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0._y_, src0.11_, src1._z_ 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0._y_, src0.11_, src1._z_ 4: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0._y_, src0.11_, src0._w_ 5: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0._y_, src0.11_, src0._w_ 6: src0.xyz = input[0], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.11_, src1._x_ 7: src0.xyz = input[1], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.11_, src1._x_ 8: src0.xyz = input[0], src1.xyz = const[1] MAD temp[10].y, src0._y_, src0.11_, src1._y_ 9: src0.xyz = input[1], src1.xyz = const[1] MAD temp[11].y, src0._y_, src0.11_, src1._y_ 10: src0.xyz = input[0], src1.xyz = const[1] MAD temp[12].y, src0._y_, src0.11_, src1._z_ 11: src0.xyz = input[1], src1.xyz = const[1] MAD temp[13].y, src0._y_, src0.11_, src1._z_ 12: src0.xyz = input[0], src0.w = const[1] MAD temp[14].y, src0._y_, src0.11_, src0._w_ 13: src0.xyz = input[1], src0.w = const[1] MAD temp[15].y, src0._y_, src0.11_, src0._w_ 14: src0.xyz = input[0] MAD temp[16].x, src0.x__, src0.11_, src0.00_ 15: src0.xyz = input[0] MAD temp[16].y, src0._y_, src0.11_, src0.00_ 16: src0.xyz = input[1] MAD temp[17].x, src0.x__, src0.11_, src0.00_ 17: src0.xyz = input[1] MAD temp[17].y, src0._y_, src0.11_, src0.00_ 18: src0.xyz = input[0] MAD temp[2].x, src0.x__, src0.11_, src0.00_ 19: src0.xyz = input[1] MAD temp[3].x, src0.x__, src0.11_, src0.00_ 20: src0.xyz = input[0] MAD temp[4].x, src0.x__, src0.11_, src0.00_ 21: src0.xyz = input[1] MAD temp[5].x, src0.x__, src0.11_, src0.00_ 22: src0.xyz = input[0] MAD temp[6].x, src0.x__, src0.11_, src0.00_ 23: src0.xyz = input[1] MAD temp[7].x, src0.x__, src0.11_, src0.00_ 24: BEGIN_TEX; 25: TEX temp[16], temp[16].xy__, 2D[0]; 26: TEX temp[17], temp[17].xy__, 2D[0]; 27: TEX temp[2], temp[2].xy__, 2D[0]; 28: TEX temp[3], temp[3].xy__, 2D[0]; 29: TEX temp[4], temp[4].xy__, 2D[0]; 30: TEX temp[5], temp[5].xy__, 2D[0]; 31: TEX temp[6], temp[6].xy__, 2D[0]; 32: TEX temp[7], temp[7].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 33: src0.xyz = input[0] MAD temp[8].x, src0.x__, src0.11_, src0.00_ 34: src0.xyz = input[1] MAD temp[9].x, src0.x__, src0.11_, src0.00_ 35: src0.xyz = input[0] MAD temp[10].x, src0.x__, src0.11_, src0.00_ 36: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[2], src1.w = temp[2], src2.xyz = temp[4], src2.w = temp[4], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) SEM_WAIT MAD temp[2].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[0].w, srcp.w, src0.1, src2.w 37: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[3], src1.w = temp[3], src2.xyz = temp[5], src2.w = temp[5], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[3].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[1].w, srcp.w, src0.1, src2.w 38: src0.xyz = input[1] MAD temp[11].x, src0.x__, src0.11_, src0.00_ 39: src0.xyz = input[0] MAD temp[12].x, src0.x__, src0.11_, src0.00_ 40: src0.xyz = input[1] MAD temp[13].x, src0.x__, src0.11_, src0.00_ 41: src0.xyz = input[0] MAD temp[14].x, src0.x__, src0.11_, src0.00_ 42: src0.xyz = input[1] MAD temp[15].x, src0.x__, src0.11_, src0.00_ 43: BEGIN_TEX; 44: TEX temp[4], temp[8].xy__, 2D[0]; 45: TEX temp[5], temp[9].xy__, 2D[0]; 46: TEX temp[8], temp[10].xy__, 2D[0]; 47: TEX temp[9], temp[11].xy__, 2D[0]; 48: TEX temp[10], temp[12].xy__, 2D[0]; 49: TEX temp[11], temp[13].xy__, 2D[0]; 50: TEX temp[12], temp[14].xy__, 2D[0]; 51: TEX temp[13], temp[15].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 52: src0.xyz = temp[2], src0.w = temp[0], src1.xyz = temp[6], src1.w = temp[6], src2.xyz = temp[4], src2.w = temp[4], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) SEM_WAIT MAD temp[0].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[0].w, srcp.w, src0.1, src2.w 53: src0.xyz = temp[3], src0.w = temp[1], src1.xyz = temp[7], src1.w = temp[7], src2.xyz = temp[5], src2.w = temp[5], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[1].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[1].w, srcp.w, src0.1, src2.w 54: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[8], src1.w = temp[8], src2.xyz = temp[10], src2.w = temp[10], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[0].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[0].w, srcp.w, src0.1, src2.w 55: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[9], src1.w = temp[9], src2.xyz = temp[11], src2.w = temp[11], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[1].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[1].w, srcp.w, src0.1, src2.w 56: src0.xyz = const[2], src0.w = temp[13] MAD temp[2].w, |src0.w|, src0.x, src0.0 57: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[13], src1.w = temp[13] MAD temp[1].xyz, src0.xyz, src0.111, src1.xyz MAD temp[1].w, src0.w, src0.1, src1.w 58: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[12], src1.w = temp[12], src2.xyz = temp[1], src2.w = temp[1], srcp.xyz = (src1 + src0), srcp.w = (src1 + src0) MAD temp[0].xyz, srcp.xyz, src0.111, src2.xyz MAD temp[0].w, srcp.w, src0.1, src2.w 59: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[2] DP4 temp[0].x, |src0.xyz|, src1.xxx DP4, |src0.w|, src1.x 60: src0.xyz = temp[0], src0.w = temp[2] FRC temp[0].x, src0.x__ FRC temp[0].w, src0.w 61: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].x, -src0.H__, |src0.1__|, |src0.x__| MAD temp[0].w, -src0.H, |src0.1|, |src0.w| 62: src0.xyz = temp[0], src0.w = temp[0] CMP temp[0].x, src0.0__, src0.1__, src0.x__ CMP temp[0].w, src0.0, src0.1, src0.w 63: src0.xyz = const[2], src0.w = const[2], src1.w = temp[0] CMP temp[0].w, src0.z, src0.w, -src1.w 64: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 65: src0.xyz = temp[13], src0.w = temp[0], src1.w = temp[13] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src1.w pc=2************************************* Hardware program ---------------- code_offset_ext: 00000000 NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 23, tex_end: 0 (code_addr: 000005c0) 0: xyz: t0 c0 t0 bias-> t2.y (01080800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c0.xyz op: 00010a80 w: t0.x t0.x t0.x op: 00000000 1: xyz: t1 c0 t0 bias-> t3.y (010c0801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c0.xyz op: 00010a80 w: t1.x t1.x t1.x op: 00000000 2: xyz: t0 c0 t0 bias-> t4.y (01100800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c0.zzz op: 0001ca80 w: t0.x t0.x t0.x op: 00000000 3: xyz: t1 c0 t0 bias-> t5.y (01140801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c0.zzz op: 0001ca80 w: t1.x t1.x t1.x op: 00000000 4: xyz: t0 t0 t0 bias-> t6.y (01180000) w: c0 t0 t0 bias-> (00000020) xyz: t0.xyz 1.0 c0.www op: 00030a80 w: t0.x t0.x t0.x op: 00000000 5: xyz: t1 t0 t0 bias-> t7.y (011c0001) w: c0 t0 t0 bias-> (00000020) xyz: t1.xyz 1.0 c0.www op: 00030a80 w: t1.x t1.x t1.x op: 00000000 6: xyz: t0 c1 t0 bias-> t8.y (01200840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c1.xxx op: 00014a80 w: t0.x t0.x t0.x op: 00000000 7: xyz: t1 c1 t0 bias-> t9.y (01240841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c1.xxx op: 00014a80 w: t1.x t1.x t1.x op: 00000000 8: xyz: t0 c1 t0 bias-> t10.y (01280840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c1.xyz op: 00010a80 w: t0.x t0.x t0.x op: 00000000 9: xyz: t1 c1 t0 bias-> t11.y (012c0841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c1.xyz op: 00010a80 w: t1.x t1.x t1.x op: 00000000 10: xyz: t0 c1 t0 bias-> t12.y (01300840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c1.zzz op: 0001ca80 w: t0.x t0.x t0.x op: 00000000 11: xyz: t1 c1 t0 bias-> t13.y (01340841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c1.zzz op: 0001ca80 w: t1.x t1.x t1.x op: 00000000 12: xyz: t0 t0 t0 bias-> t14.y (01380000) w: c1 t0 t0 bias-> (00000021) xyz: t0.xyz 1.0 c1.www op: 00030a80 w: t0.x t0.x t0.x op: 00000000 13: xyz: t1 t0 t0 bias-> t15.y (013c0001) w: c1 t0 t0 bias-> (00000021) xyz: t1.xyz 1.0 c1.www op: 00030a80 w: t1.x t1.x t1.x op: 00000000 14: xyz: t0 t0 t0 bias-> t16.x (00c00000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 15: xyz: t0 t0 t0 bias-> t16.y (01400000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 16: xyz: t1 t0 t0 bias-> t17.x (00c40001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 17: xyz: t1 t0 t0 bias-> t17.y (01440001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 18: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 19: xyz: t1 t0 t0 bias-> t3.x (008c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 20: xyz: t0 t0 t0 bias-> t4.x (00900000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 21: xyz: t1 t0 t0 bias-> t5.x (00940001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 22: xyz: t0 t0 t0 bias-> t6.x (00980000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 23: xyz: t1 t0 t0 bias-> t7.x (009c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 24, tex_offset: 0, alu_end: 9, tex_end: 7 (code_addr: 000e0258) TEX: TEX t16, t16, texture[0] (00008410) TEX t17, t17, texture[0] (00008451) TEX t2, t2, texture[0] (00008082) TEX t3, t3, texture[0] (000080c3) TEX t4, t4, texture[0] (00008104) TEX t5, t5, texture[0] (00008145) TEX t6, t6, texture[0] (00008186) TEX t7, t7, texture[0] (000081c7) 24: xyz: t0 t0 t0 bias-> t8.x (00a00000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 25: xyz: t1 t0 t0 bias-> t9.x (00a40001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 26: xyz: t0 t0 t0 bias-> t10.x (00a80000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 27: xyz: t16 t2 t4 add-> t2.xyz (03884090) w: t16 t2 t4 add-> t0.w (00804090) xyz: srcp.xyz 1.0 t4.xyz op: 00420a8f w: srcp.w 1.0 t4.w op: 0042c88f 28: xyz: t17 t3 t5 add-> t3.xyz (038c50d1) w: t17 t3 t5 add-> t1.w (008450d1) xyz: srcp.xyz 1.0 t5.xyz op: 00420a8f w: srcp.w 1.0 t5.w op: 0042c88f 29: xyz: t1 t0 t0 bias-> t11.x (00ac0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 30: xyz: t0 t0 t0 bias-> t12.x (00b00000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 31: xyz: t1 t0 t0 bias-> t13.x (00b40001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 32: xyz: t0 t0 t0 bias-> t14.x (00b80000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 33: xyz: t1 t0 t0 bias-> t15.x (00bc0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 NODE 2: alu_offset: 34, tex_offset: 8, alu_end: 13, tex_end: 7 (code_addr: 004e8362) TEX: TEX t4, t8, texture[0] (00008108) TEX t5, t9, texture[0] (00008149) TEX t8, t10, texture[0] (0000820a) TEX t9, t11, texture[0] (0000824b) TEX t10, t12, texture[0] (0000828c) TEX t11, t13, texture[0] (000082cd) TEX t12, t14, texture[0] (0000830e) TEX t13, t15, texture[0] (0000834f) 34: xyz: t2 t6 t4 add-> t0.xyz (03804182) w: t0 t6 t4 add-> t0.w (00804180) xyz: srcp.xyz 1.0 t4.xyz op: 00420a8f w: srcp.w 1.0 t4.w op: 0042c88f 35: xyz: t3 t7 t5 add-> t1.xyz (038451c3) w: t1 t7 t5 add-> t1.w (008451c1) xyz: srcp.xyz 1.0 t5.xyz op: 00420a8f w: srcp.w 1.0 t5.w op: 0042c88f 36: xyz: t0 t8 t10 add-> t0.xyz (0380a200) w: t0 t8 t10 add-> t0.w (0080a200) xyz: srcp.xyz 1.0 t10.xyz op: 00420a8f w: srcp.w 1.0 t10.w op: 0042c88f 37: xyz: t1 t9 t11 add-> t1.xyz (0384b241) w: t1 t9 t11 add-> t1.w (0084b241) xyz: srcp.xyz 1.0 t11.xyz op: 00420a8f w: srcp.w 1.0 t11.w op: 0042c88f 38: xyz: c2 t0 t0 bias-> (00000022) w: t13 t0 t0 bias-> t2.w (0088000d) xyz: c2.xxx c2.xxx c2.xxx op: 00004081 w: |t13.w| c2.x 0.0 op: 00040049 39: xyz: t1 t13 t0 bias-> t1.xyz (03840341) w: t1 t13 t0 bias-> t1.w (00840341) xyz: t1.xyz 1.0 t13.xyz op: 00010a80 w: t1.w 1.0 t13.w op: 00028889 40: xyz: t0 t12 t1 add-> t0.xyz (03801300) w: t0 t12 t1 add-> t0.w (00801300) xyz: srcp.xyz 1.0 t1.xyz op: 00420a8f w: srcp.w 1.0 t1.w op: 0042c88f 41: xyz: t0 c2 t0 bias-> t0.x (00800880) w: t0 t0 t0 bias-> (00000000) xyz: |t0.xyz| c2.xxx t0.xxx op: 010042c0 w: |t0.w| c2.x t0.x op: 008001c9 42: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t2 t0 t0 bias-> t0.w (00800002) xyz: t0.xyz t0.xxx t0.xxx op: 04804080 w: t2.w t0.x t0.x op: 03800009 43: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -0.5 |1.0| |t0.xyz| op: 00102ab6 w: -0.5 |1.0| |t0.w| op: 001268b2 44: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 0.0 1.0 t0.xyz op: 04000a94 w: 0.0 1.0 t0.w op: 03024890 45: xyz: c2 t0 t0 bias-> (00000022) w: c2 t0 t0 bias-> t0.w (00800022) xyz: c2.xxx c2.xxx c2.xxx op: 00004081 w: c2.z c2.w -t0.w op: 030a8482 46: 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: 00040009 47: xyz: t13 t0 t0 bias-> o0.xyz (1c00000d) w: t0 t13 t0 bias-> o0.w (01000340) xyz: t13.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 t13.w op: 00028889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL IN[1], GENERIC[1], LINEAR DCL IN[2], GENERIC[2], LINEAR DCL IN[3], GENERIC[3], LINEAR DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL OUT[3], COLOR[3] DCL SAMP[0] DCL SAMP[1] DCL TEMP[0..10] IMM FLT32 { -0.0020, -0.0010, 0.0000, 0.0010} IMM FLT32 { -0.2500, -0.1250, 0.1250, 0.0000} 0: MOV TEMP[0].x, IN[0] 1: ADD TEMP[0].y, IN[0], IMM[0].xxxx 2: MOV TEMP[1].x, IN[1] 3: ADD TEMP[1].y, IN[1], IMM[0].xxxx 4: MOV TEMP[2].x, IN[0] 5: ADD TEMP[2].y, IN[0], IMM[0].yyyy 6: MOV TEMP[3].x, IN[1] 7: ADD TEMP[3].y, IN[1], IMM[0].yyyy 8: MOV TEMP[4].x, IN[0] 9: ADD TEMP[4].y, IN[0], IMM[0].zzzz 10: MOV TEMP[5].x, IN[1] 11: ADD TEMP[5].y, IN[1], IMM[0].zzzz 12: MOV TEMP[6].x, IN[0] 13: ADD TEMP[6].y, IN[0], IMM[0].wwww 14: MOV TEMP[7].x, IN[1] 15: ADD TEMP[7].y, IN[1], IMM[0].wwww 16: TEX TEMP[0], TEMP[0], SAMP[0], 2D 17: TEX TEMP[1], TEMP[1], SAMP[0], 2D 18: TEX TEMP[2], TEMP[2], SAMP[0], 2D 19: TEX TEMP[3], TEMP[3], SAMP[0], 2D 20: TEX TEMP[4], TEMP[4], SAMP[0], 2D 21: TEX TEMP[5], TEMP[5], SAMP[0], 2D 22: TEX TEMP[6], TEMP[6], SAMP[0], 2D 23: TEX TEMP[7], TEMP[7], SAMP[0], 2D 24: MOV TEMP[8].x, IN[2] 25: ADD TEMP[8].y, IN[2], IMM[1].xxxx 26: MOV TEMP[9].x, IN[3] 27: ADD TEMP[9].y, IN[3], IMM[1].xxxx 28: TEX TEMP[8], TEMP[8], SAMP[1], 2D 29: TEX TEMP[9], TEMP[9], SAMP[1], 2D 30: DP4 TEMP[10].x, TEMP[0], TEMP[8] 31: DP4 TEMP[10].y, TEMP[1], TEMP[9] 32: ADD OUT[0].x, TEMP[10].xxxx, TEMP[10].yyyy 33: DP4 TEMP[10].x, TEMP[2], TEMP[8] 34: DP4 TEMP[10].y, TEMP[3], TEMP[9] 35: ADD OUT[0].y, TEMP[10].xxxx, TEMP[10].yyyy 36: DP4 TEMP[10].x, TEMP[4], TEMP[8] 37: DP4 TEMP[10].y, TEMP[5], TEMP[9] 38: ADD OUT[0].z, TEMP[10].xxxx, TEMP[10].yyyy 39: DP4 TEMP[10].x, TEMP[6], TEMP[8] 40: DP4 TEMP[10].y, TEMP[7], TEMP[9] 41: ADD OUT[0].w, TEMP[10].xxxx, TEMP[10].yyyy 42: MOV TEMP[8].x, IN[2] 43: ADD TEMP[8].y, IN[2], IMM[1].yyyy 44: MOV TEMP[9].x, IN[3] 45: ADD TEMP[9].y, IN[3], IMM[1].yyyy 46: TEX TEMP[8], TEMP[8], SAMP[1], 2D 47: TEX TEMP[9], TEMP[9], SAMP[1], 2D 48: DP4 TEMP[10].x, TEMP[0], TEMP[8] 49: DP4 TEMP[10].y, TEMP[1], TEMP[9] 50: ADD OUT[1].x, TEMP[10].xxxx, TEMP[10].yyyy 51: DP4 TEMP[10].x, TEMP[2], TEMP[8] 52: DP4 TEMP[10].y, TEMP[3], TEMP[9] 53: ADD OUT[1].y, TEMP[10].xxxx, TEMP[10].yyyy 54: DP4 TEMP[10].x, TEMP[4], TEMP[8] 55: DP4 TEMP[10].y, TEMP[5], TEMP[9] 56: ADD OUT[1].z, TEMP[10].xxxx, TEMP[10].yyyy 57: DP4 TEMP[10].x, TEMP[6], TEMP[8] 58: DP4 TEMP[10].y, TEMP[7], TEMP[9] 59: ADD OUT[1].w, TEMP[10].xxxx, TEMP[10].yyyy 60: MOV TEMP[8].x, IN[2] 61: ADD TEMP[8].y, IN[2], IMM[0].zzzz 62: MOV TEMP[9].x, IN[3] 63: ADD TEMP[9].y, IN[3], IMM[0].zzzz 64: TEX TEMP[8], TEMP[8], SAMP[1], 2D 65: TEX TEMP[9], TEMP[9], SAMP[1], 2D 66: DP4 TEMP[10].x, TEMP[0], TEMP[8] 67: DP4 TEMP[10].y, TEMP[1], TEMP[9] 68: ADD OUT[2].x, TEMP[10].xxxx, TEMP[10].yyyy 69: DP4 TEMP[10].x, TEMP[2], TEMP[8] 70: DP4 TEMP[10].y, TEMP[3], TEMP[9] 71: ADD OUT[2].y, TEMP[10].xxxx, TEMP[10].yyyy 72: DP4 TEMP[10].x, TEMP[4], TEMP[8] 73: DP4 TEMP[10].y, TEMP[5], TEMP[9] 74: ADD OUT[2].z, TEMP[10].xxxx, TEMP[10].yyyy 75: DP4 TEMP[10].x, TEMP[6], TEMP[8] 76: DP4 TEMP[10].y, TEMP[7], TEMP[9] 77: ADD OUT[2].w, TEMP[10].xxxx, TEMP[10].yyyy 78: MOV TEMP[8].x, IN[2] 79: ADD TEMP[8].y, IN[2], IMM[1].zzzz 80: MOV TEMP[9].x, IN[3] 81: ADD TEMP[9].y, IN[3], IMM[1].zzzz 82: TEX TEMP[8], TEMP[8], SAMP[1], 2D 83: TEX TEMP[9], TEMP[9], SAMP[1], 2D 84: DP4 TEMP[10].x, TEMP[0], TEMP[8] 85: DP4 TEMP[10].y, TEMP[1], TEMP[9] 86: ADD OUT[3].x, TEMP[10].xxxx, TEMP[10].yyyy 87: DP4 TEMP[10].x, TEMP[2], TEMP[8] 88: DP4 TEMP[10].y, TEMP[3], TEMP[9] 89: ADD OUT[3].y, TEMP[10].xxxx, TEMP[10].yyyy 90: DP4 TEMP[10].x, TEMP[4], TEMP[8] 91: DP4 TEMP[10].y, TEMP[5], TEMP[9] 92: ADD OUT[3].z, TEMP[10].xxxx, TEMP[10].yyyy 93: DP4 TEMP[10].x, TEMP[6], TEMP[8] 94: DP4 TEMP[10].y, TEMP[7], TEMP[9] 95: ADD OUT[3].w, TEMP[10].xxxx, TEMP[10].yyyy 96: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: ADD temp[0].y, input[0]._y__, const[0]._x__; 2: MOV temp[1].x, input[1].x___; 3: ADD temp[1].y, input[1]._y__, const[0]._x__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: ADD temp[4].y, input[0]._y__, const[0]._z__; 10: MOV temp[5].x, input[1].x___; 11: ADD temp[5].y, input[1]._y__, const[0]._z__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: TEX temp[0], temp[0].xy__, 2D[0]; 17: TEX temp[1], temp[1].xy__, 2D[0]; 18: TEX temp[2], temp[2].xy__, 2D[0]; 19: TEX temp[3], temp[3].xy__, 2D[0]; 20: TEX temp[4], temp[4].xy__, 2D[0]; 21: TEX temp[5], temp[5].xy__, 2D[0]; 22: TEX temp[6], temp[6].xy__, 2D[0]; 23: TEX temp[7], temp[7].xy__, 2D[0]; 24: MOV temp[8].x, input[2].x___; 25: ADD temp[8].y, input[2]._y__, const[1]._x__; 26: MOV temp[9].x, input[3].x___; 27: ADD temp[9].y, input[3]._y__, const[1]._x__; 28: TEX temp[8], temp[8].xy__, 2D[1]; 29: TEX temp[9], temp[9].xy__, 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].x___, temp[10].y___; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10]._x__, temp[10]._y__; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].__x_, temp[10].__y_; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].___x, temp[10].___y; 42: MOV temp[8].x, input[2].x___; 43: ADD temp[8].y, input[2]._y__, const[1]._y__; 44: MOV temp[9].x, input[3].x___; 45: ADD temp[9].y, input[3]._y__, const[1]._y__; 46: TEX temp[8], temp[8].xy__, 2D[1]; 47: TEX temp[9], temp[9].xy__, 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].x___, temp[10].y___; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10]._x__, temp[10]._y__; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].__x_, temp[10].__y_; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].___x, temp[10].___y; 60: MOV temp[8].x, input[2].x___; 61: ADD temp[8].y, input[2]._y__, const[0]._z__; 62: MOV temp[9].x, input[3].x___; 63: ADD temp[9].y, input[3]._y__, const[0]._z__; 64: TEX temp[8], temp[8].xy__, 2D[1]; 65: TEX temp[9], temp[9].xy__, 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].x___, temp[10].y___; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10]._x__, temp[10]._y__; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].__x_, temp[10].__y_; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].___x, temp[10].___y; 78: MOV temp[8].x, input[2].x___; 79: ADD temp[8].y, input[2]._y__, const[1]._z__; 80: MOV temp[9].x, input[3].x___; 81: ADD temp[9].y, input[3]._y__, const[1]._z__; 82: TEX temp[8], temp[8].xy__, 2D[1]; 83: TEX temp[9], temp[9].xy__, 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].x___, temp[10].y___; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10]._x__, temp[10]._y__; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].__x_, temp[10].__y_; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].___x, temp[10].___y; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: ADD temp[0].y, input[0]._y__, const[0]._x__; 2: MOV temp[1].x, input[1].x___; 3: ADD temp[1].y, input[1]._y__, const[0]._x__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: ADD temp[4].y, input[0]._y__, const[0]._z__; 10: MOV temp[5].x, input[1].x___; 11: ADD temp[5].y, input[1]._y__, const[0]._z__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: TEX temp[0], temp[0].xy__, 2D[0]; 17: TEX temp[1], temp[1].xy__, 2D[0]; 18: TEX temp[2], temp[2].xy__, 2D[0]; 19: TEX temp[3], temp[3].xy__, 2D[0]; 20: TEX temp[4], temp[4].xy__, 2D[0]; 21: TEX temp[5], temp[5].xy__, 2D[0]; 22: TEX temp[6], temp[6].xy__, 2D[0]; 23: TEX temp[7], temp[7].xy__, 2D[0]; 24: MOV temp[8].x, input[2].x___; 25: ADD temp[8].y, input[2]._y__, const[1]._x__; 26: MOV temp[9].x, input[3].x___; 27: ADD temp[9].y, input[3]._y__, const[1]._x__; 28: TEX temp[8], temp[8].xy__, 2D[1]; 29: TEX temp[9], temp[9].xy__, 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].x___, temp[10].y___; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10]._x__, temp[10]._y__; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].__x_, temp[10].__y_; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].___x, temp[10].___y; 42: MOV temp[8].x, input[2].x___; 43: ADD temp[8].y, input[2]._y__, const[1]._y__; 44: MOV temp[9].x, input[3].x___; 45: ADD temp[9].y, input[3]._y__, const[1]._y__; 46: TEX temp[8], temp[8].xy__, 2D[1]; 47: TEX temp[9], temp[9].xy__, 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].x___, temp[10].y___; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10]._x__, temp[10]._y__; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].__x_, temp[10].__y_; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].___x, temp[10].___y; 60: MOV temp[8].x, input[2].x___; 61: ADD temp[8].y, input[2]._y__, const[0]._z__; 62: MOV temp[9].x, input[3].x___; 63: ADD temp[9].y, input[3]._y__, const[0]._z__; 64: TEX temp[8], temp[8].xy__, 2D[1]; 65: TEX temp[9], temp[9].xy__, 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].x___, temp[10].y___; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10]._x__, temp[10]._y__; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].__x_, temp[10].__y_; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].___x, temp[10].___y; 78: MOV temp[8].x, input[2].x___; 79: ADD temp[8].y, input[2]._y__, const[1]._z__; 80: MOV temp[9].x, input[3].x___; 81: ADD temp[9].y, input[3]._y__, const[1]._z__; 82: TEX temp[8], temp[8].xy__, 2D[1]; 83: TEX temp[9], temp[9].xy__, 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].x___, temp[10].y___; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10]._x__, temp[10]._y__; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].__x_, temp[10].__y_; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].___x, temp[10].___y; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: ADD temp[0].y, input[0]._y__, const[0]._x__; 2: MOV temp[1].x, input[1].x___; 3: ADD temp[1].y, input[1]._y__, const[0]._x__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: ADD temp[4].y, input[0]._y__, const[0]._z__; 10: MOV temp[5].x, input[1].x___; 11: ADD temp[5].y, input[1]._y__, const[0]._z__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: TEX temp[11], temp[0].xy__, 2D[0]; 17: TEX temp[12], temp[1].xy__, 2D[0]; 18: TEX temp[13], temp[2].xy__, 2D[0]; 19: TEX temp[14], temp[3].xy__, 2D[0]; 20: TEX temp[15], temp[4].xy__, 2D[0]; 21: TEX temp[16], temp[5].xy__, 2D[0]; 22: TEX temp[17], temp[6].xy__, 2D[0]; 23: TEX temp[18], temp[7].xy__, 2D[0]; 24: MOV temp[8].x, input[2].x___; 25: ADD temp[8].y, input[2]._y__, const[1]._x__; 26: MOV temp[9].x, input[3].x___; 27: ADD temp[9].y, input[3]._y__, const[1]._x__; 28: TEX temp[19], temp[8].xy__, 2D[1]; 29: TEX temp[20], temp[9].xy__, 2D[1]; 30: DP4 temp[21].x, temp[11], temp[19]; 31: DP4 temp[22].y, temp[12], temp[20]; 32: ADD output[0].x, temp[21].x___, temp[22].y___; 33: DP4 temp[23].x, temp[13], temp[19]; 34: DP4 temp[24].y, temp[14], temp[20]; 35: ADD output[0].y, temp[23]._x__, temp[24]._y__; 36: DP4 temp[25].x, temp[15], temp[19]; 37: DP4 temp[26].y, temp[16], temp[20]; 38: ADD output[0].z, temp[25].__x_, temp[26].__y_; 39: DP4 temp[27].x, temp[17], temp[19]; 40: DP4 temp[28].y, temp[18], temp[20]; 41: ADD output[0].w, temp[27].___x, temp[28].___y; 42: MOV temp[8].x, input[2].x___; 43: ADD temp[8].y, input[2]._y__, const[1]._y__; 44: MOV temp[9].x, input[3].x___; 45: ADD temp[9].y, input[3]._y__, const[1]._y__; 46: TEX temp[29], temp[8].xy__, 2D[1]; 47: TEX temp[30], temp[9].xy__, 2D[1]; 48: DP4 temp[31].x, temp[11], temp[29]; 49: DP4 temp[32].y, temp[12], temp[30]; 50: ADD output[1].x, temp[31].x___, temp[32].y___; 51: DP4 temp[33].x, temp[13], temp[29]; 52: DP4 temp[34].y, temp[14], temp[30]; 53: ADD output[1].y, temp[33]._x__, temp[34]._y__; 54: DP4 temp[35].x, temp[15], temp[29]; 55: DP4 temp[36].y, temp[16], temp[30]; 56: ADD output[1].z, temp[35].__x_, temp[36].__y_; 57: DP4 temp[37].x, temp[17], temp[29]; 58: DP4 temp[38].y, temp[18], temp[30]; 59: ADD output[1].w, temp[37].___x, temp[38].___y; 60: MOV temp[8].x, input[2].x___; 61: ADD temp[8].y, input[2]._y__, const[0]._z__; 62: MOV temp[9].x, input[3].x___; 63: ADD temp[9].y, input[3]._y__, const[0]._z__; 64: TEX temp[39], temp[8].xy__, 2D[1]; 65: TEX temp[40], temp[9].xy__, 2D[1]; 66: DP4 temp[41].x, temp[11], temp[39]; 67: DP4 temp[42].y, temp[12], temp[40]; 68: ADD output[2].x, temp[41].x___, temp[42].y___; 69: DP4 temp[43].x, temp[13], temp[39]; 70: DP4 temp[44].y, temp[14], temp[40]; 71: ADD output[2].y, temp[43]._x__, temp[44]._y__; 72: DP4 temp[45].x, temp[15], temp[39]; 73: DP4 temp[46].y, temp[16], temp[40]; 74: ADD output[2].z, temp[45].__x_, temp[46].__y_; 75: DP4 temp[47].x, temp[17], temp[39]; 76: DP4 temp[48].y, temp[18], temp[40]; 77: ADD output[2].w, temp[47].___x, temp[48].___y; 78: MOV temp[8].x, input[2].x___; 79: ADD temp[8].y, input[2]._y__, const[1]._z__; 80: MOV temp[9].x, input[3].x___; 81: ADD temp[9].y, input[3]._y__, const[1]._z__; 82: TEX temp[49], temp[8].xy__, 2D[1]; 83: TEX temp[50], temp[9].xy__, 2D[1]; 84: DP4 temp[51].x, temp[11], temp[49]; 85: DP4 temp[52].y, temp[12], temp[50]; 86: ADD output[3].x, temp[51].x___, temp[52].y___; 87: DP4 temp[53].x, temp[13], temp[49]; 88: DP4 temp[54].y, temp[14], temp[50]; 89: ADD output[3].y, temp[53]._x__, temp[54]._y__; 90: DP4 temp[55].x, temp[15], temp[49]; 91: DP4 temp[56].y, temp[16], temp[50]; 92: ADD output[3].z, temp[55].__x_, temp[56].__y_; 93: DP4 temp[57].x, temp[17], temp[49]; 94: DP4 temp[58].y, temp[18], temp[50]; 95: ADD output[3].w, temp[57].___x, temp[58].___y; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: ADD temp[0].y, input[0]._y__, const[0]._x__; 2: MOV temp[1].x, input[1].x___; 3: ADD temp[1].y, input[1]._y__, const[0]._x__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: MOV temp[4].y, input[0]._y__; 10: MOV temp[5].x, input[1].x___; 11: MOV temp[5].y, input[1]._y__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: TEX temp[11], temp[0].xy__, 2D[0]; 17: TEX temp[12], temp[1].xy__, 2D[0]; 18: TEX temp[13], temp[2].xy__, 2D[0]; 19: TEX temp[14], temp[3].xy__, 2D[0]; 20: TEX temp[15], temp[4].xy__, 2D[0]; 21: TEX temp[16], temp[5].xy__, 2D[0]; 22: TEX temp[17], temp[6].xy__, 2D[0]; 23: TEX temp[18], temp[7].xy__, 2D[0]; 24: MOV temp[8].x, input[2].x___; 25: ADD temp[8].y, input[2]._y__, const[1]._x__; 26: MOV temp[9].x, input[3].x___; 27: ADD temp[9].y, input[3]._y__, const[1]._x__; 28: TEX temp[19], temp[8].xy__, 2D[1]; 29: TEX temp[20], temp[9].xy__, 2D[1]; 30: DP4 temp[21].x, temp[11], temp[19]; 31: DP4 temp[22].y, temp[12], temp[20]; 32: ADD output[0].x, temp[21].x___, temp[22].y___; 33: DP4 temp[23].x, temp[13], temp[19]; 34: DP4 temp[24].y, temp[14], temp[20]; 35: ADD output[0].y, temp[23]._x__, temp[24]._y__; 36: DP4 temp[25].x, temp[15], temp[19]; 37: DP4 temp[26].y, temp[16], temp[20]; 38: ADD output[0].z, temp[25].__x_, temp[26].__y_; 39: DP4 temp[27].x, temp[17], temp[19]; 40: DP4 temp[28].y, temp[18], temp[20]; 41: ADD output[0].w, temp[27].___x, temp[28].___y; 42: MOV temp[8].x, input[2].x___; 43: ADD temp[8].y, input[2]._y__, const[1]._y__; 44: MOV temp[9].x, input[3].x___; 45: ADD temp[9].y, input[3]._y__, const[1]._y__; 46: TEX temp[29], temp[8].xy__, 2D[1]; 47: TEX temp[30], temp[9].xy__, 2D[1]; 48: DP4 temp[31].x, temp[11], temp[29]; 49: DP4 temp[32].y, temp[12], temp[30]; 50: ADD output[1].x, temp[31].x___, temp[32].y___; 51: DP4 temp[33].x, temp[13], temp[29]; 52: DP4 temp[34].y, temp[14], temp[30]; 53: ADD output[1].y, temp[33]._x__, temp[34]._y__; 54: DP4 temp[35].x, temp[15], temp[29]; 55: DP4 temp[36].y, temp[16], temp[30]; 56: ADD output[1].z, temp[35].__x_, temp[36].__y_; 57: DP4 temp[37].x, temp[17], temp[29]; 58: DP4 temp[38].y, temp[18], temp[30]; 59: ADD output[1].w, temp[37].___x, temp[38].___y; 60: MOV temp[8].x, input[2].x___; 61: MOV temp[8].y, input[2]._y__; 62: MOV temp[9].x, input[3].x___; 63: MOV temp[9].y, input[3]._y__; 64: TEX temp[39], temp[8].xy__, 2D[1]; 65: TEX temp[40], temp[9].xy__, 2D[1]; 66: DP4 temp[41].x, temp[11], temp[39]; 67: DP4 temp[42].y, temp[12], temp[40]; 68: ADD output[2].x, temp[41].x___, temp[42].y___; 69: DP4 temp[43].x, temp[13], temp[39]; 70: DP4 temp[44].y, temp[14], temp[40]; 71: ADD output[2].y, temp[43]._x__, temp[44]._y__; 72: DP4 temp[45].x, temp[15], temp[39]; 73: DP4 temp[46].y, temp[16], temp[40]; 74: ADD output[2].z, temp[45].__x_, temp[46].__y_; 75: DP4 temp[47].x, temp[17], temp[39]; 76: DP4 temp[48].y, temp[18], temp[40]; 77: ADD output[2].w, temp[47].___x, temp[48].___y; 78: MOV temp[8].x, input[2].x___; 79: ADD temp[8].y, input[2]._y__, const[1]._z__; 80: MOV temp[9].x, input[3].x___; 81: ADD temp[9].y, input[3]._y__, const[1]._z__; 82: TEX temp[49], temp[8].xy__, 2D[1]; 83: TEX temp[50], temp[9].xy__, 2D[1]; 84: DP4 temp[51].x, temp[11], temp[49]; 85: DP4 temp[52].y, temp[12], temp[50]; 86: ADD output[3].x, temp[51].x___, temp[52].y___; 87: DP4 temp[53].x, temp[13], temp[49]; 88: DP4 temp[54].y, temp[14], temp[50]; 89: ADD output[3].y, temp[53]._x__, temp[54]._y__; 90: DP4 temp[55].x, temp[15], temp[49]; 91: DP4 temp[56].y, temp[16], temp[50]; 92: ADD output[3].z, temp[55].__x_, temp[56].__y_; 93: DP4 temp[57].x, temp[17], temp[49]; 94: DP4 temp[58].y, temp[18], temp[50]; 95: ADD output[3].w, temp[57].___x, temp[58].___y; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: ADD temp[0].y, input[0]._y__, const[0]._x__; 2: MOV temp[1].x, input[1].x___; 3: ADD temp[1].y, input[1]._y__, const[0]._x__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: MOV temp[4].y, input[0]._y__; 10: MOV temp[5].x, input[1].x___; 11: MOV temp[5].y, input[1]._y__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: TEX temp[11], temp[0].xy__, 2D[0]; 17: TEX temp[12], temp[1].xy__, 2D[0]; 18: TEX temp[13], temp[2].xy__, 2D[0]; 19: TEX temp[14], temp[3].xy__, 2D[0]; 20: TEX temp[15], temp[4].xy__, 2D[0]; 21: TEX temp[16], temp[5].xy__, 2D[0]; 22: TEX temp[17], temp[6].xy__, 2D[0]; 23: TEX temp[18], temp[7].xy__, 2D[0]; 24: MOV temp[8].x, input[2].x___; 25: ADD temp[8].y, input[2]._y__, const[1]._x__; 26: MOV temp[9].x, input[3].x___; 27: ADD temp[9].y, input[3]._y__, const[1]._x__; 28: TEX temp[19], temp[8].xy__, 2D[1]; 29: TEX temp[20], temp[9].xy__, 2D[1]; 30: DP4 temp[21].x, temp[11], temp[19]; 31: DP4 temp[22].y, temp[12], temp[20]; 32: ADD output[0].x, temp[21].x___, temp[22].y___; 33: DP4 temp[23].x, temp[13], temp[19]; 34: DP4 temp[24].y, temp[14], temp[20]; 35: ADD output[0].y, temp[23]._x__, temp[24]._y__; 36: DP4 temp[25].x, temp[15], temp[19]; 37: DP4 temp[26].y, temp[16], temp[20]; 38: ADD output[0].z, temp[25].__x_, temp[26].__y_; 39: DP4 temp[27].x, temp[17], temp[19]; 40: DP4 temp[28].y, temp[18], temp[20]; 41: ADD output[0].w, temp[27].___x, temp[28].___y; 42: MOV temp[8].x, input[2].x___; 43: ADD temp[8].y, input[2]._y__, const[1]._y__; 44: MOV temp[9].x, input[3].x___; 45: ADD temp[9].y, input[3]._y__, const[1]._y__; 46: TEX temp[29], temp[8].xy__, 2D[1]; 47: TEX temp[30], temp[9].xy__, 2D[1]; 48: DP4 temp[31].x, temp[11], temp[29]; 49: DP4 temp[32].y, temp[12], temp[30]; 50: ADD output[1].x, temp[31].x___, temp[32].y___; 51: DP4 temp[33].x, temp[13], temp[29]; 52: DP4 temp[34].y, temp[14], temp[30]; 53: ADD output[1].y, temp[33]._x__, temp[34]._y__; 54: DP4 temp[35].x, temp[15], temp[29]; 55: DP4 temp[36].y, temp[16], temp[30]; 56: ADD output[1].z, temp[35].__x_, temp[36].__y_; 57: DP4 temp[37].x, temp[17], temp[29]; 58: DP4 temp[38].y, temp[18], temp[30]; 59: ADD output[1].w, temp[37].___x, temp[38].___y; 60: MOV temp[8].x, input[2].x___; 61: MOV temp[8].y, input[2]._y__; 62: MOV temp[9].x, input[3].x___; 63: MOV temp[9].y, input[3]._y__; 64: TEX temp[39], temp[8].xy__, 2D[1]; 65: TEX temp[40], temp[9].xy__, 2D[1]; 66: DP4 temp[41].x, temp[11], temp[39]; 67: DP4 temp[42].y, temp[12], temp[40]; 68: ADD output[2].x, temp[41].x___, temp[42].y___; 69: DP4 temp[43].x, temp[13], temp[39]; 70: DP4 temp[44].y, temp[14], temp[40]; 71: ADD output[2].y, temp[43]._x__, temp[44]._y__; 72: DP4 temp[45].x, temp[15], temp[39]; 73: DP4 temp[46].y, temp[16], temp[40]; 74: ADD output[2].z, temp[45].__x_, temp[46].__y_; 75: DP4 temp[47].x, temp[17], temp[39]; 76: DP4 temp[48].y, temp[18], temp[40]; 77: ADD output[2].w, temp[47].___x, temp[48].___y; 78: MOV temp[8].x, input[2].x___; 79: ADD temp[8].y, input[2]._y__, const[1]._z__; 80: MOV temp[9].x, input[3].x___; 81: ADD temp[9].y, input[3]._y__, const[1]._z__; 82: TEX temp[49], temp[8].xy__, 2D[1]; 83: TEX temp[50], temp[9].xy__, 2D[1]; 84: DP4 temp[51].x, temp[11], temp[49]; 85: DP4 temp[52].y, temp[12], temp[50]; 86: ADD output[3].x, temp[51].x___, temp[52].y___; 87: DP4 temp[53].x, temp[13], temp[49]; 88: DP4 temp[54].y, temp[14], temp[50]; 89: ADD output[3].y, temp[53]._x__, temp[54]._y__; 90: DP4 temp[55].x, temp[15], temp[49]; 91: DP4 temp[56].y, temp[16], temp[50]; 92: ADD output[3].z, temp[55].__x_, temp[56].__y_; 93: DP4 temp[57].x, temp[17], temp[49]; 94: DP4 temp[58].y, temp[18], temp[50]; 95: ADD output[3].w, temp[57].___x, temp[58].___y; CONST[0] = { -0.0020 -0.0010 0.0000 0.0010 } CONST[1] = { -0.2500 -0.1250 0.1250 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0].x, input[0].x___; 1: ADD temp[0].y, input[0]._y__, const[0]._x__; 2: MOV temp[1].x, input[1].x___; 3: ADD temp[1].y, input[1]._y__, const[0]._x__; 4: MOV temp[2].x, input[0].x___; 5: ADD temp[2].y, input[0]._y__, const[0]._y__; 6: MOV temp[3].x, input[1].x___; 7: ADD temp[3].y, input[1]._y__, const[0]._y__; 8: MOV temp[4].x, input[0].x___; 9: MOV temp[4].y, input[0]._y__; 10: MOV temp[5].x, input[1].x___; 11: MOV temp[5].y, input[1]._y__; 12: MOV temp[6].x, input[0].x___; 13: ADD temp[6].y, input[0]._y__, const[0]._w__; 14: MOV temp[7].x, input[1].x___; 15: ADD temp[7].y, input[1]._y__, const[0]._w__; 16: TEX temp[11], temp[0].xy__, 2D[0]; 17: TEX temp[12], temp[1].xy__, 2D[0]; 18: TEX temp[13], temp[2].xy__, 2D[0]; 19: TEX temp[14], temp[3].xy__, 2D[0]; 20: TEX temp[15], temp[4].xy__, 2D[0]; 21: TEX temp[16], temp[5].xy__, 2D[0]; 22: TEX temp[17], temp[6].xy__, 2D[0]; 23: TEX temp[18], temp[7].xy__, 2D[0]; 24: MOV temp[8].x, input[2].x___; 25: ADD temp[8].y, input[2]._y__, const[1]._x__; 26: MOV temp[9].x, input[3].x___; 27: ADD temp[9].y, input[3]._y__, const[1]._x__; 28: TEX temp[19], temp[8].xy__, 2D[1]; 29: TEX temp[20], temp[9].xy__, 2D[1]; 30: DP4 temp[21].x, temp[11], temp[19]; 31: DP4 temp[22].y, temp[12], temp[20]; 32: ADD output[0].x, temp[21].x___, temp[22].y___; 33: DP4 temp[23].x, temp[13], temp[19]; 34: DP4 temp[24].y, temp[14], temp[20]; 35: ADD output[0].y, temp[23]._x__, temp[24]._y__; 36: DP4 temp[25].x, temp[15], temp[19]; 37: DP4 temp[26].y, temp[16], temp[20]; 38: ADD output[0].z, temp[25].__x_, temp[26].__y_; 39: DP4 temp[27].x, temp[17], temp[19]; 40: DP4 temp[28].y, temp[18], temp[20]; 41: ADD output[0].w, temp[27].___x, temp[28].___y; 42: MOV temp[8].x, input[2].x___; 43: ADD temp[8].y, input[2]._y__, const[1]._y__; 44: MOV temp[9].x, input[3].x___; 45: ADD temp[9].y, input[3]._y__, const[1]._y__; 46: TEX temp[29], temp[8].xy__, 2D[1]; 47: TEX temp[30], temp[9].xy__, 2D[1]; 48: DP4 temp[31].x, temp[11], temp[29]; 49: DP4 temp[32].y, temp[12], temp[30]; 50: ADD output[1].x, temp[31].x___, temp[32].y___; 51: DP4 temp[33].x, temp[13], temp[29]; 52: DP4 temp[34].y, temp[14], temp[30]; 53: ADD output[1].y, temp[33]._x__, temp[34]._y__; 54: DP4 temp[35].x, temp[15], temp[29]; 55: DP4 temp[36].y, temp[16], temp[30]; 56: ADD output[1].z, temp[35].__x_, temp[36].__y_; 57: DP4 temp[37].x, temp[17], temp[29]; 58: DP4 temp[38].y, temp[18], temp[30]; 59: ADD output[1].w, temp[37].___x, temp[38].___y; 60: MOV temp[8].x, input[2].x___; 61: MOV temp[8].y, input[2]._y__; 62: MOV temp[9].x, input[3].x___; 63: MOV temp[9].y, input[3]._y__; 64: TEX temp[39], temp[8].xy__, 2D[1]; 65: TEX temp[40], temp[9].xy__, 2D[1]; 66: DP4 temp[41].x, temp[11], temp[39]; 67: DP4 temp[42].y, temp[12], temp[40]; 68: ADD output[2].x, temp[41].x___, temp[42].y___; 69: DP4 temp[43].x, temp[13], temp[39]; 70: DP4 temp[44].y, temp[14], temp[40]; 71: ADD output[2].y, temp[43]._x__, temp[44]._y__; 72: DP4 temp[45].x, temp[15], temp[39]; 73: DP4 temp[46].y, temp[16], temp[40]; 74: ADD output[2].z, temp[45].__x_, temp[46].__y_; 75: DP4 temp[47].x, temp[17], temp[39]; 76: DP4 temp[48].y, temp[18], temp[40]; 77: ADD output[2].w, temp[47].___x, temp[48].___y; 78: MOV temp[8].x, input[2].x___; 79: ADD temp[8].y, input[2]._y__, const[1]._z__; 80: MOV temp[9].x, input[3].x___; 81: ADD temp[9].y, input[3]._y__, const[1]._z__; 82: TEX temp[49], temp[8].xy__, 2D[1]; 83: TEX temp[50], temp[9].xy__, 2D[1]; 84: DP4 temp[51].x, temp[11], temp[49]; 85: DP4 temp[52].y, temp[12], temp[50]; 86: ADD output[3].x, temp[51].x___, temp[52].y___; 87: DP4 temp[53].x, temp[13], temp[49]; 88: DP4 temp[54].y, temp[14], temp[50]; 89: ADD output[3].y, temp[53]._x__, temp[54]._y__; 90: DP4 temp[55].x, temp[15], temp[49]; 91: DP4 temp[56].y, temp[16], temp[50]; 92: ADD output[3].z, temp[55].__x_, temp[56].__y_; 93: DP4 temp[57].x, temp[17], temp[49]; 94: DP4 temp[58].y, temp[18], temp[50]; 95: ADD output[3].w, temp[57].___x, temp[58].___y; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[0].x, src0.x__, src0.111, src0.000 1: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].y, src0._y_, src0.111, src1._x_ 2: src0.xyz = input[1] MAD temp[1].x, src0.x__, src0.111, src0.000 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].y, src0._y_, src0.111, src1._x_ 4: src0.xyz = input[0] MAD temp[2].x, src0.x__, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0._y_, src0.111, src1._y_ 6: src0.xyz = input[1] MAD temp[3].x, src0.x__, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0._y_, src0.111, src1._y_ 8: src0.xyz = input[0] MAD temp[4].x, src0.x__, src0.111, src0.000 9: src0.xyz = input[0] MAD temp[4].y, src0._y_, src0.111, src0.000 10: src0.xyz = input[1] MAD temp[5].x, src0.x__, src0.111, src0.000 11: src0.xyz = input[1] MAD temp[5].y, src0._y_, src0.111, src0.000 12: src0.xyz = input[0] MAD temp[6].x, src0.x__, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0._y_, src0.111, src0._w_ 14: src0.xyz = input[1] MAD temp[7].x, src0.x__, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0._y_, src0.111, src0._w_ 16: TEX temp[11], temp[0].xy__, 2D[0]; 17: TEX temp[12], temp[1].xy__, 2D[0]; 18: TEX temp[13], temp[2].xy__, 2D[0]; 19: TEX temp[14], temp[3].xy__, 2D[0]; 20: TEX temp[15], temp[4].xy__, 2D[0]; 21: TEX temp[16], temp[5].xy__, 2D[0]; 22: TEX temp[17], temp[6].xy__, 2D[0]; 23: TEX temp[18], temp[7].xy__, 2D[0]; 24: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 25: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._x_ 26: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 27: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._x_ 28: TEX temp[19], temp[8].xy__, 2D[1]; 29: TEX temp[20], temp[9].xy__, 2D[1]; 30: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[21].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 31: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[22].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 32: src0.xyz = temp[21], src1.xyz = temp[22] MAD color[0].x, src0.x__, src0.111, src1.y__ 33: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[23].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 34: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[24].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 35: src0.xyz = temp[23], src1.xyz = temp[24] MAD color[0].y, src0._x_, src0.111, src1._y_ 36: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[25].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 37: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[26].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 38: src0.xyz = temp[25], src1.xyz = temp[26] MAD color[0].z, src0.__x, src0.111, src1.__y 39: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[27].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 40: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[28].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 41: src0.xyz = temp[27], src1.xyz = temp[28] MAD color[0].w, src0.x, src0.1, src1.y 42: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 43: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._y_ 44: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 45: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._y_ 46: TEX temp[29], temp[8].xy__, 2D[1]; 47: TEX temp[30], temp[9].xy__, 2D[1]; 48: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[31].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 49: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[32].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 50: src0.xyz = temp[31], src1.xyz = temp[32] MAD color[1].x, src0.x__, src0.111, src1.y__ 51: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[33].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 52: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[34].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 53: src0.xyz = temp[33], src1.xyz = temp[34] MAD color[1].y, src0._x_, src0.111, src1._y_ 54: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[35].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 55: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[36].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 56: src0.xyz = temp[35], src1.xyz = temp[36] MAD color[1].z, src0.__x, src0.111, src1.__y 57: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[37].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 58: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[38].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 59: src0.xyz = temp[37], src1.xyz = temp[38] MAD color[1].w, src0.x, src0.1, src1.y 60: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 61: src0.xyz = input[2] MAD temp[8].y, src0._y_, src0.111, src0.000 62: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 63: src0.xyz = input[3] MAD temp[9].y, src0._y_, src0.111, src0.000 64: TEX temp[39], temp[8].xy__, 2D[1]; 65: TEX temp[40], temp[9].xy__, 2D[1]; 66: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[41].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 67: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[42].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 68: src0.xyz = temp[41], src1.xyz = temp[42] MAD color[2].x, src0.x__, src0.111, src1.y__ 69: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[43].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 70: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[44].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 71: src0.xyz = temp[43], src1.xyz = temp[44] MAD color[2].y, src0._x_, src0.111, src1._y_ 72: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[45].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 73: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[46].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 74: src0.xyz = temp[45], src1.xyz = temp[46] MAD color[2].z, src0.__x, src0.111, src1.__y 75: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[47].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 76: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[48].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 77: src0.xyz = temp[47], src1.xyz = temp[48] MAD color[2].w, src0.x, src0.1, src1.y 78: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 79: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._z_ 80: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 81: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._z_ 82: TEX temp[49], temp[8].xy__, 2D[1]; 83: TEX temp[50], temp[9].xy__, 2D[1]; 84: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[51].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 85: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[52].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 86: src0.xyz = temp[51], src1.xyz = temp[52] MAD color[3].x, src0.x__, src0.111, src1.y__ 87: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[53].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 88: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[54].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 89: src0.xyz = temp[53], src1.xyz = temp[54] MAD color[3].y, src0._x_, src0.111, src1._y_ 90: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[55].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 91: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[56].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 92: src0.xyz = temp[55], src1.xyz = temp[56] MAD color[3].z, src0.__x, src0.111, src1.__y 93: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[57].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 94: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[58].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 95: src0.xyz = temp[57], src1.xyz = temp[58] MAD color[3].w, src0.x, src0.1, src1.y Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].y, src0._y_, src0.111, src1._x_ 1: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].y, src0._y_, src0.111, src1._x_ 2: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0._y_, src0.111, src1._y_ 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0._y_, src0.111, src1._y_ 4: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0._y_, src0.111, src0._w_ 5: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0._y_, src0.111, src0._w_ 6: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._x_ 7: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._x_ 8: src0.xyz = input[0] MAD temp[0].x, src0.x__, src0.111, src0.000 9: src0.xyz = input[1] MAD temp[1].x, src0.x__, src0.111, src0.000 10: src0.xyz = input[0] MAD temp[2].x, src0.x__, src0.111, src0.000 11: src0.xyz = input[1] MAD temp[3].x, src0.x__, src0.111, src0.000 12: src0.xyz = input[0] MAD temp[4].x, src0.x__, src0.111, src0.000 13: src0.xyz = input[0] MAD temp[4].y, src0._y_, src0.111, src0.000 14: src0.xyz = input[1] MAD temp[5].x, src0.x__, src0.111, src0.000 15: src0.xyz = input[1] MAD temp[5].y, src0._y_, src0.111, src0.000 16: src0.xyz = input[0] MAD temp[6].x, src0.x__, src0.111, src0.000 17: src0.xyz = input[1] MAD temp[7].x, src0.x__, src0.111, src0.000 18: BEGIN_TEX; 19: TEX temp[11], temp[0].xy__, 2D[0]; 20: TEX temp[12], temp[1].xy__, 2D[0]; 21: TEX temp[13], temp[2].xy__, 2D[0]; 22: TEX temp[14], temp[3].xy__, 2D[0]; 23: TEX temp[15], temp[4].xy__, 2D[0]; 24: TEX temp[16], temp[5].xy__, 2D[0]; 25: TEX temp[17], temp[6].xy__, 2D[0]; 26: TEX temp[18], temp[7].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 27: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 28: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 29: BEGIN_TEX; 30: TEX temp[19], temp[8].xy__, 2D[1]; 31: TEX temp[20], temp[9].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 32: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[19], src1.w = temp[19] SEM_WAIT DP4 temp[27].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 33: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[25].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 34: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[23].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 35: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[21].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 36: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[28].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 37: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[26].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 38: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[24].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 39: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[22].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 40: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._y_ 41: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._y_ 42: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 43: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 44: src0.xyz = temp[27], src1.xyz = temp[28] MAD color[0].w, src0.x, src0.1, src1.y 45: src0.xyz = temp[25], src1.xyz = temp[26] MAD color[0].z, src0.__x, src0.111, src1.__y 46: src0.xyz = temp[23], src1.xyz = temp[24] MAD color[0].y, src0._x_, src0.111, src1._y_ 47: src0.xyz = temp[21], src1.xyz = temp[22] MAD color[0].x, src0.x__, src0.111, src1.y__ 48: BEGIN_TEX; 49: TEX temp[29], temp[8].xy__, 2D[1]; 50: TEX temp[30], temp[9].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 51: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[29], src1.w = temp[29] SEM_WAIT DP4 temp[37].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 52: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[35].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 53: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[33].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 54: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[31].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 55: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[38].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 56: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[36].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 57: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[34].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 58: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[32].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 59: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 60: src0.xyz = input[2] MAD temp[8].y, src0._y_, src0.111, src0.000 61: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 62: src0.xyz = input[3] MAD temp[9].y, src0._y_, src0.111, src0.000 63: src0.xyz = temp[37], src1.xyz = temp[38] MAD color[1].w, src0.x, src0.1, src1.y 64: src0.xyz = temp[35], src1.xyz = temp[36] MAD color[1].z, src0.__x, src0.111, src1.__y 65: src0.xyz = temp[33], src1.xyz = temp[34] MAD color[1].y, src0._x_, src0.111, src1._y_ 66: src0.xyz = temp[31], src1.xyz = temp[32] MAD color[1].x, src0.x__, src0.111, src1.y__ 67: BEGIN_TEX; 68: TEX temp[39], temp[8].xy__, 2D[1]; 69: TEX temp[40], temp[9].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 70: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[39], src1.w = temp[39] SEM_WAIT DP4 temp[47].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 71: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[45].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 72: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[43].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 73: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[41].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 74: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[48].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 75: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[46].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 76: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[44].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 77: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[42].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 78: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._z_ 79: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._z_ 80: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 81: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 82: src0.xyz = temp[47], src1.xyz = temp[48] MAD color[2].w, src0.x, src0.1, src1.y 83: src0.xyz = temp[45], src1.xyz = temp[46] MAD color[2].z, src0.__x, src0.111, src1.__y 84: src0.xyz = temp[43], src1.xyz = temp[44] MAD color[2].y, src0._x_, src0.111, src1._y_ 85: src0.xyz = temp[41], src1.xyz = temp[42] MAD color[2].x, src0.x__, src0.111, src1.y__ 86: BEGIN_TEX; 87: TEX temp[49], temp[8].xy__, 2D[1]; 88: TEX temp[50], temp[9].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 89: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[49], src1.w = temp[49] SEM_WAIT DP4 temp[57].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 90: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[55].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 91: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[53].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 92: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[51].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 93: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[58].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 94: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[56].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 95: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[54].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 96: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[52].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 97: src0.xyz = temp[57], src1.xyz = temp[58] MAD color[3].w, src0.x, src0.1, src1.y 98: src0.xyz = temp[55], src1.xyz = temp[56] MAD color[3].z, src0.__x, src0.111, src1.__y 99: src0.xyz = temp[53], src1.xyz = temp[54] MAD color[3].y, src0._x_, src0.111, src1._y_ 100: src0.xyz = temp[51], src1.xyz = temp[52] MAD color[3].x, src0.x__, src0.111, src1.y__ Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].y, src0._y_, src0.111, src1._x_ 1: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].y, src0._y_, src0.111, src1._x_ 2: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0._y_, src0.111, src1._y_ 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0._y_, src0.111, src1._y_ 4: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0._y_, src0.111, src0._w_ 5: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0._y_, src0.111, src0._w_ 6: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._x_ 7: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._x_ 8: src0.xyz = input[0] MAD temp[0].x, src0.x__, src0.111, src0.000 9: src0.xyz = input[1] MAD temp[1].x, src0.x__, src0.111, src0.000 10: src0.xyz = input[0] MAD temp[2].x, src0.x__, src0.111, src0.000 11: src0.xyz = input[1] MAD temp[3].x, src0.x__, src0.111, src0.000 12: src0.xyz = input[0] MAD temp[4].x, src0.x__, src0.111, src0.000 13: src0.xyz = input[0] MAD temp[4].y, src0._y_, src0.111, src0.000 14: src0.xyz = input[1] MAD temp[5].x, src0.x__, src0.111, src0.000 15: src0.xyz = input[1] MAD temp[5].y, src0._y_, src0.111, src0.000 16: src0.xyz = input[0] MAD temp[6].x, src0.x__, src0.111, src0.000 17: src0.xyz = input[1] MAD temp[7].x, src0.x__, src0.111, src0.000 18: BEGIN_TEX; 19: TEX temp[11], temp[0].xy__, 2D[0]; 20: TEX temp[12], temp[1].xy__, 2D[0]; 21: TEX temp[13], temp[2].xy__, 2D[0]; 22: TEX temp[14], temp[3].xy__, 2D[0]; 23: TEX temp[15], temp[4].xy__, 2D[0]; 24: TEX temp[16], temp[5].xy__, 2D[0]; 25: TEX temp[17], temp[6].xy__, 2D[0]; 26: TEX temp[18], temp[7].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 27: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 28: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 29: BEGIN_TEX; 30: TEX temp[19], temp[8].xy__, 2D[1]; 31: TEX temp[20], temp[9].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 32: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[19], src1.w = temp[19] SEM_WAIT DP4 temp[27].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 33: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[25].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 34: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[23].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 35: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[19], src1.w = temp[19] DP4 temp[21].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 36: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[28].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 37: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[26].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 38: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[24].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 39: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[20], src1.w = temp[20] DP4 temp[22].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 40: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._y_ 41: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._y_ 42: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 43: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 44: src0.xyz = temp[27], src1.xyz = temp[28] MAD color[0].w, src0.x, src0.1, src1.y 45: src0.xyz = temp[25], src1.xyz = temp[26] MAD color[0].z, src0.__x, src0.111, src1.__y 46: src0.xyz = temp[23], src1.xyz = temp[24] MAD color[0].y, src0._x_, src0.111, src1._y_ 47: src0.xyz = temp[21], src1.xyz = temp[22] MAD color[0].x, src0.x__, src0.111, src1.y__ 48: BEGIN_TEX; 49: TEX temp[29], temp[8].xy__, 2D[1]; 50: TEX temp[30], temp[9].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 51: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[29], src1.w = temp[29] SEM_WAIT DP4 temp[37].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 52: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[35].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 53: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[33].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 54: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[29], src1.w = temp[29] DP4 temp[31].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 55: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[38].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 56: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[36].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 57: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[34].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 58: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[30], src1.w = temp[30] DP4 temp[32].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 59: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 60: src0.xyz = input[2] MAD temp[8].y, src0._y_, src0.111, src0.000 61: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 62: src0.xyz = input[3] MAD temp[9].y, src0._y_, src0.111, src0.000 63: src0.xyz = temp[37], src1.xyz = temp[38] MAD color[1].w, src0.x, src0.1, src1.y 64: src0.xyz = temp[35], src1.xyz = temp[36] MAD color[1].z, src0.__x, src0.111, src1.__y 65: src0.xyz = temp[33], src1.xyz = temp[34] MAD color[1].y, src0._x_, src0.111, src1._y_ 66: src0.xyz = temp[31], src1.xyz = temp[32] MAD color[1].x, src0.x__, src0.111, src1.y__ 67: BEGIN_TEX; 68: TEX temp[39], temp[8].xy__, 2D[1]; 69: TEX temp[40], temp[9].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 70: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[39], src1.w = temp[39] SEM_WAIT DP4 temp[47].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 71: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[45].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 72: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[43].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 73: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[39], src1.w = temp[39] DP4 temp[41].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 74: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[48].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 75: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[46].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 76: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[44].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 77: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[40], src1.w = temp[40] DP4 temp[42].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 78: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0._y_, src0.111, src1._z_ 79: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0._y_, src0.111, src1._z_ 80: src0.xyz = input[2] MAD temp[8].x, src0.x__, src0.111, src0.000 81: src0.xyz = input[3] MAD temp[9].x, src0.x__, src0.111, src0.000 82: src0.xyz = temp[47], src1.xyz = temp[48] MAD color[2].w, src0.x, src0.1, src1.y 83: src0.xyz = temp[45], src1.xyz = temp[46] MAD color[2].z, src0.__x, src0.111, src1.__y 84: src0.xyz = temp[43], src1.xyz = temp[44] MAD color[2].y, src0._x_, src0.111, src1._y_ 85: src0.xyz = temp[41], src1.xyz = temp[42] MAD color[2].x, src0.x__, src0.111, src1.y__ 86: BEGIN_TEX; 87: TEX temp[49], temp[8].xy__, 2D[1]; 88: TEX temp[50], temp[9].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 89: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[49], src1.w = temp[49] SEM_WAIT DP4 temp[57].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 90: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[55].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 91: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[53].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 92: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[49], src1.w = temp[49] DP4 temp[51].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 93: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[58].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 94: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[56].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 95: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[54].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 96: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[50], src1.w = temp[50] DP4 temp[52].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 97: src0.xyz = temp[57], src1.xyz = temp[58] MAD color[3].w, src0.x, src0.1, src1.y 98: src0.xyz = temp[55], src1.xyz = temp[56] MAD color[3].z, src0.__x, src0.111, src1.__y 99: src0.xyz = temp[53], src1.xyz = temp[54] MAD color[3].y, src0._x_, src0.111, src1._y_ 100: src0.xyz = temp[51], src1.xyz = temp[52] MAD color[3].x, src0.x__, src0.111, src1.y__ Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0._y_, src0.11_, src1._x_ 1: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0._y_, src0.11_, src1._x_ 2: src0.xyz = input[0], src1.xyz = const[0] MAD temp[6].y, src0._y_, src0.11_, src1._y_ 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[7].y, src0._y_, src0.11_, src1._y_ 4: src0.xyz = input[0], src0.w = const[0] MAD temp[8].y, src0._y_, src0.11_, src0._w_ 5: src0.xyz = input[1], src0.w = const[0] MAD temp[9].y, src0._y_, src0.11_, src0._w_ 6: src0.xyz = input[2], src1.xyz = const[1] MAD temp[10].y, src0._y_, src0.11_, src1._x_ 7: src0.xyz = input[3], src1.xyz = const[1] MAD temp[11].y, src0._y_, src0.11_, src1._x_ 8: src0.xyz = input[0] MAD temp[4].x, src0.x__, src0.11_, src0.00_ 9: src0.xyz = input[1] MAD temp[5].x, src0.x__, src0.11_, src0.00_ 10: src0.xyz = input[0] MAD temp[6].x, src0.x__, src0.11_, src0.00_ 11: src0.xyz = input[1] MAD temp[7].x, src0.x__, src0.11_, src0.00_ 12: src0.xyz = input[0] MAD temp[12].x, src0.x__, src0.11_, src0.00_ 13: src0.xyz = input[0] MAD temp[12].y, src0._y_, src0.11_, src0.00_ 14: src0.xyz = input[1] MAD temp[13].x, src0.x__, src0.11_, src0.00_ 15: src0.xyz = input[1] MAD temp[13].y, src0._y_, src0.11_, src0.00_ 16: src0.xyz = input[0] MAD temp[8].x, src0.x__, src0.11_, src0.00_ 17: src0.xyz = input[1] MAD temp[9].x, src0.x__, src0.11_, src0.00_ 18: BEGIN_TEX; 19: TEX temp[0], temp[4].xy__, 2D[0]; 20: TEX temp[1], temp[5].xy__, 2D[0]; 21: TEX temp[4], temp[6].xy__, 2D[0]; 22: TEX temp[5], temp[7].xy__, 2D[0]; 23: TEX temp[6], temp[12].xy__, 2D[0]; 24: TEX temp[7], temp[13].xy__, 2D[0]; 25: TEX temp[8], temp[8].xy__, 2D[0]; 26: TEX temp[9], temp[9].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 27: src0.xyz = input[2] MAD temp[10].x, src0.x__, src0.11_, src0.00_ 28: src0.xyz = input[3] MAD temp[11].x, src0.x__, src0.11_, src0.00_ 29: BEGIN_TEX; 30: TEX temp[10], temp[10].xy__, 2D[1]; 31: TEX temp[11], temp[11].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 32: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = temp[10], src1.w = temp[10] SEM_WAIT DP4 temp[2].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 33: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[10], src1.w = temp[10] DP4 temp[3].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 34: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[10], src1.w = temp[10] DP4 temp[12].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 35: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[10], src1.w = temp[10] DP4 temp[10].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 36: src0.xyz = temp[9], src0.w = temp[9], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[10].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 37: src0.xyz = temp[7], src0.w = temp[7], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[10].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 38: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[12].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 39: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[11].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 40: src0.xyz = input[2], src1.xyz = const[1] MAD temp[13].y, src0._y_, src0.11_, src1._y_ 41: src0.xyz = input[3], src1.xyz = const[1] MAD temp[14].y, src0._y_, src0.11_, src1._y_ 42: src0.xyz = input[2] MAD temp[13].x, src0.x__, src0.11_, src0.00_ 43: src0.xyz = input[3] MAD temp[14].x, src0.x__, src0.11_, src0.00_ 44: src0.xyz = temp[2], src1.xyz = temp[10] MAD color[0].w, src0.z, src0.1, src1.y 45: src0.xyz = temp[3], src1.xyz = temp[10] MAD color[0].z, src0.__z, src0.111, src1.__z 46: src0.xyz = temp[12], src1.xyz = temp[12] MAD color[0].y, src0._x_, src0.111, src1._y_ 47: src0.xyz = temp[10], src1.xyz = temp[11] MAD color[0].x, src0.x__, src0.111, src1.x__ 48: BEGIN_TEX; 49: TEX temp[10], temp[13].xy__, 2D[1]; 50: TEX temp[11], temp[14].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 51: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = temp[10], src1.w = temp[10] SEM_WAIT DP4 temp[2].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 52: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[10], src1.w = temp[10] DP4 temp[3].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 53: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[10], src1.w = temp[10] DP4 temp[12].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 54: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[10], src1.w = temp[10] DP4 temp[10].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 55: src0.xyz = temp[9], src0.w = temp[9], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[10].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 56: src0.xyz = temp[7], src0.w = temp[7], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[10].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 57: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[12].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 58: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[11].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 59: src0.xyz = input[2] MAD temp[13].x, src0.x__, src0.11_, src0.00_ 60: src0.xyz = input[2] MAD temp[13].y, src0._y_, src0.11_, src0.00_ 61: src0.xyz = input[3] MAD temp[14].x, src0.x__, src0.11_, src0.00_ 62: src0.xyz = input[3] MAD temp[14].y, src0._y_, src0.11_, src0.00_ 63: src0.xyz = temp[2], src1.xyz = temp[10] MAD color[1].w, src0.z, src0.1, src1.y 64: src0.xyz = temp[3], src1.xyz = temp[10] MAD color[1].z, src0.__z, src0.111, src1.__z 65: src0.xyz = temp[12], src1.xyz = temp[12] MAD color[1].y, src0._x_, src0.111, src1._y_ 66: src0.xyz = temp[10], src1.xyz = temp[11] MAD color[1].x, src0.x__, src0.111, src1.x__ 67: BEGIN_TEX; 68: TEX temp[10], temp[13].xy__, 2D[1]; 69: TEX temp[11], temp[14].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 70: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = temp[10], src1.w = temp[10] SEM_WAIT DP4 temp[2].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 71: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[10], src1.w = temp[10] DP4 temp[3].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 72: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[10], src1.w = temp[10] DP4 temp[12].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 73: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[10], src1.w = temp[10] DP4 temp[10].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 74: src0.xyz = temp[9], src0.w = temp[9], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[10].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 75: src0.xyz = temp[7], src0.w = temp[7], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[10].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 76: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[12].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 77: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[11], src1.w = temp[11] DP4 temp[11].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 78: src0.xyz = input[2], src1.xyz = const[1] MAD temp[13].y, src0._y_, src0.11_, src1._z_ 79: src0.xyz = input[3], src1.xyz = const[1] MAD temp[14].y, src0._y_, src0.11_, src1._z_ 80: src0.xyz = input[2] MAD temp[13].x, src0.x__, src0.11_, src0.00_ 81: src0.xyz = input[3] MAD temp[14].x, src0.x__, src0.11_, src0.00_ 82: src0.xyz = temp[2], src1.xyz = temp[10] MAD color[2].w, src0.z, src0.1, src1.y 83: src0.xyz = temp[3], src1.xyz = temp[10] MAD color[2].z, src0.__z, src0.111, src1.__z 84: src0.xyz = temp[12], src1.xyz = temp[12] MAD color[2].y, src0._x_, src0.111, src1._y_ 85: src0.xyz = temp[10], src1.xyz = temp[11] MAD color[2].x, src0.x__, src0.111, src1.x__ 86: BEGIN_TEX; 87: TEX temp[2], temp[13].xy__, 2D[1]; 88: TEX temp[3], temp[14].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 89: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = temp[2], src1.w = temp[2] SEM_WAIT DP4 temp[8].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 90: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[2], src1.w = temp[2] DP4 temp[6].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 91: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[2], src1.w = temp[2] DP4 temp[4].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 92: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2], src1.w = temp[2] DP4 temp[0].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 93: src0.xyz = temp[9], src0.w = temp[9], src1.xyz = temp[3], src1.w = temp[3] DP4 temp[0].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 94: src0.xyz = temp[7], src0.w = temp[7], src1.xyz = temp[3], src1.w = temp[3] DP4 temp[0].z, src0.xyz, src1.xyz DP4, src0.w, src1.w 95: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = temp[3], src1.w = temp[3] DP4 temp[2].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 96: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[3], src1.w = temp[3] DP4 temp[1].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 97: src0.xyz = temp[8], src1.xyz = temp[0] MAD color[3].w, src0.x, src0.1, src1.y 98: src0.xyz = temp[6], src1.xyz = temp[0] MAD color[3].z, src0.__x, src0.111, src1.__z 99: src0.xyz = temp[4], src1.xyz = temp[2] MAD color[3].y, src0._x_, src0.111, src1._x_ 100: src0.xyz = temp[0], src1.xyz = temp[1] MAD color[3].x, src0.x__, src0.111, src1.x__ r300compiler error: compiler/r300_fragprog_emit.c::begin_tex(): Too many texture indirections r300 FP: Compiler Error: compiler/r300_fragprog_emit.c::begin_tex(): Too many texture indirections Using a dummy shader instead.