** (firefox:6679): WARNING **: Failed to open webapp application path dir /usr/share/ubuntu/unity-webapps/userscripts: Error opening directory '/usr/share/ubuntu/unity-webapps/userscripts': No such file or directory ** (firefox:6679): WARNING **: Failed to open webapp application path dir /usr/share/gnome/unity-webapps/userscripts: Error opening directory '/usr/share/gnome/unity-webapps/userscripts': No such file or directory ** (firefox:6679): WARNING **: Failed to open webapp application path dir /usr/local/share/unity-webapps/userscripts: Error opening directory '/usr/local/share/unity-webapps/userscripts': No such file or directory 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 GLSL IR for linked fragment program 0: ( (declare (out ) vec4 gl_FragColor) (declare (in ) vec4 gl_Color) (function main (signature void (parameters ) ( (assign (xyzw) (var_ref gl_FragColor) (var_ref gl_Color) ) (assign (xyzw) (var_ref gl_FragColor@2) (var_ref gl_FragColor) ) )) ) ) 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 GLSL IR for linked fragment program 0: ( (declare (out ) vec4 gl_FragColor) (declare (in ) vec4 gl_Color) (function main (signature void (parameters ) ( (assign (xyzw) (var_ref gl_FragColor) (var_ref gl_Color) ) (assign (xyzw) (var_ref gl_FragColor@3) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL CONST[0..3] DCL TEMP[0] 0: MUL TEMP[0], IN[0].xxxx, CONST[0] 1: MAD TEMP[0], IN[0].yyyy, CONST[1], TEMP[0] 2: MAD TEMP[0], IN[0].zzzz, CONST[2], TEMP[0] 3: MAD OUT[0], IN[0].wwww, CONST[3], TEMP[0] 4: MOV OUT[1], IN[1] 5: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Final vertex program code: 0: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 1: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src1: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 2: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src1: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 3: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src1: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 4: 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 5: 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 6: op: 0x00f04203 dst: 2o 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 fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=0************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial 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 GLSL IR for linked fragment program 0: ( (declare (out ) vec4 gl_FragColor) (declare (in ) vec4 gl_Color) (function main (signature void (parameters ) ( (assign (xyzw) (var_ref gl_FragColor) (var_ref gl_Color) ) (assign (xyzw) (var_ref gl_FragColor@4) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL CONST[0..3] DCL TEMP[0] 0: MUL TEMP[0], IN[0].xxxx, CONST[0] 1: MAD TEMP[0], IN[0].yyyy, CONST[1], TEMP[0] 2: MAD TEMP[0], IN[0].zzzz, CONST[2], TEMP[0] 3: MAD OUT[0], IN[0].wwww, CONST[3], TEMP[0] 4: MOV OUT[1], IN[1] 5: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Final vertex program code: 0: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 1: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src1: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 2: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src1: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 3: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src1: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 4: 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 5: 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 6: op: 0x00f04203 dst: 2o 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 fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=1************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 GLSL source for vertex shader 1: uniform float counter; attribute vec3 position; attribute vec2 uv_in; varying vec2 uv; void main(){ (uv = uv_in); float angle = (counter * 0.02); float scale = (0.5 + (counter * 0.02)); float cos_a = (cos(angle) * scale); float sin_a = (sin(angle) * scale); vec2 vx = vec2(cos_a, sin_a); vec2 vy = vec2((-sin_a), cos_a); (gl_Position = vec4(((vx * position[0]) + (vy * position[1])), 0.0, 1.0)); } GLSL IR for shader 1: ( (declare (out ) vec2 uv) (declare (in ) vec2 uv_in) (declare (in ) vec3 position) (declare (uniform ) float counter) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function main (signature void (parameters ) ( (declare () float cos_a) (declare () float scale) (declare () float angle) (assign (xy) (var_ref uv) (var_ref uv_in) ) (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (var_ref counter) (constant float (0.020000)) ) ) (assign (x) (var_ref angle) (var_ref assignment_tmp) ) (assign (x) (var_ref scale) (expression float + (constant float (0.500000)) (expression float * (var_ref counter) (constant float (0.020000)) ) ) ) (declare (temporary ) float cos_retval) (call cos (var_ref cos_retval) ((var_ref assignment_tmp) )) (assign (x) (var_ref cos_a) (expression float * (var_ref cos_retval) (var_ref scale) ) ) (declare (temporary ) float sin_retval) (call sin (var_ref sin_retval) ((var_ref angle) )) (declare (temporary ) float assignment_tmp@5) (assign (x) (var_ref assignment_tmp@5) (expression float * (var_ref sin_retval) (var_ref scale) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref cos_a) ) (assign (y) (var_ref vec_ctor) (var_ref assignment_tmp@5) ) (declare (temporary ) vec2 vec_ctor@6) (assign (x) (var_ref vec_ctor@6) (expression float neg (var_ref assignment_tmp@5) ) ) (assign (y) (var_ref vec_ctor@6) (var_ref cos_a) ) (declare (temporary ) vec4 vec_ctor@7) (assign (zw) (var_ref vec_ctor@7) (constant vec2 (0.000000 1.000000)) ) (assign (xy) (var_ref vec_ctor@7) (expression vec2 + (expression vec2 * (var_ref vec_ctor) (swiz x (var_ref position) )) (expression vec2 * (var_ref vec_ctor@6) (swiz y (var_ref position) )) ) ) (assign (xyzw) (var_ref gl_Position) (var_ref vec_ctor@7) ) )) ) (function cos (signature float (parameters (declare (in ) float angle) ) ( )) ) (function sin (signature float (parameters (declare (in ) float angle) ) ( )) ) ) GLSL source for fragment shader 2: varying vec2 uv; float MandelbrotIteration(in vec2 uv){ float iterations = 0.0; vec2 c = uv; vec2 z = vec2(0.0, 0.0); for (int i = 0; (i < 32); (i++)) { if ((dot(z, z) < 4.0)) { (z = vec2((((z[0] * z[0]) - (z[1] * z[1])) + c[0]), (((z[0] * z[1]) * 2.0) + c[1]))); (iterations += 1.0); } } return iterations; } void main(){ float m = MandelbrotIteration(uv); (gl_FragColor = vec4((m / 32.0), (m / 32.0), (m / 32.0), 1.0)); } GLSL IR for shader 2: ( (declare (in ) vec2 uv) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function MandelbrotIteration (signature float (parameters (declare (in ) vec2 uv) ) ( (declare () int i) (declare () vec2 z) (declare () vec2 c) (declare () float iterations) (assign (x) (var_ref iterations) (constant float (0.000000)) ) (assign (xy) (var_ref c) (var_ref uv) ) (assign (xy) (var_ref z) (constant vec2 (0.000000 0.000000)) ) (assign (x) (var_ref i) (constant int (0)) ) (loop () () () () ( (if (expression bool >= (var_ref i) (constant int (32)) ) ( break ) ()) (declare (temporary ) float dot_retval) (call dot (var_ref dot_retval) ((var_ref z) (var_ref z) )) (if (expression bool < (var_ref dot_retval) (constant float (4.000000)) ) ( (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float + (expression float + (expression float * (swiz x (var_ref z) )(swiz x (var_ref z) )) (expression float neg (expression float * (swiz y (var_ref z) )(swiz y (var_ref z) )) ) ) (swiz x (var_ref c) )) ) (assign (y) (var_ref vec_ctor) (expression float + (expression float * (expression float * (swiz x (var_ref z) )(swiz y (var_ref z) )) (constant float (2.000000)) ) (swiz y (var_ref c) )) ) (assign (xy) (var_ref z) (var_ref vec_ctor) ) (assign (x) (var_ref iterations) (expression float + (var_ref iterations) (constant float (1.000000)) ) ) ) ()) (assign (x) (var_ref i) (expression int + (var_ref i) (constant int (1)) ) ) )) (return (var_ref iterations) ) )) ) (function dot (signature float (parameters (declare (in ) vec2 arg0) (declare (in ) vec2 arg1) ) ( )) ) (function main (signature void (parameters ) ( (declare (temporary ) float MandelbrotIteration_retval) (call MandelbrotIteration (var_ref MandelbrotIteration_retval) ((var_ref uv) )) (declare (temporary ) vec4 vec_ctor) (assign (w) (var_ref vec_ctor) (constant float (1.000000)) ) (assign (x) (var_ref vec_ctor) (expression float / (var_ref MandelbrotIteration_retval) (constant float (32.000000)) ) ) (assign (y) (var_ref vec_ctor) (expression float / (var_ref MandelbrotIteration_retval) (constant float (32.000000)) ) ) (assign (z) (var_ref vec_ctor) (expression float / (var_ref MandelbrotIteration_retval) (constant float (32.000000)) ) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref vec_ctor) ) )) ) ) GLSL IR for linked vertex program 3: ( (declare (out ) vec2 uv) (declare (in ) vec2 uv_in) (declare (in ) vec3 position) (declare (uniform ) float counter) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare () float cos_a) (declare () float scale) (assign (xy) (var_ref uv) (var_ref uv_in) ) (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (var_ref counter) (constant float (0.020000)) ) ) (assign (x) (var_ref scale) (expression float + (constant float (0.500000)) (expression float * (var_ref counter) (constant float (0.020000)) ) ) ) (assign (x) (var_ref cos_a) (expression float * (expression float cos (var_ref assignment_tmp) ) (var_ref scale) ) ) (declare (temporary ) float assignment_tmp@8) (assign (x) (var_ref assignment_tmp@8) (expression float * (expression float sin (var_ref assignment_tmp) ) (var_ref scale) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref cos_a) ) (assign (y) (var_ref vec_ctor) (var_ref assignment_tmp@8) ) (declare (temporary ) vec2 vec_ctor@9) (assign (x) (var_ref vec_ctor@9) (expression float neg (var_ref assignment_tmp@8) ) ) (assign (y) (var_ref vec_ctor@9) (var_ref cos_a) ) (declare (temporary ) vec4 vec_ctor@10) (assign (zw) (var_ref vec_ctor@10) (constant vec2 (0.000000 1.000000)) ) (assign (xy) (var_ref vec_ctor@10) (expression vec2 + (expression vec2 * (var_ref vec_ctor) (swiz x (var_ref position) )) (expression vec2 * (var_ref vec_ctor@9) (swiz y (var_ref position) )) ) ) (assign (xyzw) (var_ref gl_Position) (var_ref vec_ctor@10) ) (assign (xy) (var_ref uv@11) (var_ref uv) ) (assign (xyzw) (var_ref gl_Position@12) (var_ref gl_Position) ) )) ) ) GLSL IR for linked fragment program 3: ( (declare (in ) vec2 uv) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare () int i) (declare () vec2 z) (declare () vec2 c) (declare () float iterations) (assign (x) (var_ref iterations) (constant float (0.000000)) ) (assign (xy) (var_ref c) (var_ref uv) ) (assign (xy) (var_ref z) (constant vec2 (0.000000 0.000000)) ) (assign (x) (var_ref i) (constant int (0)) ) (loop ((declare () int i)) ((constant int (0)) ) ((constant int (32)) ) ((constant int (1)) ) ( (declare (temporary ) bool if_to_cond_assign_then) (assign (x) (var_ref if_to_cond_assign_then) (expression bool < (expression float dot (var_ref z) (var_ref z) ) (constant float (4.000000)) ) ) (declare (temporary ) vec2 vec_ctor) (assign (var_ref if_to_cond_assign_then) (x) (var_ref vec_ctor) (expression float + (expression float + (expression float * (swiz x (var_ref z) )(swiz x (var_ref z) )) (expression float neg (expression float * (swiz y (var_ref z) )(swiz y (var_ref z) )) ) ) (swiz x (var_ref c) )) ) (assign (var_ref if_to_cond_assign_then) (y) (var_ref vec_ctor) (expression float + (expression float * (expression float * (swiz x (var_ref z) )(swiz y (var_ref z) )) (constant float (2.000000)) ) (swiz y (var_ref c) )) ) (assign (var_ref if_to_cond_assign_then) (xy) (var_ref z) (var_ref vec_ctor) ) (assign (var_ref if_to_cond_assign_then) (x) (var_ref iterations) (expression float + (var_ref iterations) (constant float (1.000000)) ) ) (assign (x) (var_ref i) (expression int + (var_ref i) (constant int (1)) ) ) )) (declare (temporary ) vec4 vec_ctor@13) (assign (w) (var_ref vec_ctor@13) (constant float (1.000000)) ) (assign (x) (var_ref vec_ctor@13) (expression float * (var_ref iterations) (constant float (0.031250)) ) ) (assign (y) (var_ref vec_ctor@13) (expression float * (var_ref iterations) (constant float (0.031250)) ) ) (assign (z) (var_ref vec_ctor@13) (expression float * (var_ref iterations) (constant float (0.031250)) ) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref vec_ctor@13) ) (assign (xyzw) (var_ref gl_FragColor@14) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[12] DCL CONST[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL IMM FLT32 { 0.0200, 0.5000, 0.0000, 1.0000} 0: MUL TEMP[0].x, CONST[0].xxxx, IMM[0].xxxx 1: MAD TEMP[1].x, CONST[0].xxxx, IMM[0].xxxx, IMM[0].yyyy 2: COS TEMP[2].x, TEMP[0].xxxx 3: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[1].xxxx 4: SIN TEMP[0].x, TEMP[0].xxxx 5: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[1].xxxx 6: MOV TEMP[1].x, TEMP[2].xxxx 7: MOV TEMP[1].y, TEMP[0].xxxx 8: MOV TEMP[0].x, -TEMP[0].xxxx 9: MOV TEMP[0].y, TEMP[2].xxxx 10: MOV TEMP[2].zw, IMM[0].wwzw 11: MUL TEMP[1].xy, TEMP[1].xyyy, IN[1].xxxx 12: MAD TEMP[2].xy, TEMP[0].xyyy, IN[1].yyyy, TEMP[1].xyyy 13: MOV OUT[1].xy, IN[0].xyxx 14: MOV OUT[0], TEMP[2] 15: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0].x, const[0].xxxx, const[1].xxxx; 1: MAD temp[1].x, const[0].xxxx, const[1].xxxx, const[1].yyyy; 2: COS temp[2].x, temp[0].xxxx; 3: MUL temp[2].x, temp[2].xxxx, temp[1].xxxx; 4: SIN temp[0].x, temp[0].xxxx; 5: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 6: MOV temp[1].x, temp[2].xxxx; 7: MOV temp[1].y, temp[0].xxxx; 8: MOV temp[0].x, -temp[0].xxxx; 9: MOV temp[0].y, temp[2].xxxx; 10: MOV temp[2].zw, const[1].wwzw; 11: MUL temp[1].xy, temp[1].xyyy, input[1].xxxx; 12: MAD temp[2].xy, temp[0].xyyy, input[1].yyyy, temp[1].xyyy; 13: MOV output[1].xy, input[0].xyxx; 14: MOV temp[3], temp[2]; 15: MOV output[0], temp[3]; 16: MOV output[2], temp[3]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0].x, const[0].xxxx, const[1].xxxx; 1: MAD temp[1].x, const[0].xxxx, const[1].xxxx, const[1].yyyy; 2: COS temp[2].x, temp[0].xxxx; 3: MUL temp[2].x, temp[2].xxxx, temp[1].xxxx; 4: SIN temp[0].x, temp[0].xxxx; 5: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 6: MOV temp[1].x, temp[2].xxxx; 7: MOV temp[1].y, temp[0].xxxx; 8: MOV temp[0].x, -temp[0].xxxx; 9: MOV temp[0].y, temp[2].xxxx; 10: MOV temp[2].zw, const[1].wwzw; 11: MUL temp[1].xy, temp[1].xyyy, input[1].xxxx; 12: MAD temp[2].xy, temp[0].xyyy, input[1].yyyy, temp[1].xyyy; 13: MOV output[1].xy, input[0].xyxx; 14: MOV temp[3], temp[2]; 15: MOV output[0], temp[3]; 16: MOV output[2], temp[3]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0].x, const[0].xxxx, const[1].xxxx; 1: MAD temp[1].x, const[0].xxxx, const[1].xxxx, const[1].yyyy; 2: COS temp[2].x, temp[0].xxxx; 3: MUL temp[2].x, temp[2].xxxx, temp[1].xxxx; 4: SIN temp[0].x, temp[0].xxxx; 5: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 6: MOV temp[1].x, temp[2].xxxx; 7: MOV temp[1].y, temp[0].xxxx; 8: MOV temp[0].x, -temp[0].xxxx; 9: MOV temp[0].y, temp[2].xxxx; 10: MOV temp[2].zw, const[1].wwzw; 11: MUL temp[1].xy, temp[1].xyyy, input[1].xxxx; 12: MAD temp[2].xy, temp[0].xyyy, input[1].yyyy, temp[1].xyyy; 13: MOV output[1].xy, input[0].xyxx; 14: MOV temp[3], temp[2]; 15: MOV output[0], temp[3]; 16: MOV output[2], temp[3]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0].x, const[0].xxxx, const[1].xxxx; 1: MAD temp[1].x, const[0].xxxx, const[1].xxxx, const[1].yyyy; 2: MAD temp[4].w, temp[0].xxxx, const[3].zzzz, const[3].xxxx; 3: FRC temp[4].w, temp[4].wwww; 4: MAD temp[4].w, temp[4].wwww, const[3].wwww, -const[2].zzzz; 5: MUL temp[5].xy, temp[4].wwww, const[2]; 6: MAD temp[5].x, temp[5].yyyy, |temp[4].wwww|, temp[5].xxxx; 7: MAD temp[5].y, temp[5].xxxx, |temp[5].xxxx|, -temp[5].xxxx; 8: MAD temp[2].x, temp[5].yyyy, const[2].wwww, temp[5].xxxx; 9: MUL temp[2].x, temp[2].xxxx, temp[1].xxxx; 10: MAD temp[6].w, temp[0].xxxx, const[3].zzzz, const[3].yyyy; 11: FRC temp[6].w, temp[6].wwww; 12: MAD temp[6].w, temp[6].wwww, const[3].wwww, -const[2].zzzz; 13: MUL temp[7].xy, temp[6].wwww, const[2]; 14: MAD temp[7].x, temp[7].yyyy, |temp[6].wwww|, temp[7].xxxx; 15: MAD temp[7].y, temp[7].xxxx, |temp[7].xxxx|, -temp[7].xxxx; 16: MAD temp[0].x, temp[7].yyyy, const[2].wwww, temp[7].xxxx; 17: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 18: MOV temp[1].x, temp[2].xxxx; 19: MOV temp[1].y, temp[0].xxxx; 20: MOV temp[0].x, -temp[0].xxxx; 21: MOV temp[0].y, temp[2].xxxx; 22: MOV temp[2].zw, const[1].wwzw; 23: MUL temp[1].xy, temp[1].xyyy, input[1].xxxx; 24: MAD temp[2].xy, temp[0].xyyy, input[1].yyyy, temp[1].xyyy; 25: MOV output[1].xy, input[0].xyxx; 26: MOV temp[3], temp[2]; 27: MOV output[0], temp[3]; 28: MOV output[2], temp[3]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0].x, const[0].xxxx, const[1].xxxx; 1: MAD temp[1].x, const[0].xxxx, const[1].xxxx, const[1].yyyy; 2: MAD temp[4].w, temp[0].xxxx, const[3].zzzz, const[3].xxxx; 3: FRC temp[4].w, temp[4].wwww; 4: MAD temp[4].w, temp[4].wwww, const[3].wwww, -const[2].zzzz; 5: MUL temp[5].xy, temp[4].wwww, const[2]; 6: MAX temp[8], temp[4].wwww, -temp[4].wwww; 7: MAD temp[5].x, temp[5].yyyy, temp[8], temp[5].xxxx; 8: MAX temp[9], temp[5].xxxx, -temp[5].xxxx; 9: MAD temp[5].y, temp[5].xxxx, temp[9], -temp[5].xxxx; 10: MAD temp[2].x, temp[5].yyyy, const[2].wwww, temp[5].xxxx; 11: MUL temp[2].x, temp[2].xxxx, temp[1].xxxx; 12: MAD temp[6].w, temp[0].xxxx, const[3].zzzz, const[3].yyyy; 13: FRC temp[6].w, temp[6].wwww; 14: MAD temp[6].w, temp[6].wwww, const[3].wwww, -const[2].zzzz; 15: MUL temp[7].xy, temp[6].wwww, const[2]; 16: MAX temp[10], temp[6].wwww, -temp[6].wwww; 17: MAD temp[7].x, temp[7].yyyy, temp[10], temp[7].xxxx; 18: MAX temp[11], temp[7].xxxx, -temp[7].xxxx; 19: MAD temp[7].y, temp[7].xxxx, temp[11], -temp[7].xxxx; 20: MAD temp[0].x, temp[7].yyyy, const[2].wwww, temp[7].xxxx; 21: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 22: MOV temp[1].x, temp[2].xxxx; 23: MOV temp[1].y, temp[0].xxxx; 24: MOV temp[0].x, -temp[0].xxxx; 25: MOV temp[0].y, temp[2].xxxx; 26: MOV temp[2].zw, const[1].wwzw; 27: MUL temp[1].xy, temp[1].xyyy, input[1].xxxx; 28: MAD temp[2].xy, temp[0].xyyy, input[1].yyyy, temp[1].xyyy; 29: MOV output[1].xy, input[0].xyxx; 30: MOV temp[3], temp[2]; 31: MOV output[0], temp[3]; 32: MOV output[2], temp[3]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].x, const[0].x___, const[1].x___; 1: MAD temp[1].x, const[0].x___, const[1].x___, const[1].y___; 2: MAD temp[4].w, temp[0].___x, const[3].___z, const[3].___x; 3: FRC temp[4].w, temp[4].___w; 4: MAD temp[4].w, temp[4].___w, const[3].___w, -const[2].___z; 5: MUL temp[5].xy, temp[4].ww__, const[2].xy__; 6: MAX temp[8].x, temp[4].w___, -temp[4].w___; 7: MAD temp[5].x, temp[5].y___, temp[8].x___, temp[5].x___; 8: MAX temp[9].y, temp[5]._x__, -temp[5]._x__; 9: MAD temp[5].y, temp[5]._x__, temp[9]._y__, -temp[5]._x__; 10: MAD temp[2].x, temp[5].y___, const[2].w___, temp[5].x___; 11: MUL temp[2].x, temp[2].x___, temp[1].x___; 12: MAD temp[6].w, temp[0].___x, const[3].___z, const[3].___y; 13: FRC temp[6].w, temp[6].___w; 14: MAD temp[6].w, temp[6].___w, const[3].___w, -const[2].___z; 15: MUL temp[7].xy, temp[6].ww__, const[2].xy__; 16: MAX temp[10].x, temp[6].w___, -temp[6].w___; 17: MAD temp[7].x, temp[7].y___, temp[10].x___, temp[7].x___; 18: MAX temp[11].y, temp[7]._x__, -temp[7]._x__; 19: MAD temp[7].y, temp[7]._x__, temp[11]._y__, -temp[7]._x__; 20: MAD temp[0].x, temp[7].y___, const[2].w___, temp[7].x___; 21: MUL temp[0].x, temp[0].x___, temp[1].x___; 22: MOV temp[1].x, temp[2].x___; 23: MOV temp[1].y, temp[0]._x__; 24: MOV temp[0].x, -temp[0].x___; 25: MOV temp[0].y, temp[2]._x__; 26: MOV temp[2].zw, const[1].__zw; 27: MUL temp[1].xy, temp[1].xy__, input[1].xx__; 28: MAD temp[2].xy, temp[0].xy__, input[1].yy__, temp[1].xy__; 29: MOV output[1].xy, input[0].xy__; 30: MOV temp[3], temp[2]; 31: MOV output[0], temp[3]; 32: MOV output[2], temp[3]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].x, const[0].x___, const[1].x___; 1: MAD temp[1].x, const[0].x___, const[1].x___, const[1].y___; 2: MAD temp[4].w, temp[0].___x, const[3].___z, const[3].___x; 3: FRC temp[4].w, temp[4].___w; 4: MAD temp[4].w, temp[4].___w, const[3].___w, -const[2].___z; 5: MUL temp[5].xy, temp[4].ww__, const[2].xy__; 6: MAX temp[8].x, temp[4].w___, -temp[4].w___; 7: MAD temp[5].x, temp[5].y___, temp[8].x___, temp[5].x___; 8: MAX temp[9].y, temp[5]._x__, -temp[5]._x__; 9: MAD temp[5].y, temp[5]._x__, temp[9]._y__, -temp[5]._x__; 10: MAD temp[2].x, temp[5].y___, const[2].w___, temp[5].x___; 11: MUL temp[2].x, temp[2].x___, temp[1].x___; 12: MAD temp[6].w, temp[0].___x, const[3].___z, const[3].___y; 13: FRC temp[6].w, temp[6].___w; 14: MAD temp[6].w, temp[6].___w, const[3].___w, -const[2].___z; 15: MUL temp[7].xy, temp[6].ww__, const[2].xy__; 16: MAX temp[10].x, temp[6].w___, -temp[6].w___; 17: MAD temp[7].x, temp[7].y___, temp[10].x___, temp[7].x___; 18: MAX temp[11].y, temp[7]._x__, -temp[7]._x__; 19: MAD temp[7].y, temp[7]._x__, temp[11]._y__, -temp[7]._x__; 20: MAD temp[0].x, temp[7].y___, const[2].w___, temp[7].x___; 21: MUL temp[0].x, temp[0].x___, temp[1].x___; 22: MOV temp[1].x, temp[2].x___; 23: MOV temp[1].y, temp[0]._x__; 24: MOV temp[0].x, -temp[0].x___; 25: MOV temp[0].y, temp[2]._x__; 26: MOV temp[2].zw, none.__01; 27: MUL temp[1].xy, temp[1].xy__, input[1].xx__; 28: MAD temp[2].xy, temp[0].xy__, input[1].yy__, temp[1].xy__; 29: MOV output[1].xy, input[0].xy__; 30: MOV output[0], temp[2]; 31: MOV output[2], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], const[1].x___; 1: MUL temp[0].x, const[0].x___, temp[3]; 2: MOV temp[12], const[1].y___; 3: MOV temp[13], const[1].x___; 4: MAD temp[1].x, const[0].x___, temp[13], temp[12]; 5: MAD temp[4].w, temp[0].___x, const[3].___z, const[3].___x; 6: FRC temp[4].w, temp[4].___w; 7: MOV temp[14], -const[2].___z; 8: MAD temp[4].w, temp[4].___w, const[3].___w, temp[14]; 9: MUL temp[5].xy, temp[4].ww__, const[2].xy__; 10: MAX temp[8].x, temp[4].w___, -temp[4].w___; 11: MAD temp[5].x, temp[5].y___, temp[8].x___, temp[5].x___; 12: MAX temp[9].y, temp[5]._x__, -temp[5]._x__; 13: MAD temp[5].y, temp[5]._x__, temp[9]._y__, -temp[5]._x__; 14: MAD temp[2].x, temp[5].y___, const[2].w___, temp[5].x___; 15: MUL temp[2].x, temp[2].x___, temp[1].x___; 16: MAD temp[6].w, temp[0].___x, const[3].___z, const[3].___y; 17: FRC temp[6].w, temp[6].___w; 18: MOV temp[15], -const[2].___z; 19: MAD temp[6].w, temp[6].___w, const[3].___w, temp[15]; 20: MUL temp[7].xy, temp[6].ww__, const[2].xy__; 21: MAX temp[10].x, temp[6].w___, -temp[6].w___; 22: MAD temp[7].x, temp[7].y___, temp[10].x___, temp[7].x___; 23: MAX temp[11].y, temp[7]._x__, -temp[7]._x__; 24: MAD temp[7].y, temp[7]._x__, temp[11]._y__, -temp[7]._x__; 25: MAD temp[0].x, temp[7].y___, const[2].w___, temp[7].x___; 26: MUL temp[0].x, temp[0].x___, temp[1].x___; 27: MOV temp[1].x, temp[2].x___; 28: MOV temp[1].y, temp[0]._x__; 29: MOV temp[0].x, -temp[0].x___; 30: MOV temp[0].y, temp[2]._x__; 31: MOV temp[2].zw, none.__01; 32: MUL temp[1].xy, temp[1].xy__, input[1].xx__; 33: MAD temp[2].xy, temp[0].xy__, input[1].yy__, temp[1].xy__; 34: MOV output[1].xy, input[0].xy__; 35: MOV output[0], temp[2]; 36: MOV output[2], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], const[1].x___; 1: MUL temp[0].x, const[0].x___, temp[0]; 2: MOV temp[1], const[1].y___; 3: MOV temp[2], const[1].x___; 4: MAD temp[1].x, const[0].x___, temp[2], temp[1]; 5: MAD temp[2].w, temp[0].___x, const[3].___z, const[3].___x; 6: FRC temp[2].w, temp[2].___w; 7: MOV temp[3], -const[2].___z; 8: MAD temp[2].w, temp[2].___w, const[3].___w, temp[3]; 9: MUL temp[3].xy, temp[2].ww__, const[2].xy__; 10: MAX temp[2].x, temp[2].w___, -temp[2].w___; 11: MAD temp[3].x, temp[3].y___, temp[2].x___, temp[3].x___; 12: MAX temp[2].y, temp[3]._x__, -temp[3]._x__; 13: MAD temp[3].y, temp[3]._x__, temp[2]._y__, -temp[3]._x__; 14: MAD temp[2].x, temp[3].y___, const[2].w___, temp[3].x___; 15: MUL temp[2].x, temp[2].x___, temp[1].x___; 16: MAD temp[3].w, temp[0].___x, const[3].___z, const[3].___y; 17: FRC temp[3].w, temp[3].___w; 18: MOV temp[4], -const[2].___z; 19: MAD temp[3].w, temp[3].___w, const[3].___w, temp[4]; 20: MUL temp[4].xy, temp[3].ww__, const[2].xy__; 21: MAX temp[3].x, temp[3].w___, -temp[3].w___; 22: MAD temp[4].x, temp[4].y___, temp[3].x___, temp[4].x___; 23: MAX temp[3].y, temp[4]._x__, -temp[4]._x__; 24: MAD temp[4].y, temp[4]._x__, temp[3]._y__, -temp[4]._x__; 25: MAD temp[0].x, temp[4].y___, const[2].w___, temp[4].x___; 26: MUL temp[0].x, temp[0].x___, temp[1].x___; 27: MOV temp[1].x, temp[2].x___; 28: MOV temp[1].y, temp[0]._x__; 29: MOV temp[0].x, -temp[0].x___; 30: MOV temp[0].y, temp[2]._x__; 31: MOV temp[2].zw, none.__01; 32: MUL temp[1].xy, temp[1].xy__, input[1].xx__; 33: MAD temp[2].xy, temp[0].xy__, input[1].yy__, temp[1].xy__; 34: MOV output[1].xy, input[0].xy__; 35: MOV output[0], temp[2]; 36: MOV output[2], temp[2]; CONST[1] = { 0.0200 0.5000 0.0000 1.0000 } CONST[2] = { 1.2732 -0.4053 3.1416 0.2225 } CONST[3] = { 0.7500 0.5000 0.1592 6.2832 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], const[1].x___; 1: MUL temp[0].x, const[0].x___, temp[0]; 2: MOV temp[1], const[1].y___; 3: MOV temp[2], const[1].x___; 4: MAD temp[1].x, const[0].x___, temp[2], temp[1]; 5: MAD temp[2].w, temp[0].___x, const[3].___z, const[3].___x; 6: FRC temp[2].w, temp[2].___w; 7: MOV temp[3], -const[2].___z; 8: MAD temp[2].w, temp[2].___w, const[3].___w, temp[3]; 9: MUL temp[3].xy, temp[2].ww__, const[2].xy__; 10: MAX temp[2].x, temp[2].w___, -temp[2].w___; 11: MAD temp[3].x, temp[3].y___, temp[2].x___, temp[3].x___; 12: MAX temp[2].y, temp[3]._x__, -temp[3]._x__; 13: MAD temp[3].y, temp[3]._x__, temp[2]._y__, -temp[3]._x__; 14: MAD temp[2].x, temp[3].y___, const[2].w___, temp[3].x___; 15: MUL temp[2].x, temp[2].x___, temp[1].x___; 16: MAD temp[3].w, temp[0].___x, const[3].___z, const[3].___y; 17: FRC temp[3].w, temp[3].___w; 18: MOV temp[4], -const[2].___z; 19: MAD temp[3].w, temp[3].___w, const[3].___w, temp[4]; 20: MUL temp[4].xy, temp[3].ww__, const[2].xy__; 21: MAX temp[3].x, temp[3].w___, -temp[3].w___; 22: MAD temp[4].x, temp[4].y___, temp[3].x___, temp[4].x___; 23: MAX temp[3].y, temp[4]._x__, -temp[4]._x__; 24: MAD temp[4].y, temp[4]._x__, temp[3]._y__, -temp[4]._x__; 25: MAD temp[0].x, temp[4].y___, const[2].w___, temp[4].x___; 26: MUL temp[0].x, temp[0].x___, temp[1].x___; 27: MOV temp[1].x, temp[2].x___; 28: MOV temp[1].y, temp[0]._x__; 29: MOV temp[0].x, -temp[0].x___; 30: MOV temp[0].y, temp[2]._x__; 31: MOV temp[2].zw, none.__01; 32: MUL temp[1].xy, temp[1].xy__, input[1].xx__; 33: MAD temp[2].xy, temp[0].xy__, input[1].yy__, temp[1].xy__; 34: MOV output[1].xy, input[0].xy__; 35: MOV output[0], temp[2]; 36: MOV output[2], temp[2]; Final vertex program code: 0: op: 0x00f00003 dst: 0t 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 1: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00f02003 dst: 1t op: VE_ADD src0: 0x01ff2022 reg: 1c swiz: Y/ U/ U/ U src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 3: op: 0x00f04003 dst: 2t 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 4: op: 0x00102004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src1: 0x00d10040 reg: 2t swiz: X/ Y/ Z/ W src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 5: op: 0x00804004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x003fe000 reg: 0t swiz: U/ U/ U/ X src1: 0x00bfe062 reg: 3c swiz: U/ U/ U/ Z src2: 0x003fe062 reg: 3c swiz: U/ U/ U/ X 6: op: 0x00804006 dst: 2t op: VE_FRACTION src0: 0x00ffe040 reg: 2t swiz: U/ U/ U/ W src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 7: op: 0x00f06003 dst: 3t op: VE_ADD src0: 0x1ebfe042 reg: 2c swiz: -U/-U/-U/-Z src1: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 src2: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 8: op: 0x00804004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x00ffe040 reg: 2t swiz: U/ U/ U/ W src1: 0x00ffe062 reg: 3c swiz: U/ U/ U/ W src2: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W 9: op: 0x00306002 dst: 3t op: VE_MULTIPLY src0: 0x01fb6040 reg: 2t swiz: W/ W/ U/ U src1: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src2: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 10: op: 0x00104007 dst: 2t op: VE_MAXIMUM src0: 0x01ff6040 reg: 2t swiz: W/ U/ U/ U src1: 0x1fff6040 reg: 2t swiz: -W/-U/-U/-U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 11: op: 0x00106004 dst: 3t op: VE_MULTIPLY_ADD src0: 0x01ff2060 reg: 3t swiz: Y/ U/ U/ U src1: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src2: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U 12: op: 0x00204007 dst: 2t op: VE_MAXIMUM src0: 0x01f8e060 reg: 3t swiz: U/ X/ U/ U src1: 0x1ff8e060 reg: 3t swiz: -U/-X/-U/-U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 13: op: 0x00206004 dst: 3t op: VE_MULTIPLY_ADD src0: 0x01f8e060 reg: 3t swiz: U/ X/ U/ U src1: 0x01f9e040 reg: 2t swiz: U/ Y/ U/ U src2: 0x1ff8e060 reg: 3t swiz: -U/-X/-U/-U 14: op: 0x00104004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x01ff2060 reg: 3t swiz: Y/ U/ U/ U src1: 0x01ff6042 reg: 2c swiz: W/ U/ U/ U src2: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U 15: op: 0x00104002 dst: 2t op: VE_MULTIPLY src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 16: op: 0x00806004 dst: 3t op: VE_MULTIPLY_ADD src0: 0x003fe000 reg: 0t swiz: U/ U/ U/ X src1: 0x00bfe062 reg: 3c swiz: U/ U/ U/ Z src2: 0x007fe062 reg: 3c swiz: U/ U/ U/ Y 17: op: 0x00806006 dst: 3t op: VE_FRACTION src0: 0x00ffe060 reg: 3t swiz: U/ U/ U/ W src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 18: op: 0x00f08003 dst: 4t op: VE_ADD src0: 0x1ebfe042 reg: 2c swiz: -U/-U/-U/-Z src1: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 src2: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 19: op: 0x00806004 dst: 3t op: VE_MULTIPLY_ADD src0: 0x00ffe060 reg: 3t swiz: U/ U/ U/ W src1: 0x00ffe062 reg: 3c swiz: U/ U/ U/ W src2: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W 20: op: 0x00308002 dst: 4t op: VE_MULTIPLY src0: 0x01fb6060 reg: 3t swiz: W/ W/ U/ U src1: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src2: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 21: op: 0x00106007 dst: 3t op: VE_MAXIMUM src0: 0x01ff6060 reg: 3t swiz: W/ U/ U/ U src1: 0x1fff6060 reg: 3t swiz: -W/-U/-U/-U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 22: op: 0x00108004 dst: 4t op: VE_MULTIPLY_ADD src0: 0x01ff2080 reg: 4t swiz: Y/ U/ U/ U src1: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U src2: 0x01ff0080 reg: 4t swiz: X/ U/ U/ U 23: op: 0x00206007 dst: 3t op: VE_MAXIMUM src0: 0x01f8e080 reg: 4t swiz: U/ X/ U/ U src1: 0x1ff8e080 reg: 4t swiz: -U/-X/-U/-U src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 24: op: 0x00208004 dst: 4t op: VE_MULTIPLY_ADD src0: 0x01f8e080 reg: 4t swiz: U/ X/ U/ U src1: 0x01f9e060 reg: 3t swiz: U/ Y/ U/ U src2: 0x1ff8e080 reg: 4t swiz: -U/-X/-U/-U 25: op: 0x00100004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01ff2080 reg: 4t swiz: Y/ U/ U/ U src1: 0x01ff6042 reg: 2c swiz: W/ U/ U/ U src2: 0x01ff0080 reg: 4t swiz: X/ U/ U/ U 26: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 27: op: 0x00102003 dst: 1t 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 28: op: 0x00202003 dst: 1t op: VE_ADD 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 29: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x1fff0000 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 30: op: 0x00200003 dst: 0t op: VE_ADD src0: 0x01f8e040 reg: 2t swiz: U/ X/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 31: op: 0x00c04003 dst: 2t op: VE_ADD src0: 0x0167e000 reg: 0t swiz: U/ U/ 0/ 1 src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 32: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f80021 reg: 1i swiz: X/ X/ U/ U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 33: op: 0x00304004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f92021 reg: 1i swiz: Y/ Y/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 34: op: 0x00302203 dst: 1o 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 35: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10040 reg: 2t swiz: X/ Y/ Z/ W src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 36: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10040 reg: 2t swiz: X/ Y/ Z/ W src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL DCL TEMP[7], LOCAL DCL TEMP[8], LOCAL DCL TEMP[9], LOCAL DCL TEMP[10], LOCAL DCL TEMP[11], LOCAL DCL TEMP[12], LOCAL DCL TEMP[13], LOCAL IMM FLT32 { 0.0000, 32.0000, 4.0000, 2.0000} IMM FLT32 { 1.0000, 0.0312, 0.0000, 0.0000} 0: MOV TEMP[0].x, IMM[0].xxxx 1: MOV TEMP[1].xy, IN[0].xyxx 2: MOV TEMP[2].xy, IMM[0].xxxx 3: MOV TEMP[3].x, IMM[0].xxxx 4: BGNLOOP :0 5: SGE TEMP[4].x, TEMP[3].xxxx, IMM[0].yyyy 6: IF TEMP[4].xxxx :0 7: BRK 8: ENDIF 9: DP2 TEMP[5].x, TEMP[2].xyyy, TEMP[2].xyyy 10: SLT TEMP[6].x, TEMP[5].xxxx, IMM[0].zzzz 11: MUL TEMP[7].x, TEMP[2].yyyy, TEMP[2].yyyy 12: MAD TEMP[8].x, TEMP[2].xxxx, TEMP[2].xxxx, -TEMP[7].xxxx 13: ADD TEMP[9].x, TEMP[8].xxxx, TEMP[1].xxxx 14: CMP TEMP[10].x, -TEMP[6].xxxx, TEMP[9].xxxx, TEMP[10].xyyy 15: MUL TEMP[11].x, TEMP[2].xxxx, TEMP[2].yyyy 16: MAD TEMP[12].x, TEMP[11].xxxx, IMM[0].wwww, TEMP[1].yyyy 17: CMP TEMP[10].y, -TEMP[6].xxxx, TEMP[12].xxxx, TEMP[10].xyyy 18: CMP TEMP[2].xy, -TEMP[6].xxxx, TEMP[10].xyxx, TEMP[2].xyyy 19: ADD TEMP[13].x, TEMP[0].xxxx, IMM[1].xxxx 20: CMP TEMP[0].x, -TEMP[6].xxxx, TEMP[13].xxxx, TEMP[0].xxxx 21: ADD TEMP[3].x, TEMP[3].xxxx, IMM[1].xxxx 22: ADD TEMP[3].x, TEMP[3].xxxx, IMM[1].xxxx 23: ENDLOOP :0 24: MOV TEMP[1].w, IMM[1].xxxx 25: MUL TEMP[1].x, TEMP[0].xxxx, IMM[1].yyyy 26: MUL TEMP[2].x, TEMP[0].xxxx, IMM[1].yyyy 27: MOV TEMP[1].y, TEMP[2].xxxx 28: MUL TEMP[0].x, TEMP[0].xxxx, IMM[1].yyyy 29: MOV TEMP[1].z, TEMP[0].xxxx 30: MOV OUT[0], TEMP[1] 31: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV temp[0].x, const[0].xxxx; 1: MOV temp[1].xy, input[0].xyxx; 2: MOV temp[2].xy, const[0].xxxx; 3: MOV temp[3].x, const[0].xxxx; 4: BGNLOOP; 5: SGE temp[4].x, temp[3].xxxx, const[0].yyyy; 6: IF temp[4].xxxx; 7: BRK; 8: ENDIF; 9: DP2 temp[5].x, temp[2].xyyy, temp[2].xyyy; 10: SLT temp[6].x, temp[5].xxxx, const[0].zzzz; 11: MUL temp[7].x, temp[2].yyyy, temp[2].yyyy; 12: MAD temp[8].x, temp[2].xxxx, temp[2].xxxx, -temp[7].xxxx; 13: ADD temp[9].x, temp[8].xxxx, temp[1].xxxx; 14: CMP temp[10].x, -temp[6].xxxx, temp[9].xxxx, temp[10].xyyy; 15: MUL temp[11].x, temp[2].xxxx, temp[2].yyyy; 16: MAD temp[12].x, temp[11].xxxx, const[0].wwww, temp[1].yyyy; 17: CMP temp[10].y, -temp[6].xxxx, temp[12].xxxx, temp[10].xyyy; 18: CMP temp[2].xy, -temp[6].xxxx, temp[10].xyxx, temp[2].xyyy; 19: ADD temp[13].x, temp[0].xxxx, const[1].xxxx; 20: CMP temp[0].x, -temp[6].xxxx, temp[13].xxxx, temp[0].xxxx; 21: ADD temp[3].x, temp[3].xxxx, const[1].xxxx; 22: ADD temp[3].x, temp[3].xxxx, const[1].xxxx; 23: ENDLOOP; 24: MOV temp[1].w, const[1].xxxx; 25: MUL temp[1].x, temp[0].xxxx, const[1].yyyy; 26: MUL temp[2].x, temp[0].xxxx, const[1].yyyy; 27: MOV temp[1].y, temp[2].xxxx; 28: MUL temp[0].x, temp[0].xxxx, const[1].yyyy; 29: MOV temp[1].z, temp[0].xxxx; 30: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV temp[0].x, const[0].xxxx; 1: MOV temp[1].xy, input[0].xyxx; 2: MOV temp[2].xy, const[0].xxxx; 3: MOV temp[3].x, const[0].xxxx; 4: BGNLOOP; 5: SGE temp[4].x, temp[3].xxxx, const[0].yyyy; 6: IF temp[4].xxxx; 7: BRK; 8: ENDIF; 9: DP2 temp[5].x, temp[2].xyyy, temp[2].xyyy; 10: SLT temp[6].x, temp[5].xxxx, const[0].zzzz; 11: MUL temp[7].x, temp[2].yyyy, temp[2].yyyy; 12: MAD temp[8].x, temp[2].xxxx, temp[2].xxxx, -temp[7].xxxx; 13: ADD temp[9].x, temp[8].xxxx, temp[1].xxxx; 14: CMP temp[10].x, -temp[6].xxxx, temp[9].xxxx, temp[10].xyyy; 15: MUL temp[11].x, temp[2].xxxx, temp[2].yyyy; 16: MAD temp[12].x, temp[11].xxxx, const[0].wwww, temp[1].yyyy; 17: CMP temp[10].y, -temp[6].xxxx, temp[12].xxxx, temp[10].xyyy; 18: CMP temp[2].xy, -temp[6].xxxx, temp[10].xyxx, temp[2].xyyy; 19: ADD temp[13].x, temp[0].xxxx, const[1].xxxx; 20: CMP temp[0].x, -temp[6].xxxx, temp[13].xxxx, temp[0].xxxx; 21: ADD temp[3].x, temp[3].xxxx, const[1].xxxx; 22: ADD temp[3].x, temp[3].xxxx, const[1].xxxx; 23: ENDLOOP; 24: MOV temp[1].w, const[1].xxxx; 25: MUL temp[1].x, temp[0].xxxx, const[1].yyyy; 26: MUL temp[2].x, temp[0].xxxx, const[1].yyyy; 27: MOV temp[1].y, temp[2].xxxx; 28: MUL temp[0].x, temp[0].xxxx, const[1].yyyy; 29: MOV temp[1].z, temp[0].xxxx; 30: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV temp[0].x, const[0].xxxx; 1: MOV temp[1].xy, input[0].xyxx; 2: MOV temp[2].xy, const[0].xxxx; 3: MOV temp[3].x, const[0].xxxx; 4: BGNLOOP; 5: SGE temp[4].x, temp[3].xxxx, const[0].yyyy; 6: IF temp[4].xxxx; 7: BRK; 8: ENDIF; 9: DP2 temp[5].x, temp[2].xyyy, temp[2].xyyy; 10: SLT temp[6].x, temp[5].xxxx, const[0].zzzz; 11: MUL temp[7].x, temp[2].yyyy, temp[2].yyyy; 12: MAD temp[8].x, temp[2].xxxx, temp[2].xxxx, -temp[7].xxxx; 13: ADD temp[9].x, temp[8].xxxx, temp[1].xxxx; 14: CMP temp[10].x, -temp[6].xxxx, temp[9].xxxx, temp[10].xyyy; 15: MUL temp[11].x, temp[2].xxxx, temp[2].yyyy; 16: MAD temp[12].x, temp[11].xxxx, const[0].wwww, temp[1].yyyy; 17: CMP temp[10].y, -temp[6].xxxx, temp[12].xxxx, temp[10].xyyy; 18: CMP temp[2].xy, -temp[6].xxxx, temp[10].xyxx, temp[2].xyyy; 19: ADD temp[13].x, temp[0].xxxx, const[1].xxxx; 20: CMP temp[0].x, -temp[6].xxxx, temp[13].xxxx, temp[0].xxxx; 21: ADD temp[3].x, temp[3].xxxx, const[1].xxxx; 22: ADD temp[3].x, temp[3].xxxx, const[1].xxxx; 23: ENDLOOP; 24: MOV temp[1].w, const[1].xxxx; 25: MUL temp[1].x, temp[0].xxxx, const[1].yyyy; 26: MUL temp[2].x, temp[0].xxxx, const[1].yyyy; 27: MOV temp[1].y, temp[2].xxxx; 28: MUL temp[0].x, temp[0].xxxx, const[1].yyyy; 29: MOV temp[1].z, temp[0].xxxx; 30: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0].x, const[0].xxxx; 1: MOV temp[1].xy, input[0].xyxx; 2: MOV temp[2].xy, const[0].xxxx; 3: MOV temp[3].x, const[0].xxxx; 4: BGNLOOP; 5: SLT temp[4].x, temp[3].xxxx, const[0].yyyy; 6: IF temp[4].xxxx; 7: DP2 temp[5].x, temp[2].xyyy, temp[2].xyyy; 8: SLT temp[6].x, temp[5].xxxx, const[0].zzzz; 9: MUL temp[7].x, temp[2].yyyy, temp[2].yyyy; 10: MAD temp[8].x, temp[2].xxxx, temp[2].xxxx, -temp[7].xxxx; 11: ADD temp[9].x, temp[8].xxxx, temp[1].xxxx; 12: CMP temp[10].x, -temp[6].xxxx, temp[9].xxxx, temp[10].xyyy; 13: MUL temp[11].x, temp[2].xxxx, temp[2].yyyy; 14: MAD temp[12].x, temp[11].xxxx, const[0].wwww, temp[1].yyyy; 15: CMP temp[10].y, -temp[6].xxxx, temp[12].xxxx, temp[10].xyyy; 16: CMP temp[2].xy, -temp[6].xxxx, temp[10].xyxx, temp[2].xyyy; 17: ADD temp[13].x, temp[0].xxxx, const[1].xxxx; 18: CMP temp[0].x, -temp[6].xxxx, temp[13].xxxx, temp[0].xxxx; 19: ADD temp[3].x, temp[3].xxxx, const[1].xxxx; 20: ADD temp[3].x, temp[3].xxxx, const[1].xxxx; 21: ENDIF; 22: ENDLOOP; 23: MOV temp[1].w, const[1].xxxx; 24: MUL temp[1].x, temp[0].xxxx, const[1].yyyy; 25: MUL temp[2].x, temp[0].xxxx, const[1].yyyy; 26: MOV temp[1].y, temp[2].xxxx; 27: MUL temp[0].x, temp[0].xxxx, const[1].yyyy; 28: MOV temp[1].z, temp[0].xxxx; 29: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].x, const[0].xxxx; 1: MOV temp[1].xy, input[0].xyxx; 2: MOV temp[2].xy, const[0].xxxx; 3: MOV temp[3].x, const[0].xxxx; 4: BGNLOOP; 5: SLT temp[4].x, temp[3].xxxx, const[0].yyyy; 6: MOV temp[14].x, temp[4].xxxx; 7: MOV temp[12], temp[0]; 8: MOV temp[11], temp[2]; 9: MOV temp[6], temp[3]; 10: MOV temp[15], temp[5]; 11: MOV temp[16], temp[6]; 12: MOV temp[5], temp[7]; 13: MOV temp[17], temp[8]; 14: MOV temp[7], temp[9]; 15: MOV temp[8], temp[10]; 16: MOV temp[9], temp[11]; 17: MOV temp[18], temp[12]; 18: MOV temp[10], temp[13]; 19: DP2 temp[15].x, temp[2].xyyy, temp[2].xyyy; 20: SLT temp[16].x, temp[15].xxxx, const[0].zzzz; 21: MUL temp[5].x, temp[2].yyyy, temp[2].yyyy; 22: MAD temp[17].x, temp[2].xxxx, temp[2].xxxx, -temp[5].xxxx; 23: ADD temp[7].x, temp[17].xxxx, temp[1].xxxx; 24: CMP temp[8].x, -temp[16].xxxx, temp[7].xxxx, temp[8].xyyy; 25: MUL temp[9].x, temp[2].xxxx, temp[2].yyyy; 26: MAD temp[18].x, temp[9].xxxx, const[0].wwww, temp[1].yyyy; 27: CMP temp[8].y, -temp[16].xxxx, temp[18].xxxx, temp[8].xyyy; 28: CMP temp[11].xy, -temp[16].xxxx, temp[8].xyxx, temp[11].xyyy; 29: ADD temp[10].x, temp[0].xxxx, const[1].xxxx; 30: CMP temp[12].x, -temp[16].xxxx, temp[10].xxxx, temp[12].xxxx; 31: ADD temp[6].x, temp[6].xxxx, const[1].xxxx; 32: ADD temp[6].x, temp[6].xxxx, const[1].xxxx; 33: CMP temp[13], -|temp[14].xxxx|, temp[10], temp[13]; 34: CMP temp[12], -|temp[14].xxxx|, temp[18], temp[12]; 35: CMP temp[11], -|temp[14].xxxx|, temp[9], temp[11]; 36: CMP temp[10], -|temp[14].xxxx|, temp[8], temp[10]; 37: CMP temp[9], -|temp[14].xxxx|, temp[7], temp[9]; 38: CMP temp[8], -|temp[14].xxxx|, temp[17], temp[8]; 39: CMP temp[7], -|temp[14].xxxx|, temp[5], temp[7]; 40: CMP temp[6], -|temp[14].xxxx|, temp[16], temp[6]; 41: CMP temp[5], -|temp[14].xxxx|, temp[15], temp[5]; 42: CMP temp[3], -|temp[14].xxxx|, temp[6], temp[3]; 43: CMP temp[2], -|temp[14].xxxx|, temp[11], temp[2]; 44: CMP temp[0], -|temp[14].xxxx|, temp[12], temp[0]; 45: ENDLOOP; 46: MOV temp[1].w, const[1].xxxx; 47: MUL temp[1].x, temp[0].xxxx, const[1].yyyy; 48: MUL temp[2].x, temp[0].xxxx, const[1].yyyy; 49: MOV temp[1].y, temp[2].xxxx; 50: MUL temp[0].x, temp[0].xxxx, const[1].yyyy; 51: MOV temp[1].z, temp[0].xxxx; 52: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV temp[0].x, const[0].xxxx; 1: MOV temp[1].xy, input[0].xyxx; 2: MOV temp[2].xy, const[0].xxxx; 3: MOV temp[3].x, const[0].xxxx; 4: BGNLOOP; 5: SLT temp[4].x, temp[3].xxxx, const[0].yyyy; 6: MOV temp[14].x, temp[4].xxxx; 7: MOV temp[12], temp[0]; 8: MOV temp[11], temp[2]; 9: MOV temp[6], temp[3]; 10: MOV temp[15], temp[5]; 11: MOV temp[16], temp[6]; 12: MOV temp[5], temp[7]; 13: MOV temp[17], temp[8]; 14: MOV temp[7], temp[9]; 15: MOV temp[8], temp[10]; 16: MOV temp[9], temp[11]; 17: MOV temp[18], temp[12]; 18: MOV temp[10], temp[13]; 19: DP2 temp[15].x, temp[2].xyyy, temp[2].xyyy; 20: SLT temp[16].x, temp[15].xxxx, const[0].zzzz; 21: MUL temp[5].x, temp[2].yyyy, temp[2].yyyy; 22: MAD temp[17].x, temp[2].xxxx, temp[2].xxxx, -temp[5].xxxx; 23: ADD temp[7].x, temp[17].xxxx, temp[1].xxxx; 24: CMP temp[8].x, -temp[16].xxxx, temp[7].xxxx, temp[8].xyyy; 25: MUL temp[9].x, temp[2].xxxx, temp[2].yyyy; 26: MAD temp[18].x, temp[9].xxxx, const[0].wwww, temp[1].yyyy; 27: CMP temp[8].y, -temp[16].xxxx, temp[18].xxxx, temp[8].xyyy; 28: CMP temp[11].xy, -temp[16].xxxx, temp[8].xyxx, temp[11].xyyy; 29: ADD temp[10].x, temp[0].xxxx, const[1].xxxx; 30: CMP temp[12].x, -temp[16].xxxx, temp[10].xxxx, temp[12].xxxx; 31: ADD temp[6].x, temp[6].xxxx, const[1].xxxx; 32: ADD temp[6].x, temp[6].xxxx, const[1].xxxx; 33: CMP temp[13], -|temp[14].xxxx|, temp[10], temp[13]; 34: CMP temp[12], -|temp[14].xxxx|, temp[18], temp[12]; 35: CMP temp[11], -|temp[14].xxxx|, temp[9], temp[11]; 36: CMP temp[10], -|temp[14].xxxx|, temp[8], temp[10]; 37: CMP temp[9], -|temp[14].xxxx|, temp[7], temp[9]; 38: CMP temp[8], -|temp[14].xxxx|, temp[17], temp[8]; 39: CMP temp[7], -|temp[14].xxxx|, temp[5], temp[7]; 40: CMP temp[6], -|temp[14].xxxx|, temp[16], temp[6]; 41: CMP temp[5], -|temp[14].xxxx|, temp[15], temp[5]; 42: CMP temp[3], -|temp[14].xxxx|, temp[6], temp[3]; 43: CMP temp[2], -|temp[14].xxxx|, temp[11], temp[2]; 44: CMP temp[0], -|temp[14].xxxx|, temp[12], temp[0]; 45: ENDLOOP; 46: MOV temp[1].w, const[1].xxxx; 47: MUL temp[1].x, temp[0].xxxx, const[1].yyyy; 48: MUL temp[2].x, temp[0].xxxx, const[1].yyyy; 49: MOV temp[1].y, temp[2].xxxx; 50: MUL temp[0].x, temp[0].xxxx, const[1].yyyy; 51: MOV temp[1].z, temp[0].xxxx; 52: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].x, const[0].xxxx; 1: MOV temp[1].xy, input[0].xyxx; 2: MOV temp[2].xy, const[0].xxxx; 3: MOV temp[3].x, const[0].xxxx; 4: BGNLOOP; 5: ADD temp[4].x, temp[3].xxxx, -const[0].yyyy; 6: CMP temp[4].x, temp[4], none.1111, none.0000; 7: MOV temp[14].x, temp[4].xxxx; 8: MOV temp[12], temp[0]; 9: MOV temp[11], temp[2]; 10: MOV temp[6], temp[3]; 11: MOV temp[15], temp[5]; 12: MOV temp[16], temp[6]; 13: MOV temp[5], temp[7]; 14: MOV temp[17], temp[8]; 15: MOV temp[7], temp[9]; 16: MOV temp[8], temp[10]; 17: MOV temp[9], temp[11]; 18: MOV temp[18], temp[12]; 19: MOV temp[10], temp[13]; 20: DP3 temp[15].x, temp[2].xy00, temp[2].xy00; 21: ADD temp[16].x, temp[15].xxxx, -const[0].zzzz; 22: CMP temp[16].x, temp[16], none.1111, none.0000; 23: MUL temp[5].x, temp[2].yyyy, temp[2].yyyy; 24: MAD temp[17].x, temp[2].xxxx, temp[2].xxxx, -temp[5].xxxx; 25: ADD temp[7].x, temp[17].xxxx, temp[1].xxxx; 26: CMP temp[8].x, -temp[16].xxxx, temp[7].xxxx, temp[8].xyyy; 27: MUL temp[9].x, temp[2].xxxx, temp[2].yyyy; 28: MAD temp[18].x, temp[9].xxxx, const[0].wwww, temp[1].yyyy; 29: CMP temp[8].y, -temp[16].xxxx, temp[18].xxxx, temp[8].xyyy; 30: CMP temp[11].xy, -temp[16].xxxx, temp[8].xyxx, temp[11].xyyy; 31: ADD temp[10].x, temp[0].xxxx, const[1].xxxx; 32: CMP temp[12].x, -temp[16].xxxx, temp[10].xxxx, temp[12].xxxx; 33: ADD temp[6].x, temp[6].xxxx, const[1].xxxx; 34: ADD temp[6].x, temp[6].xxxx, const[1].xxxx; 35: CMP temp[13], -|temp[14].xxxx|, temp[10], temp[13]; 36: CMP temp[12], -|temp[14].xxxx|, temp[18], temp[12]; 37: CMP temp[11], -|temp[14].xxxx|, temp[9], temp[11]; 38: CMP temp[10], -|temp[14].xxxx|, temp[8], temp[10]; 39: CMP temp[9], -|temp[14].xxxx|, temp[7], temp[9]; 40: CMP temp[8], -|temp[14].xxxx|, temp[17], temp[8]; 41: CMP temp[7], -|temp[14].xxxx|, temp[5], temp[7]; 42: CMP temp[6], -|temp[14].xxxx|, temp[16], temp[6]; 43: CMP temp[5], -|temp[14].xxxx|, temp[15], temp[5]; 44: CMP temp[3], -|temp[14].xxxx|, temp[6], temp[3]; 45: CMP temp[2], -|temp[14].xxxx|, temp[11], temp[2]; 46: CMP temp[0], -|temp[14].xxxx|, temp[12], temp[0]; 47: ENDLOOP; 48: MOV temp[1].w, const[1].xxxx; 49: MUL temp[1].x, temp[0].xxxx, const[1].yyyy; 50: MUL temp[2].x, temp[0].xxxx, const[1].yyyy; 51: MOV temp[1].y, temp[2].xxxx; 52: MUL temp[0].x, temp[0].xxxx, const[1].yyyy; 53: MOV temp[1].z, temp[0].xxxx; 54: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0].x, const[0].x___; 1: MOV temp[1].xy, input[0].xy__; 2: MOV temp[2].xy, const[0].xx__; 3: MOV temp[3].x, const[0].x___; 4: BGNLOOP; 5: ADD temp[4].x, temp[3].x___, -const[0].y___; 6: CMP temp[4].x, temp[4].x___, none.1___, none.0___; 7: MOV temp[14].x, temp[4].x___; 8: MOV temp[12], temp[0]; 9: MOV temp[11], temp[2]; 10: MOV temp[6], temp[3]; 11: MOV temp[15].yzw, temp[5]._yzw; 12: MOV temp[16].yzw, temp[6]._yzw; 13: MOV temp[5].yzw, temp[7]._yzw; 14: MOV temp[17].yzw, temp[8]._yzw; 15: MOV temp[7].yzw, temp[9]._yzw; 16: MOV temp[8], temp[10]; 17: MOV temp[9].yzw, temp[11]._yzw; 18: MOV temp[18].yzw, temp[12]._yzw; 19: MOV temp[10].yzw, temp[13]._yzw; 20: DP3 temp[15].x, temp[2].xy0_, temp[2].xy0_; 21: ADD temp[16].x, temp[15].x___, -const[0].z___; 22: CMP temp[16].x, temp[16].x___, none.1___, none.0___; 23: MUL temp[5].x, temp[2].y___, temp[2].y___; 24: MAD temp[17].x, temp[2].x___, temp[2].x___, -temp[5].x___; 25: ADD temp[7].x, temp[17].x___, temp[1].x___; 26: CMP temp[8].x, -temp[16].x___, temp[7].x___, temp[8].x___; 27: MUL temp[9].x, temp[2].x___, temp[2].y___; 28: MAD temp[18].x, temp[9].x___, const[0].w___, temp[1].y___; 29: CMP temp[8].y, -temp[16]._x__, temp[18]._x__, temp[8]._y__; 30: CMP temp[11].xy, -temp[16].xx__, temp[8].xy__, temp[11].xy__; 31: ADD temp[10].x, temp[0].x___, const[1].x___; 32: CMP temp[12].x, -temp[16].x___, temp[10].x___, temp[12].x___; 33: ADD temp[6].x, temp[6].x___, const[1].x___; 34: ADD temp[6].x, temp[6].x___, const[1].x___; 35: CMP temp[13], -|temp[14].xxxx|, temp[10], temp[13]; 36: CMP temp[12], -|temp[14].xxxx|, temp[18], temp[12]; 37: CMP temp[11], -|temp[14].xxxx|, temp[9], temp[11]; 38: CMP temp[10], -|temp[14].xxxx|, temp[8], temp[10]; 39: CMP temp[9], -|temp[14].xxxx|, temp[7], temp[9]; 40: CMP temp[8], -|temp[14].xxxx|, temp[17], temp[8]; 41: CMP temp[7], -|temp[14].xxxx|, temp[5], temp[7]; 42: CMP temp[6], -|temp[14].xxxx|, temp[16], temp[6]; 43: CMP temp[5], -|temp[14].xxxx|, temp[15], temp[5]; 44: CMP temp[3], -|temp[14].xxxx|, temp[6], temp[3]; 45: CMP temp[2], -|temp[14].xxxx|, temp[11], temp[2]; 46: CMP temp[0], -|temp[14].xxxx|, temp[12], temp[0]; 47: ENDLOOP; 48: MOV temp[1].w, const[1].___x; 49: MUL temp[1].x, temp[0].x___, const[1].y___; 50: MUL temp[2].x, temp[0].x___, const[1].y___; 51: MOV temp[1].y, temp[2]._x__; 52: MUL temp[0].x, temp[0].x___, const[1].y___; 53: MOV temp[1].z, temp[0].__x_; 54: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV temp[0].x, const[0].x___; 1: MOV temp[1].xy, input[0].xy__; 2: MOV temp[2].xy, const[0].xx__; 3: MOV temp[3].x, const[0].x___; 4: ADD temp[4].x, temp[3].x___, -const[0].y___; 5: CMP temp[4].x, temp[4].x___, none.1___, none.0___; 6: MOV temp[14].x, temp[4].x___; 7: MOV temp[12], temp[0]; 8: MOV temp[11], temp[2]; 9: MOV temp[6], temp[3]; 10: MOV temp[15].yzw, temp[5]._yzw; 11: MOV temp[16].yzw, temp[6]._yzw; 12: MOV temp[5].yzw, temp[7]._yzw; 13: MOV temp[17].yzw, temp[8]._yzw; 14: MOV temp[7].yzw, temp[9]._yzw; 15: MOV temp[8], temp[10]; 16: MOV temp[9].yzw, temp[11]._yzw; 17: MOV temp[18].yzw, temp[12]._yzw; 18: MOV temp[10].yzw, temp[13]._yzw; 19: DP3 temp[15].x, temp[2].xy0_, temp[2].xy0_; 20: ADD temp[16].x, temp[15].x___, -const[0].z___; 21: CMP temp[16].x, temp[16].x___, none.1___, none.0___; 22: MUL temp[5].x, temp[2].y___, temp[2].y___; 23: MAD temp[17].x, temp[2].x___, temp[2].x___, -temp[5].x___; 24: ADD temp[7].x, temp[17].x___, temp[1].x___; 25: CMP temp[8].x, -temp[16].x___, temp[7].x___, temp[8].x___; 26: MUL temp[9].x, temp[2].x___, temp[2].y___; 27: MAD temp[18].x, temp[9].x___, const[0].w___, temp[1].y___; 28: CMP temp[8].y, -temp[16]._x__, temp[18]._x__, temp[8]._y__; 29: CMP temp[11].xy, -temp[16].xx__, temp[8].xy__, temp[11].xy__; 30: ADD temp[10].x, temp[0].x___, const[1].x___; 31: CMP temp[12].x, -temp[16].x___, temp[10].x___, temp[12].x___; 32: ADD temp[6].x, temp[6].x___, const[1].x___; 33: ADD temp[6].x, temp[6].x___, const[1].x___; 34: CMP temp[13], -|temp[14].xxxx|, temp[10], temp[13]; 35: CMP temp[12], -|temp[14].xxxx|, temp[18], temp[12]; 36: CMP temp[11], -|temp[14].xxxx|, temp[9], temp[11]; 37: CMP temp[10], -|temp[14].xxxx|, temp[8], temp[10]; 38: CMP temp[9], -|temp[14].xxxx|, temp[7], temp[9]; 39: CMP temp[8], -|temp[14].xxxx|, temp[17], temp[8]; 40: CMP temp[7], -|temp[14].xxxx|, temp[5], temp[7]; 41: CMP temp[6], -|temp[14].xxxx|, temp[16], temp[6]; 42: CMP temp[5], -|temp[14].xxxx|, temp[15], temp[5]; 43: CMP temp[3], -|temp[14].xxxx|, temp[6], temp[3]; 44: CMP temp[2], -|temp[14].xxxx|, temp[11], temp[2]; 45: CMP temp[0], -|temp[14].xxxx|, temp[12], temp[0]; 46: MOV temp[1].w, const[1].___x; 47: MUL temp[1].x, temp[0].x___, const[1].y___; 48: MUL temp[2].x, temp[0].x___, const[1].y___; 49: MOV temp[1].y, temp[2]._x__; 50: MUL temp[0].x, temp[0].x___, const[1].y___; 51: MOV temp[1].z, temp[0].__x_; 52: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[19].x, const[0].x___; 1: MOV temp[20].xy, input[0].xy__; 2: MOV temp[21].xy, const[0].xx__; 3: MOV temp[22].x, const[0].x___; 4: ADD temp[23].x, temp[22].x___, -const[0].y___; 5: CMP temp[24].x, temp[23].x___, none.1___, none.0___; 6: MOV temp[25].x, temp[24].x___; 7: MOV temp[26], temp[19]; 8: MOV temp[27], temp[21]; 9: MOV temp[28], temp[22]; 10: MOV temp[29].yzw, temp[5]._yzw; 11: MOV temp[30].yzw, temp[28]._yzw; 12: MOV temp[31].yzw, temp[7]._yzw; 13: MOV temp[32].yzw, temp[8]._yzw; 14: MOV temp[33].yzw, temp[9]._yzw; 15: MOV temp[34], temp[10]; 16: MOV temp[35].yzw, temp[27]._yzw; 17: MOV temp[36].yzw, temp[26]._yzw; 18: MOV temp[37].yzw, temp[13]._yzw; 19: DP3 temp[29].x, temp[21].xy0_, temp[21].xy0_; 20: ADD temp[38].x, temp[29].x___, -const[0].z___; 21: CMP temp[30].x, temp[38].x___, none.1___, none.0___; 22: MUL temp[31].x, temp[21].y___, temp[21].y___; 23: MAD temp[32].x, temp[21].x___, temp[21].x___, -temp[31].x___; 24: ADD temp[33].x, temp[32].x___, temp[20].x___; 25: CMP temp[34].x, -temp[30].x___, temp[33].x___, temp[34].x___; 26: MUL temp[35].x, temp[21].x___, temp[21].y___; 27: MAD temp[36].x, temp[35].x___, const[0].w___, temp[20].y___; 28: CMP temp[34].y, -temp[30]._x__, temp[36]._x__, temp[34]._y__; 29: CMP temp[27].xy, -temp[30].xx__, temp[34].xy__, temp[27].xy__; 30: ADD temp[37].x, temp[19].x___, const[1].x___; 31: CMP temp[26].x, -temp[30].x___, temp[37].x___, temp[26].x___; 32: ADD temp[39].x, temp[28].x___, const[1].x___; 33: ADD temp[28].x, temp[39].x___, const[1].x___; 34: CMP temp[13], -|temp[25].xxxx|, temp[37], temp[13]; 35: CMP temp[40], -|temp[25].xxxx|, temp[36], temp[26]; 36: CMP temp[41], -|temp[25].xxxx|, temp[35], temp[27]; 37: CMP temp[10], -|temp[25].xxxx|, temp[34], temp[37]; 38: CMP temp[9], -|temp[25].xxxx|, temp[33], temp[35]; 39: CMP temp[8], -|temp[25].xxxx|, temp[32], temp[34]; 40: CMP temp[7], -|temp[25].xxxx|, temp[31], temp[33]; 41: CMP temp[42], -|temp[25].xxxx|, temp[30], temp[28]; 42: CMP temp[5], -|temp[25].xxxx|, temp[29], temp[31]; 43: CMP temp[3], -|temp[25].xxxx|, temp[42], temp[22]; 44: CMP temp[2], -|temp[25].xxxx|, temp[41], temp[21]; 45: CMP temp[43], -|temp[25].xxxx|, temp[40], temp[19]; 46: MOV temp[44].w, const[1].___x; 47: MUL temp[44].x, temp[43].x___, const[1].y___; 48: MUL temp[45].x, temp[43].x___, const[1].y___; 49: MOV temp[44].y, temp[45]._x__; 50: MUL temp[46].x, temp[43].x___, const[1].y___; 51: MOV temp[44].z, temp[46].__x_; 52: MOV output[0], temp[44]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV temp[19].x, none.0___; 1: MOV temp[21].xy, none.00__; 2: MOV temp[22].x, none.0___; 3: ADD temp[23].x, temp[22].x___, -const[0].y___; 4: CMP temp[24].x, temp[23].x___, none.1___, none.0___; 5: MOV temp[26], temp[19]; 6: MOV temp[27], temp[21]; 7: MOV temp[28], temp[22]; 8: MOV temp[29].yzw, temp[5]._yzw; 9: MOV temp[30].yzw, temp[28]._yzw; 10: MOV temp[31].yzw, temp[7]._yzw; 11: MOV temp[32].yzw, temp[8]._yzw; 12: MOV temp[33].yzw, temp[9]._yzw; 13: MOV temp[34], temp[10]; 14: MOV temp[35].yzw, temp[27]._yzw; 15: MOV temp[36].yzw, temp[26]._yzw; 16: MOV temp[37].yzw, temp[13]._yzw; 17: DP3 temp[29].x, temp[21].xy0_, temp[21].xy0_; 18: ADD temp[38].x, temp[29].x___, -const[0].z___; 19: CMP temp[30].x, temp[38].x___, none.1___, none.0___; 20: MUL temp[31].x, temp[21].y___, temp[21].y___; 21: MAD temp[32].x, temp[21].x___, temp[21].x___, -temp[31].x___; 22: ADD temp[33].x, temp[32].x___, input[0].x___; 23: CMP temp[34].x, -temp[30].x___, temp[33].x___, temp[34].x___; 24: MUL temp[35].x, temp[21].x___, temp[21].y___; 25: MAD temp[36].x, temp[35].x___, const[0].w___, input[0].y___; 26: CMP temp[34].y, -temp[30]._x__, temp[36]._x__, temp[34]._y__; 27: CMP temp[27].xy, -temp[30].xx__, temp[34].xy__, temp[27].xy__; 28: ADD temp[37].x, temp[19].x___, none.1___; 29: CMP temp[26].x, -temp[30].x___, temp[37].x___, temp[26].x___; 30: ADD temp[39].x, temp[28].x___, none.1___; 31: ADD temp[28].x, temp[39].x___, none.1___; 32: CMP temp[13], -|temp[24].xxxx|, temp[37], temp[13]; 33: CMP temp[40], -|temp[24].xxxx|, temp[36], temp[26]; 34: CMP temp[41], -|temp[24].xxxx|, temp[35], temp[27]; 35: CMP temp[10], -|temp[24].xxxx|, temp[34], temp[37]; 36: CMP temp[9], -|temp[24].xxxx|, temp[33], temp[35]; 37: CMP temp[8], -|temp[24].xxxx|, temp[32], temp[34]; 38: CMP temp[7], -|temp[24].xxxx|, temp[31], temp[33]; 39: CMP temp[42], -|temp[24].xxxx|, temp[30], temp[28]; 40: CMP temp[5], -|temp[24].xxxx|, temp[29], temp[31]; 41: CMP temp[3], -|temp[24].xxxx|, temp[42], temp[22]; 42: CMP temp[2], -|temp[24].xxxx|, temp[41], temp[21]; 43: CMP temp[43], -|temp[24].xxxx|, temp[40], temp[19]; 44: MOV temp[44].w, none.___1; 45: MUL temp[44].x, temp[43].x___, const[1].y___; 46: MUL temp[45].x, temp[43].x___, const[1].y___; 47: MOV temp[44].y, temp[45]._x__; 48: MUL temp[46].x, temp[43].x___, const[1].y___; 49: MOV temp[44].z, temp[46].__x_; 50: MOV output[0], temp[44]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[19].x, none.0___; 1: MOV temp[21].xy, none.00__; 2: MOV temp[22].x, none.0___; 3: ADD temp[23].x, temp[22].x___, -const[0].y___; 4: CMP temp[24].x, temp[23].x___, none.1___, none.0___; 5: MOV temp[26], temp[19]; 6: MOV temp[27], temp[21]; 7: MOV temp[28], temp[22]; 8: MOV temp[29].yzw, temp[5]._yzw; 9: MOV temp[30].yzw, temp[28]._yzw; 10: MOV temp[31].yzw, temp[7]._yzw; 11: MOV temp[32].yzw, temp[8]._yzw; 12: MOV temp[33].yzw, temp[9]._yzw; 13: MOV temp[34], temp[10]; 14: MOV temp[35].yzw, temp[27]._yzw; 15: MOV temp[36].yzw, temp[26]._yzw; 16: MOV temp[37].yzw, temp[13]._yzw; 17: MOV temp[0].xy, temp[21].xy__; 18: MOV temp[0].z, temp[21].__0_; 19: MOV temp[1].xy, temp[21].xy__; 20: MOV temp[1].z, temp[21].__0_; 21: DP3 temp[29].x, temp[0].xyz_, temp[1].xyz_; 22: ADD temp[38].x, temp[29].x___, -const[0].z___; 23: CMP temp[30].x, temp[38].x___, none.1___, none.0___; 24: MUL temp[31].x, temp[21].y___, temp[21].y___; 25: MAD temp[32].x, temp[21].x___, temp[21].x___, -temp[31].x___; 26: ADD temp[33].x, temp[32].x___, input[0].x___; 27: CMP temp[34].x, -temp[30].x___, temp[33].x___, temp[34].x___; 28: MUL temp[35].x, temp[21].x___, temp[21].y___; 29: MAD temp[36].x, temp[35].x___, const[0].w___, input[0].y___; 30: CMP temp[34].y, -temp[30]._x__, temp[36]._x__, temp[34]._y__; 31: CMP temp[27].xy, -temp[30].xx__, temp[34].xy__, temp[27].xy__; 32: ADD temp[37].x, temp[19].x___, none.1___; 33: CMP temp[26].x, -temp[30].x___, temp[37].x___, temp[26].x___; 34: ADD temp[39].x, temp[28].x___, none.1___; 35: ADD temp[28].x, temp[39].x___, none.1___; 36: CMP temp[13], -|temp[24].xxxx|, temp[37], temp[13]; 37: CMP temp[40], -|temp[24].xxxx|, temp[36], temp[26]; 38: CMP temp[41], -|temp[24].xxxx|, temp[35], temp[27]; 39: CMP temp[10], -|temp[24].xxxx|, temp[34], temp[37]; 40: CMP temp[9], -|temp[24].xxxx|, temp[33], temp[35]; 41: CMP temp[8], -|temp[24].xxxx|, temp[32], temp[34]; 42: CMP temp[7], -|temp[24].xxxx|, temp[31], temp[33]; 43: CMP temp[42], -|temp[24].xxxx|, temp[30], temp[28]; 44: CMP temp[5], -|temp[24].xxxx|, temp[29], temp[31]; 45: CMP temp[3], -|temp[24].xxxx|, temp[42], temp[22]; 46: CMP temp[2], -|temp[24].xxxx|, temp[41], temp[21]; 47: CMP temp[43], -|temp[24].xxxx|, temp[40], temp[19]; 48: MOV temp[44].w, none.___1; 49: MUL temp[44].x, temp[43].x___, const[1].y___; 50: MUL temp[45].x, temp[43].x___, const[1].y___; 51: MOV temp[44].y, temp[45]._x__; 52: MUL temp[46].x, temp[43].x___, const[1].y___; 53: MOV temp[44].z, temp[46].__x_; 54: MOV output[0], temp[44]; CONST[0] = { 0.0000 32.0000 4.0000 2.0000 } CONST[1] = { 1.0000 0.0312 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[19].x, none.0___; 1: MOV temp[21].xy, none.00__; 2: MOV temp[22].x, none.0___; 3: ADD temp[23].x, temp[22].x___, -const[0].y___; 4: CMP temp[24].x, temp[23].x___, none.1___, none.0___; 5: MOV temp[26], temp[19]; 6: MOV temp[27], temp[21]; 7: MOV temp[28], temp[22]; 8: MOV temp[29].yzw, temp[5]._yzw; 9: MOV temp[30].yzw, temp[28]._yzw; 10: MOV temp[31].yzw, temp[7]._yzw; 11: MOV temp[32].yzw, temp[8]._yzw; 12: MOV temp[33].yzw, temp[9]._yzw; 13: MOV temp[34], temp[10]; 14: MOV temp[35].yzw, temp[27]._yzw; 15: MOV temp[36].yzw, temp[26]._yzw; 16: MOV temp[37].yzw, temp[13]._yzw; 17: MOV temp[0].xy, temp[21].xy__; 18: MOV temp[0].z, temp[21].__0_; 19: MOV temp[1].xy, temp[21].xy__; 20: MOV temp[1].z, temp[21].__0_; 21: DP3 temp[29].x, temp[0].xyz_, temp[1].xyz_; 22: ADD temp[38].x, temp[29].x___, -const[0].z___; 23: CMP temp[30].x, temp[38].x___, none.1___, none.0___; 24: MUL temp[31].x, temp[21].y___, temp[21].y___; 25: MAD temp[32].x, temp[21].x___, temp[21].x___, -temp[31].x___; 26: ADD temp[33].x, temp[32].x___, input[0].x___; 27: CMP temp[34].x, -temp[30].x___, temp[33].x___, temp[34].x___; 28: MUL temp[35].x, temp[21].x___, temp[21].y___; 29: MAD temp[36].x, temp[35].x___, const[0].w___, input[0].y___; 30: CMP temp[34].y, -temp[30]._x__, temp[36]._x__, temp[34]._y__; 31: CMP temp[27].xy, -temp[30].xx__, temp[34].xy__, temp[27].xy__; 32: ADD temp[37].x, temp[19].x___, none.1___; 33: CMP temp[26].x, -temp[30].x___, temp[37].x___, temp[26].x___; 34: ADD temp[39].x, temp[28].x___, none.1___; 35: ADD temp[28].x, temp[39].x___, none.1___; 36: CMP temp[13], -|temp[24].xxxx|, temp[37], temp[13]; 37: CMP temp[40], -|temp[24].xxxx|, temp[36], temp[26]; 38: CMP temp[41], -|temp[24].xxxx|, temp[35], temp[27]; 39: CMP temp[10], -|temp[24].xxxx|, temp[34], temp[37]; 40: CMP temp[9], -|temp[24].xxxx|, temp[33], temp[35]; 41: CMP temp[8], -|temp[24].xxxx|, temp[32], temp[34]; 42: CMP temp[7], -|temp[24].xxxx|, temp[31], temp[33]; 43: CMP temp[42], -|temp[24].xxxx|, temp[30], temp[28]; 44: CMP temp[5], -|temp[24].xxxx|, temp[29], temp[31]; 45: CMP temp[3], -|temp[24].xxxx|, temp[42], temp[22]; 46: CMP temp[2], -|temp[24].xxxx|, temp[41], temp[21]; 47: CMP temp[43], -|temp[24].xxxx|, temp[40], temp[19]; 48: MOV temp[44].w, none.___1; 49: MUL temp[44].x, temp[43].x___, const[1].y___; 50: MUL temp[45].x, temp[43].x___, const[1].y___; 51: MOV temp[44].y, temp[45]._x__; 52: MUL temp[46].x, temp[43].x___, const[1].y___; 53: MOV temp[44].z, temp[46].__x_; 54: MOV output[0], temp[44]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD temp[19].x, src0.0__, src0.111, src0.000 1: MAD temp[21].xy, src0.00_, src0.111, src0.000 2: MAD temp[22].x, src0.0__, src0.111, src0.000 3: src0.xyz = temp[22], src1.xyz = const[0] MAD temp[23].x, src0.x__, src0.111, -src1.y__ 4: src0.xyz = temp[23] CMP temp[24].x, src0.0__, src0.1__, src0.x__ 5: src0.xyz = temp[19], src0.w = temp[19] MAD temp[26].xyz, src0.xyz, src0.111, src0.000 MAD temp[26].w, src0.w, src0.1, src0.0 6: src0.xyz = temp[21], src0.w = temp[21] MAD temp[27].xyz, src0.xyz, src0.111, src0.000 MAD temp[27].w, src0.w, src0.1, src0.0 7: src0.xyz = temp[22], src0.w = temp[22] MAD temp[28].xyz, src0.xyz, src0.111, src0.000 MAD temp[28].w, src0.w, src0.1, src0.0 8: src0.xyz = temp[5], src0.w = temp[5] MAD temp[29].yz, src0._yz, src0.111, src0.000 MAD temp[29].w, src0.w, src0.1, src0.0 9: src0.xyz = temp[28], src0.w = temp[28] MAD temp[30].yz, src0._yz, src0.111, src0.000 MAD temp[30].w, src0.w, src0.1, src0.0 10: src0.xyz = temp[7], src0.w = temp[7] MAD temp[31].yz, src0._yz, src0.111, src0.000 MAD temp[31].w, src0.w, src0.1, src0.0 11: src0.xyz = temp[8], src0.w = temp[8] MAD temp[32].yz, src0._yz, src0.111, src0.000 MAD temp[32].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[9], src0.w = temp[9] MAD temp[33].yz, src0._yz, src0.111, src0.000 MAD temp[33].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[10], src0.w = temp[10] MAD temp[34].xyz, src0.xyz, src0.111, src0.000 MAD temp[34].w, src0.w, src0.1, src0.0 14: src0.xyz = temp[27], src0.w = temp[27] MAD temp[35].yz, src0._yz, src0.111, src0.000 MAD temp[35].w, src0.w, src0.1, src0.0 15: src0.xyz = temp[26], src0.w = temp[26] MAD temp[36].yz, src0._yz, src0.111, src0.000 MAD temp[36].w, src0.w, src0.1, src0.0 16: src0.xyz = temp[13], src0.w = temp[13] MAD temp[37].yz, src0._yz, src0.111, src0.000 MAD temp[37].w, src0.w, src0.1, src0.0 17: src0.xyz = temp[21] MAD temp[0].xy, src0.xy_, src0.111, src0.000 18: MAD temp[0].z, src0.__0, src0.111, src0.000 19: src0.xyz = temp[21] MAD temp[1].xy, src0.xy_, src0.111, src0.000 20: MAD temp[1].z, src0.__0, src0.111, src0.000 21: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[29].x, src0.xyz, src1.xyz 22: src0.xyz = temp[29], src1.xyz = const[0] MAD temp[38].x, src0.x__, src0.111, -src1.z__ 23: src0.xyz = temp[38] CMP temp[30].x, src0.0__, src0.1__, src0.x__ 24: src0.xyz = temp[21] MAD temp[31].x, src0.y__, src0.y__, src0.000 25: src0.xyz = temp[21], src1.xyz = temp[31] MAD temp[32].x, src0.x__, src0.x__, -src1.x__ 26: src0.xyz = temp[32], src1.xyz = input[0] MAD temp[33].x, src0.x__, src0.111, src1.x__ 27: src0.xyz = temp[34], src1.xyz = temp[33], src2.xyz = temp[30] CMP temp[34].x, src0.x__, src1.x__, -src2.x__ 28: src0.xyz = temp[21] MAD temp[35].x, src0.x__, src0.y__, src0.000 29: src0.xyz = temp[35], src0.w = const[0], src1.xyz = input[0] MAD temp[36].x, src0.x__, src0.w__, src1.y__ 30: src0.xyz = temp[34], src1.xyz = temp[36], src2.xyz = temp[30] CMP temp[34].y, src0._y_, src1._x_, -src2._x_ 31: src0.xyz = temp[27], src1.xyz = temp[34], src2.xyz = temp[30] CMP temp[27].xy, src0.xy_, src1.xy_, -src2.xx_ 32: src0.xyz = temp[19] MAD temp[37].x, src0.x__, src0.111, src0.1__ 33: src0.xyz = temp[26], src1.xyz = temp[37], src2.xyz = temp[30] CMP temp[26].x, src0.x__, src1.x__, -src2.x__ 34: src0.xyz = temp[28] MAD temp[39].x, src0.x__, src0.111, src0.1__ 35: src0.xyz = temp[39] MAD temp[28].x, src0.x__, src0.111, src0.1__ 36: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[37], src1.w = temp[37], src2.xyz = temp[24] CMP temp[13].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[13].w, src0.w, src1.w, -|src2.x| 37: src0.xyz = temp[26], src0.w = temp[26], src1.xyz = temp[36], src1.w = temp[36], src2.xyz = temp[24] CMP temp[40].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[40].w, src0.w, src1.w, -|src2.x| 38: src0.xyz = temp[27], src0.w = temp[27], src1.xyz = temp[35], src1.w = temp[35], src2.xyz = temp[24] CMP temp[41].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[41].w, src0.w, src1.w, -|src2.x| 39: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[34], src1.w = temp[34], src2.xyz = temp[24] CMP temp[10].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[10].w, src0.w, src1.w, -|src2.x| 40: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[33], src1.w = temp[33], src2.xyz = temp[24] CMP temp[9].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[9].w, src0.w, src1.w, -|src2.x| 41: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[32], src1.w = temp[32], src2.xyz = temp[24] CMP temp[8].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[8].w, src0.w, src1.w, -|src2.x| 42: src0.xyz = temp[33], src0.w = temp[33], src1.xyz = temp[31], src1.w = temp[31], src2.xyz = temp[24] CMP temp[7].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[7].w, src0.w, src1.w, -|src2.x| 43: src0.xyz = temp[28], src0.w = temp[28], src1.xyz = temp[30], src1.w = temp[30], src2.xyz = temp[24] CMP temp[42].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[42].w, src0.w, src1.w, -|src2.x| 44: src0.xyz = temp[31], src0.w = temp[31], src1.xyz = temp[29], src1.w = temp[29], src2.xyz = temp[24] CMP temp[5].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[5].w, src0.w, src1.w, -|src2.x| 45: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = temp[42], src1.w = temp[42], src2.xyz = temp[24] CMP temp[3].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[3].w, src0.w, src1.w, -|src2.x| 46: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[41], src1.w = temp[41], src2.xyz = temp[24] CMP temp[2].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[2].w, src0.w, src1.w, -|src2.x| 47: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[40], src1.w = temp[40], src2.xyz = temp[24] CMP temp[43].xyz, src0.xyz, src1.xyz, -|src2.xxx| CMP temp[43].w, src0.w, src1.w, -|src2.x| 48: MAD temp[44].w, src0.1, src0.1, src0.0 49: src0.xyz = temp[43], src1.xyz = const[1] MAD temp[44].x, src0.x__, src1.y__, src0.000 50: src0.xyz = temp[43], src1.xyz = const[1] MAD temp[45].x, src0.x__, src1.y__, src0.000 51: src0.xyz = temp[45] MAD temp[44].y, src0._x_, src0.111, src0.000 52: src0.xyz = temp[43], src1.xyz = const[1] MAD temp[46].x, src0.x__, src1.y__, src0.000 53: src0.xyz = temp[46] MAD temp[44].z, src0.__x, src0.111, src0.000 54: src0.xyz = temp[44], src0.w = temp[44] 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: MAD temp[19].x, src0.0__, src0.111, src0.000 MAD temp[44].w, src0.1, src0.1, src0.0 1: src0.xyz = temp[5], src0.w = temp[5] MAD temp[29].yz, src0._yz, src0.111, src0.000 MAD temp[29].w, src0.w, src0.1, src0.0 2: src0.xyz = temp[7], src0.w = temp[7] MAD temp[31].yz, src0._yz, src0.111, src0.000 MAD temp[31].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[8], src0.w = temp[8] MAD temp[32].yz, src0._yz, src0.111, src0.000 MAD temp[32].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[9], src0.w = temp[9] MAD temp[33].yz, src0._yz, src0.111, src0.000 MAD temp[33].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[10], src0.w = temp[10] MAD temp[34].xyz, src0.xyz, src0.111, src0.000 MAD temp[34].w, src0.w, src0.1, src0.0 6: src0.xyz = temp[13], src0.w = temp[13] MAD temp[37].yz, src0._yz, src0.111, src0.000 MAD temp[37].w, src0.w, src0.1, src0.0 7: src0.xyz = temp[19], src0.w = temp[19] MAD temp[26].xyz, src0.xyz, src0.111, src0.000 MAD temp[26].w, src0.w, src0.1, src0.0 8: src0.xyz = temp[19] MAD temp[37].x, src0.x__, src0.111, src0.1__ 9: src0.xyz = temp[26], src0.w = temp[26] MAD temp[36].yz, src0._yz, src0.111, src0.000 MAD temp[36].w, src0.w, src0.1, src0.0 10: MAD temp[21].xy, src0.00_, src0.111, src0.000 11: src0.xyz = temp[21], src0.w = temp[21] MAD temp[27].xyz, src0.xyz, src0.111, src0.000 MAD temp[27].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[27], src0.w = temp[27] MAD temp[35].yz, src0._yz, src0.111, src0.000 MAD temp[35].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[21] MAD temp[35].x, src0.x__, src0.y__, src0.000 14: src0.xyz = temp[21] MAD temp[31].x, src0.y__, src0.y__, src0.000 15: src0.xyz = temp[35], src0.w = const[0], src1.xyz = input[0] MAD temp[36].x, src0.x__, src0.w__, src1.y__ 16: src0.xyz = temp[21] MAD temp[1].xy, src0.xy_, src0.111, src0.000 17: src0.xyz = temp[21] MAD temp[0].xy, src0.xy_, src0.111, src0.000 18: src0.xyz = temp[21], src1.xyz = temp[31] MAD temp[32].x, src0.x__, src0.x__, -src1.x__ 19: src0.xyz = temp[32], src1.xyz = input[0] MAD temp[33].x, src0.x__, src0.111, src1.x__ 20: MAD temp[22].x, src0.0__, src0.111, src0.000 21: src0.xyz = temp[22], src1.xyz = const[0] MAD temp[0].z, src0.__0, src0.111, src0.000 MAD temp[23].w, src0.x, src0.1, -src1.y 22: src0.w = temp[23] MAD temp[1].z, src0.__0, src0.111, src0.000 CMP temp[24].w, src0.0, src0.1, src0.w 23: src0.xyz = temp[22], src0.w = temp[22] MAD temp[28].xyz, src0.xyz, src0.111, src0.000 MAD temp[28].w, src0.w, src0.1, src0.0 24: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = temp[28] DP3 temp[29].x, src0.xyz, src1.xyz MAD temp[39].w, src2.x, src0.1, src0.1 25: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[29], src2.xyz = const[0] MAD temp[28].x, src0.w__, src0.111, src0.1__ MAD temp[38].w, src1.x, src0.1, -src2.z 26: src0.xyz = temp[33], src0.w = temp[33], src1.xyz = temp[31], src1.w = temp[31], src2.xyz = temp[24], src2.w = temp[24] CMP temp[7].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[7].w, src0.w, src1.w, -|src2.w| 27: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[33], src1.w = temp[33], src2.xyz = temp[24], src2.w = temp[24] CMP temp[9].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[9].w, src0.w, src1.w, -|src2.w| 28: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[37], src1.w = temp[37], src2.xyz = temp[24], src2.w = temp[24] CMP temp[13].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[13].w, src0.w, src1.w, -|src2.w| 29: src0.xyz = temp[31], src0.w = temp[31], src1.xyz = temp[29], src1.w = temp[29], src2.xyz = temp[24], src2.w = temp[24] CMP temp[5].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[5].w, src0.w, src1.w, -|src2.w| 30: src0.xyz = temp[28], src0.w = temp[28] MAD temp[30].yz, src0._yz, src0.111, src0.000 MAD temp[30].w, src0.w, src0.1, src0.0 31: src0.xyz = temp[38], src0.w = temp[38] CMP temp[30].x, src0.0__, src0.1__, src0.w__ 32: src0.xyz = temp[28], src0.w = temp[28], src1.xyz = temp[30], src1.w = temp[30], src2.xyz = temp[24], src2.w = temp[24] CMP temp[42].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[42].w, src0.w, src1.w, -|src2.w| 33: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = temp[42], src1.w = temp[42], src2.xyz = temp[24], src2.w = temp[24] CMP temp[3].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[3].w, src0.w, src1.w, -|src2.w| 34: src0.xyz = temp[26], src1.xyz = temp[37], src2.xyz = temp[30] CMP temp[26].x, src0.x__, src1.x__, -src2.x__ 35: src0.xyz = temp[34], src1.xyz = temp[33], src2.xyz = temp[30] CMP temp[34].x, src0.x__, src1.x__, -src2.x__ 36: src0.xyz = temp[26], src0.w = temp[26], src1.xyz = temp[36], src1.w = temp[36], src2.xyz = temp[24], src2.w = temp[24] CMP temp[40].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[40].w, src0.w, src1.w, -|src2.w| 37: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[40], src1.w = temp[40], src2.xyz = temp[24], src2.w = temp[24] CMP temp[43].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[43].w, src0.w, src1.w, -|src2.w| 38: src0.xyz = temp[43], src1.xyz = const[1] MAD temp[45].x, src0.x__, src1.y__, src0.000 MAD temp[46].w, src0.x, src1.y, src0.0 39: src0.xyz = temp[34], src1.xyz = temp[36], src2.xyz = temp[30] CMP temp[34].y, src0._y_, src1._x_, -src2._x_ 40: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[32], src1.w = temp[32], src2.xyz = temp[24], src2.w = temp[24] CMP temp[8].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[8].w, src0.w, src1.w, -|src2.w| 41: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[34], src1.w = temp[34], src2.xyz = temp[24], src2.w = temp[24] CMP temp[10].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[10].w, src0.w, src1.w, -|src2.w| 42: src0.xyz = temp[43], src1.xyz = const[1] MAD temp[44].x, src0.x__, src1.y__, src0.000 43: src0.xyz = temp[27], src1.xyz = temp[34], src2.xyz = temp[30] CMP temp[27].xy, src0.xy_, src1.xy_, -src2.xx_ 44: src0.xyz = temp[46], src0.w = temp[46] MAD temp[44].z, src0.__w, src0.111, src0.000 45: src0.xyz = temp[27], src0.w = temp[27], src1.xyz = temp[35], src1.w = temp[35], src2.xyz = temp[24], src2.w = temp[24] CMP temp[41].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[41].w, src0.w, src1.w, -|src2.w| 46: src0.xyz = temp[45] MAD temp[44].y, src0._x_, src0.111, src0.000 47: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[41], src1.w = temp[41], src2.xyz = temp[24], src2.w = temp[24] CMP temp[2].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[2].w, src0.w, src1.w, -|src2.w| 48: src0.xyz = temp[44], src0.w = temp[44] 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: MAD temp[19].x, src0.0__, src0.111, src0.000 MAD temp[44].w, src0.1, src0.1, src0.0 1: src0.xyz = temp[5], src0.w = temp[5] MAD temp[29].yz, src0._yz, src0.111, src0.000 MAD temp[29].w, src0.w, src0.1, src0.0 2: src0.xyz = temp[7], src0.w = temp[7] MAD temp[31].yz, src0._yz, src0.111, src0.000 MAD temp[31].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[8], src0.w = temp[8] MAD temp[32].yz, src0._yz, src0.111, src0.000 MAD temp[32].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[9], src0.w = temp[9] MAD temp[33].yz, src0._yz, src0.111, src0.000 MAD temp[33].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[10], src0.w = temp[10] MAD temp[34].xyz, src0.xyz, src0.111, src0.000 MAD temp[34].w, src0.w, src0.1, src0.0 6: src0.xyz = temp[13], src0.w = temp[13] MAD temp[37].yz, src0._yz, src0.111, src0.000 MAD temp[37].w, src0.w, src0.1, src0.0 7: src0.xyz = temp[19], src0.w = temp[19] MAD temp[26].xyz, src0.xyz, src0.111, src0.000 MAD temp[26].w, src0.w, src0.1, src0.0 8: src0.xyz = temp[19] MAD temp[37].x, src0.x__, src0.111, src0.1__ 9: src0.xyz = temp[26], src0.w = temp[26] MAD temp[36].yz, src0._yz, src0.111, src0.000 MAD temp[36].w, src0.w, src0.1, src0.0 10: MAD temp[21].xy, src0.00_, src0.111, src0.000 11: src0.xyz = temp[21], src0.w = temp[21] MAD temp[27].xyz, src0.xyz, src0.111, src0.000 MAD temp[27].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[27], src0.w = temp[27] MAD temp[35].yz, src0._yz, src0.111, src0.000 MAD temp[35].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[21] MAD temp[35].x, src0.x__, src0.y__, src0.000 14: src0.xyz = temp[21] MAD temp[31].x, src0.y__, src0.y__, src0.000 15: src0.xyz = temp[35], src0.w = const[0], src1.xyz = input[0] MAD temp[36].x, src0.x__, src0.w__, src1.y__ 16: src0.xyz = temp[21] MAD temp[1].xy, src0.xy_, src0.111, src0.000 17: src0.xyz = temp[21] MAD temp[0].xy, src0.xy_, src0.111, src0.000 18: src0.xyz = temp[21], src1.xyz = temp[31] MAD temp[32].x, src0.x__, src0.x__, -src1.x__ 19: src0.xyz = temp[32], src1.xyz = input[0] MAD temp[33].x, src0.x__, src0.111, src1.x__ 20: MAD temp[22].x, src0.0__, src0.111, src0.000 21: src0.xyz = temp[22], src1.xyz = const[0] MAD temp[0].z, src0.__0, src0.111, src0.000 MAD temp[23].w, src0.x, src0.1, -src1.y 22: src0.w = temp[23] MAD temp[1].z, src0.__0, src0.111, src0.000 CMP temp[24].w, src0.0, src0.1, src0.w 23: src0.xyz = temp[22], src0.w = temp[22] MAD temp[28].xyz, src0.xyz, src0.111, src0.000 MAD temp[28].w, src0.w, src0.1, src0.0 24: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = temp[28] DP3 temp[29].x, src0.xyz, src1.xyz MAD temp[39].w, src2.x, src0.1, src0.1 25: src0.w = temp[39], src1.xyz = temp[29], src2.xyz = const[0] MAD temp[28].x, src0.w__, src0.111, src0.1__ MAD temp[38].w, src1.x, src0.1, -src2.z 26: src0.xyz = temp[33], src0.w = temp[33], src1.xyz = temp[31], src1.w = temp[31], src2.w = temp[24] CMP temp[7].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[7].w, src0.w, src1.w, -|src2.w| 27: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[33], src1.w = temp[33], src2.w = temp[24] CMP temp[9].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[9].w, src0.w, src1.w, -|src2.w| 28: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[37], src1.w = temp[37], src2.w = temp[24] CMP temp[13].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[13].w, src0.w, src1.w, -|src2.w| 29: src0.xyz = temp[31], src0.w = temp[31], src1.xyz = temp[29], src1.w = temp[29], src2.w = temp[24] CMP temp[5].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[5].w, src0.w, src1.w, -|src2.w| 30: src0.xyz = temp[28], src0.w = temp[28] MAD temp[30].yz, src0._yz, src0.111, src0.000 MAD temp[30].w, src0.w, src0.1, src0.0 31: src0.w = temp[38] CMP temp[30].x, src0.0__, src0.1__, src0.w__ 32: src0.xyz = temp[28], src0.w = temp[28], src1.xyz = temp[30], src1.w = temp[30], src2.w = temp[24] CMP temp[42].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[42].w, src0.w, src1.w, -|src2.w| 33: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = temp[42], src1.w = temp[42], src2.w = temp[24] CMP temp[3].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[3].w, src0.w, src1.w, -|src2.w| 34: src0.xyz = temp[26], src1.xyz = temp[37], src2.xyz = temp[30] CMP temp[26].x, src0.x__, src1.x__, -src2.x__ 35: src0.xyz = temp[34], src1.xyz = temp[33], src2.xyz = temp[30] CMP temp[34].x, src0.x__, src1.x__, -src2.x__ 36: src0.xyz = temp[26], src0.w = temp[26], src1.xyz = temp[36], src1.w = temp[36], src2.w = temp[24] CMP temp[40].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[40].w, src0.w, src1.w, -|src2.w| 37: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[40], src1.w = temp[40], src2.w = temp[24] CMP temp[43].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[43].w, src0.w, src1.w, -|src2.w| 38: src0.xyz = temp[43], src1.xyz = const[1] MAD temp[45].x, src0.x__, src1.y__, src0.000 MAD temp[46].w, src0.x, src1.y, src0.0 39: src0.xyz = temp[34], src1.xyz = temp[36], src2.xyz = temp[30] CMP temp[34].y, src0._y_, src1._x_, -src2._x_ 40: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[32], src1.w = temp[32], src2.w = temp[24] CMP temp[8].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[8].w, src0.w, src1.w, -|src2.w| 41: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[34], src1.w = temp[34], src2.w = temp[24] CMP temp[10].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[10].w, src0.w, src1.w, -|src2.w| 42: src0.xyz = temp[43], src1.xyz = const[1] MAD temp[44].x, src0.x__, src1.y__, src0.000 43: src0.xyz = temp[27], src1.xyz = temp[34], src2.xyz = temp[30] CMP temp[27].xy, src0.xy_, src1.xy_, -src2.xx_ 44: src0.w = temp[46] MAD temp[44].z, src0.__w, src0.111, src0.000 45: src0.xyz = temp[27], src0.w = temp[27], src1.xyz = temp[35], src1.w = temp[35], src2.w = temp[24] CMP temp[41].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[41].w, src0.w, src1.w, -|src2.w| 46: src0.xyz = temp[45] MAD temp[44].y, src0._x_, src0.111, src0.000 47: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[41], src1.w = temp[41], src2.w = temp[24] CMP temp[2].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[2].w, src0.w, src1.w, -|src2.w| 48: src0.xyz = temp[44], src0.w = temp[44] 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: MAD temp[0].z, src0.__0, src0.__1, src0.__0 MAD temp[0].w, src0.1, src0.1, src0.0 1: src0.xyz = temp[5], src0.w = temp[5] MAD temp[1].yz, src0._yz, src0.111, src0.000 MAD temp[1].w, src0.w, src0.1, src0.0 2: src0.xyz = temp[7], src0.w = temp[7] MAD temp[2].yz, src0._yz, src0.111, src0.000 MAD temp[2].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[8], src0.w = temp[8] MAD temp[3].yz, src0._yz, src0.111, src0.000 MAD temp[3].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[9], src0.w = temp[9] MAD temp[4].yz, src0._yz, src0.111, src0.000 MAD temp[4].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[10], src0.w = temp[10] MAD temp[5].xyz, src0.xyz, src0.111, src0.000 MAD temp[5].w, src0.w, src0.1, src0.0 6: src0.xyz = temp[13], src0.w = temp[13] MAD temp[6].yz, src0._yz, src0.111, src0.000 MAD temp[6].w, src0.w, src0.1, src0.0 7: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[0] MAD temp[7].xyz, src1.zyz, src0.111, src0.000 MAD temp[7].w, src0.w, src0.1, src0.0 8: src0.xyz = temp[0] MAD temp[6].x, src0.z__, src0.111, src0.1__ 9: src0.xyz = temp[7], src0.w = temp[7] MAD temp[8].yz, src0._yz, src0.111, src0.000 MAD temp[8].w, src0.w, src0.1, src0.0 10: MAD temp[9].xy, src0.00_, src0.11_, src0.00_ 11: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[9] MAD temp[10].xyz, src1.xyz, src0.111, src0.000 MAD temp[9].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[10], src0.w = temp[9] MAD temp[11].yz, src0._yz, src0.111, src0.000 MAD temp[10].w, src0.w, src0.1, src0.0 13: src0.xyz = temp[9] MAD temp[11].x, src0.x__, src0.y__, src0.000 14: src0.xyz = temp[9] MAD temp[2].x, src0.y__, src0.y__, src0.000 15: src0.xyz = temp[11], src0.w = const[0], src1.xyz = input[0] MAD temp[8].x, src0.x__, src0.w__, src1.y__ 16: src0.xyz = temp[9] MAD temp[12].xy, src0.xy_, src0.111, src0.000 17: src0.xyz = temp[9] MAD temp[13].xy, src0.xy_, src0.111, src0.000 18: src0.xyz = temp[9], src1.xyz = temp[2] MAD temp[3].x, src0.x__, src0.x__, -src1.x__ 19: src0.xyz = temp[3], src1.xyz = input[0] MAD temp[4].x, src0.x__, src0.111, src1.x__ 20: MAD temp[0].x, src0.0__, src0.1__, src0.0__ 21: src0.xyz = temp[0], src1.xyz = const[0] MAD temp[13].z, src0.__0, src0.111, src0.000 MAD temp[11].w, src0.x, src0.1, -src1.y 22: src0.w = temp[11] MAD temp[12].z, src0.__0, src0.111, src0.000 CMP temp[11].w, src0.0, src0.1, src0.w 23: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = temp[0] MAD temp[14].xyz, src1.xyz, src0.111, src0.000 MAD temp[12].w, src0.w, src0.1, src0.0 24: src0.xyz = temp[13], src1.xyz = temp[12], src2.xyz = temp[14] DP3 temp[1].x, src0.xyz, src1.xyz MAD temp[13].w, src2.x, src0.1, src0.1 25: src0.w = temp[13], src1.xyz = temp[1], src2.xyz = const[0] MAD temp[14].x, src0.w__, src0.111, src0.1__ MAD temp[13].w, src1.x, src0.1, -src2.z 26: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[2], src1.w = temp[2], src2.w = temp[11] CMP temp[7].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[7].w, src0.w, src1.w, -|src2.w| 27: src0.xyz = temp[11], src0.w = temp[10], src1.xyz = temp[4], src1.w = temp[4], src2.w = temp[11] CMP temp[9].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[9].w, src0.w, src1.w, -|src2.w| 28: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[6], src1.w = temp[6], src2.w = temp[11] CMP temp[13].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[13].w, src0.w, src1.w, -|src2.w| 29: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = temp[1], src1.w = temp[1], src2.w = temp[11] CMP temp[5].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[5].w, src0.w, src1.w, -|src2.w| 30: src0.xyz = temp[14], src0.w = temp[12] MAD temp[1].yz, src0._yz, src0.111, src0.000 MAD temp[1].w, src0.w, src0.1, src0.0 31: src0.w = temp[13] CMP temp[1].x, src0.0__, src0.1__, src0.w__ 32: src0.xyz = temp[14], src0.w = temp[12], src1.xyz = temp[1], src1.w = temp[1], src2.w = temp[11] CMP temp[2].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[1].w, src0.w, src1.w, -|src2.w| 33: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = temp[2], src1.w = temp[1], src2.xyz = temp[0], src2.w = temp[11] CMP temp[3].xyz, src2.xyz, src1.xyz, -|src2.www| CMP temp[3].w, src0.w, src1.w, -|src2.w| 34: src0.xyz = temp[7], src1.xyz = temp[6], src2.xyz = temp[1] CMP temp[7].x, src0.x__, src1.x__, -src2.x__ 35: src0.xyz = temp[5], src1.xyz = temp[4], src2.xyz = temp[1] CMP temp[5].x, src0.x__, src1.x__, -src2.x__ 36: src0.xyz = temp[7], src0.w = temp[7], src1.xyz = temp[8], src1.w = temp[8], src2.w = temp[11] CMP temp[2].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[1].w, src0.w, src1.w, -|src2.w| 37: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[2], src1.w = temp[1], src2.xyz = temp[0], src2.w = temp[11] CMP temp[0].xyz, src2.zyz, src1.xyz, -|src2.www| CMP temp[43].w, src0.w, src1.w, -|src2.w| 38: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[2].x, src0.x__, src1.y__, src0.0__ MAD temp[1].w, src0.x, src1.y, src0.0 39: src0.xyz = temp[5], src1.xyz = temp[8], src2.xyz = temp[1] CMP temp[5].y, src0._y_, src1._x_, -src2._x_ 40: src0.xyz = temp[5], src0.w = temp[5], src1.xyz = temp[3], src1.w = temp[3], src2.w = temp[11] CMP temp[8].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[8].w, src0.w, src1.w, -|src2.w| 41: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[5], src1.w = temp[5], src2.w = temp[11] CMP temp[10].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[10].w, src0.w, src1.w, -|src2.w| 42: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[0].x, src0.x__, src1.y__, src0.000 43: src0.xyz = temp[10], src1.xyz = temp[5], src2.xyz = temp[1] CMP temp[10].xy, src0.xy_, src1.xy_, -src2.xx_ 44: src0.w = temp[1] MAD temp[0].z, src0.__w, src0.111, src0.000 45: src0.xyz = temp[10], src0.w = temp[9], src1.xyz = temp[11], src1.w = temp[10], src2.w = temp[11] CMP temp[1].xyz, src0.xyz, src1.xyz, -|src2.www| CMP temp[1].w, src0.w, src1.w, -|src2.w| 46: src0.xyz = temp[2] MAD temp[0].y, src0._x_, src0.111, src0.000 47: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[1], src1.w = temp[1], src2.xyz = temp[9], src2.w = temp[11] CMP temp[2].xyz, src2.xyz, src1.xyz, -|src2.www| CMP temp[2].w, src0.w, src1.w, -|src2.w| 48: 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 Not a native swizzle: 00000e8a Not a native swizzle: 00000e8a r300compiler error: Too many hardware temporaries used. r300 FP: Compiler Error: Too many hardware temporaries used. Using a dummy shader instead. r300: Initial fragment program FRAG DCL OUT[0], COLOR IMM FLT32 { 0.0000, 1.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxy 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 pc=2************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: 1.0 1.0 0.0 op: 00040891 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR DCL SAMP[0] 0: TEX OUT[0], IN[0], SAMP[0], 2D 1: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0] SEM_WAIT MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=3************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 GLSL source for vertex shader 4: attribute vec3 position; attribute vec2 offsetCoord; uniform float increment; varying vec2 offsetsTexCoord; varying vec2 imageTexCoord; void main(){ (gl_Position = vec4(position, 1.0)); (imageTexCoord = vec2(((position[0] + 1.0) / 2.0), ((position[1] - 1.0) / -2.0))); float offsetIndex = ((position[0] * position[1]) * 32.0); (offsetsTexCoord = vec2(((offsetIndex + 0.5) / 8.0), 0.5)); } GLSL IR for shader 4: ( (declare (out ) vec2 imageTexCoord) (declare (out ) vec2 offsetsTexCoord) (declare (uniform ) float increment) (declare (in ) vec2 offsetCoord) (declare (in ) vec3 position) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor) (assign (w) (var_ref vec_ctor) (constant float (1.000000)) ) (assign (xyz) (var_ref vec_ctor) (var_ref position) ) (assign (xyzw) (var_ref gl_Position) (var_ref vec_ctor) ) (declare (temporary ) vec2 vec_ctor@15) (assign (x) (var_ref vec_ctor@15) (expression float / (expression float + (swiz x (var_ref position) )(constant float (1.000000)) ) (constant float (2.000000)) ) ) (assign (y) (var_ref vec_ctor@15) (expression float / (expression float + (swiz y (var_ref position) )(constant float (-1.000000)) ) (constant float (-2.000000)) ) ) (assign (xy) (var_ref imageTexCoord) (var_ref vec_ctor@15) ) (declare (temporary ) vec2 vec_ctor@16) (assign (y) (var_ref vec_ctor@16) (constant float (0.500000)) ) (assign (x) (var_ref vec_ctor@16) (expression float / (expression float + (expression float * (expression float * (swiz x (var_ref position) )(swiz y (var_ref position) )) (constant float (32.000000)) ) (constant float (0.500000)) ) (constant float (8.000000)) ) ) (assign (xy) (var_ref offsetsTexCoord) (var_ref vec_ctor@16) ) )) ) ) GLSL source for fragment shader 5: varying vec2 offsetsTexCoord; varying vec2 imageTexCoord; uniform float increment; uniform sampler2D offsetsTex; uniform sampler2D texture1; uniform sampler2D texture2; uniform sampler2D texture3; uniform sampler2D texture4; uniform sampler2D texture5; vec4 blurTexture(in sampler2D tex, in vec2 delta){ vec4 color = vec4(0.0, 0.0, 0.0, 0.0); (color += (0.5 * texture2D(tex, (imageTexCoord - (increment * delta))))); (color += (0.5 * texture2D(tex, (imageTexCoord + (increment * delta))))); return color; } void main(){ vec2 ctr = (255.0 * texture2D(offsetsTex, offsetsTexCoord).xy); vec4 color = vec4(0.0, 0.0, 0.0, 0.0); (color.xyz += (0.2 + (0.1 * (ctr[0] + ctr[1])))); (ctr *= 5.0); (color += (blurTexture(texture1, (ctr + vec2(1.0, 0.0))) * 0.2)); (color += (blurTexture(texture2, (ctr + vec2(0.0, 1.0))) * 0.2)); (color += (blurTexture(texture3, (ctr + vec2(0.0, 0.0))) * 0.2)); (color += (blurTexture(texture4, (ctr + vec2(1.0, 1.0))) * 0.2)); (color += (blurTexture(texture5, (ctr + vec2(-1.0, 1.0))) * 0.2)); (gl_FragColor = color); } GLSL IR for shader 5: ( (declare (uniform ) sampler2D texture5) (declare (uniform ) sampler2D texture4) (declare (uniform ) sampler2D texture3) (declare (uniform ) sampler2D texture2) (declare (uniform ) sampler2D texture1) (declare (uniform ) sampler2D offsetsTex) (declare (uniform ) float increment) (declare (in ) vec2 imageTexCoord) (declare (in ) vec2 offsetsTexCoord) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function blurTexture (signature vec4 (parameters (declare (in ) sampler2D tex) (declare (in ) vec2 delta) ) ( (declare () vec4 color) (assign (xyzw) (var_ref color) (constant vec4 (0.000000 0.000000 0.000000 0.000000)) ) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref tex) (expression vec2 + (var_ref imageTexCoord) (expression vec2 neg (expression vec2 * (var_ref increment) (var_ref delta) ) ) ) )) (assign (xyzw) (var_ref color) (expression vec4 + (var_ref color) (expression vec4 * (constant float (0.500000)) (var_ref texture2D_retval) ) ) ) (declare (temporary ) vec4 texture2D_retval@17) (call texture2D (var_ref texture2D_retval@17) ((var_ref tex) (expression vec2 + (var_ref imageTexCoord) (expression vec2 * (var_ref increment) (var_ref delta) ) ) )) (declare (temporary ) vec4 assignment_tmp) (assign (xyzw) (var_ref assignment_tmp) (expression vec4 + (var_ref color) (expression vec4 * (constant float (0.500000)) (var_ref texture2D_retval@17) ) ) ) (assign (xyzw) (var_ref color) (var_ref assignment_tmp) ) (return (var_ref assignment_tmp) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) (function main (signature void (parameters ) ( (declare () vec4 color) (declare () vec2 ctr) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref offsetsTex) (var_ref offsetsTexCoord) )) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 * (constant float (255.000000)) (swiz xy (var_ref texture2D_retval) )) ) (assign (w) (var_ref color) (constant float (0.000000)) ) (assign (xyz) (var_ref color) (swiz xxx (expression float + (constant float (0.200000)) (expression float * (constant float (0.100000)) (expression float + (swiz x (var_ref assignment_tmp) )(swiz y (var_ref assignment_tmp) )) ) ) )) (declare (temporary ) vec2 assignment_tmp@18) (assign (xy) (var_ref assignment_tmp@18) (expression vec2 * (var_ref assignment_tmp) (constant float (5.000000)) ) ) (assign (xy) (var_ref ctr) (var_ref assignment_tmp@18) ) (declare (temporary ) vec4 blurTexture_retval) (call blurTexture (var_ref blurTexture_retval) ((var_ref texture1) (expression vec2 + (var_ref assignment_tmp@18) (constant vec2 (1.000000 0.000000)) ) )) (assign (xyzw) (var_ref color) (expression vec4 + (var_ref color) (expression vec4 * (var_ref blurTexture_retval) (constant float (0.200000)) ) ) ) (declare (temporary ) vec4 blurTexture_retval@19) (call blurTexture (var_ref blurTexture_retval@19) ((var_ref texture2) (expression vec2 + (var_ref ctr) (constant vec2 (0.000000 1.000000)) ) )) (assign (xyzw) (var_ref color) (expression vec4 + (var_ref color) (expression vec4 * (var_ref blurTexture_retval@19) (constant float (0.200000)) ) ) ) (declare (temporary ) vec4 blurTexture_retval@20) (call blurTexture (var_ref blurTexture_retval@20) ((var_ref texture3) (var_ref ctr) )) (assign (xyzw) (var_ref color) (expression vec4 + (var_ref color) (expression vec4 * (var_ref blurTexture_retval@20) (constant float (0.200000)) ) ) ) (declare (temporary ) vec4 blurTexture_retval@21) (call blurTexture (var_ref blurTexture_retval@21) ((var_ref texture4) (expression vec2 + (var_ref ctr) (constant vec2 (1.000000 1.000000)) ) )) (assign (xyzw) (var_ref color) (expression vec4 + (var_ref color) (expression vec4 * (var_ref blurTexture_retval@21) (constant float (0.200000)) ) ) ) (declare (temporary ) vec4 blurTexture_retval@22) (call blurTexture (var_ref blurTexture_retval@22) ((var_ref texture5) (expression vec2 + (var_ref ctr) (constant vec2 (-1.000000 1.000000)) ) )) (declare (temporary ) vec4 assignment_tmp@23) (assign (xyzw) (var_ref assignment_tmp@23) (expression vec4 + (var_ref color) (expression vec4 * (var_ref blurTexture_retval@22) (constant float (0.200000)) ) ) ) (assign (xyzw) (var_ref color) (var_ref assignment_tmp@23) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref assignment_tmp@23) ) )) ) ) GLSL IR for linked vertex program 6: ( (declare (out ) vec2 imageTexCoord) (declare (out ) vec2 offsetsTexCoord) (declare (in ) vec3 position) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor) (assign (w) (var_ref vec_ctor) (constant float (1.000000)) ) (assign (xyz) (var_ref vec_ctor) (var_ref position) ) (assign (xyzw) (var_ref gl_Position) (var_ref vec_ctor) ) (declare (temporary ) vec2 vec_ctor@24) (assign (x) (var_ref vec_ctor@24) (expression float * (expression float + (swiz x (var_ref position) )(constant float (1.000000)) ) (constant float (0.500000)) ) ) (assign (y) (var_ref vec_ctor@24) (expression float * (expression float + (swiz y (var_ref position) )(constant float (-1.000000)) ) (constant float (-0.500000)) ) ) (assign (xy) (var_ref imageTexCoord) (var_ref vec_ctor@24) ) (declare (temporary ) vec2 vec_ctor@25) (assign (y) (var_ref vec_ctor@25) (constant float (0.500000)) ) (assign (x) (var_ref vec_ctor@25) (expression float * (expression float + (expression float * (expression float * (swiz x (var_ref position) )(swiz y (var_ref position) )) (constant float (32.000000)) ) (constant float (0.500000)) ) (constant float (0.125000)) ) ) (assign (xy) (var_ref offsetsTexCoord) (var_ref vec_ctor@25) ) (assign (xy) (var_ref imageTexCoord@26) (var_ref imageTexCoord) ) (assign (xy) (var_ref offsetsTexCoord@27) (var_ref offsetsTexCoord) ) (assign (xyzw) (var_ref gl_Position@28) (var_ref gl_Position) ) )) ) ) GLSL IR for linked fragment program 6: ( (declare (uniform ) sampler2D texture5) (declare (uniform ) sampler2D texture4) (declare (uniform ) sampler2D texture3) (declare (uniform ) sampler2D texture2) (declare (uniform ) sampler2D texture1) (declare (uniform ) sampler2D offsetsTex) (declare (uniform ) float increment) (declare (in ) vec2 imageTexCoord) (declare (in ) vec2 offsetsTexCoord) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare () vec4 color) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 * (constant float (255.000000)) (swiz xy (tex vec4 (var_ref offsetsTex) (var_ref offsetsTexCoord) 0 1 () ))) ) (assign (w) (var_ref color) (constant float (0.000000)) ) (assign (xyz) (var_ref color) (swiz xxx (expression float + (constant float (0.200000)) (expression float * (constant float (0.100000)) (expression float + (swiz x (var_ref assignment_tmp) )(swiz y (var_ref assignment_tmp) )) ) ) )) (declare (temporary ) vec2 assignment_tmp@29) (assign (xy) (var_ref assignment_tmp@29) (expression vec2 * (var_ref assignment_tmp) (constant float (5.000000)) ) ) (declare () vec2 delta) (assign (xy) (var_ref delta) (expression vec2 + (var_ref assignment_tmp@29) (constant vec2 (1.000000 0.000000)) ) ) (declare () vec4 color@30) (assign (xyzw) (var_ref color@30) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture1) (expression vec2 + (var_ref imageTexCoord) (expression vec2 neg (expression vec2 * (var_ref increment) (var_ref delta) ) ) ) 0 1 () )) ) (declare (temporary ) vec4 assignment_tmp@31) (assign (xyzw) (var_ref assignment_tmp@31) (expression vec4 + (var_ref color@30) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture1) (expression vec2 + (var_ref imageTexCoord) (expression vec2 * (var_ref increment) (var_ref delta) ) ) 0 1 () )) ) ) (assign (xyzw) (var_ref color@30) (var_ref assignment_tmp@31) ) (assign (xyzw) (var_ref color) (expression vec4 + (var_ref color) (expression vec4 * (var_ref assignment_tmp@31) (constant float (0.200000)) ) ) ) (declare () vec2 delta@32) (assign (xy) (var_ref delta@32) (expression vec2 + (var_ref assignment_tmp@29) (constant vec2 (0.000000 1.000000)) ) ) (declare () vec4 color@33) (assign (xyzw) (var_ref color@33) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture2) (expression vec2 + (var_ref imageTexCoord) (expression vec2 neg (expression vec2 * (var_ref increment) (var_ref delta@32) ) ) ) 0 1 () )) ) (declare (temporary ) vec4 assignment_tmp@34) (assign (xyzw) (var_ref assignment_tmp@34) (expression vec4 + (var_ref color@33) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture2) (expression vec2 + (var_ref imageTexCoord) (expression vec2 * (var_ref increment) (var_ref delta@32) ) ) 0 1 () )) ) ) (assign (xyzw) (var_ref color@33) (var_ref assignment_tmp@34) ) (assign (xyzw) (var_ref color) (expression vec4 + (var_ref color) (expression vec4 * (var_ref assignment_tmp@34) (constant float (0.200000)) ) ) ) (declare () vec4 color@35) (assign (xyzw) (var_ref color@35) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture3) (expression vec2 + (var_ref imageTexCoord) (expression vec2 neg (expression vec2 * (var_ref increment) (var_ref assignment_tmp@29) ) ) ) 0 1 () )) ) (declare (temporary ) vec4 assignment_tmp@36) (assign (xyzw) (var_ref assignment_tmp@36) (expression vec4 + (var_ref color@35) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture3) (expression vec2 + (var_ref imageTexCoord) (expression vec2 * (var_ref increment) (var_ref assignment_tmp@29) ) ) 0 1 () )) ) ) (assign (xyzw) (var_ref color@35) (var_ref assignment_tmp@36) ) (assign (xyzw) (var_ref color) (expression vec4 + (var_ref color) (expression vec4 * (var_ref assignment_tmp@36) (constant float (0.200000)) ) ) ) (declare () vec2 delta@37) (assign (xy) (var_ref delta@37) (expression vec2 + (var_ref assignment_tmp@29) (constant vec2 (1.000000 1.000000)) ) ) (declare () vec4 color@38) (assign (xyzw) (var_ref color@38) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture4) (expression vec2 + (var_ref imageTexCoord) (expression vec2 neg (expression vec2 * (var_ref increment) (var_ref delta@37) ) ) ) 0 1 () )) ) (declare (temporary ) vec4 assignment_tmp@39) (assign (xyzw) (var_ref assignment_tmp@39) (expression vec4 + (var_ref color@38) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture4) (expression vec2 + (var_ref imageTexCoord) (expression vec2 * (var_ref increment) (var_ref delta@37) ) ) 0 1 () )) ) ) (assign (xyzw) (var_ref color@38) (var_ref assignment_tmp@39) ) (assign (xyzw) (var_ref color) (expression vec4 + (var_ref color) (expression vec4 * (var_ref assignment_tmp@39) (constant float (0.200000)) ) ) ) (declare () vec2 delta@40) (assign (xy) (var_ref delta@40) (expression vec2 + (var_ref assignment_tmp@29) (constant vec2 (-1.000000 1.000000)) ) ) (declare () vec4 color@41) (assign (xyzw) (var_ref color@41) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture5) (expression vec2 + (var_ref imageTexCoord) (expression vec2 neg (expression vec2 * (var_ref increment) (var_ref delta@40) ) ) ) 0 1 () )) ) (declare (temporary ) vec4 assignment_tmp@42) (assign (xyzw) (var_ref assignment_tmp@42) (expression vec4 + (var_ref color@41) (expression vec4 * (constant float (0.500000)) (tex vec4 (var_ref texture5) (expression vec2 + (var_ref imageTexCoord) (expression vec2 * (var_ref increment) (var_ref delta@40) ) ) 0 1 () )) ) ) (assign (xyzw) (var_ref color@41) (var_ref assignment_tmp@42) ) (declare (temporary ) vec4 assignment_tmp@43) (assign (xyzw) (var_ref assignment_tmp@43) (expression vec4 + (var_ref color) (expression vec4 * (var_ref assignment_tmp@42) (constant float (0.200000)) ) ) ) (assign (xyzw) (var_ref color) (var_ref assignment_tmp@43) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref assignment_tmp@43) ) (assign (xyzw) (var_ref gl_FragColor@44) (var_ref gl_FragColor) ) )) ) ) 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=4************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL OUT[0], POSITION DCL OUT[1], GENERIC[12] DCL OUT[2], GENERIC[13] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL IMM FLT32 { 1.0000, 0.5000, -1.0000, -0.5000} IMM FLT32 { 32.0000, 0.1250, 0.0000, 0.0000} 0: MOV TEMP[0].w, IMM[0].xxxx 1: MOV TEMP[0].xyz, IN[0].xyzx 2: ADD TEMP[1].x, IN[0].xxxx, IMM[0].xxxx 3: MUL TEMP[1].x, TEMP[1].xxxx, IMM[0].yyyy 4: ADD TEMP[2].x, IN[0].yyyy, IMM[0].zzzz 5: MUL TEMP[2].x, TEMP[2].xxxx, IMM[0].wwww 6: MOV TEMP[1].y, TEMP[2].xxxx 7: MOV TEMP[2].y, IMM[0].yyyy 8: MUL TEMP[3].x, IN[0].xxxx, IN[0].yyyy 9: MAD TEMP[3].x, TEMP[3].xxxx, IMM[1].xxxx, IMM[0].yyyy 10: MUL TEMP[2].x, TEMP[3].xxxx, IMM[1].yyyy 11: MOV OUT[1].xy, TEMP[1].xyxx 12: MOV OUT[2].xy, TEMP[2].xyxx 13: MOV OUT[0], TEMP[0] 14: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0].w, const[0].xxxx; 1: MOV temp[0].xyz, input[0].xyzx; 2: ADD temp[1].x, input[0].xxxx, const[0].xxxx; 3: MUL temp[1].x, temp[1].xxxx, const[0].yyyy; 4: ADD temp[2].x, input[0].yyyy, const[0].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[0].wwww; 6: MOV temp[1].y, temp[2].xxxx; 7: MOV temp[2].y, const[0].yyyy; 8: MUL temp[3].x, input[0].xxxx, input[0].yyyy; 9: MAD temp[3].x, temp[3].xxxx, const[1].xxxx, const[0].yyyy; 10: MUL temp[2].x, temp[3].xxxx, const[1].yyyy; 11: MOV output[1].xy, temp[1].xyxx; 12: MOV output[2].xy, temp[2].xyxx; 13: MOV temp[4], temp[0]; 14: MOV output[0], temp[4]; 15: MOV output[3], temp[4]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].w, const[0].xxxx; 1: MOV temp[0].xyz, input[0].xyzx; 2: ADD temp[1].x, input[0].xxxx, const[0].xxxx; 3: MUL temp[1].x, temp[1].xxxx, const[0].yyyy; 4: ADD temp[2].x, input[0].yyyy, const[0].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[0].wwww; 6: MOV temp[1].y, temp[2].xxxx; 7: MOV temp[2].y, const[0].yyyy; 8: MUL temp[3].x, input[0].xxxx, input[0].yyyy; 9: MAD temp[3].x, temp[3].xxxx, const[1].xxxx, const[0].yyyy; 10: MUL temp[2].x, temp[3].xxxx, const[1].yyyy; 11: MOV output[1].xy, temp[1].xyxx; 12: MOV output[2].xy, temp[2].xyxx; 13: MOV temp[4], temp[0]; 14: MOV output[0], temp[4]; 15: MOV output[3], temp[4]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0].w, const[0].xxxx; 1: MOV temp[0].xyz, input[0].xyzx; 2: ADD temp[1].x, input[0].xxxx, const[0].xxxx; 3: MUL temp[1].x, temp[1].xxxx, const[0].yyyy; 4: ADD temp[2].x, input[0].yyyy, const[0].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[0].wwww; 6: MOV temp[1].y, temp[2].xxxx; 7: MOV temp[2].y, const[0].yyyy; 8: MUL temp[3].x, input[0].xxxx, input[0].yyyy; 9: MAD temp[3].x, temp[3].xxxx, const[1].xxxx, const[0].yyyy; 10: MUL temp[2].x, temp[3].xxxx, const[1].yyyy; 11: MOV output[1].xy, temp[1].xyxx; 12: MOV output[2].xy, temp[2].xyxx; 13: MOV temp[4], temp[0]; 14: MOV output[0], temp[4]; 15: MOV output[3], temp[4]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].w, const[0].xxxx; 1: MOV temp[0].xyz, input[0].xyzx; 2: ADD temp[1].x, input[0].xxxx, const[0].xxxx; 3: MUL temp[1].x, temp[1].xxxx, const[0].yyyy; 4: ADD temp[2].x, input[0].yyyy, const[0].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[0].wwww; 6: MOV temp[1].y, temp[2].xxxx; 7: MOV temp[2].y, const[0].yyyy; 8: MUL temp[3].x, input[0].xxxx, input[0].yyyy; 9: MAD temp[3].x, temp[3].xxxx, const[1].xxxx, const[0].yyyy; 10: MUL temp[2].x, temp[3].xxxx, const[1].yyyy; 11: MOV output[1].xy, temp[1].xyxx; 12: MOV output[2].xy, temp[2].xyxx; 13: MOV temp[4], temp[0]; 14: MOV output[0], temp[4]; 15: MOV output[3], temp[4]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0].w, const[0].xxxx; 1: MOV temp[0].xyz, input[0].xyzx; 2: ADD temp[1].x, input[0].xxxx, const[0].xxxx; 3: MUL temp[1].x, temp[1].xxxx, const[0].yyyy; 4: ADD temp[2].x, input[0].yyyy, const[0].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[0].wwww; 6: MOV temp[1].y, temp[2].xxxx; 7: MOV temp[2].y, const[0].yyyy; 8: MUL temp[3].x, input[0].xxxx, input[0].yyyy; 9: MAD temp[3].x, temp[3].xxxx, const[1].xxxx, const[0].yyyy; 10: MUL temp[2].x, temp[3].xxxx, const[1].yyyy; 11: MOV output[1].xy, temp[1].xyxx; 12: MOV output[2].xy, temp[2].xyxx; 13: MOV temp[4], temp[0]; 14: MOV output[0], temp[4]; 15: MOV output[3], temp[4]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0].w, const[0].___x; 1: MOV temp[0].xyz, input[0].xyz_; 2: ADD temp[1].x, input[0].x___, const[0].x___; 3: MUL temp[1].x, temp[1].x___, const[0].y___; 4: ADD temp[2].x, input[0].y___, const[0].z___; 5: MUL temp[2].x, temp[2].x___, const[0].w___; 6: MOV temp[1].y, temp[2]._x__; 7: MOV temp[2].y, const[0]._y__; 8: MUL temp[3].x, input[0].x___, input[0].y___; 9: MAD temp[3].x, temp[3].x___, const[1].x___, const[0].y___; 10: MUL temp[2].x, temp[3].x___, const[1].y___; 11: MOV output[1].xy, temp[1].xy__; 12: MOV output[2].xy, temp[2].xy__; 13: MOV temp[4], temp[0]; 14: MOV output[0], temp[4]; 15: MOV output[3], temp[4]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV temp[0].w, none.___1; 1: MOV temp[0].xyz, input[0].xyz_; 2: ADD temp[1].x, input[0].x___, none.1___; 3: MUL temp[1].x, temp[1].x___, const[0].y___; 4: ADD temp[2].x, input[0].y___, none.-1___; 5: MUL temp[2].x, temp[2].x___, const[0].w___; 6: MOV temp[1].y, temp[2]._x__; 7: MOV temp[2].y, const[0]._y__; 8: MUL temp[3].x, input[0].x___, input[0].y___; 9: MAD temp[3].x, temp[3].x___, const[1].x___, const[0].y___; 10: MUL temp[2].x, temp[3].x___, const[1].y___; 11: MOV output[1].xy, temp[1].xy__; 12: MOV output[2].xy, temp[2].xy__; 13: MOV output[0], temp[0]; 14: MOV output[3], temp[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[0].w, none.___1; 1: MOV temp[0].xyz, input[0].xyz_; 2: ADD temp[1].x, input[0].x___, none.1___; 3: MUL temp[1].x, temp[1].x___, const[0].y___; 4: ADD temp[2].x, input[0].y___, none.-1___; 5: MUL temp[2].x, temp[2].x___, const[0].w___; 6: MOV temp[1].y, temp[2]._x__; 7: MOV temp[2].y, const[0]._y__; 8: MUL temp[3].x, input[0].x___, input[0].y___; 9: MOV temp[4], const[0].y___; 10: MAD temp[3].x, temp[3].x___, const[1].x___, temp[4]; 11: MUL temp[2].x, temp[3].x___, const[1].y___; 12: MOV output[1].xy, temp[1].xy__; 13: MOV output[2].xy, temp[2].xy__; 14: MOV output[0], temp[0]; 15: MOV output[3], temp[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0].w, none.___1; 1: MOV temp[0].xyz, input[0].xyz_; 2: ADD temp[1].x, input[0].x___, none.1___; 3: MUL temp[1].x, temp[1].x___, const[0].y___; 4: ADD temp[2].x, input[0].y___, none.-1___; 5: MUL temp[2].x, temp[2].x___, const[0].w___; 6: MOV temp[1].y, temp[2]._x__; 7: MOV temp[2].y, const[0]._y__; 8: MUL temp[3].x, input[0].x___, input[0].y___; 9: MOV temp[4], const[0].y___; 10: MAD temp[3].x, temp[3].x___, const[1].x___, temp[4]; 11: MUL temp[2].x, temp[3].x___, const[1].y___; 12: MOV output[1].xy, temp[1].xy__; 13: MOV output[2].xy, temp[2].xy__; 14: MOV output[0], temp[0]; 15: MOV output[3], temp[0]; CONST[0] = { 1.0000 0.5000 -1.0000 -0.5000 } CONST[1] = { 32.0000 0.1250 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0].w, none.___1; 1: MOV temp[0].xyz, input[0].xyz_; 2: ADD temp[1].x, input[0].x___, none.1___; 3: MUL temp[1].x, temp[1].x___, const[0].y___; 4: ADD temp[2].x, input[0].y___, none.-1___; 5: MUL temp[2].x, temp[2].x___, const[0].w___; 6: MOV temp[1].y, temp[2]._x__; 7: MOV temp[2].y, const[0]._y__; 8: MUL temp[3].x, input[0].x___, input[0].y___; 9: MOV temp[4], const[0].y___; 10: MAD temp[3].x, temp[3].x___, const[1].x___, temp[4]; 11: MUL temp[2].x, temp[3].x___, const[1].y___; 12: MOV output[1].xy, temp[1].xy__; 13: MOV output[2].xy, temp[2].xy__; 14: MOV output[0], temp[0]; 15: MOV output[3], temp[0]; Final vertex program code: 0: op: 0x00800003 dst: 0t op: VE_ADD src0: 0x017fe000 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 1: op: 0x00700003 dst: 0t op: VE_ADD src0: 0x01d10001 reg: 0i swiz: X/ Y/ Z/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 2: op: 0x00102003 dst: 1t op: VE_ADD src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 3: op: 0x00102002 dst: 1t op: VE_MULTIPLY src0: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src1: 0x01ff2002 reg: 0c swiz: Y/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 4: op: 0x00104003 dst: 2t op: VE_ADD src0: 0x01ff2001 reg: 0i swiz: Y/ U/ U/ U src1: 0x03ffa000 reg: 0t swiz: -1/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00104002 dst: 2t op: VE_MULTIPLY src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff6002 reg: 0c swiz: W/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00202003 dst: 1t op: VE_ADD src0: 0x01f8e040 reg: 2t swiz: U/ X/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 7: op: 0x00204003 dst: 2t op: VE_ADD src0: 0x01f9e002 reg: 0c swiz: U/ Y/ U/ U src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 8: op: 0x00106002 dst: 3t op: VE_MULTIPLY src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff2001 reg: 0i swiz: Y/ U/ U/ U src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 9: op: 0x00f08003 dst: 4t op: VE_ADD src0: 0x01ff2002 reg: 0c swiz: Y/ U/ U/ U src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 10: op: 0x00106004 dst: 3t op: VE_MULTIPLY_ADD src0: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U src1: 0x01ff0022 reg: 1c swiz: X/ U/ U/ U src2: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W 11: op: 0x00104002 dst: 2t op: VE_MULTIPLY src0: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U src1: 0x01ff2022 reg: 1c swiz: Y/ U/ U/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 12: op: 0x00302203 dst: 1o op: VE_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 13: op: 0x00304203 dst: 2o op: VE_ADD src0: 0x01f90040 reg: 2t swiz: X/ Y/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 14: 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 15: 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 fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[12], PERSPECTIVE DCL IN[1], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL CONST[6] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL IMM FLT32 { 255.0000, 0.0000, 0.1000, 0.2000} IMM FLT32 { 5.0000, 1.0000, 0.0000, 0.5000} IMM FLT32 { -1.0000, 1.0000, 0.0000, 0.0000} 0: TEX TEMP[0].xy, IN[1].xyyy, SAMP[5], 2D 1: MUL TEMP[0].xy, IMM[0].xxxx, TEMP[0].xyyy 2: MOV TEMP[1].w, IMM[0].yyyy 3: ADD TEMP[2].x, TEMP[0].xxxx, TEMP[0].yyyy 4: MAD TEMP[2].x, IMM[0].zzzz, TEMP[2].xxxx, IMM[0].wwww 5: MOV TEMP[1].xyz, TEMP[2].xxxx 6: MUL TEMP[0].xy, TEMP[0].xyyy, IMM[1].xxxx 7: ADD TEMP[2].xy, TEMP[0].xyyy, IMM[1].yzzz 8: MUL TEMP[3].xy, CONST[6].xxxx, TEMP[2].xyyy 9: ADD TEMP[3].xy, IN[0].xyyy, -TEMP[3].xyyy 10: TEX TEMP[3], TEMP[3].xyyy, SAMP[4], 2D 11: MUL TEMP[3], IMM[1].wwww, TEMP[3] 12: MAD TEMP[2].xy, CONST[6].xxxx, TEMP[2].xyyy, IN[0].xyyy 13: TEX TEMP[2], TEMP[2].xyyy, SAMP[4], 2D 14: MAD TEMP[2], IMM[1].wwww, TEMP[2], TEMP[3] 15: MAD TEMP[1], TEMP[2], IMM[0].wwww, TEMP[1] 16: ADD TEMP[2].xy, TEMP[0].xyyy, IMM[1].zyyy 17: MUL TEMP[3].xy, CONST[6].xxxx, TEMP[2].xyyy 18: ADD TEMP[3].xy, IN[0].xyyy, -TEMP[3].xyyy 19: TEX TEMP[3], TEMP[3].xyyy, SAMP[3], 2D 20: MUL TEMP[3], IMM[1].wwww, TEMP[3] 21: MAD TEMP[2].xy, CONST[6].xxxx, TEMP[2].xyyy, IN[0].xyyy 22: TEX TEMP[2], TEMP[2].xyyy, SAMP[3], 2D 23: MAD TEMP[2], IMM[1].wwww, TEMP[2], TEMP[3] 24: MAD TEMP[1], TEMP[2], IMM[0].wwww, TEMP[1] 25: MUL TEMP[2].xy, CONST[6].xxxx, TEMP[0].xyyy 26: ADD TEMP[2].xy, IN[0].xyyy, -TEMP[2].xyyy 27: TEX TEMP[2], TEMP[2].xyyy, SAMP[2], 2D 28: MUL TEMP[2], IMM[1].wwww, TEMP[2] 29: MAD TEMP[3].xy, CONST[6].xxxx, TEMP[0].xyyy, IN[0].xyyy 30: TEX TEMP[3], TEMP[3].xyyy, SAMP[2], 2D 31: MAD TEMP[2], IMM[1].wwww, TEMP[3], TEMP[2] 32: MAD TEMP[1], TEMP[2], IMM[0].wwww, TEMP[1] 33: ADD TEMP[2].xy, TEMP[0].xyyy, IMM[1].yyyy 34: MUL TEMP[3].xy, CONST[6].xxxx, TEMP[2].xyyy 35: ADD TEMP[3].xy, IN[0].xyyy, -TEMP[3].xyyy 36: TEX TEMP[3], TEMP[3].xyyy, SAMP[1], 2D 37: MUL TEMP[3], IMM[1].wwww, TEMP[3] 38: MAD TEMP[2].xy, CONST[6].xxxx, TEMP[2].xyyy, IN[0].xyyy 39: TEX TEMP[2], TEMP[2].xyyy, SAMP[1], 2D 40: MAD TEMP[2], IMM[1].wwww, TEMP[2], TEMP[3] 41: MAD TEMP[1], TEMP[2], IMM[0].wwww, TEMP[1] 42: ADD TEMP[0].xy, TEMP[0].xyyy, IMM[2].xyyy 43: MUL TEMP[2].xy, CONST[6].xxxx, TEMP[0].xyyy 44: ADD TEMP[2].xy, IN[0].xyyy, -TEMP[2].xyyy 45: TEX TEMP[2], TEMP[2].xyyy, SAMP[0], 2D 46: MUL TEMP[2], IMM[1].wwww, TEMP[2] 47: MAD TEMP[0].xy, CONST[6].xxxx, TEMP[0].xyyy, IN[0].xyyy 48: TEX TEMP[0], TEMP[0].xyyy, SAMP[0], 2D 49: MAD TEMP[0], IMM[1].wwww, TEMP[0], TEMP[2] 50: MAD TEMP[0], TEMP[0], IMM[0].wwww, TEMP[1] 51: MOV OUT[0], TEMP[0] 52: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].xy, input[1].xyyy, 2D[5]; 1: MUL temp[0].xy, const[7].xxxx, temp[0].xyyy; 2: MOV temp[1].w, const[7].yyyy; 3: ADD temp[2].x, temp[0].xxxx, temp[0].yyyy; 4: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, const[7].wwww; 5: MOV temp[1].xyz, temp[2].xxxx; 6: MUL temp[0].xy, temp[0].xyyy, const[8].xxxx; 7: ADD temp[2].xy, temp[0].xyyy, const[8].yzzz; 8: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 9: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 10: TEX temp[3], temp[3].xyyy, 2D[4]; 11: MUL temp[3], const[8].wwww, temp[3]; 12: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 13: TEX temp[2], temp[2].xyyy, 2D[4]; 14: MAD temp[2], const[8].wwww, temp[2], temp[3]; 15: MAD temp[1], temp[2], const[7].wwww, temp[1]; 16: ADD temp[2].xy, temp[0].xyyy, const[8].zyyy; 17: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 18: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 19: TEX temp[3], temp[3].xyyy, 2D[3]; 20: MUL temp[3], const[8].wwww, temp[3]; 21: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 22: TEX temp[2], temp[2].xyyy, 2D[3]; 23: MAD temp[2], const[8].wwww, temp[2], temp[3]; 24: MAD temp[1], temp[2], const[7].wwww, temp[1]; 25: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 26: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 27: TEX temp[2], temp[2].xyyy, 2D[2]; 28: MUL temp[2], const[8].wwww, temp[2]; 29: MAD temp[3].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 30: TEX temp[3], temp[3].xyyy, 2D[2]; 31: MAD temp[2], const[8].wwww, temp[3], temp[2]; 32: MAD temp[1], temp[2], const[7].wwww, temp[1]; 33: ADD temp[2].xy, temp[0].xyyy, const[8].yyyy; 34: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 35: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 36: TEX temp[3], temp[3].xyyy, 2D[1]; 37: MUL temp[3], const[8].wwww, temp[3]; 38: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 39: TEX temp[2], temp[2].xyyy, 2D[1]; 40: MAD temp[2], const[8].wwww, temp[2], temp[3]; 41: MAD temp[1], temp[2], const[7].wwww, temp[1]; 42: ADD temp[0].xy, temp[0].xyyy, const[9].xyyy; 43: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 44: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 45: TEX temp[2], temp[2].xyyy, 2D[0]; 46: MUL temp[2], const[8].wwww, temp[2]; 47: MAD temp[0].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 48: TEX temp[0], temp[0].xyyy, 2D[0]; 49: MAD temp[0], const[8].wwww, temp[0], temp[2]; 50: MAD temp[0], temp[0], const[7].wwww, temp[1]; 51: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].xy, input[1].xyyy, 2D[5]; 1: MUL temp[0].xy, const[7].xxxx, temp[0].xyyy; 2: MOV temp[1].w, const[7].yyyy; 3: ADD temp[2].x, temp[0].xxxx, temp[0].yyyy; 4: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, const[7].wwww; 5: MOV temp[1].xyz, temp[2].xxxx; 6: MUL temp[0].xy, temp[0].xyyy, const[8].xxxx; 7: ADD temp[2].xy, temp[0].xyyy, const[8].yzzz; 8: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 9: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 10: TEX temp[3], temp[3].xyyy, 2D[4]; 11: MUL temp[3], const[8].wwww, temp[3]; 12: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 13: TEX temp[2], temp[2].xyyy, 2D[4]; 14: MAD temp[2], const[8].wwww, temp[2], temp[3]; 15: MAD temp[1], temp[2], const[7].wwww, temp[1]; 16: ADD temp[2].xy, temp[0].xyyy, const[8].zyyy; 17: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 18: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 19: TEX temp[3], temp[3].xyyy, 2D[3]; 20: MUL temp[3], const[8].wwww, temp[3]; 21: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 22: TEX temp[2], temp[2].xyyy, 2D[3]; 23: MAD temp[2], const[8].wwww, temp[2], temp[3]; 24: MAD temp[1], temp[2], const[7].wwww, temp[1]; 25: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 26: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 27: TEX temp[2], temp[2].xyyy, 2D[2]; 28: MUL temp[2], const[8].wwww, temp[2]; 29: MAD temp[3].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 30: TEX temp[3], temp[3].xyyy, 2D[2]; 31: MAD temp[2], const[8].wwww, temp[3], temp[2]; 32: MAD temp[1], temp[2], const[7].wwww, temp[1]; 33: ADD temp[2].xy, temp[0].xyyy, const[8].yyyy; 34: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 35: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 36: TEX temp[3], temp[3].xyyy, 2D[1]; 37: MUL temp[3], const[8].wwww, temp[3]; 38: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 39: TEX temp[2], temp[2].xyyy, 2D[1]; 40: MAD temp[2], const[8].wwww, temp[2], temp[3]; 41: MAD temp[1], temp[2], const[7].wwww, temp[1]; 42: ADD temp[0].xy, temp[0].xyyy, const[9].xyyy; 43: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 44: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 45: TEX temp[2], temp[2].xyyy, 2D[0]; 46: MUL temp[2], const[8].wwww, temp[2]; 47: MAD temp[0].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 48: TEX temp[0], temp[0].xyyy, 2D[0]; 49: MAD temp[0], const[8].wwww, temp[0], temp[2]; 50: MAD temp[0], temp[0], const[7].wwww, temp[1]; 51: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].xy, input[1].xyyy, 2D[5]; 1: MUL temp[0].xy, const[7].xxxx, temp[0].xyyy; 2: MOV temp[1].w, const[7].yyyy; 3: ADD temp[2].x, temp[0].xxxx, temp[0].yyyy; 4: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, const[7].wwww; 5: MOV temp[1].xyz, temp[2].xxxx; 6: MUL temp[0].xy, temp[0].xyyy, const[8].xxxx; 7: ADD temp[2].xy, temp[0].xyyy, const[8].yzzz; 8: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 9: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 10: TEX temp[3], temp[3].xyyy, 2D[4]; 11: MUL temp[3], const[8].wwww, temp[3]; 12: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 13: TEX temp[2], temp[2].xyyy, 2D[4]; 14: MAD temp[2], const[8].wwww, temp[2], temp[3]; 15: MAD temp[1], temp[2], const[7].wwww, temp[1]; 16: ADD temp[2].xy, temp[0].xyyy, const[8].zyyy; 17: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 18: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 19: TEX temp[3], temp[3].xyyy, 2D[3]; 20: MUL temp[3], const[8].wwww, temp[3]; 21: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 22: TEX temp[2], temp[2].xyyy, 2D[3]; 23: MAD temp[2], const[8].wwww, temp[2], temp[3]; 24: MAD temp[1], temp[2], const[7].wwww, temp[1]; 25: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 26: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 27: TEX temp[2], temp[2].xyyy, 2D[2]; 28: MUL temp[2], const[8].wwww, temp[2]; 29: MAD temp[3].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 30: TEX temp[3], temp[3].xyyy, 2D[2]; 31: MAD temp[2], const[8].wwww, temp[3], temp[2]; 32: MAD temp[1], temp[2], const[7].wwww, temp[1]; 33: ADD temp[2].xy, temp[0].xyyy, const[8].yyyy; 34: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 35: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 36: TEX temp[3], temp[3].xyyy, 2D[1]; 37: MUL temp[3], const[8].wwww, temp[3]; 38: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 39: TEX temp[2], temp[2].xyyy, 2D[1]; 40: MAD temp[2], const[8].wwww, temp[2], temp[3]; 41: MAD temp[1], temp[2], const[7].wwww, temp[1]; 42: ADD temp[0].xy, temp[0].xyyy, const[9].xyyy; 43: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 44: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 45: TEX temp[2], temp[2].xyyy, 2D[0]; 46: MUL temp[2], const[8].wwww, temp[2]; 47: MAD temp[0].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 48: TEX temp[0], temp[0].xyyy, 2D[0]; 49: MAD temp[0], const[8].wwww, temp[0], temp[2]; 50: MAD temp[0], temp[0], const[7].wwww, temp[1]; 51: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0].xy, input[1].xyyy, 2D[5]; 1: MUL temp[0].xy, const[7].xxxx, temp[0].xyyy; 2: MOV temp[1].w, const[7].yyyy; 3: ADD temp[2].x, temp[0].xxxx, temp[0].yyyy; 4: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, const[7].wwww; 5: MOV temp[1].xyz, temp[2].xxxx; 6: MUL temp[0].xy, temp[0].xyyy, const[8].xxxx; 7: ADD temp[2].xy, temp[0].xyyy, const[8].yzzz; 8: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 9: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 10: TEX temp[3], temp[3].xyyy, 2D[4]; 11: MUL temp[3], const[8].wwww, temp[3]; 12: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 13: TEX temp[2], temp[2].xyyy, 2D[4]; 14: MAD temp[2], const[8].wwww, temp[2], temp[3]; 15: MAD temp[1], temp[2], const[7].wwww, temp[1]; 16: ADD temp[2].xy, temp[0].xyyy, const[8].zyyy; 17: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 18: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 19: TEX temp[3], temp[3].xyyy, 2D[3]; 20: MUL temp[3], const[8].wwww, temp[3]; 21: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 22: TEX temp[2], temp[2].xyyy, 2D[3]; 23: MAD temp[2], const[8].wwww, temp[2], temp[3]; 24: MAD temp[1], temp[2], const[7].wwww, temp[1]; 25: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 26: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 27: TEX temp[2], temp[2].xyyy, 2D[2]; 28: MUL temp[2], const[8].wwww, temp[2]; 29: MAD temp[3].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 30: TEX temp[3], temp[3].xyyy, 2D[2]; 31: MAD temp[2], const[8].wwww, temp[3], temp[2]; 32: MAD temp[1], temp[2], const[7].wwww, temp[1]; 33: ADD temp[2].xy, temp[0].xyyy, const[8].yyyy; 34: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 35: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 36: TEX temp[3], temp[3].xyyy, 2D[1]; 37: MUL temp[3], const[8].wwww, temp[3]; 38: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 39: TEX temp[2], temp[2].xyyy, 2D[1]; 40: MAD temp[2], const[8].wwww, temp[2], temp[3]; 41: MAD temp[1], temp[2], const[7].wwww, temp[1]; 42: ADD temp[0].xy, temp[0].xyyy, const[9].xyyy; 43: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 44: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 45: TEX temp[2], temp[2].xyyy, 2D[0]; 46: MUL temp[2], const[8].wwww, temp[2]; 47: MAD temp[0].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 48: TEX temp[0], temp[0].xyyy, 2D[0]; 49: MAD temp[0], const[8].wwww, temp[0], temp[2]; 50: MAD temp[0], temp[0], const[7].wwww, temp[1]; 51: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0].xy, input[1].xyyy, 2D[5]; 1: MUL temp[0].xy, const[7].xxxx, temp[0].xyyy; 2: MOV temp[1].w, const[7].yyyy; 3: ADD temp[2].x, temp[0].xxxx, temp[0].yyyy; 4: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, const[7].wwww; 5: MOV temp[1].xyz, temp[2].xxxx; 6: MUL temp[0].xy, temp[0].xyyy, const[8].xxxx; 7: ADD temp[2].xy, temp[0].xyyy, const[8].yzzz; 8: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 9: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 10: TEX temp[3], temp[3].xyyy, 2D[4]; 11: MUL temp[3], const[8].wwww, temp[3]; 12: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 13: TEX temp[2], temp[2].xyyy, 2D[4]; 14: MAD temp[2], const[8].wwww, temp[2], temp[3]; 15: MAD temp[1], temp[2], const[7].wwww, temp[1]; 16: ADD temp[2].xy, temp[0].xyyy, const[8].zyyy; 17: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 18: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 19: TEX temp[3], temp[3].xyyy, 2D[3]; 20: MUL temp[3], const[8].wwww, temp[3]; 21: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 22: TEX temp[2], temp[2].xyyy, 2D[3]; 23: MAD temp[2], const[8].wwww, temp[2], temp[3]; 24: MAD temp[1], temp[2], const[7].wwww, temp[1]; 25: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 26: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 27: TEX temp[2], temp[2].xyyy, 2D[2]; 28: MUL temp[2], const[8].wwww, temp[2]; 29: MAD temp[3].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 30: TEX temp[3], temp[3].xyyy, 2D[2]; 31: MAD temp[2], const[8].wwww, temp[3], temp[2]; 32: MAD temp[1], temp[2], const[7].wwww, temp[1]; 33: ADD temp[2].xy, temp[0].xyyy, const[8].yyyy; 34: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 35: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 36: TEX temp[3], temp[3].xyyy, 2D[1]; 37: MUL temp[3], const[8].wwww, temp[3]; 38: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 39: TEX temp[2], temp[2].xyyy, 2D[1]; 40: MAD temp[2], const[8].wwww, temp[2], temp[3]; 41: MAD temp[1], temp[2], const[7].wwww, temp[1]; 42: ADD temp[0].xy, temp[0].xyyy, const[9].xyyy; 43: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 44: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 45: TEX temp[2], temp[2].xyyy, 2D[0]; 46: MUL temp[2], const[8].wwww, temp[2]; 47: MAD temp[0].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 48: TEX temp[0], temp[0].xyyy, 2D[0]; 49: MAD temp[0], const[8].wwww, temp[0], temp[2]; 50: MAD temp[0], temp[0], const[7].wwww, temp[1]; 51: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[4], input[1].xyyy, 2D[5]; 1: MOV temp[0].xy, temp[4]; 2: MUL temp[0].xy, const[7].xxxx, temp[0].xyyy; 3: MOV temp[1].w, const[7].yyyy; 4: ADD temp[2].x, temp[0].xxxx, temp[0].yyyy; 5: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, const[7].wwww; 6: MOV temp[1].xyz, temp[2].xxxx; 7: MUL temp[0].xy, temp[0].xyyy, const[8].xxxx; 8: ADD temp[2].xy, temp[0].xyyy, const[8].yzzz; 9: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 10: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 11: TEX temp[3], temp[3].xyyy, 2D[4]; 12: MUL temp[3], const[8].wwww, temp[3]; 13: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 14: TEX temp[2], temp[2].xyyy, 2D[4]; 15: MAD temp[2], const[8].wwww, temp[2], temp[3]; 16: MAD temp[1], temp[2], const[7].wwww, temp[1]; 17: ADD temp[2].xy, temp[0].xyyy, const[8].zyyy; 18: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 19: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 20: TEX temp[3], temp[3].xyyy, 2D[3]; 21: MUL temp[3], const[8].wwww, temp[3]; 22: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 23: TEX temp[2], temp[2].xyyy, 2D[3]; 24: MAD temp[2], const[8].wwww, temp[2], temp[3]; 25: MAD temp[1], temp[2], const[7].wwww, temp[1]; 26: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 27: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 28: TEX temp[2], temp[2].xyyy, 2D[2]; 29: MUL temp[2], const[8].wwww, temp[2]; 30: MAD temp[3].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 31: TEX temp[3], temp[3].xyyy, 2D[2]; 32: MAD temp[2], const[8].wwww, temp[3], temp[2]; 33: MAD temp[1], temp[2], const[7].wwww, temp[1]; 34: ADD temp[2].xy, temp[0].xyyy, const[8].yyyy; 35: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 36: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 37: TEX temp[3], temp[3].xyyy, 2D[1]; 38: MUL temp[3], const[8].wwww, temp[3]; 39: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 40: TEX temp[2], temp[2].xyyy, 2D[1]; 41: MAD temp[2], const[8].wwww, temp[2], temp[3]; 42: MAD temp[1], temp[2], const[7].wwww, temp[1]; 43: ADD temp[0].xy, temp[0].xyyy, const[9].xyyy; 44: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 45: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 46: TEX temp[2], temp[2].xyyy, 2D[0]; 47: MUL temp[2], const[8].wwww, temp[2]; 48: MAD temp[0].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 49: TEX temp[0], temp[0].xyyy, 2D[0]; 50: MAD temp[0], const[8].wwww, temp[0], temp[2]; 51: MAD temp[0], temp[0], const[7].wwww, temp[1]; 52: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[4], input[1].xyyy, 2D[5]; 1: MOV temp[0].xy, temp[4]; 2: MUL temp[0].xy, const[7].xxxx, temp[0].xyyy; 3: MOV temp[1].w, const[7].yyyy; 4: ADD temp[2].x, temp[0].xxxx, temp[0].yyyy; 5: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, const[7].wwww; 6: MOV temp[1].xyz, temp[2].xxxx; 7: MUL temp[0].xy, temp[0].xyyy, const[8].xxxx; 8: ADD temp[2].xy, temp[0].xyyy, const[8].yzzz; 9: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 10: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 11: TEX temp[3], temp[3].xyyy, 2D[4]; 12: MUL temp[3], const[8].wwww, temp[3]; 13: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 14: TEX temp[2], temp[2].xyyy, 2D[4]; 15: MAD temp[2], const[8].wwww, temp[2], temp[3]; 16: MAD temp[1], temp[2], const[7].wwww, temp[1]; 17: ADD temp[2].xy, temp[0].xyyy, const[8].zyyy; 18: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 19: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 20: TEX temp[3], temp[3].xyyy, 2D[3]; 21: MUL temp[3], const[8].wwww, temp[3]; 22: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 23: TEX temp[2], temp[2].xyyy, 2D[3]; 24: MAD temp[2], const[8].wwww, temp[2], temp[3]; 25: MAD temp[1], temp[2], const[7].wwww, temp[1]; 26: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 27: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 28: TEX temp[2], temp[2].xyyy, 2D[2]; 29: MUL temp[2], const[8].wwww, temp[2]; 30: MAD temp[3].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 31: TEX temp[3], temp[3].xyyy, 2D[2]; 32: MAD temp[2], const[8].wwww, temp[3], temp[2]; 33: MAD temp[1], temp[2], const[7].wwww, temp[1]; 34: ADD temp[2].xy, temp[0].xyyy, const[8].yyyy; 35: MUL temp[3].xy, const[6].xxxx, temp[2].xyyy; 36: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 37: TEX temp[3], temp[3].xyyy, 2D[1]; 38: MUL temp[3], const[8].wwww, temp[3]; 39: MAD temp[2].xy, const[6].xxxx, temp[2].xyyy, input[0].xyyy; 40: TEX temp[2], temp[2].xyyy, 2D[1]; 41: MAD temp[2], const[8].wwww, temp[2], temp[3]; 42: MAD temp[1], temp[2], const[7].wwww, temp[1]; 43: ADD temp[0].xy, temp[0].xyyy, const[9].xyyy; 44: MUL temp[2].xy, const[6].xxxx, temp[0].xyyy; 45: ADD temp[2].xy, input[0].xyyy, -temp[2].xyyy; 46: TEX temp[2], temp[2].xyyy, 2D[0]; 47: MUL temp[2], const[8].wwww, temp[2]; 48: MAD temp[0].xy, const[6].xxxx, temp[0].xyyy, input[0].xyyy; 49: TEX temp[0], temp[0].xyyy, 2D[0]; 50: MAD temp[0], const[8].wwww, temp[0], temp[2]; 51: MAD temp[0], temp[0], const[7].wwww, temp[1]; 52: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[4].xy, input[1].xy__, 2D[5]; 1: MOV temp[0].xy, temp[4].xy__; 2: MUL temp[0].xy, const[7].xx__, temp[0].xy__; 3: MOV temp[1].w, const[7].___y; 4: ADD temp[2].x, temp[0].x___, temp[0].y___; 5: MAD temp[2].x, const[7].z___, temp[2].x___, const[7].w___; 6: MOV temp[1].xyz, temp[2].xxx_; 7: MUL temp[0].xy, temp[0].xy__, const[8].xx__; 8: ADD temp[2].xy, temp[0].xy__, const[8].yz__; 9: MUL temp[3].xy, const[6].xx__, temp[2].xy__; 10: ADD temp[3].xy, input[0].xy__, -temp[3].xy__; 11: TEX temp[3], temp[3].xy__, 2D[4]; 12: MUL temp[3], const[8].wwww, temp[3]; 13: MAD temp[2].xy, const[6].xx__, temp[2].xy__, input[0].xy__; 14: TEX temp[2], temp[2].xy__, 2D[4]; 15: MAD temp[2], const[8].wwww, temp[2], temp[3]; 16: MAD temp[1], temp[2], const[7].wwww, temp[1]; 17: ADD temp[2].xy, temp[0].xy__, const[8].zy__; 18: MUL temp[3].xy, const[6].xx__, temp[2].xy__; 19: ADD temp[3].xy, input[0].xy__, -temp[3].xy__; 20: TEX temp[3], temp[3].xy__, 2D[3]; 21: MUL temp[3], const[8].wwww, temp[3]; 22: MAD temp[2].xy, const[6].xx__, temp[2].xy__, input[0].xy__; 23: TEX temp[2], temp[2].xy__, 2D[3]; 24: MAD temp[2], const[8].wwww, temp[2], temp[3]; 25: MAD temp[1], temp[2], const[7].wwww, temp[1]; 26: MUL temp[2].xy, const[6].xx__, temp[0].xy__; 27: ADD temp[2].xy, input[0].xy__, -temp[2].xy__; 28: TEX temp[2], temp[2].xy__, 2D[2]; 29: MUL temp[2], const[8].wwww, temp[2]; 30: MAD temp[3].xy, const[6].xx__, temp[0].xy__, input[0].xy__; 31: TEX temp[3], temp[3].xy__, 2D[2]; 32: MAD temp[2], const[8].wwww, temp[3], temp[2]; 33: MAD temp[1], temp[2], const[7].wwww, temp[1]; 34: ADD temp[2].xy, temp[0].xy__, const[8].yy__; 35: MUL temp[3].xy, const[6].xx__, temp[2].xy__; 36: ADD temp[3].xy, input[0].xy__, -temp[3].xy__; 37: TEX temp[3], temp[3].xy__, 2D[1]; 38: MUL temp[3], const[8].wwww, temp[3]; 39: MAD temp[2].xy, const[6].xx__, temp[2].xy__, input[0].xy__; 40: TEX temp[2], temp[2].xy__, 2D[1]; 41: MAD temp[2], const[8].wwww, temp[2], temp[3]; 42: MAD temp[1], temp[2], const[7].wwww, temp[1]; 43: ADD temp[0].xy, temp[0].xy__, const[9].xy__; 44: MUL temp[2].xy, const[6].xx__, temp[0].xy__; 45: ADD temp[2].xy, input[0].xy__, -temp[2].xy__; 46: TEX temp[2], temp[2].xy__, 2D[0]; 47: MUL temp[2], const[8].wwww, temp[2]; 48: MAD temp[0].xy, const[6].xx__, temp[0].xy__, input[0].xy__; 49: TEX temp[0], temp[0].xy__, 2D[0]; 50: MAD temp[0], const[8].wwww, temp[0], temp[2]; 51: MAD temp[0], temp[0], const[7].wwww, temp[1]; 52: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[4].xy, input[1].xy__, 2D[5]; 1: MOV temp[0].xy, temp[4].xy__; 2: MUL temp[0].xy, const[7].xx__, temp[0].xy__; 3: MOV temp[1].w, const[7].___y; 4: ADD temp[2].x, temp[0].x___, temp[0].y___; 5: MAD temp[2].x, const[7].z___, temp[2].x___, const[7].w___; 6: MOV temp[1].xyz, temp[2].xxx_; 7: MUL temp[0].xy, temp[0].xy__, const[8].xx__; 8: ADD temp[2].xy, temp[0].xy__, const[8].yz__; 9: MUL temp[3].xy, const[6].xx__, temp[2].xy__; 10: ADD temp[3].xy, input[0].xy__, -temp[3].xy__; 11: TEX temp[3], temp[3].xy__, 2D[4]; 12: MUL temp[3], const[8].wwww, temp[3]; 13: MAD temp[2].xy, const[6].xx__, temp[2].xy__, input[0].xy__; 14: TEX temp[2], temp[2].xy__, 2D[4]; 15: MAD temp[2], const[8].wwww, temp[2], temp[3]; 16: MAD temp[1], temp[2], const[7].wwww, temp[1]; 17: ADD temp[2].xy, temp[0].xy__, const[8].zy__; 18: MUL temp[3].xy, const[6].xx__, temp[2].xy__; 19: ADD temp[3].xy, input[0].xy__, -temp[3].xy__; 20: TEX temp[3], temp[3].xy__, 2D[3]; 21: MUL temp[3], const[8].wwww, temp[3]; 22: MAD temp[2].xy, const[6].xx__, temp[2].xy__, input[0].xy__; 23: TEX temp[2], temp[2].xy__, 2D[3]; 24: MAD temp[2], const[8].wwww, temp[2], temp[3]; 25: MAD temp[1], temp[2], const[7].wwww, temp[1]; 26: MUL temp[2].xy, const[6].xx__, temp[0].xy__; 27: ADD temp[2].xy, input[0].xy__, -temp[2].xy__; 28: TEX temp[2], temp[2].xy__, 2D[2]; 29: MUL temp[2], const[8].wwww, temp[2]; 30: MAD temp[3].xy, const[6].xx__, temp[0].xy__, input[0].xy__; 31: TEX temp[3], temp[3].xy__, 2D[2]; 32: MAD temp[2], const[8].wwww, temp[3], temp[2]; 33: MAD temp[1], temp[2], const[7].wwww, temp[1]; 34: ADD temp[2].xy, temp[0].xy__, const[8].yy__; 35: MUL temp[3].xy, const[6].xx__, temp[2].xy__; 36: ADD temp[3].xy, input[0].xy__, -temp[3].xy__; 37: TEX temp[3], temp[3].xy__, 2D[1]; 38: MUL temp[3], const[8].wwww, temp[3]; 39: MAD temp[2].xy, const[6].xx__, temp[2].xy__, input[0].xy__; 40: TEX temp[2], temp[2].xy__, 2D[1]; 41: MAD temp[2], const[8].wwww, temp[2], temp[3]; 42: MAD temp[1], temp[2], const[7].wwww, temp[1]; 43: ADD temp[0].xy, temp[0].xy__, const[9].xy__; 44: MUL temp[2].xy, const[6].xx__, temp[0].xy__; 45: ADD temp[2].xy, input[0].xy__, -temp[2].xy__; 46: TEX temp[2], temp[2].xy__, 2D[0]; 47: MUL temp[2], const[8].wwww, temp[2]; 48: MAD temp[0].xy, const[6].xx__, temp[0].xy__, input[0].xy__; 49: TEX temp[0], temp[0].xy__, 2D[0]; 50: MAD temp[0], const[8].wwww, temp[0], temp[2]; 51: MAD temp[0], temp[0], const[7].wwww, temp[1]; 52: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[5].xy, input[1].xy__, 2D[5]; 1: MOV temp[6].xy, temp[5].xy__; 2: MUL temp[7].xy, const[7].xx__, temp[6].xy__; 3: MOV temp[8].w, const[7].___y; 4: ADD temp[9].x, temp[7].x___, temp[7].y___; 5: MAD temp[10].x, const[7].z___, temp[9].x___, const[7].w___; 6: MOV temp[8].xyz, temp[10].xxx_; 7: MUL temp[11].xy, temp[7].xy__, const[8].xx__; 8: ADD temp[12].xy, temp[11].xy__, const[8].yz__; 9: MUL temp[13].xy, const[6].xx__, temp[12].xy__; 10: ADD temp[14].xy, input[0].xy__, -temp[13].xy__; 11: TEX temp[15], temp[14].xy__, 2D[4]; 12: MUL temp[16], const[8].wwww, temp[15]; 13: MAD temp[17].xy, const[6].xx__, temp[12].xy__, input[0].xy__; 14: TEX temp[18], temp[17].xy__, 2D[4]; 15: MAD temp[19], const[8].wwww, temp[18], temp[16]; 16: MAD temp[20], temp[19], const[7].wwww, temp[8]; 17: ADD temp[21].xy, temp[11].xy__, const[8].zy__; 18: MUL temp[22].xy, const[6].xx__, temp[21].xy__; 19: ADD temp[23].xy, input[0].xy__, -temp[22].xy__; 20: TEX temp[24], temp[23].xy__, 2D[3]; 21: MUL temp[25], const[8].wwww, temp[24]; 22: MAD temp[26].xy, const[6].xx__, temp[21].xy__, input[0].xy__; 23: TEX temp[27], temp[26].xy__, 2D[3]; 24: MAD temp[28], const[8].wwww, temp[27], temp[25]; 25: MAD temp[29], temp[28], const[7].wwww, temp[20]; 26: MUL temp[30].xy, const[6].xx__, temp[11].xy__; 27: ADD temp[31].xy, input[0].xy__, -temp[30].xy__; 28: TEX temp[32], temp[31].xy__, 2D[2]; 29: MUL temp[33], const[8].wwww, temp[32]; 30: MAD temp[34].xy, const[6].xx__, temp[11].xy__, input[0].xy__; 31: TEX temp[35], temp[34].xy__, 2D[2]; 32: MAD temp[36], const[8].wwww, temp[35], temp[33]; 33: MAD temp[37], temp[36], const[7].wwww, temp[29]; 34: ADD temp[38].xy, temp[11].xy__, const[8].yy__; 35: MUL temp[39].xy, const[6].xx__, temp[38].xy__; 36: ADD temp[40].xy, input[0].xy__, -temp[39].xy__; 37: TEX temp[41], temp[40].xy__, 2D[1]; 38: MUL temp[42], const[8].wwww, temp[41]; 39: MAD temp[43].xy, const[6].xx__, temp[38].xy__, input[0].xy__; 40: TEX temp[44], temp[43].xy__, 2D[1]; 41: MAD temp[45], const[8].wwww, temp[44], temp[42]; 42: MAD temp[46], temp[45], const[7].wwww, temp[37]; 43: ADD temp[47].xy, temp[11].xy__, const[9].xy__; 44: MUL temp[48].xy, const[6].xx__, temp[47].xy__; 45: ADD temp[49].xy, input[0].xy__, -temp[48].xy__; 46: TEX temp[50], temp[49].xy__, 2D[0]; 47: MUL temp[51], const[8].wwww, temp[50]; 48: MAD temp[52].xy, const[6].xx__, temp[47].xy__, input[0].xy__; 49: TEX temp[53], temp[52].xy__, 2D[0]; 50: MAD temp[54], const[8].wwww, temp[53], temp[51]; 51: MAD temp[55], temp[54], const[7].wwww, temp[46]; 52: MOV output[0], temp[55]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[5].xy, input[1].xy__, 2D[5]; 1: MUL temp[7].xy, const[7].xx__, temp[5].xy__; 2: MOV temp[8].w, none.___0; 3: ADD temp[9].x, temp[7].x___, temp[7].y___; 4: MAD temp[10].x, const[7].z___, temp[9].x___, const[7].w___; 5: MOV temp[8].xyz, temp[10].xxx_; 6: MUL temp[11].xy, temp[7].xy__, const[8].xx__; 7: ADD temp[12].xy, temp[11].xy__, const[8].yz__; 8: MUL temp[13].xy, const[6].xx__, temp[12].xy__; 9: ADD temp[14].xy, input[0].xy__, -temp[13].xy__; 10: TEX temp[15], temp[14].xy__, 2D[4]; 11: MUL temp[16], none.HHHH, temp[15]; 12: MAD temp[17].xy, const[6].xx__, temp[12].xy__, input[0].xy__; 13: TEX temp[18], temp[17].xy__, 2D[4]; 14: MAD temp[19], none.HHHH, temp[18], temp[16]; 15: MAD temp[20], temp[19], const[7].wwww, temp[8]; 16: ADD temp[21].xy, temp[11].xy__, none.01__; 17: MUL temp[22].xy, const[6].xx__, temp[21].xy__; 18: ADD temp[23].xy, input[0].xy__, -temp[22].xy__; 19: TEX temp[24], temp[23].xy__, 2D[3]; 20: MUL temp[25], none.HHHH, temp[24]; 21: MAD temp[26].xy, const[6].xx__, temp[21].xy__, input[0].xy__; 22: TEX temp[27], temp[26].xy__, 2D[3]; 23: MAD temp[28], none.HHHH, temp[27], temp[25]; 24: MAD temp[29], temp[28], const[7].wwww, temp[20]; 25: MUL temp[30].xy, const[6].xx__, temp[11].xy__; 26: ADD temp[31].xy, input[0].xy__, -temp[30].xy__; 27: TEX temp[32], temp[31].xy__, 2D[2]; 28: MUL temp[33], none.HHHH, temp[32]; 29: MAD temp[34].xy, const[6].xx__, temp[11].xy__, input[0].xy__; 30: TEX temp[35], temp[34].xy__, 2D[2]; 31: MAD temp[36], none.HHHH, temp[35], temp[33]; 32: MAD temp[37], temp[36], const[7].wwww, temp[29]; 33: ADD temp[38].xy, temp[11].xy__, none.11__; 34: MUL temp[39].xy, const[6].xx__, temp[38].xy__; 35: ADD temp[40].xy, input[0].xy__, -temp[39].xy__; 36: TEX temp[41], temp[40].xy__, 2D[1]; 37: MUL temp[42], none.HHHH, temp[41]; 38: MAD temp[43].xy, const[6].xx__, temp[38].xy__, input[0].xy__; 39: TEX temp[44], temp[43].xy__, 2D[1]; 40: MAD temp[45], none.HHHH, temp[44], temp[42]; 41: MAD temp[46], temp[45], const[7].wwww, temp[37]; 42: ADD temp[47].xy, temp[11].xy__, const[9].xy__; 43: MUL temp[48].xy, const[6].xx__, temp[47].xy__; 44: ADD temp[49].xy, input[0].xy__, -temp[48].xy__; 45: TEX temp[50], temp[49].xy__, 2D[0]; 46: MUL temp[51], none.HHHH, temp[50]; 47: MAD temp[52].xy, const[6].xx__, temp[47].xy__, input[0].xy__; 48: TEX temp[53], temp[52].xy__, 2D[0]; 49: MAD temp[54], none.HHHH, temp[53], temp[51]; 50: MAD temp[55], temp[54], const[7].wwww, temp[46]; 51: MOV output[0], temp[55]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[5].xy, input[1].xy__, 2D[5]; 1: MUL temp[7].xy, const[7].xx__, temp[5].xy__; 2: MOV temp[8].w, none.___0; 3: ADD temp[9].x, temp[7].x___, temp[7].y___; 4: MAD temp[10].x, const[7].z___, temp[9].x___, const[7].w___; 5: MOV temp[8].xyz, temp[10].xxx_; 6: MUL temp[11].xy, temp[7].xy__, const[8].xx__; 7: ADD temp[12].xy, temp[11].xy__, const[8].yz__; 8: MUL temp[13].xy, const[6].xx__, temp[12].xy__; 9: ADD temp[14].xy, input[0].xy__, -temp[13].xy__; 10: TEX temp[15], temp[14].xy__, 2D[4]; 11: MUL temp[16], none.HHHH, temp[15]; 12: MAD temp[17].xy, const[6].xx__, temp[12].xy__, input[0].xy__; 13: TEX temp[18], temp[17].xy__, 2D[4]; 14: MAD temp[19], none.HHHH, temp[18], temp[16]; 15: MAD temp[20], temp[19], const[7].wwww, temp[8]; 16: MOV temp[0].y, none._1__; 17: MOV temp[0].x, none.0___; 18: ADD temp[21].xy, temp[11].xy__, temp[0].xy__; 19: MUL temp[22].xy, const[6].xx__, temp[21].xy__; 20: ADD temp[23].xy, input[0].xy__, -temp[22].xy__; 21: TEX temp[24], temp[23].xy__, 2D[3]; 22: MUL temp[25], none.HHHH, temp[24]; 23: MAD temp[26].xy, const[6].xx__, temp[21].xy__, input[0].xy__; 24: TEX temp[27], temp[26].xy__, 2D[3]; 25: MAD temp[28], none.HHHH, temp[27], temp[25]; 26: MAD temp[29], temp[28], const[7].wwww, temp[20]; 27: MUL temp[30].xy, const[6].xx__, temp[11].xy__; 28: ADD temp[31].xy, input[0].xy__, -temp[30].xy__; 29: TEX temp[32], temp[31].xy__, 2D[2]; 30: MUL temp[33], none.HHHH, temp[32]; 31: MAD temp[34].xy, const[6].xx__, temp[11].xy__, input[0].xy__; 32: TEX temp[35], temp[34].xy__, 2D[2]; 33: MAD temp[36], none.HHHH, temp[35], temp[33]; 34: MAD temp[37], temp[36], const[7].wwww, temp[29]; 35: ADD temp[38].xy, temp[11].xy__, none.11__; 36: MUL temp[39].xy, const[6].xx__, temp[38].xy__; 37: ADD temp[40].xy, input[0].xy__, -temp[39].xy__; 38: TEX temp[41], temp[40].xy__, 2D[1]; 39: MUL temp[42], none.HHHH, temp[41]; 40: MAD temp[43].xy, const[6].xx__, temp[38].xy__, input[0].xy__; 41: TEX temp[44], temp[43].xy__, 2D[1]; 42: MAD temp[45], none.HHHH, temp[44], temp[42]; 43: MAD temp[46], temp[45], const[7].wwww, temp[37]; 44: ADD temp[47].xy, temp[11].xy__, const[9].xy__; 45: MUL temp[48].xy, const[6].xx__, temp[47].xy__; 46: ADD temp[49].xy, input[0].xy__, -temp[48].xy__; 47: TEX temp[50], temp[49].xy__, 2D[0]; 48: MUL temp[51], none.HHHH, temp[50]; 49: MAD temp[52].xy, const[6].xx__, temp[47].xy__, input[0].xy__; 50: TEX temp[53], temp[52].xy__, 2D[0]; 51: MAD temp[54], none.HHHH, temp[53], temp[51]; 52: MAD temp[55], temp[54], const[7].wwww, temp[46]; 53: MOV output[0], temp[55]; CONST[1] = { 255.0000 0.0000 0.1000 0.2000 } CONST[2] = { 5.0000 1.0000 0.0000 0.5000 } CONST[3] = { -1.0000 1.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[5].xy, input[1].xy__, 2D[5]; 1: MUL temp[7].xy, const[1].xx__, temp[5].xy__; 2: MOV temp[8].w, none.___0; 3: ADD temp[9].x, temp[7].x___, temp[7].y___; 4: MAD temp[10].x, const[1].z___, temp[9].x___, const[1].w___; 5: MOV temp[8].xyz, temp[10].xxx_; 6: MUL temp[11].xy, temp[7].xy__, const[2].xx__; 7: ADD temp[12].xy, temp[11].xy__, const[2].yz__; 8: MUL temp[13].xy, const[0].xx__, temp[12].xy__; 9: ADD temp[14].xy, input[0].xy__, -temp[13].xy__; 10: TEX temp[15], temp[14].xy__, 2D[4]; 11: MUL temp[16], none.HHHH, temp[15]; 12: MAD temp[17].xy, const[0].xx__, temp[12].xy__, input[0].xy__; 13: TEX temp[18], temp[17].xy__, 2D[4]; 14: MAD temp[19], none.HHHH, temp[18], temp[16]; 15: MAD temp[20], temp[19], const[1].wwww, temp[8]; 16: MOV temp[0].y, none._1__; 17: MOV temp[0].x, none.0___; 18: ADD temp[21].xy, temp[11].xy__, temp[0].xy__; 19: MUL temp[22].xy, const[0].xx__, temp[21].xy__; 20: ADD temp[23].xy, input[0].xy__, -temp[22].xy__; 21: TEX temp[24], temp[23].xy__, 2D[3]; 22: MUL temp[25], none.HHHH, temp[24]; 23: MAD temp[26].xy, const[0].xx__, temp[21].xy__, input[0].xy__; 24: TEX temp[27], temp[26].xy__, 2D[3]; 25: MAD temp[28], none.HHHH, temp[27], temp[25]; 26: MAD temp[29], temp[28], const[1].wwww, temp[20]; 27: MUL temp[30].xy, const[0].xx__, temp[11].xy__; 28: ADD temp[31].xy, input[0].xy__, -temp[30].xy__; 29: TEX temp[32], temp[31].xy__, 2D[2]; 30: MUL temp[33], none.HHHH, temp[32]; 31: MAD temp[34].xy, const[0].xx__, temp[11].xy__, input[0].xy__; 32: TEX temp[35], temp[34].xy__, 2D[2]; 33: MAD temp[36], none.HHHH, temp[35], temp[33]; 34: MAD temp[37], temp[36], const[1].wwww, temp[29]; 35: ADD temp[38].xy, temp[11].xy__, none.11__; 36: MUL temp[39].xy, const[0].xx__, temp[38].xy__; 37: ADD temp[40].xy, input[0].xy__, -temp[39].xy__; 38: TEX temp[41], temp[40].xy__, 2D[1]; 39: MUL temp[42], none.HHHH, temp[41]; 40: MAD temp[43].xy, const[0].xx__, temp[38].xy__, input[0].xy__; 41: TEX temp[44], temp[43].xy__, 2D[1]; 42: MAD temp[45], none.HHHH, temp[44], temp[42]; 43: MAD temp[46], temp[45], const[1].wwww, temp[37]; 44: ADD temp[47].xy, temp[11].xy__, const[3].xy__; 45: MUL temp[48].xy, const[0].xx__, temp[47].xy__; 46: ADD temp[49].xy, input[0].xy__, -temp[48].xy__; 47: TEX temp[50], temp[49].xy__, 2D[0]; 48: MUL temp[51], none.HHHH, temp[50]; 49: MAD temp[52].xy, const[0].xx__, temp[47].xy__, input[0].xy__; 50: TEX temp[53], temp[52].xy__, 2D[0]; 51: MAD temp[54], none.HHHH, temp[53], temp[51]; 52: MAD temp[55], temp[54], const[1].wwww, temp[46]; 53: MOV output[0], temp[55]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[5].xy, input[1].xy__, 2D[5]; 1: src0.xyz = const[1], src1.xyz = temp[5] MAD temp[7].xy, src0.xx_, src1.xy_, src0.000 2: MAD temp[8].w, src0.0, src0.1, src0.0 3: src0.xyz = temp[7] MAD temp[9].x, src0.x__, src0.111, src0.y__ 4: src0.xyz = const[1], src0.w = const[1], src1.xyz = temp[9] MAD temp[10].x, src0.z__, src1.x__, src0.w__ 5: src0.xyz = temp[10] MAD temp[8].xyz, src0.xxx, src0.111, src0.000 6: src0.xyz = temp[7], src1.xyz = const[2] MAD temp[11].xy, src0.xy_, src1.xx_, src0.000 7: src0.xyz = temp[11], src1.xyz = const[2] MAD temp[12].xy, src0.xy_, src0.111, src1.yz_ 8: src0.xyz = const[0], src1.xyz = temp[12] MAD temp[13].xy, src0.xx_, src1.xy_, src0.000 9: src0.xyz = input[0], src1.xyz = temp[13] MAD temp[14].xy, src0.xy_, src0.111, -src1.xy_ 10: TEX temp[15], temp[14].xy__, 2D[4]; 11: src0.xyz = temp[15], src0.w = temp[15] MAD temp[16].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[16].w, src0.H, src0.w, src0.0 12: src0.xyz = const[0], src1.xyz = temp[12], src2.xyz = input[0] MAD temp[17].xy, src0.xx_, src1.xy_, src2.xy_ 13: TEX temp[18], temp[17].xy__, 2D[4]; 14: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[16], src1.w = temp[16] MAD temp[19].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[19].w, src0.H, src0.w, src1.w 15: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[8], src1.w = const[1], src2.w = temp[8] MAD temp[20].xyz, src0.xyz, src1.www, src1.xyz MAD temp[20].w, src0.w, src1.w, src2.w 16: MAD temp[0].y, src0._1_, src0.111, src0.000 17: MAD temp[0].x, src0.0__, src0.111, src0.000 18: src0.xyz = temp[11], src1.xyz = temp[0] MAD temp[21].xy, src0.xy_, src0.111, src1.xy_ 19: src0.xyz = const[0], src1.xyz = temp[21] MAD temp[22].xy, src0.xx_, src1.xy_, src0.000 20: src0.xyz = input[0], src1.xyz = temp[22] MAD temp[23].xy, src0.xy_, src0.111, -src1.xy_ 21: TEX temp[24], temp[23].xy__, 2D[3]; 22: src0.xyz = temp[24], src0.w = temp[24] MAD temp[25].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[25].w, src0.H, src0.w, src0.0 23: src0.xyz = const[0], src1.xyz = temp[21], src2.xyz = input[0] MAD temp[26].xy, src0.xx_, src1.xy_, src2.xy_ 24: TEX temp[27], temp[26].xy__, 2D[3]; 25: src0.xyz = temp[27], src0.w = temp[27], src1.xyz = temp[25], src1.w = temp[25] MAD temp[28].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[28].w, src0.H, src0.w, src1.w 26: src0.xyz = temp[28], src0.w = temp[28], src1.xyz = temp[20], src1.w = const[1], src2.w = temp[20] MAD temp[29].xyz, src0.xyz, src1.www, src1.xyz MAD temp[29].w, src0.w, src1.w, src2.w 27: src0.xyz = const[0], src1.xyz = temp[11] MAD temp[30].xy, src0.xx_, src1.xy_, src0.000 28: src0.xyz = input[0], src1.xyz = temp[30] MAD temp[31].xy, src0.xy_, src0.111, -src1.xy_ 29: TEX temp[32], temp[31].xy__, 2D[2]; 30: src0.xyz = temp[32], src0.w = temp[32] MAD temp[33].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[33].w, src0.H, src0.w, src0.0 31: src0.xyz = const[0], src1.xyz = temp[11], src2.xyz = input[0] MAD temp[34].xy, src0.xx_, src1.xy_, src2.xy_ 32: TEX temp[35], temp[34].xy__, 2D[2]; 33: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[33], src1.w = temp[33] MAD temp[36].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[36].w, src0.H, src0.w, src1.w 34: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[29], src1.w = const[1], src2.w = temp[29] MAD temp[37].xyz, src0.xyz, src1.www, src1.xyz MAD temp[37].w, src0.w, src1.w, src2.w 35: src0.xyz = temp[11] MAD temp[38].xy, src0.xy_, src0.111, src0.11_ 36: src0.xyz = const[0], src1.xyz = temp[38] MAD temp[39].xy, src0.xx_, src1.xy_, src0.000 37: src0.xyz = input[0], src1.xyz = temp[39] MAD temp[40].xy, src0.xy_, src0.111, -src1.xy_ 38: TEX temp[41], temp[40].xy__, 2D[1]; 39: src0.xyz = temp[41], src0.w = temp[41] MAD temp[42].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[42].w, src0.H, src0.w, src0.0 40: src0.xyz = const[0], src1.xyz = temp[38], src2.xyz = input[0] MAD temp[43].xy, src0.xx_, src1.xy_, src2.xy_ 41: TEX temp[44], temp[43].xy__, 2D[1]; 42: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[42], src1.w = temp[42] MAD temp[45].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[45].w, src0.H, src0.w, src1.w 43: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[37], src1.w = const[1], src2.w = temp[37] MAD temp[46].xyz, src0.xyz, src1.www, src1.xyz MAD temp[46].w, src0.w, src1.w, src2.w 44: src0.xyz = temp[11], src1.xyz = const[3] MAD temp[47].xy, src0.xy_, src0.111, src1.xy_ 45: src0.xyz = const[0], src1.xyz = temp[47] MAD temp[48].xy, src0.xx_, src1.xy_, src0.000 46: src0.xyz = input[0], src1.xyz = temp[48] MAD temp[49].xy, src0.xy_, src0.111, -src1.xy_ 47: TEX temp[50], temp[49].xy__, 2D[0]; 48: src0.xyz = temp[50], src0.w = temp[50] MAD temp[51].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[51].w, src0.H, src0.w, src0.0 49: src0.xyz = const[0], src1.xyz = temp[47], src2.xyz = input[0] MAD temp[52].xy, src0.xx_, src1.xy_, src2.xy_ 50: TEX temp[53], temp[52].xy__, 2D[0]; 51: src0.xyz = temp[53], src0.w = temp[53], src1.xyz = temp[51], src1.w = temp[51] MAD temp[54].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[54].w, src0.H, src0.w, src1.w 52: src0.xyz = temp[54], src0.w = temp[54], src1.xyz = temp[46], src1.w = const[1], src2.w = temp[46] MAD temp[55].xyz, src0.xyz, src1.www, src1.xyz MAD temp[55].w, src0.w, src1.w, src2.w 53: src0.xyz = temp[55], src0.w = temp[55] 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: MAD temp[0].y, src0._1_, src0.111, src0.000 MAD temp[8].w, src0.0, src0.1, src0.0 1: MAD temp[0].x, src0.0__, src0.111, src0.000 2: BEGIN_TEX; 3: TEX temp[5].xy, input[1].xy__, 2D[5] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = const[1], src1.xyz = temp[5] SEM_WAIT MAD temp[7].xy, src0.xx_, src1.xy_, src0.000 5: src0.xyz = temp[7], src1.xyz = const[2] MAD temp[11].xy, src0.xy_, src1.xx_, src0.000 MAD temp[9].w, src0.x, src0.1, src0.y 6: src0.xyz = temp[11], src0.w = temp[9], src1.xyz = const[3], src1.w = const[1], src2.xyz = const[1] MAD temp[47].xy, src0.xy_, src0.111, src1.xy_ MAD temp[10].w, src2.z, src0.w, src1.w 7: src0.xyz = const[0], src1.xyz = temp[11], src2.xyz = input[0] MAD temp[34].xy, src0.xx_, src1.xy_, src2.xy_ 8: src0.xyz = const[0], src1.xyz = temp[11] MAD temp[30].xy, src0.xx_, src1.xy_, src0.000 9: src0.xyz = const[0], src1.xyz = temp[47], src2.xyz = input[0] MAD temp[52].xy, src0.xx_, src1.xy_, src2.xy_ 10: src0.xyz = temp[11], src1.xyz = temp[0] MAD temp[21].xy, src0.xy_, src0.111, src1.xy_ 11: src0.xyz = temp[11], src1.xyz = const[2] MAD temp[12].xy, src0.xy_, src0.111, src1.yz_ 12: src0.xyz = const[0], src1.xyz = temp[47] MAD temp[48].xy, src0.xx_, src1.xy_, src0.000 13: src0.xyz = temp[10], src0.w = temp[10] MAD temp[8].xyz, src0.www, src0.111, src0.000 14: src0.xyz = input[0], src1.xyz = temp[30] MAD temp[31].xy, src0.xy_, src0.111, -src1.xy_ 15: src0.xyz = const[0], src1.xyz = temp[21], src2.xyz = input[0] MAD temp[26].xy, src0.xx_, src1.xy_, src2.xy_ 16: src0.xyz = const[0], src1.xyz = temp[12], src2.xyz = input[0] MAD temp[17].xy, src0.xx_, src1.xy_, src2.xy_ 17: src0.xyz = const[0], src1.xyz = temp[21] MAD temp[22].xy, src0.xx_, src1.xy_, src0.000 18: src0.xyz = const[0], src1.xyz = temp[12] MAD temp[13].xy, src0.xx_, src1.xy_, src0.000 19: src0.xyz = temp[11] MAD temp[38].xy, src0.xy_, src0.111, src0.11_ 20: src0.xyz = input[0], src1.xyz = temp[48] MAD temp[49].xy, src0.xy_, src0.111, -src1.xy_ 21: src0.xyz = input[0], src1.xyz = temp[22] MAD temp[23].xy, src0.xy_, src0.111, -src1.xy_ 22: src0.xyz = const[0], src1.xyz = temp[38], src2.xyz = input[0] MAD temp[43].xy, src0.xx_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[35], temp[34].xy__, 2D[2]; 25: TEX temp[53], temp[52].xy__, 2D[0]; 26: TEX temp[32], temp[31].xy__, 2D[2]; 27: TEX temp[27], temp[26].xy__, 2D[3]; 28: TEX temp[18], temp[17].xy__, 2D[4]; 29: TEX temp[50], temp[49].xy__, 2D[0]; 30: TEX temp[24], temp[23].xy__, 2D[3]; 31: TEX temp[44], temp[43].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 32: src0.xyz = input[0], src1.xyz = temp[13] MAD temp[14].xy, src0.xy_, src0.111, -src1.xy_ 33: src0.xyz = const[0], src1.xyz = temp[38] MAD temp[39].xy, src0.xx_, src1.xy_, src0.000 34: src0.xyz = temp[32], src0.w = temp[32] SEM_WAIT MAD temp[33].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[33].w, src0.H, src0.w, src0.0 35: src0.xyz = temp[50], src0.w = temp[50] MAD temp[51].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[51].w, src0.H, src0.w, src0.0 36: src0.xyz = temp[24], src0.w = temp[24] MAD temp[25].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[25].w, src0.H, src0.w, src0.0 37: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[33], src1.w = temp[33] MAD temp[36].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[36].w, src0.H, src0.w, src1.w 38: src0.xyz = temp[53], src0.w = temp[53], src1.xyz = temp[51], src1.w = temp[51] MAD temp[54].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[54].w, src0.H, src0.w, src1.w 39: src0.xyz = temp[27], src0.w = temp[27], src1.xyz = temp[25], src1.w = temp[25] MAD temp[28].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[28].w, src0.H, src0.w, src1.w 40: src0.xyz = input[0], src1.xyz = temp[39] MAD temp[40].xy, src0.xy_, src0.111, -src1.xy_ 41: BEGIN_TEX; 42: TEX temp[15], temp[14].xy__, 2D[4]; 43: TEX temp[41], temp[40].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 44: src0.xyz = temp[15], src0.w = temp[15] SEM_WAIT MAD temp[16].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[16].w, src0.H, src0.w, src0.0 45: src0.xyz = temp[41], src0.w = temp[41] MAD temp[42].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[42].w, src0.H, src0.w, src0.0 46: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[16], src1.w = temp[16] MAD temp[19].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[19].w, src0.H, src0.w, src1.w 47: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[42], src1.w = temp[42] MAD temp[45].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[45].w, src0.H, src0.w, src1.w 48: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[8], src1.w = const[1], src2.w = temp[8] MAD temp[20].xyz, src0.xyz, src1.www, src1.xyz MAD temp[20].w, src0.w, src1.w, src2.w 49: src0.xyz = temp[28], src0.w = temp[28], src1.xyz = temp[20], src1.w = const[1], src2.w = temp[20] MAD temp[29].xyz, src0.xyz, src1.www, src1.xyz MAD temp[29].w, src0.w, src1.w, src2.w 50: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[29], src1.w = const[1], src2.w = temp[29] MAD temp[37].xyz, src0.xyz, src1.www, src1.xyz MAD temp[37].w, src0.w, src1.w, src2.w 51: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[37], src1.w = const[1], src2.w = temp[37] MAD temp[46].xyz, src0.xyz, src1.www, src1.xyz MAD temp[46].w, src0.w, src1.w, src2.w 52: src0.xyz = temp[54], src0.w = temp[54], src1.xyz = temp[46], src1.w = const[1], src2.w = temp[46] MAD temp[55].xyz, src0.xyz, src1.www, src1.xyz MAD temp[55].w, src0.w, src1.w, src2.w 53: src0.xyz = temp[55], src0.w = temp[55] 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: MAD temp[0].y, src0._1_, src0.111, src0.000 MAD temp[8].w, src0.0, src0.1, src0.0 1: MAD temp[0].x, src0.0__, src0.111, src0.000 2: BEGIN_TEX; 3: TEX temp[5].xy, input[1].xy__, 2D[5] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = const[1], src1.xyz = temp[5] SEM_WAIT MAD temp[7].xy, src0.xx_, src1.xy_, src0.000 5: src0.xyz = temp[7], src1.xyz = const[2] MAD temp[11].xy, src0.xy_, src1.xx_, src0.000 MAD temp[9].w, src0.x, src0.1, src0.y 6: src0.xyz = temp[11], src0.w = temp[9], src1.xyz = const[3], src1.w = const[1], src2.xyz = const[1] MAD temp[47].xy, src0.xy_, src0.111, src1.xy_ MAD temp[10].w, src2.z, src0.w, src1.w 7: src0.xyz = const[0], src1.xyz = temp[11], src2.xyz = input[0] MAD temp[34].xy, src0.xx_, src1.xy_, src2.xy_ 8: src0.xyz = const[0], src1.xyz = temp[11] MAD temp[30].xy, src0.xx_, src1.xy_, src0.000 9: src0.xyz = const[0], src1.xyz = temp[47], src2.xyz = input[0] MAD temp[52].xy, src0.xx_, src1.xy_, src2.xy_ 10: src0.xyz = temp[11], src1.xyz = temp[0] MAD temp[21].xy, src0.xy_, src0.111, src1.xy_ 11: src0.xyz = temp[11], src1.xyz = const[2] MAD temp[12].xy, src0.xy_, src0.111, src1.yz_ 12: src0.xyz = const[0], src1.xyz = temp[47] MAD temp[48].xy, src0.xx_, src1.xy_, src0.000 13: src0.w = temp[10] MAD temp[8].xyz, src0.www, src0.111, src0.000 14: src0.xyz = input[0], src1.xyz = temp[30] MAD temp[31].xy, src0.xy_, src0.111, -src1.xy_ 15: src0.xyz = const[0], src1.xyz = temp[21], src2.xyz = input[0] MAD temp[26].xy, src0.xx_, src1.xy_, src2.xy_ 16: src0.xyz = const[0], src1.xyz = temp[12], src2.xyz = input[0] MAD temp[17].xy, src0.xx_, src1.xy_, src2.xy_ 17: src0.xyz = const[0], src1.xyz = temp[21] MAD temp[22].xy, src0.xx_, src1.xy_, src0.000 18: src0.xyz = const[0], src1.xyz = temp[12] MAD temp[13].xy, src0.xx_, src1.xy_, src0.000 19: src0.xyz = temp[11] MAD temp[38].xy, src0.xy_, src0.111, src0.11_ 20: src0.xyz = input[0], src1.xyz = temp[48] MAD temp[49].xy, src0.xy_, src0.111, -src1.xy_ 21: src0.xyz = input[0], src1.xyz = temp[22] MAD temp[23].xy, src0.xy_, src0.111, -src1.xy_ 22: src0.xyz = const[0], src1.xyz = temp[38], src2.xyz = input[0] MAD temp[43].xy, src0.xx_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[35], temp[34].xy__, 2D[2]; 25: TEX temp[53], temp[52].xy__, 2D[0]; 26: TEX temp[32], temp[31].xy__, 2D[2]; 27: TEX temp[27], temp[26].xy__, 2D[3]; 28: TEX temp[18], temp[17].xy__, 2D[4]; 29: TEX temp[50], temp[49].xy__, 2D[0]; 30: TEX temp[24], temp[23].xy__, 2D[3]; 31: TEX temp[44], temp[43].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 32: src0.xyz = input[0], src1.xyz = temp[13] MAD temp[14].xy, src0.xy_, src0.111, -src1.xy_ 33: src0.xyz = const[0], src1.xyz = temp[38] MAD temp[39].xy, src0.xx_, src1.xy_, src0.000 34: src0.xyz = temp[32], src0.w = temp[32] SEM_WAIT MAD temp[33].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[33].w, src0.H, src0.w, src0.0 35: src0.xyz = temp[50], src0.w = temp[50] MAD temp[51].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[51].w, src0.H, src0.w, src0.0 36: src0.xyz = temp[24], src0.w = temp[24] MAD temp[25].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[25].w, src0.H, src0.w, src0.0 37: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[33], src1.w = temp[33] MAD temp[36].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[36].w, src0.H, src0.w, src1.w 38: src0.xyz = temp[53], src0.w = temp[53], src1.xyz = temp[51], src1.w = temp[51] MAD temp[54].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[54].w, src0.H, src0.w, src1.w 39: src0.xyz = temp[27], src0.w = temp[27], src1.xyz = temp[25], src1.w = temp[25] MAD temp[28].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[28].w, src0.H, src0.w, src1.w 40: src0.xyz = input[0], src1.xyz = temp[39] MAD temp[40].xy, src0.xy_, src0.111, -src1.xy_ 41: BEGIN_TEX; 42: TEX temp[15], temp[14].xy__, 2D[4]; 43: TEX temp[41], temp[40].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 44: src0.xyz = temp[15], src0.w = temp[15] SEM_WAIT MAD temp[16].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[16].w, src0.H, src0.w, src0.0 45: src0.xyz = temp[41], src0.w = temp[41] MAD temp[42].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[42].w, src0.H, src0.w, src0.0 46: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[16], src1.w = temp[16] MAD temp[19].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[19].w, src0.H, src0.w, src1.w 47: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[42], src1.w = temp[42] MAD temp[45].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[45].w, src0.H, src0.w, src1.w 48: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[8], src1.w = const[1], src2.w = temp[8] MAD temp[20].xyz, src0.xyz, src1.www, src1.xyz MAD temp[20].w, src0.w, src1.w, src2.w 49: src0.xyz = temp[28], src0.w = temp[28], src1.xyz = temp[20], src1.w = const[1], src2.w = temp[20] MAD temp[29].xyz, src0.xyz, src1.www, src1.xyz MAD temp[29].w, src0.w, src1.w, src2.w 50: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[29], src1.w = const[1], src2.w = temp[29] MAD temp[37].xyz, src0.xyz, src1.www, src1.xyz MAD temp[37].w, src0.w, src1.w, src2.w 51: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[37], src1.w = const[1], src2.w = temp[37] MAD temp[46].xyz, src0.xyz, src1.www, src1.xyz MAD temp[46].w, src0.w, src1.w, src2.w 52: src0.xyz = temp[54], src0.w = temp[54], src1.xyz = temp[46], src1.w = const[1], src2.w = temp[46] MAD temp[55].xyz, src0.xyz, src1.www, src1.xyz MAD temp[55].w, src0.w, src1.w, src2.w 53: src0.xyz = temp[55], src0.w = temp[55] 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: MAD temp[2].y, src0._1_, src0.11_, src0.00_ MAD temp[0].w, src0.0, src0.1, src0.0 1: MAD temp[2].x, src0.0__, src0.11_, src0.00_ 2: BEGIN_TEX; 3: TEX temp[1].xy, input[1].xy__, 2D[5] SEM_WAIT SEM_ACQUIRE; 4: src0.xyz = const[1], src1.xyz = temp[1] SEM_WAIT MAD temp[1].xy, src0.xx_, src1.xy_, src0.00_ 5: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[1].xy, src0.xy_, src1.xx_, src0.00_ MAD temp[1].w, src0.x, src0.1, src0.y 6: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[3], src1.w = const[1], src2.xyz = const[1] MAD temp[3].xy, src0.xy_, src0.11_, src1.xy_ MAD temp[1].w, src2.z, src0.w, src1.w 7: src0.xyz = const[0], src1.xyz = temp[1], src2.xyz = input[0] MAD temp[4].xy, src0.xx_, src1.xy_, src2.xy_ 8: src0.xyz = const[0], src1.xyz = temp[1] MAD temp[5].xy, src0.xx_, src1.xy_, src0.00_ 9: src0.xyz = const[0], src1.xyz = temp[3], src2.xyz = input[0] MAD temp[6].xy, src0.xx_, src1.xy_, src2.xy_ 10: src0.xyz = temp[1], src1.xyz = temp[2] MAD temp[2].xy, src0.xy_, src0.11_, src1.xy_ 11: src0.xyz = temp[1], src1.xyz = const[2] MAD temp[7].xy, src0.xy_, src0.11_, src1.yz_ 12: src0.xyz = const[0], src1.xyz = temp[3] MAD temp[3].xy, src0.xx_, src1.xy_, src0.00_ 13: src0.w = temp[1] MAD temp[8].xyz, src0.www, src0.111, src0.000 14: src0.xyz = input[0], src1.xyz = temp[5] MAD temp[5].xy, src0.xy_, src0.11_, -src1.xy_ 15: src0.xyz = const[0], src1.xyz = temp[2], src2.xyz = input[0] MAD temp[9].xy, src0.xx_, src1.xy_, src2.xy_ 16: src0.xyz = const[0], src1.xyz = temp[7], src2.xyz = input[0] MAD temp[10].xy, src0.xx_, src1.xy_, src2.xy_ 17: src0.xyz = const[0], src1.xyz = temp[2] MAD temp[2].xy, src0.xx_, src1.xy_, src0.00_ 18: src0.xyz = const[0], src1.xyz = temp[7] MAD temp[7].xy, src0.xx_, src1.xy_, src0.00_ 19: src0.xyz = temp[1] MAD temp[1].xy, src0.xy_, src0.11_, src0.11_ 20: src0.xyz = input[0], src1.xyz = temp[3] MAD temp[3].xy, src0.xy_, src0.11_, -src1.xy_ 21: src0.xyz = input[0], src1.xyz = temp[2] MAD temp[2].xy, src0.xy_, src0.11_, -src1.xy_ 22: src0.xyz = const[0], src1.xyz = temp[1], src2.xyz = input[0] MAD temp[11].xy, src0.xx_, src1.xy_, src2.xy_ 23: BEGIN_TEX; 24: TEX temp[4], temp[4].xy__, 2D[2]; 25: TEX temp[6], temp[6].xy__, 2D[0]; 26: TEX temp[5], temp[5].xy__, 2D[2]; 27: TEX temp[9], temp[9].xy__, 2D[3]; 28: TEX temp[10], temp[10].xy__, 2D[4]; 29: TEX temp[3], temp[3].xy__, 2D[0]; 30: TEX temp[2], temp[2].xy__, 2D[3]; 31: TEX temp[11], temp[11].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 32: src0.xyz = input[0], src1.xyz = temp[7] MAD temp[7].xy, src0.xy_, src0.11_, -src1.xy_ 33: src0.xyz = const[0], src1.xyz = temp[1] MAD temp[1].xy, src0.xx_, src1.xy_, src0.00_ 34: src0.xyz = temp[5], src0.w = temp[5] SEM_WAIT MAD temp[5].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[1].w, src0.H, src0.w, src0.0 35: src0.xyz = temp[3], src0.w = temp[3] MAD temp[3].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[3].w, src0.H, src0.w, src0.0 36: src0.xyz = temp[2], src0.w = temp[2] MAD temp[2].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[2].w, src0.H, src0.w, src0.0 37: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[5], src1.w = temp[1] MAD temp[4].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[1].w, src0.H, src0.w, src1.w 38: src0.xyz = temp[6], src0.w = temp[6], src1.xyz = temp[3], src1.w = temp[3] MAD temp[3].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[3].w, src0.H, src0.w, src1.w 39: src0.xyz = temp[9], src0.w = temp[9], src1.xyz = temp[2], src1.w = temp[2] MAD temp[2].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[2].w, src0.H, src0.w, src1.w 40: src0.xyz = input[0], src1.xyz = temp[1] MAD temp[0].xy, src0.xy_, src0.11_, -src1.xy_ 41: BEGIN_TEX; 42: TEX temp[5], temp[7].xy__, 2D[4]; 43: TEX temp[6], temp[0].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 44: src0.xyz = temp[5], src0.w = temp[5] SEM_WAIT MAD temp[0].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[4].w, src0.H, src0.w, src0.0 45: src0.xyz = temp[6], src0.w = temp[6] MAD temp[1].xyz, src0.HHH, src0.xyz, src0.000 MAD temp[5].w, src0.H, src0.w, src0.0 46: src0.xyz = temp[10], src0.w = temp[10], src1.xyz = temp[0], src1.w = temp[4] MAD temp[0].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[4].w, src0.H, src0.w, src1.w 47: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[1], src1.w = temp[5] MAD temp[1].xyz, src0.HHH, src0.xyz, src1.xyz MAD temp[5].w, src0.H, src0.w, src1.w 48: src0.xyz = temp[0], src0.w = temp[4], src1.xyz = temp[8], src1.w = const[1], src2.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.www, src1.xyz MAD temp[0].w, src0.w, src1.w, src2.w 49: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = temp[0], src1.w = const[1], src2.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.www, src1.xyz MAD temp[0].w, src0.w, src1.w, src2.w 50: src0.xyz = temp[4], src0.w = temp[1], src1.xyz = temp[0], src1.w = const[1], src2.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.www, src1.xyz MAD temp[0].w, src0.w, src1.w, src2.w 51: src0.xyz = temp[1], src0.w = temp[5], src1.xyz = temp[0], src1.w = const[1], src2.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.www, src1.xyz MAD temp[0].w, src0.w, src1.w, src2.w 52: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = temp[0], src1.w = const[1], src2.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.www, src1.xyz MAD temp[0].w, src0.w, src1.w, src2.w 53: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=5************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00000040) 0: xyz: t0 t0 t0 bias-> t2.y (01080000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 1.0 1.0 0.0 op: 00050a95 w: 0.0 1.0 0.0 op: 00040890 1: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 2, tex_offset: 0, alu_end: 18, tex_end: 0 (code_addr: 00000482) TEX: TEX t1, t1, texture[5] (0000a841) 2: xyz: c1 t1 t0 bias-> t1.xy (01840061) w: t0 t0 t0 bias-> (00000000) xyz: c1.xxx t1.xyz 0.0 op: 00050201 w: c1.x c1.x c1.x op: 00000000 3: xyz: t1 c2 t0 bias-> t1.xy (01840881) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c2.xxx 0.0 op: 00050280 w: t1.x 1.0 t1.y op: 00004880 4: xyz: t1 c3 c1 bias-> t3.xy (018e18c1) w: t1 c1 t0 bias-> t1.w (00840841) xyz: t1.xyz 1.0 c3.xyz op: 00010a80 w: c1.z t1.w c1.w op: 00028488 5: xyz: c0 t1 t0 bias-> t4.xy (01900060) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t1.xyz t0.xyz op: 00020201 w: c0.x c0.x c0.x op: 00000000 6: xyz: c0 t1 t0 bias-> t5.xy (01940060) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t1.xyz 0.0 op: 00050201 w: c0.x c0.x c0.x op: 00000000 7: xyz: c0 t3 t0 bias-> t6.xy (019800e0) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t3.xyz t0.xyz op: 00020201 w: c0.x c0.x c0.x op: 00000000 8: xyz: t1 t2 t0 bias-> t2.xy (01880081) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 t2.xyz op: 00010a80 w: t1.x t1.x t1.x op: 00000000 9: xyz: t1 c2 t0 bias-> t7.xy (019c0881) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c2.yzx op: 00060a80 w: t1.x t1.x t1.x op: 00000000 10: xyz: c0 t3 t0 bias-> t3.xy (018c00e0) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t3.xyz 0.0 op: 00050201 w: c0.x c0.x c0.x op: 00000000 11: xyz: t0 t0 t0 bias-> t8.xyz (03a00000) w: t1 t0 t0 bias-> (00000001) xyz: t1.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 12: xyz: t0 t5 t0 bias-> t5.xy (01940140) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 -t5.xyz op: 00090a80 w: t0.x t0.x t0.x op: 00000000 13: xyz: c0 t2 t0 bias-> t9.xy (01a400a0) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t2.xyz t0.xyz op: 00020201 w: c0.x c0.x c0.x op: 00000000 14: xyz: c0 t7 t0 bias-> t10.xy (01a801e0) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t7.xyz t0.xyz op: 00020201 w: c0.x c0.x c0.x op: 00000000 15: xyz: c0 t2 t0 bias-> t2.xy (018800a0) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t2.xyz 0.0 op: 00050201 w: c0.x c0.x c0.x op: 00000000 16: xyz: c0 t7 t0 bias-> t7.xy (019c01e0) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t7.xyz 0.0 op: 00050201 w: c0.x c0.x c0.x op: 00000000 17: xyz: t1 t0 t0 bias-> t1.xy (01840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 1.0 op: 00054a80 w: t1.x t1.x t1.x op: 00000000 18: xyz: t0 t3 t0 bias-> t3.xy (018c00c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 -t3.xyz op: 00090a80 w: t0.x t0.x t0.x op: 00000000 19: xyz: t0 t2 t0 bias-> t2.xy (01880080) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 -t2.xyz op: 00090a80 w: t0.x t0.x t0.x op: 00000000 20: xyz: c0 t1 t0 bias-> t11.xy (01ac0060) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t1.xyz t0.xyz op: 00020201 w: c0.x c0.x c0.x op: 00000000 NODE 2: alu_offset: 21, tex_offset: 1, alu_end: 8, tex_end: 7 (code_addr: 000e1215) TEX: TEX t4, t4, texture[2] (00009104) TEX t6, t6, texture[0] (00008186) TEX t5, t5, texture[2] (00009145) TEX t9, t9, texture[3] (00009a49) TEX t10, t10, texture[4] (0000a28a) TEX t3, t3, texture[0] (000080c3) TEX t2, t2, texture[3] (00009882) TEX t11, t11, texture[1] (00008acb) 21: xyz: t0 t7 t0 bias-> t7.xy (019c01c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 -t7.xyz op: 00090a80 w: t0.x t0.x t0.x op: 00000000 22: xyz: c0 t1 t0 bias-> t1.xy (01840060) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx t1.xyz 0.0 op: 00050201 w: c0.x c0.x c0.x op: 00000000 23: xyz: t5 t0 t0 bias-> t5.xyz (03940005) w: t5 t0 t0 bias-> t1.w (00840005) xyz: 0.5 t5.xyz 0.0 op: 00050016 w: 0.5 t5.w 0.0 op: 00040492 24: xyz: t3 t0 t0 bias-> t3.xyz (038c0003) w: t3 t0 t0 bias-> t3.w (008c0003) xyz: 0.5 t3.xyz 0.0 op: 00050016 w: 0.5 t3.w 0.0 op: 00040492 25: xyz: t2 t0 t0 bias-> t2.xyz (03880002) w: t2 t0 t0 bias-> t2.w (00880002) xyz: 0.5 t2.xyz 0.0 op: 00050016 w: 0.5 t2.w 0.0 op: 00040492 26: xyz: t4 t5 t0 bias-> t4.xyz (03900144) w: t4 t1 t0 bias-> t1.w (00840044) xyz: 0.5 t4.xyz t5.xyz op: 00010016 w: 0.5 t4.w t1.w op: 00028492 27: xyz: t6 t3 t0 bias-> t3.xyz (038c00c6) w: t6 t3 t0 bias-> t3.w (008c00c6) xyz: 0.5 t6.xyz t3.xyz op: 00010016 w: 0.5 t6.w t3.w op: 00028492 28: xyz: t9 t2 t0 bias-> t2.xyz (03880089) w: t9 t2 t0 bias-> t2.w (00880089) xyz: 0.5 t9.xyz t2.xyz op: 00010016 w: 0.5 t9.w t2.w op: 00028492 29: xyz: t0 t1 t0 bias-> t0.xy (01800040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 -t1.xyz op: 00090a80 w: t0.x t0.x t0.x op: 00000000 NODE 3: alu_offset: 30, tex_offset: 9, alu_end: 9, tex_end: 1 (code_addr: 0042925e) TEX: TEX t5, t7, texture[4] (0000a147) TEX t6, t0, texture[1] (00008980) 30: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: t5 t0 t0 bias-> t4.w (00900005) xyz: 0.5 t5.xyz 0.0 op: 00050016 w: 0.5 t5.w 0.0 op: 00040492 31: xyz: t6 t0 t0 bias-> t1.xyz (03840006) w: t6 t0 t0 bias-> t5.w (00940006) xyz: 0.5 t6.xyz 0.0 op: 00050016 w: 0.5 t6.w 0.0 op: 00040492 32: xyz: t10 t0 t0 bias-> t0.xyz (0380000a) w: t10 t4 t0 bias-> t4.w (0090010a) xyz: 0.5 t10.xyz t0.xyz op: 00010016 w: 0.5 t10.w t4.w op: 00028492 33: xyz: t11 t1 t0 bias-> t1.xyz (0384004b) w: t11 t5 t0 bias-> t5.w (0094014b) xyz: 0.5 t11.xyz t1.xyz op: 00010016 w: 0.5 t11.w t5.w op: 00028492 34: xyz: t0 t8 t0 bias-> t0.xyz (03800200) w: t4 c1 t0 bias-> t0.w (00800844) xyz: t0.xyz c1.www t8.xyz op: 00010680 w: t4.w c1.w t0.w op: 0002c509 35: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t2 c1 t0 bias-> t0.w (00800842) xyz: t2.xyz c1.www t0.xyz op: 00010680 w: t2.w c1.w t0.w op: 0002c509 36: xyz: t4 t0 t0 bias-> t0.xyz (03800004) w: t1 c1 t0 bias-> t0.w (00800841) xyz: t4.xyz c1.www t0.xyz op: 00010680 w: t1.w c1.w t0.w op: 0002c509 37: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t5 c1 t0 bias-> t0.w (00800845) xyz: t1.xyz c1.www t0.xyz op: 00010680 w: t5.w c1.w t0.w op: 0002c509 38: xyz: t3 t0 t0 bias-> t0.xyz (03800003) w: t3 c1 t0 bias-> t0.w (00800843) xyz: t3.xyz c1.www t0.xyz op: 00010680 w: t3.w c1.w t0.w op: 0002c509 39: 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 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 GLSL IR for linked fragment program 0: ( (declare (out ) vec4 gl_FragColor) (declare (in ) vec4 gl_Color) (function main (signature void (parameters ) ( (assign (xyzw) (var_ref gl_FragColor) (var_ref gl_Color) ) (assign (xyzw) (var_ref gl_FragColor@45) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL CONST[0..3] DCL TEMP[0] 0: MUL TEMP[0], IN[0].xxxx, CONST[0] 1: MAD TEMP[0], IN[0].yyyy, CONST[1], TEMP[0] 2: MAD TEMP[0], IN[0].zzzz, CONST[2], TEMP[0] 3: MAD OUT[0], IN[0].wwww, CONST[3], TEMP[0] 4: MOV OUT[1], IN[1] 5: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Final vertex program code: 0: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 1: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src1: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 2: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src1: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 3: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src1: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 4: 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 5: 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 6: op: 0x00f04203 dst: 2o 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 fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=6************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR DCL SAMP[0] 0: TEX OUT[0], IN[0], SAMP[0], 2D 1: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after '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=7************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial 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 GLSL IR for linked fragment program 0: ( (declare (out ) vec4 gl_FragColor) (declare (in ) vec4 gl_Color) (function main (signature void (parameters ) ( (assign (xyzw) (var_ref gl_FragColor) (var_ref gl_Color) ) (assign (xyzw) (var_ref gl_FragColor@46) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL CONST[0..3] DCL TEMP[0] 0: MUL TEMP[0], IN[0].xxxx, CONST[0] 1: MAD TEMP[0], IN[0].yyyy, CONST[1], TEMP[0] 2: MAD TEMP[0], IN[0].zzzz, CONST[2], TEMP[0] 3: MAD OUT[0], IN[0].wwww, CONST[3], TEMP[0] 4: MOV OUT[1], IN[1] 5: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Final vertex program code: 0: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 1: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src1: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 2: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src1: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 3: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src1: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 4: 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 5: 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 6: op: 0x00f04203 dst: 2o 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 fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=8************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 GLSL source for fragment shader 7: void main(){ } GLSL IR for shader 7: ( (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function main (signature void (parameters ) ( )) ) ) GLSL source for vertex shader 8: uniform vec2 a, c; attribute vec2 f; uniform mat4 b; uniform float d, e; void main(){ (gl_Position = (b * vec4(f, 0.0, 1.0))); (gl_Position.xy += ((d * c) * gl_Position[3])); (gl_Position[2] *= e); } GLSL IR for shader 8: ( (declare (uniform ) float e) (declare (uniform ) float d) (declare (uniform ) mat4 b) (declare (in ) vec2 f) (declare (uniform ) vec2 c) (declare (uniform ) vec2 a) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor) (assign (zw) (var_ref vec_ctor) (constant vec2 (0.000000 1.000000)) ) (assign (xy) (var_ref vec_ctor) (var_ref f) ) (declare (temporary ) vec4 assignment_tmp) (assign (xyzw) (var_ref assignment_tmp) (expression vec4 * (var_ref b) (var_ref vec_ctor) ) ) (assign (w) (var_ref gl_Position) (swiz w (var_ref assignment_tmp) )) (assign (xy) (var_ref gl_Position) (expression vec2 + (swiz xy (var_ref assignment_tmp) )(expression vec2 * (expression vec2 * (var_ref d) (var_ref c) ) (swiz w (var_ref assignment_tmp) )) ) ) (assign (z) (var_ref gl_Position) (expression float * (swiz z (var_ref assignment_tmp) )(var_ref e) ) ) )) ) ) GLSL IR for linked vertex program 9: ( (declare (uniform ) float e) (declare (uniform ) float d) (declare (uniform ) mat4 b) (declare (in ) vec2 f) (declare (uniform ) vec2 c) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare (temporary ) vec4 flattening_tmp) (assign (xyzw) (var_ref flattening_tmp) (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref b) (constant int (0)) ) (swiz x (var_ref f) )) (expression vec4 * (array_ref (var_ref b) (constant int (1)) ) (swiz y (var_ref f) )) ) (array_ref (var_ref b) (constant int (3)) ) ) ) (assign (w) (var_ref gl_Position) (swiz w (var_ref flattening_tmp) )) (assign (xy) (var_ref gl_Position) (expression vec2 + (swiz xy (var_ref flattening_tmp) )(expression vec2 * (expression vec2 * (var_ref d) (var_ref c) ) (swiz w (var_ref flattening_tmp) )) ) ) (assign (z) (var_ref gl_Position) (expression float * (swiz z (var_ref flattening_tmp) )(var_ref e) ) ) (assign (xyzw) (var_ref gl_Position@47) (var_ref gl_Position) ) )) ) ) GLSL IR for linked fragment program 9: ( (function main (signature void (parameters ) ( )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL OUT[0], POSITION DCL CONST[0..6] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL 0: MUL TEMP[0], CONST[2], IN[0].xxxx 1: MAD TEMP[0], CONST[3], IN[0].yyyy, TEMP[0] 2: ADD TEMP[0], TEMP[0], CONST[5] 3: MOV TEMP[1].w, TEMP[0].wwww 4: MUL TEMP[2].xy, CONST[1].xxxx, CONST[6].xyyy 5: MAD TEMP[1].xy, TEMP[2].xyyy, TEMP[0].wwww, TEMP[0].xyyy 6: MUL TEMP[0].x, TEMP[0].zzzz, CONST[0].xxxx 7: MOV TEMP[1].z, TEMP[0].xxxx 8: MOV OUT[0], TEMP[1] 9: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].wwww; 4: MUL temp[2].xy, const[1].xxxx, const[6].xyyy; 5: MAD temp[1].xy, temp[2].xyyy, temp[0].wwww, temp[0].xyyy; 6: MUL temp[0].x, temp[0].zzzz, const[0].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV temp[3], temp[1]; 9: MOV output[0], temp[3]; 10: MOV output[1], temp[3]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].wwww; 4: MUL temp[2].xy, const[1].xxxx, const[6].xyyy; 5: MAD temp[1].xy, temp[2].xyyy, temp[0].wwww, temp[0].xyyy; 6: MUL temp[0].x, temp[0].zzzz, const[0].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV temp[3], temp[1]; 9: MOV output[0], temp[3]; 10: MOV output[1], temp[3]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].wwww; 4: MUL temp[2].xy, const[1].xxxx, const[6].xyyy; 5: MAD temp[1].xy, temp[2].xyyy, temp[0].wwww, temp[0].xyyy; 6: MUL temp[0].x, temp[0].zzzz, const[0].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV temp[3], temp[1]; 9: MOV output[0], temp[3]; 10: MOV output[1], temp[3]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].wwww; 4: MUL temp[2].xy, const[1].xxxx, const[6].xyyy; 5: MAD temp[1].xy, temp[2].xyyy, temp[0].wwww, temp[0].xyyy; 6: MUL temp[0].x, temp[0].zzzz, const[0].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV temp[3], temp[1]; 9: MOV output[0], temp[3]; 10: MOV output[1], temp[3]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].wwww; 4: MUL temp[2].xy, const[1].xxxx, const[6].xyyy; 5: MAD temp[1].xy, temp[2].xyyy, temp[0].wwww, temp[0].xyyy; 6: MUL temp[0].x, temp[0].zzzz, const[0].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV temp[3], temp[1]; 9: MOV output[0], temp[3]; 10: MOV output[1], temp[3]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].___w; 4: MUL temp[2].xy, const[1].xx__, const[6].xy__; 5: MAD temp[1].xy, temp[2].xy__, temp[0].ww__, temp[0].xy__; 6: MUL temp[0].x, temp[0].z___, const[0].x___; 7: MOV temp[1].z, temp[0].__x_; 8: MOV temp[3], temp[1]; 9: MOV output[0], temp[3]; 10: MOV output[1], temp[3]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].___w; 4: MUL temp[2].xy, const[1].xx__, const[6].xy__; 5: MAD temp[1].xy, temp[2].xy__, temp[0].ww__, temp[0].xy__; 6: MUL temp[0].x, temp[0].z___, const[0].x___; 7: MOV temp[1].z, temp[0].__x_; 8: MOV output[0], temp[1]; 9: MOV output[1], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].___w; 4: MOV temp[3], const[6].xy__; 5: MUL temp[2].xy, const[1].xx__, temp[3]; 6: MAD temp[1].xy, temp[2].xy__, temp[0].ww__, temp[0].xy__; 7: MUL temp[0].x, temp[0].z___, const[0].x___; 8: MOV temp[1].z, temp[0].__x_; 9: MOV output[0], temp[1]; 10: MOV output[1], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].___w; 4: MOV temp[2], const[6].xy__; 5: MUL temp[2].xy, const[1].xx__, temp[2]; 6: MAD temp[1].xy, temp[2].xy__, temp[0].ww__, temp[0].xy__; 7: MUL temp[0].x, temp[0].z___, const[0].x___; 8: MOV temp[1].z, temp[0].__x_; 9: MOV output[0], temp[1]; 10: MOV output[1], temp[1]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0], const[2], input[0].xxxx; 1: MAD temp[0], const[3], input[0].yyyy, temp[0]; 2: ADD temp[0], temp[0], const[5]; 3: MOV temp[1].w, temp[0].___w; 4: MOV temp[2], const[6].xy__; 5: MUL temp[2].xy, const[1].xx__, temp[2]; 6: MAD temp[1].xy, temp[2].xy__, temp[0].ww__, temp[0].xy__; 7: MUL temp[0].x, temp[0].z___, const[0].x___; 8: MOV temp[1].z, temp[0].__x_; 9: MOV output[0], temp[1]; 10: MOV output[1], temp[1]; Final vertex program code: 0: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 2: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src2: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 3: op: 0x00802003 dst: 1t op: VE_ADD 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 4: op: 0x00f04003 dst: 2t op: VE_ADD src0: 0x01f900c2 reg: 6c swiz: X/ Y/ U/ U src1: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 5: op: 0x00304002 dst: 2t op: VE_MULTIPLY src0: 0x01f80022 reg: 1c swiz: X/ X/ U/ U src1: 0x00d10040 reg: 2t swiz: X/ Y/ Z/ W src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 6: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f90040 reg: 2t swiz: X/ Y/ U/ U src1: 0x01fb6000 reg: 0t swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 7: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff4000 reg: 0t swiz: Z/ U/ U/ U src1: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 8: op: 0x00402003 dst: 1t op: VE_ADD src0: 0x01c7e000 reg: 0t swiz: U/ U/ X/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t 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: 0x00f02203 dst: 1o 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 fragment program FRAG 0: END Fragment Program: before compilation # Radeon Compiler Program Fragment Program: after 'rewrite depth out' # Radeon Compiler Program Fragment Program: after 'transform KILP' # Radeon Compiler Program Fragment Program: after 'transform loops' # Radeon Compiler Program Fragment Program: after 'emulate branches' # Radeon Compiler Program Fragment Program: after 'transform TEX' # Radeon Compiler Program Fragment Program: after 'native rewrite' # Radeon Compiler Program Fragment Program: after 'deadcode' # Radeon Compiler Program Fragment Program: after 'emulate loops' # Radeon Compiler Program Fragment Program: after 'register rename' # Radeon Compiler Program Fragment Program: after 'dataflow optimize' # Radeon Compiler Program Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program Fragment Program: after 'dead constants' # Radeon Compiler Program Fragment Program: after 'pair translate' # Radeon Compiler Program Fragment Program: after 'pair scheduling' # Radeon Compiler Program Fragment Program: after 'dead sources' # Radeon Compiler Program Fragment Program: after 'register allocation' # Radeon Compiler Program pc=9************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00000000) 0: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.x t0.x t0.x op: 00000000 GLSL source for fragment shader 10: vec4 n(in vec4 k, in float l){ return k; } uniform vec2 b; uniform sampler2D c, h; varying vec2 d; uniform float i, j; void main(){ vec4 k = texture2D(h, d); (k[3] *= j); if ((k[3] == 0.0)) discard; (gl_FragColor = n(k, i)); } GLSL IR for shader 10: ( (declare (uniform ) float j) (declare (uniform ) float i) (declare (in ) vec2 d) (declare (uniform ) sampler2D h) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 b) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function n (signature vec4 (parameters (declare (in ) vec4 k) (declare (in ) float l) ) ( (return (var_ref k) ) )) ) (function main (signature void (parameters ) ( (declare () vec4 k) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref h) (var_ref d) )) (assign (xyz) (var_ref k) (swiz xyz (var_ref texture2D_retval) )) (assign (w) (var_ref k) (expression float * (swiz w (var_ref texture2D_retval) )(var_ref j) ) ) (if (expression bool all_equal (swiz w (var_ref k) )(constant float (0.000000)) ) ( (discard ) ) ()) (declare (temporary ) vec4 n_retval) (call n (var_ref n_retval) ((var_ref k) (var_ref i) )) (assign (xyzw) (var_ref gl_FragColor) (var_ref n_retval) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) ) GLSL source for vertex shader 11: uniform vec2 b; uniform sampler2D c; vec2 r(in float m, in float n){ (m = ((m + 0.5) / b[0])); return vec2(fract(m), ((((26.0 * floor(m)) + n) + 0.5) / b[1])); } varying vec2 d; attribute vec3 k; attribute vec2 l; uniform mat4 e; uniform float f, g; void main(){ (gl_Position = (e * vec4(k, 1.0))); (gl_Position[2] *= f); (gl_Position[2] += (g * gl_Position[3])); (d = (l / 255.0)); } GLSL IR for shader 11: ( (declare (uniform ) float g) (declare (uniform ) float f) (declare (uniform ) mat4 e) (declare (in ) vec2 l) (declare (in ) vec3 k) (declare (out ) vec2 d) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function r (signature vec2 (parameters (declare (in ) float m) (declare (in ) float n) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref m) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref m) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref m) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref n) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor) (assign (w) (var_ref vec_ctor) (constant float (1.000000)) ) (assign (xyz) (var_ref vec_ctor) (var_ref k) ) (declare (temporary ) vec4 assignment_tmp) (assign (xyzw) (var_ref assignment_tmp) (expression vec4 * (var_ref e) (var_ref vec_ctor) ) ) (assign (xyw) (var_ref gl_Position) (swiz xyw (var_ref assignment_tmp) )) (assign (z) (var_ref gl_Position) (expression float * (swiz z (var_ref assignment_tmp) )(var_ref f) ) ) (assign (z) (var_ref gl_Position) (expression float + (swiz z (var_ref gl_Position) )(expression float * (var_ref g) (swiz w (var_ref assignment_tmp) )) ) ) (assign (xy) (var_ref d) (expression vec2 / (var_ref l) (constant float (255.000000)) ) ) )) ) ) GLSL IR for linked vertex program 12: ( (declare (uniform ) float g) (declare (uniform ) float f) (declare (uniform ) mat4 e) (declare (in ) vec2 l) (declare (in ) vec3 k) (declare (out ) vec2 d) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare (temporary ) vec4 flattening_tmp) (assign (xyzw) (var_ref flattening_tmp) (expression vec4 + (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref e) (constant int (0)) ) (swiz x (var_ref k) )) (expression vec4 * (array_ref (var_ref e) (constant int (1)) ) (swiz y (var_ref k) )) ) (expression vec4 * (array_ref (var_ref e) (constant int (2)) ) (swiz z (var_ref k) )) ) (array_ref (var_ref e) (constant int (3)) ) ) ) (assign (xyw) (var_ref gl_Position) (swiz xyw (var_ref flattening_tmp) )) (assign (z) (var_ref gl_Position) (expression float * (swiz z (var_ref flattening_tmp) )(var_ref f) ) ) (assign (z) (var_ref gl_Position) (expression float + (swiz z (var_ref gl_Position) )(expression float * (var_ref g) (swiz w (var_ref flattening_tmp) )) ) ) (assign (xy) (var_ref d) (expression vec2 * (var_ref l) (constant float (0.003922)) ) ) (assign (xy) (var_ref d@48) (var_ref d) ) (assign (xyzw) (var_ref gl_Position@49) (var_ref gl_Position) ) )) ) ) GLSL IR for linked fragment program 12: ( (declare (uniform ) float j) (declare (in ) vec2 d) (declare (uniform ) sampler2D h) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare () vec4 k) (declare (temporary ) vec4 texture2D_retval) (assign (xyzw) (var_ref texture2D_retval) (tex vec4 (var_ref h) (var_ref d) 0 1 () )) (assign (xyz) (var_ref k) (swiz xyz (var_ref texture2D_retval) )) (assign (w) (var_ref k) (expression float * (swiz w (var_ref texture2D_retval) )(var_ref j) ) ) (declare (temporary ) bool discard_cond_temp) (assign (x) (var_ref discard_cond_temp) (constant bool (0)) ) (assign (expression bool all_equal (swiz w (var_ref k) )(constant float (0.000000)) ) (x) (var_ref discard_cond_temp) (constant bool (1)) ) (discard (var_ref discard_cond_temp) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref k) ) (assign (xyzw) (var_ref gl_FragColor@50) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[12] DCL CONST[0..5] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL IMM FLT32 { 0.0039, 0.0000, 0.0000, 0.0000} 0: MUL TEMP[0], CONST[2], IN[1].xxxx 1: MAD TEMP[0], CONST[3], IN[1].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[4], IN[1].zzzz, TEMP[0] 3: ADD TEMP[0], TEMP[0], CONST[5] 4: MOV TEMP[1].xyw, TEMP[0].xyxw 5: MUL TEMP[2].x, TEMP[0].zzzz, CONST[1].xxxx 6: MAD TEMP[0].x, CONST[0].xxxx, TEMP[0].wwww, TEMP[2].xxxx 7: MOV TEMP[1].z, TEMP[0].xxxx 8: MUL TEMP[0].xy, IN[0].xyyy, IMM[0].xxxx 9: MOV OUT[1].xy, TEMP[0].xyxx 10: MOV OUT[0], TEMP[1] 11: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xyxw; 5: MUL temp[2].x, temp[0].zzzz, const[1].xxxx; 6: MAD temp[0].x, const[0].xxxx, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MUL temp[0].xy, input[0].xyyy, const[6].xxxx; 9: MOV output[1].xy, temp[0].xyxx; 10: MOV temp[3], temp[1]; 11: MOV output[0], temp[3]; 12: MOV output[2], temp[3]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xyxw; 5: MUL temp[2].x, temp[0].zzzz, const[1].xxxx; 6: MAD temp[0].x, const[0].xxxx, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MUL temp[0].xy, input[0].xyyy, const[6].xxxx; 9: MOV output[1].xy, temp[0].xyxx; 10: MOV temp[3], temp[1]; 11: MOV output[0], temp[3]; 12: MOV output[2], temp[3]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xyxw; 5: MUL temp[2].x, temp[0].zzzz, const[1].xxxx; 6: MAD temp[0].x, const[0].xxxx, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MUL temp[0].xy, input[0].xyyy, const[6].xxxx; 9: MOV output[1].xy, temp[0].xyxx; 10: MOV temp[3], temp[1]; 11: MOV output[0], temp[3]; 12: MOV output[2], temp[3]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xyxw; 5: MUL temp[2].x, temp[0].zzzz, const[1].xxxx; 6: MAD temp[0].x, const[0].xxxx, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MUL temp[0].xy, input[0].xyyy, const[6].xxxx; 9: MOV output[1].xy, temp[0].xyxx; 10: MOV temp[3], temp[1]; 11: MOV output[0], temp[3]; 12: MOV output[2], temp[3]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xyxw; 5: MUL temp[2].x, temp[0].zzzz, const[1].xxxx; 6: MAD temp[0].x, const[0].xxxx, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MUL temp[0].xy, input[0].xyyy, const[6].xxxx; 9: MOV output[1].xy, temp[0].xyxx; 10: MOV temp[3], temp[1]; 11: MOV output[0], temp[3]; 12: MOV output[2], temp[3]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xy_w; 5: MUL temp[2].x, temp[0].z___, const[1].x___; 6: MAD temp[0].x, const[0].x___, temp[0].w___, temp[2].x___; 7: MOV temp[1].z, temp[0].__x_; 8: MUL temp[0].xy, input[0].xy__, const[6].xx__; 9: MOV output[1].xy, temp[0].xy__; 10: MOV temp[3], temp[1]; 11: MOV output[0], temp[3]; 12: MOV output[2], temp[3]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xy_w; 5: MUL temp[2].x, temp[0].z___, const[1].x___; 6: MAD temp[0].x, const[0].x___, temp[0].w___, temp[2].x___; 7: MOV temp[1].z, temp[0].__x_; 8: MUL temp[0].xy, input[0].xy__, const[6].xx__; 9: MOV output[1].xy, temp[0].xy__; 10: MOV output[0], temp[1]; 11: MOV output[2], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xy_w; 5: MUL temp[2].x, temp[0].z___, const[1].x___; 6: MAD temp[0].x, const[0].x___, temp[0].w___, temp[2].x___; 7: MOV temp[1].z, temp[0].__x_; 8: MUL temp[0].xy, input[0].xy__, const[6].xx__; 9: MOV output[1].xy, temp[0].xy__; 10: MOV output[0], temp[1]; 11: MOV output[2], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xy_w; 5: MUL temp[2].x, temp[0].z___, const[1].x___; 6: MAD temp[0].x, const[0].x___, temp[0].w___, temp[2].x___; 7: MOV temp[1].z, temp[0].__x_; 8: MUL temp[0].xy, input[0].xy__, const[6].xx__; 9: MOV output[1].xy, temp[0].xy__; 10: MOV output[0], temp[1]; 11: MOV output[2], temp[1]; CONST[6] = { 0.0039 0.0000 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0], const[2], input[1].xxxx; 1: MAD temp[0], const[3], input[1].yyyy, temp[0]; 2: MAD temp[0], const[4], input[1].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[5]; 4: MOV temp[1].xyw, temp[0].xy_w; 5: MUL temp[2].x, temp[0].z___, const[1].x___; 6: MAD temp[0].x, const[0].x___, temp[0].w___, temp[2].x___; 7: MOV temp[1].z, temp[0].__x_; 8: MUL temp[0].xy, input[0].xy__, const[6].xx__; 9: MOV output[1].xy, temp[0].xy__; 10: MOV output[0], temp[1]; 11: MOV output[2], temp[1]; Final vertex program code: 0: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src1: 0x00000021 reg: 1i swiz: X/ X/ X/ X src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src1: 0x00492021 reg: 1i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 2: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10082 reg: 4c swiz: X/ Y/ Z/ W src1: 0x00924021 reg: 1i swiz: Z/ Z/ Z/ Z src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 3: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src2: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 4: op: 0x00b02003 dst: 1t op: VE_ADD src0: 0x00f90000 reg: 0t swiz: X/ Y/ U/ W 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: 0x01ff4000 reg: 0t swiz: Z/ U/ U/ U src1: 0x01ff0022 reg: 1c swiz: X/ U/ U/ U src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 6: op: 0x00100004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src1: 0x01ff6000 reg: 0t swiz: W/ U/ U/ U src2: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U 7: op: 0x00402003 dst: 1t op: VE_ADD src0: 0x01c7e000 reg: 0t swiz: U/ U/ X/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src1: 0x01f800c2 reg: 6c swiz: X/ X/ U/ U src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 9: op: 0x00302203 dst: 1o 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 10: 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 11: op: 0x00f04203 dst: 2o 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 fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL IMM FLT32 { 0.0000, 1.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MOV TEMP[1].xyz, TEMP[0].xyzx 2: MUL TEMP[0].x, TEMP[0].wwww, CONST[0].xxxx 3: MOV TEMP[1].w, TEMP[0].xxxx 4: SEQ TEMP[2].x, TEMP[0].xxxx, IMM[0].xxxx 5: CMP TEMP[0].x, -TEMP[2].xxxx, IMM[0].yyyy, IMM[0].xxxx 6: KIL -TEMP[0].xxxx 7: MOV OUT[0], TEMP[1] 8: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV temp[1].xyz, temp[0].xyzx; 2: MUL temp[0].x, temp[0].wwww, const[0].xxxx; 3: MOV temp[1].w, temp[0].xxxx; 4: SEQ temp[2].x, temp[0].xxxx, temp[0].0000; 5: CMP temp[0].x, -temp[2].xxxx, temp[0].1111, temp[0].0000; 6: KIL -temp[0].xxxx; 7: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV temp[1].xyz, temp[0].xyzx; 2: MUL temp[0].x, temp[0].wwww, const[0].xxxx; 3: MOV temp[1].w, temp[0].xxxx; 4: SEQ temp[2].x, temp[0].xxxx, temp[0].0000; 5: CMP temp[0].x, -temp[2].xxxx, temp[0].1111, temp[0].0000; 6: KIL -temp[0].xxxx; 7: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV temp[1].xyz, temp[0].xyzx; 2: MUL temp[0].x, temp[0].wwww, const[0].xxxx; 3: MOV temp[1].w, temp[0].xxxx; 4: SEQ temp[2].x, temp[0].xxxx, temp[0].0000; 5: CMP temp[0].x, -temp[2].xxxx, temp[0].1111, temp[0].0000; 6: KIL -temp[0].xxxx; 7: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV temp[1].xyz, temp[0].xyzx; 2: MUL temp[0].x, temp[0].wwww, const[0].xxxx; 3: MOV temp[1].w, temp[0].xxxx; 4: SEQ temp[2].x, temp[0].xxxx, temp[0].0000; 5: CMP temp[0].x, -temp[2].xxxx, temp[0].1111, temp[0].0000; 6: KIL -temp[0].xxxx; 7: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV temp[1].xyz, temp[0].xyzx; 2: MUL temp[0].x, temp[0].wwww, const[0].xxxx; 3: MOV temp[1].w, temp[0].xxxx; 4: SEQ temp[2].x, temp[0].xxxx, temp[0].0000; 5: CMP temp[0].x, -temp[2].xxxx, temp[0].1111, temp[0].0000; 6: KIL -temp[0].xxxx; 7: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV temp[1].xyz, temp[0].xyzx; 2: MUL temp[0].x, temp[0].wwww, const[0].xxxx; 3: MOV temp[1].w, temp[0].xxxx; 4: SEQ temp[2].x, temp[0].xxxx, temp[0].0000; 5: CMP temp[0].x, -temp[2].xxxx, temp[0].1111, temp[0].0000; 6: KIL -temp[0].xxxx; 7: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MOV temp[1].xyz, temp[0].xyzx; 2: MUL temp[0].x, temp[0].wwww, const[0].xxxx; 3: MOV temp[1].w, temp[0].xxxx; 4: ADD temp[2].x, temp[0].xxxx, -temp[0].0000; 5: CMP temp[2].x, -|temp[2]|, none.0000, none.1111; 6: CMP temp[0].x, -temp[2].xxxx, temp[0].1111, temp[0].0000; 7: KIL -temp[0].xxxx; 8: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV temp[1].xyz, temp[0].xyz_; 2: MUL temp[0].x, temp[0].w___, const[0].x___; 3: MOV temp[1].w, temp[0].___x; 4: ADD temp[2].x, temp[0].x___, -temp[0].0___; 5: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 6: CMP temp[0].x, -temp[2].x___, temp[0].1___, temp[0].0___; 7: KIL -temp[0].xxxx; 8: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV temp[1].xyz, temp[0].xyz_; 2: MUL temp[0].x, temp[0].w___, const[0].x___; 3: MOV temp[1].w, temp[0].___x; 4: ADD temp[2].x, temp[0].x___, -temp[0].0___; 5: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 6: CMP temp[0].x, -temp[2].x___, temp[0].1___, temp[0].0___; 7: KIL -temp[0].xxxx; 8: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: MOV temp[4].xyz, temp[3].xyz_; 2: MUL temp[5].x, temp[3].w___, const[0].x___; 3: MOV temp[4].w, temp[5].___x; 4: ADD temp[6].x, temp[5].x___, -temp[0].0___; 5: CMP temp[7].x, -|temp[6].x___|, none.0___, none.1___; 6: CMP temp[8].x, -temp[7].x___, temp[0].1___, temp[0].0___; 7: KIL -temp[8].xxxx; 8: MOV output[0], temp[4]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: MOV temp[4].xyz, temp[3].xyz_; 2: MUL temp[5].x, temp[3].w___, const[0].x___; 3: MOV temp[4].w, temp[5].___x; 4: CMP temp[7].x, -|temp[5].x___|, none.0___, none.1___; 5: CMP temp[8].x, -temp[7].x___, none.1___, none.0___; 6: KIL -temp[8].xxxx; 7: MOV output[0], temp[4]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: MOV temp[4].xyz, temp[3].xyz_; 2: MUL temp[5].x, temp[3].w___, const[0].x___; 3: MOV temp[4].w, temp[5].___x; 4: CMP temp[7].x, -|temp[5].x___|, none.0___, none.1___; 5: CMP temp[8].x, -temp[7].x___, none.1___, none.0___; 6: MOV temp[0], -temp[8].xxxx; 7: KIL temp[0]; 8: MOV output[0], temp[4]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: MOV temp[4].xyz, temp[3].xyz_; 2: MUL temp[5].x, temp[3].w___, const[0].x___; 3: MOV temp[4].w, temp[5].___x; 4: CMP temp[7].x, -|temp[5].x___|, none.0___, none.1___; 5: CMP temp[8].x, -temp[7].x___, none.1___, none.0___; 6: MOV temp[0], -temp[8].xxxx; 7: KIL temp[0]; 8: MOV output[0], temp[4]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[3], input[0].xy__, 2D[0]; 1: src0.xyz = temp[3] MAD temp[4].xyz, src0.xyz, src0.111, src0.000 2: src0.xyz = const[0], src0.w = temp[3] MAD temp[5].x, src0.w__, src0.x__, src0.000 3: src0.xyz = temp[5] MAD temp[4].w, src0.x, src0.1, src0.0 4: src0.xyz = temp[5] CMP temp[7].x, src0.1__, src0.0__, -|src0.x__| 5: src0.xyz = temp[7] CMP temp[8].x, src0.0__, src0.1__, -src0.x__ 6: src0.xyz = temp[8] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 7: KIL temp[0]; 8: src0.xyz = temp[4], src0.w = temp[4] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = const[0] SEM_WAIT MAD temp[4].xyz, src0.xyz, src0.111, src0.000 MAD temp[5].w, src0.w, src1.x, src0.0 3: src0.xyz = temp[5], src0.w = temp[5] CMP temp[7].x, src0.1__, src0.0__, -|src0.w__| MAD temp[4].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[7] CMP temp[8].x, src0.0__, src0.1__, -src0.x__ 5: src0.xyz = temp[8] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 6: BEGIN_TEX; 7: KIL temp[0]; 8: src0.xyz = temp[4], src0.w = temp[4] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = const[0] SEM_WAIT MAD temp[4].xyz, src0.xyz, src0.111, src0.000 MAD temp[5].w, src0.w, src1.x, src0.0 3: src0.w = temp[5] CMP temp[7].x, src0.1__, src0.0__, -|src0.w__| MAD temp[4].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[7] CMP temp[8].x, src0.0__, src0.1__, -src0.x__ 5: src0.xyz = temp[8] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 6: BEGIN_TEX; 7: KIL temp[0]; 8: src0.xyz = temp[4], src0.w = temp[4] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src0.111, src0.000 MAD temp[0].w, src0.w, src1.x, src0.0 3: src0.w = temp[0] CMP temp[1].x, src0.1__, src0.0__, -|src0.w__| MAD temp[0].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1] CMP temp[1].x, src0.0__, src0.1__, -src0.x__ 5: src0.xyz = temp[1] MAD temp[1].xyz, -src0.xxx, src0.111, src0.000 MAD temp[1].w, -src0.x, src0.1, src0.0 6: BEGIN_TEX; 7: KIL temp[1]; 8: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=10************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 3, tex_end: 0 (code_addr: 000000c0) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 c0 t0 bias-> t0.xyz (03800800) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w c0.x 0.0 op: 00040189 1: xyz: t0 t0 t0 bias-> t1.x (00840000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 1.0 0.0 -|t0.www| op: 041b0a15 w: t0.w 1.0 0.0 op: 00040889 2: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 -t1.xyz op: 04080a94 w: t1.x t1.x t1.x op: 00000000 3: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> t1.w (00840000) xyz: -t1.xxx 1.0 0.0 op: 00050aa1 w: -t1.x 1.0 0.0 op: 000408a0 NODE 1: alu_offset: 4, tex_offset: 1, alu_end: 0, tex_end: 0 (code_addr: 00401004) TEX: KIL t0, t1, texture[0] (00010001) 4: 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 GLSL source for fragment shader 13: vec4 v(in vec4 q, in float r){ return q; } uniform vec2 b; uniform sampler2D c; vec2 w(in float q, in float r){ (q = ((q + 0.5) / b[0])); return vec2(fract(q), ((((26.0 * floor(q)) + r) + 0.5) / b[1])); } vec2 x(){ return vec2(0.0, (1.0 / b[1])); } float y(in vec2 q){ return q[1]; } vec2 z(in vec2 q, in vec2 r){ return (127.5 * texture2D(c, (q + (2.0 * r))).xy); } varying float f; varying vec2 i; uniform float j; vec4 A(in vec4 q){ return q; } void main(){ vec4 q; vec2 r; vec2 s = w(y(i), j); (q = v(texture2D(c, s), i[0])); (r = z(s, x())); float t = step(r[0], mod(f, r[1])); if ((t > 0.5)) discard; (gl_FragColor = A(q)); } GLSL IR for shader 13: ( (declare (uniform ) float j) (declare (in ) vec2 i) (declare (in ) float f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 b) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function v (signature vec4 (parameters (declare (in ) vec4 q) (declare (in ) float r) ) ( (return (var_ref q) ) )) ) (function w (signature vec2 (parameters (declare (in ) float q) (declare (in ) float r) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref q) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref q) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref q) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref r) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function x (signature vec2 (parameters ) ( (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (constant float (0.000000)) ) (assign (y) (var_ref vec_ctor) (expression float rcp (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function y (signature float (parameters (declare (in ) vec2 q) ) ( (return (swiz y (var_ref q) )) )) ) (function z (signature vec2 (parameters (declare (in ) vec2 q) (declare (in ) vec2 r) ) ( (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref c) (expression vec2 + (var_ref q) (expression vec2 * (constant float (2.000000)) (var_ref r) ) ) )) (return (expression vec2 * (constant float (127.500000)) (swiz xy (var_ref texture2D_retval) )) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) (function A (signature vec4 (parameters (declare (in ) vec4 q) ) ( (return (var_ref q) ) )) ) (function main (signature void (parameters ) ( (declare () vec2 s) (declare () vec2 r) (declare () vec4 q) (declare (temporary ) float y_retval) (call y (var_ref y_retval) ((var_ref i) )) (declare (temporary ) vec2 w_retval) (call w (var_ref w_retval) ((var_ref y_retval) (var_ref j) )) (assign (xy) (var_ref s) (var_ref w_retval) ) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref c) (var_ref w_retval) )) (declare (temporary ) vec4 v_retval) (call v (var_ref v_retval) ((var_ref texture2D_retval) (swiz x (var_ref i) ))) (assign (xyzw) (var_ref q) (var_ref v_retval) ) (declare (temporary ) vec2 x_retval) (call x (var_ref x_retval) ()) (declare (temporary ) vec2 z_retval) (call z (var_ref z_retval) ((var_ref s) (var_ref x_retval) )) (assign (xy) (var_ref r) (var_ref z_retval) ) (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((var_ref f) (swiz y (var_ref z_retval) ))) (declare (temporary ) float step_retval) (call step (var_ref step_retval) ((swiz x (var_ref r) )(var_ref mod_retval) )) (if (expression bool > (var_ref step_retval) (constant float (0.500000)) ) ( (discard ) ) ()) (declare (temporary ) vec4 A_retval) (call A (var_ref A_retval) ((var_ref q) )) (assign (xyzw) (var_ref gl_FragColor) (var_ref A_retval) ) )) ) (function mod (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function step (signature float (parameters (declare (in ) float edge) (declare (in ) float x) ) ( )) ) ) GLSL source for vertex shader 14: vec4 I(in vec4 z, in float A){ return z; } uniform vec2 b, n, o; uniform sampler2D c; vec2 J(in float z, in float A){ (z = ((z + 0.5) / b[0])); return vec2(fract(z), ((((26.0 * floor(z)) + A) + 0.5) / b[1])); } vec2 L(){ return vec2(0.0, (1.0 / b[1])); } float M(in vec2 z){ return z[1]; } varying float f; varying vec2 i; uniform float j, k, l, p; attribute vec4 t; attribute vec3 u; attribute float v; attribute vec2 w; attribute vec4 x; uniform mat4 m; vec2 P(){ return (mix(x.xy, x.zw, float((p > 0.0))) / 8.0); } vec3 Q(in vec2 z){ vec4 A = (m * vec4(z, 0.0, 1.0)); return vec3(((o * A.xy) / A[3]), A[3]); } vec2 R(in vec2 z, in vec3 A, in vec2 B, in vec2 C, in vec2 D){ float E, F; (E = u[2]); (F = (0.5 * mix(z[1], z[0], (1.0 / A[2])))); return (A.xy + ((E * F) * D)); } vec4 S(in vec2 z, in vec2 A, in vec2 B){ vec3 C = Q(t.xy); vec2 D, E, F, G; (D = C.xy); (E = normalize((Q(t.zw).xy - D))); (F = vec2((-E[1]), E[0])); (G = R(B, C, z, A, F)); return (sign(C[2]) * vec4(((G / o) + n), (mix(w[0], w[1], float((p > 0.5))) - l), 1.0)); } void main(){ float z = u[0]; vec2 A, B, C, D; (A = u.xy); (D = P()); (i = A); (gl_Position = S(B, C, D)); (f = v); } GLSL IR for shader 14: ( (declare (uniform ) mat4 m) (declare (in ) vec4 x) (declare (in ) vec2 w) (declare (in ) float v) (declare (in ) vec3 u) (declare (in ) vec4 t) (declare (uniform ) float p) (declare (uniform ) float l) (declare (uniform ) float k) (declare (uniform ) float j) (declare (out ) vec2 i) (declare (out ) float f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 o) (declare (uniform ) vec2 n) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function I (signature vec4 (parameters (declare (in ) vec4 z) (declare (in ) float A) ) ( (return (var_ref z) ) )) ) (function J (signature vec2 (parameters (declare (in ) float z) (declare (in ) float A) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref z) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref z) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref z) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref A) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function L (signature vec2 (parameters ) ( (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (constant float (0.000000)) ) (assign (y) (var_ref vec_ctor) (expression float rcp (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function M (signature float (parameters (declare (in ) vec2 z) ) ( (return (swiz y (var_ref z) )) )) ) (function P (signature vec2 (parameters ) ( (declare (temporary ) vec2 mix_retval) (call mix (var_ref mix_retval) ((swiz xy (var_ref x) )(swiz zw (var_ref x) )(expression float b2f (expression bool > (var_ref p) (constant float (0.000000)) ) ) )) (return (expression vec2 / (var_ref mix_retval) (constant float (8.000000)) ) ) )) ) (function mix (signature vec2 (parameters (declare (in ) vec2 arg0) (declare (in ) vec2 arg1) (declare (in ) float arg2) ) ( )) (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) (declare (in ) float arg2) ) ( )) ) (function Q (signature vec3 (parameters (declare (in ) vec2 z) ) ( (declare (temporary ) vec4 vec_ctor) (assign (zw) (var_ref vec_ctor) (constant vec2 (0.000000 1.000000)) ) (assign (xy) (var_ref vec_ctor) (var_ref z) ) (declare (temporary ) vec4 assignment_tmp) (assign (xyzw) (var_ref assignment_tmp) (expression vec4 * (var_ref m) (var_ref vec_ctor) ) ) (declare (temporary ) vec3 vec_ctor@51) (assign (xy) (var_ref vec_ctor@51) (expression vec2 / (expression vec2 * (var_ref o) (swiz xy (var_ref assignment_tmp) )) (swiz w (var_ref assignment_tmp) )) ) (assign (z) (var_ref vec_ctor@51) (swiz w (var_ref assignment_tmp) )) (return (var_ref vec_ctor@51) ) )) ) (function R (signature vec2 (parameters (declare (in ) vec2 z) (declare (in ) vec3 A) (declare (in ) vec2 B) (declare (in ) vec2 C) (declare (in ) vec2 D) ) ( (declare () float E) (assign (x) (var_ref E) (swiz z (var_ref u) )) (declare (temporary ) float mix_retval) (call mix (var_ref mix_retval) ((swiz y (var_ref z) )(swiz x (var_ref z) )(expression float rcp (swiz z (var_ref A) )) )) (return (expression vec2 + (swiz xy (var_ref A) )(expression vec2 * (expression float * (var_ref E) (expression float * (constant float (0.500000)) (var_ref mix_retval) ) ) (var_ref D) ) ) ) )) ) (function S (signature vec4 (parameters (declare (in ) vec2 z) (declare (in ) vec2 A) (declare (in ) vec2 B) ) ( (declare () vec2 G) (declare () vec2 D) (declare () vec3 C) (declare (temporary ) vec3 Q_retval) (call Q (var_ref Q_retval) ((swiz xy (var_ref t) ))) (assign (xyz) (var_ref C) (var_ref Q_retval) ) (assign (xy) (var_ref D) (swiz xy (var_ref Q_retval) )) (declare (temporary ) vec3 Q_retval@52) (call Q (var_ref Q_retval@52) ((swiz zw (var_ref t) ))) (declare (temporary ) vec2 normalize_retval) (call normalize (var_ref normalize_retval) ((expression vec2 + (swiz xy (var_ref Q_retval@52) )(expression vec2 neg (var_ref D) ) ) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float neg (swiz y (var_ref normalize_retval) )) ) (assign (y) (var_ref vec_ctor) (swiz x (var_ref normalize_retval) )) (declare (temporary ) vec2 R_retval) (call R (var_ref R_retval) ((var_ref B) (var_ref C) (var_ref z) (var_ref A) (var_ref vec_ctor) )) (assign (xy) (var_ref G) (var_ref R_retval) ) (declare (temporary ) float sign_retval) (call sign (var_ref sign_retval) ((swiz z (var_ref C) ))) (declare (temporary ) float mix_retval) (call mix (var_ref mix_retval) ((swiz x (var_ref w) )(swiz y (var_ref w) )(expression float b2f (expression bool > (var_ref p) (constant float (0.500000)) ) ) )) (declare (temporary ) vec4 vec_ctor@53) (assign (w) (var_ref vec_ctor@53) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor@53) (expression vec2 + (expression vec2 / (var_ref G) (var_ref o) ) (var_ref n) ) ) (assign (z) (var_ref vec_ctor@53) (expression float + (var_ref mix_retval) (expression float neg (var_ref l) ) ) ) (return (expression vec4 * (var_ref sign_retval) (var_ref vec_ctor@53) ) ) )) ) (function normalize (signature vec2 (parameters (declare (in ) vec2 arg0) ) ( )) ) (function sign (signature float (parameters (declare (in ) float x) ) ( )) ) (function main (signature void (parameters ) ( (declare () vec2 C) (declare () vec2 B) (declare () vec2 A) (assign (xy) (var_ref A) (swiz xy (var_ref u) )) (declare (temporary ) vec2 P_retval) (call P (var_ref P_retval) ()) (assign (xy) (var_ref i) (var_ref A) ) (declare (temporary ) vec4 S_retval) (call S (var_ref S_retval) ((var_ref B) (var_ref C) (var_ref P_retval) )) (assign (xyzw) (var_ref gl_Position) (var_ref S_retval) ) (assign (x) (var_ref f) (var_ref v) ) )) ) ) GLSL IR for linked vertex program 15: ( (declare (uniform ) mat4 m) (declare (in ) vec4 x) (declare (in ) vec2 w) (declare (in ) float v) (declare (in ) vec3 u) (declare (in ) vec4 t) (declare (uniform ) float p) (declare (uniform ) float l) (declare (out ) vec2 i) (declare (out ) float f) (declare (uniform ) vec2 o) (declare (uniform ) vec2 n) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare (temporary ) vec2 P_retval) (declare () float arg2) (assign (x) (var_ref arg2) (expression float b2f (expression bool > (var_ref p) (constant float (0.000000)) ) ) ) (assign (xy) (var_ref P_retval) (expression vec2 * (expression vec2 + (expression vec2 * (swiz xy (var_ref x) )(expression float + (constant float (1.000000)) (expression float neg (var_ref arg2) ) ) ) (expression vec2 * (swiz zw (var_ref x) )(var_ref arg2) ) ) (constant float (0.125000)) ) ) (assign (xy) (var_ref i) (swiz xy (var_ref u) )) (declare (temporary ) vec4 flattening_tmp) (assign (xyzw) (var_ref flattening_tmp) (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref m) (constant int (0)) ) (swiz x (var_ref t) )) (expression vec4 * (array_ref (var_ref m) (constant int (1)) ) (swiz y (var_ref t) )) ) (array_ref (var_ref m) (constant int (3)) ) ) ) (declare (temporary ) vec3 vec_ctor) (assign (xy) (var_ref vec_ctor) (expression vec2 * (expression vec2 * (var_ref o) (swiz xy (var_ref flattening_tmp) )) (expression float rcp (swiz w (var_ref flattening_tmp) )) ) ) (assign (z) (var_ref vec_ctor) (swiz w (var_ref flattening_tmp) )) (declare (temporary ) vec4 flattening_tmp@54) (assign (xyzw) (var_ref flattening_tmp@54) (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref m) (constant int (0)) ) (swiz z (var_ref t) )) (expression vec4 * (array_ref (var_ref m) (constant int (1)) ) (swiz w (var_ref t) )) ) (array_ref (var_ref m) (constant int (3)) ) ) ) (declare (temporary ) vec3 vec_ctor@55) (assign (xy) (var_ref vec_ctor@55) (expression vec2 * (expression vec2 * (var_ref o) (swiz xy (var_ref flattening_tmp@54) )) (expression float rcp (swiz w (var_ref flattening_tmp@54) )) ) ) (assign (z) (var_ref vec_ctor@55) (swiz w (var_ref flattening_tmp@54) )) (declare (temporary ) vec2 normalize_retval) (declare () vec2 arg0) (assign (xy) (var_ref arg0) (expression vec2 + (swiz xy (var_ref vec_ctor@55) )(expression vec2 neg (swiz xy (var_ref vec_ctor) )) ) ) (assign (xy) (var_ref normalize_retval) (expression vec2 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0) ) ) ) ) (declare (temporary ) vec2 vec_ctor@56) (assign (x) (var_ref vec_ctor@56) (expression float neg (swiz y (var_ref normalize_retval) )) ) (assign (y) (var_ref vec_ctor@56) (swiz x (var_ref normalize_retval) )) (declare () float arg2@57) (assign (x) (var_ref arg2@57) (expression float rcp (swiz w (var_ref flattening_tmp) )) ) (declare () float arg2@58) (assign (x) (var_ref arg2@58) (expression float b2f (expression bool > (var_ref p) (constant float (0.500000)) ) ) ) (declare (temporary ) vec4 vec_ctor@59) (assign (w) (var_ref vec_ctor@59) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor@59) (expression vec2 + (expression vec2 * (expression vec2 + (swiz xy (var_ref vec_ctor) )(expression vec2 * (expression float * (swiz z (var_ref u) )(expression float * (constant float (0.500000)) (expression float + (expression float * (swiz y (var_ref P_retval) )(expression float + (constant float (1.000000)) (expression float neg (var_ref arg2@57) ) ) ) (expression float * (swiz x (var_ref P_retval) )(var_ref arg2@57) ) ) ) ) (var_ref vec_ctor@56) ) ) (expression vec2 rcp (var_ref o) ) ) (var_ref n) ) ) (assign (z) (var_ref vec_ctor@59) (expression float + (expression float + (expression float * (swiz x (var_ref w) )(expression float + (constant float (1.000000)) (expression float neg (var_ref arg2@58) ) ) ) (expression float * (swiz y (var_ref w) )(var_ref arg2@58) ) ) (expression float neg (var_ref l) ) ) ) (assign (xyzw) (var_ref gl_Position) (expression vec4 * (expression float sign (swiz w (var_ref flattening_tmp) )) (var_ref vec_ctor@59) ) ) (assign (x) (var_ref f) (var_ref v) ) (assign (x) (var_ref f@60) (var_ref f) ) (assign (xyzw) (var_ref gl_Position@61) (var_ref gl_Position) ) (assign (xy) (var_ref i@62) (var_ref i) ) )) ) ) GLSL IR for linked fragment program 15: ( (declare (uniform ) float j) (declare (in ) vec2 i) (declare (in ) float f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (expression float + (swiz y (var_ref i) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref b) )) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float fract (var_ref assignment_tmp) ) ) (assign (y) (var_ref vec_ctor) (expression float * (expression float + (expression float + (expression float * (constant float (26.000000)) (expression float floor (var_ref assignment_tmp) ) ) (var_ref j) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref b) )) ) ) (declare (temporary ) vec2 vec_ctor@63) (assign (x) (var_ref vec_ctor@63) (constant float (0.000000)) ) (assign (y) (var_ref vec_ctor@63) (expression float rcp (swiz y (var_ref b) )) ) (declare (temporary ) vec2 z_retval) (assign (xy) (var_ref z_retval) (expression vec2 * (constant float (127.500000)) (swiz xy (tex vec4 (var_ref c) (expression vec2 + (var_ref vec_ctor) (expression vec2 * (constant float (2.000000)) (var_ref vec_ctor@63) ) ) 0 1 () ))) ) (declare (temporary ) bool discard_cond_temp) (assign (x) (var_ref discard_cond_temp) (constant bool (0)) ) (assign (expression bool > (expression float b2f (expression bool >= (expression float * (swiz y (var_ref z_retval) )(expression float fract (expression float * (var_ref f) (expression float rcp (swiz y (var_ref z_retval) )) ) ) ) (swiz x (var_ref z_retval) )) ) (constant float (0.500000)) ) (x) (var_ref discard_cond_temp) (constant bool (1)) ) (discard (var_ref discard_cond_temp) ) (assign (xyzw) (var_ref gl_FragColor) (tex vec4 (var_ref c) (var_ref vec_ctor) 0 1 () )) (assign (xyzw) (var_ref gl_FragColor@64) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL OUT[0], POSITION DCL OUT[1], GENERIC[12] DCL OUT[2], GENERIC[13] DCL CONST[0..7] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL DCL TEMP[7], LOCAL IMM FLT32 { 0.0000, 1.0000, 0.1250, 0.5000} 0: SLT TEMP[0].x, IMM[0].xxxx, CONST[4].xxxx 1: ADD TEMP[1].x, IMM[0].yyyy, -TEMP[0].xxxx 2: MUL TEMP[1].xy, IN[0].xyyy, TEMP[1].xxxx 3: MAD TEMP[0].xy, IN[0].zwww, TEMP[0].xxxx, TEMP[1].xyyy 4: MUL TEMP[0].xy, TEMP[0].xyyy, IMM[0].zzzz 5: MUL TEMP[1], CONST[0], IN[4].xxxx 6: MAD TEMP[1], CONST[1], IN[4].yyyy, TEMP[1] 7: ADD TEMP[1].xyw, TEMP[1], CONST[3] 8: MUL TEMP[2].xy, CONST[6].xyyy, TEMP[1].xyyy 9: RCP TEMP[3].x, TEMP[1].wwww 10: MUL TEMP[2].xy, TEMP[2].xyyy, TEMP[3].xxxx 11: MUL TEMP[3], CONST[0], IN[4].zzzz 12: MAD TEMP[3], CONST[1], IN[4].wwww, TEMP[3] 13: ADD TEMP[3].xyw, TEMP[3], CONST[3] 14: MUL TEMP[4].xy, CONST[6].xyyy, TEMP[3].xyyy 15: RCP TEMP[3].x, TEMP[3].wwww 16: MUL TEMP[3].xy, TEMP[4].xyyy, TEMP[3].xxxx 17: ADD TEMP[3].xy, TEMP[3].xyyy, -TEMP[2].xyyy 18: DP2 TEMP[4].x, TEMP[3].xyyy, TEMP[3].xyyy 19: RSQ TEMP[4].x, TEMP[4].xxxx 20: MUL TEMP[3].xy, TEMP[3].xyyy, TEMP[4].xxxx 21: MOV TEMP[4].x, -TEMP[3].yyyy 22: MOV TEMP[4].y, TEMP[3].xxxx 23: RCP TEMP[3].x, TEMP[1].wwww 24: SLT TEMP[5].x, IMM[0].wwww, CONST[4].xxxx 25: MOV TEMP[6].w, IMM[0].yyyy 26: ADD TEMP[7].x, IMM[0].yyyy, -TEMP[3].xxxx 27: MUL TEMP[7].x, TEMP[0].yyyy, TEMP[7].xxxx 28: MAD TEMP[0].x, TEMP[0].xxxx, TEMP[3].xxxx, TEMP[7].xxxx 29: MUL TEMP[0].x, IMM[0].wwww, TEMP[0].xxxx 30: MUL TEMP[0].x, IN[3].zzzz, TEMP[0].xxxx 31: MAD TEMP[0].xy, TEMP[0].xxxx, TEMP[4].xyyy, TEMP[2].xyyy 32: RCP TEMP[2].x, CONST[6].xxxx 33: RCP TEMP[2].y, CONST[6].yyyy 34: MAD TEMP[6].xy, TEMP[0].xyyy, TEMP[2].xyyy, CONST[7].xyyy 35: ADD TEMP[0].x, IMM[0].yyyy, -TEMP[5].xxxx 36: MUL TEMP[0].x, IN[1].xxxx, TEMP[0].xxxx 37: MAD TEMP[0].x, IN[1].yyyy, TEMP[5].xxxx, TEMP[0].xxxx 38: ADD TEMP[0].x, TEMP[0].xxxx, -CONST[5].xxxx 39: MOV TEMP[6].z, TEMP[0].xxxx 40: SSG TEMP[0].x, TEMP[1].wwww 41: MUL TEMP[0], TEMP[0].xxxx, TEMP[6] 42: MOV OUT[2], IN[2].xxxx 43: MOV OUT[0], TEMP[0] 44: MOV OUT[1].xy, IN[3].xyxx 45: END Vertex Program: before compilation # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[0].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[0].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[4].xxxx; 6: MAD temp[1], const[1], input[4].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MUL temp[2].xy, const[6].xyyy, temp[1].xyyy; 9: RCP temp[3].x, temp[1].wwww; 10: MUL temp[2].xy, temp[2].xyyy, temp[3].xxxx; 11: MUL temp[3], const[0], input[4].zzzz; 12: MAD temp[3], const[1], input[4].wwww, temp[3]; 13: ADD temp[3].xyw, temp[3], const[3]; 14: MUL temp[4].xy, const[6].xyyy, temp[3].xyyy; 15: RCP temp[3].x, temp[3].wwww; 16: MUL temp[3].xy, temp[4].xyyy, temp[3].xxxx; 17: ADD temp[3].xy, temp[3].xyyy, -temp[2].xyyy; 18: DP2 temp[4].x, temp[3].xyyy, temp[3].xyyy; 19: RSQ temp[4].x, temp[4].xxxx; 20: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 21: MOV temp[4].x, -temp[3].yyyy; 22: MOV temp[4].y, temp[3].xxxx; 23: RCP temp[3].x, temp[1].wwww; 24: SLT temp[5].x, const[8].wwww, const[4].xxxx; 25: MOV temp[6].w, const[8].yyyy; 26: ADD temp[7].x, const[8].yyyy, -temp[3].xxxx; 27: MUL temp[7].x, temp[0].yyyy, temp[7].xxxx; 28: MAD temp[0].x, temp[0].xxxx, temp[3].xxxx, temp[7].xxxx; 29: MUL temp[0].x, const[8].wwww, temp[0].xxxx; 30: MUL temp[0].x, input[3].zzzz, temp[0].xxxx; 31: MAD temp[0].xy, temp[0].xxxx, temp[4].xyyy, temp[2].xyyy; 32: RCP temp[2].x, const[6].xxxx; 33: RCP temp[2].y, const[6].yyyy; 34: MAD temp[6].xy, temp[0].xyyy, temp[2].xyyy, const[7].xyyy; 35: ADD temp[0].x, const[8].yyyy, -temp[5].xxxx; 36: MUL temp[0].x, input[1].xxxx, temp[0].xxxx; 37: MAD temp[0].x, input[1].yyyy, temp[5].xxxx, temp[0].xxxx; 38: ADD temp[0].x, temp[0].xxxx, -const[5].xxxx; 39: MOV temp[6].z, temp[0].xxxx; 40: SSG temp[0].x, temp[1].wwww; 41: MUL temp[0], temp[0].xxxx, temp[6]; 42: MOV output[2], input[2].xxxx; 43: MOV temp[8], temp[0]; 44: MOV output[1].xy, input[3].xyxx; 45: MOV output[0], temp[8]; 46: MOV output[3], temp[8]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[0].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[0].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[4].xxxx; 6: MAD temp[1], const[1], input[4].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MUL temp[2].xy, const[6].xyyy, temp[1].xyyy; 9: RCP temp[3].x, temp[1].wwww; 10: MUL temp[2].xy, temp[2].xyyy, temp[3].xxxx; 11: MUL temp[3], const[0], input[4].zzzz; 12: MAD temp[3], const[1], input[4].wwww, temp[3]; 13: ADD temp[3].xyw, temp[3], const[3]; 14: MUL temp[4].xy, const[6].xyyy, temp[3].xyyy; 15: RCP temp[3].x, temp[3].wwww; 16: MUL temp[3].xy, temp[4].xyyy, temp[3].xxxx; 17: ADD temp[3].xy, temp[3].xyyy, -temp[2].xyyy; 18: DP2 temp[4].x, temp[3].xyyy, temp[3].xyyy; 19: RSQ temp[4].x, temp[4].xxxx; 20: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 21: MOV temp[4].x, -temp[3].yyyy; 22: MOV temp[4].y, temp[3].xxxx; 23: RCP temp[3].x, temp[1].wwww; 24: SLT temp[5].x, const[8].wwww, const[4].xxxx; 25: MOV temp[6].w, const[8].yyyy; 26: ADD temp[7].x, const[8].yyyy, -temp[3].xxxx; 27: MUL temp[7].x, temp[0].yyyy, temp[7].xxxx; 28: MAD temp[0].x, temp[0].xxxx, temp[3].xxxx, temp[7].xxxx; 29: MUL temp[0].x, const[8].wwww, temp[0].xxxx; 30: MUL temp[0].x, input[3].zzzz, temp[0].xxxx; 31: MAD temp[0].xy, temp[0].xxxx, temp[4].xyyy, temp[2].xyyy; 32: RCP temp[2].x, const[6].xxxx; 33: RCP temp[2].y, const[6].yyyy; 34: MAD temp[6].xy, temp[0].xyyy, temp[2].xyyy, const[7].xyyy; 35: ADD temp[0].x, const[8].yyyy, -temp[5].xxxx; 36: MUL temp[0].x, input[1].xxxx, temp[0].xxxx; 37: MAD temp[0].x, input[1].yyyy, temp[5].xxxx, temp[0].xxxx; 38: ADD temp[0].x, temp[0].xxxx, -const[5].xxxx; 39: MOV temp[6].z, temp[0].xxxx; 40: SSG temp[0].x, temp[1].wwww; 41: MUL temp[0], temp[0].xxxx, temp[6]; 42: MOV output[2], input[2].xxxx; 43: MOV temp[8], temp[0]; 44: MOV output[1].xy, input[3].xyxx; 45: MOV output[0], temp[8]; 46: MOV output[3], temp[8]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[0].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[0].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[4].xxxx; 6: MAD temp[1], const[1], input[4].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MUL temp[2].xy, const[6].xyyy, temp[1].xyyy; 9: RCP temp[3].x, temp[1].wwww; 10: MUL temp[2].xy, temp[2].xyyy, temp[3].xxxx; 11: MUL temp[3], const[0], input[4].zzzz; 12: MAD temp[3], const[1], input[4].wwww, temp[3]; 13: ADD temp[3].xyw, temp[3], const[3]; 14: MUL temp[4].xy, const[6].xyyy, temp[3].xyyy; 15: RCP temp[3].x, temp[3].wwww; 16: MUL temp[3].xy, temp[4].xyyy, temp[3].xxxx; 17: ADD temp[3].xy, temp[3].xyyy, -temp[2].xyyy; 18: DP2 temp[4].x, temp[3].xyyy, temp[3].xyyy; 19: RSQ temp[4].x, temp[4].xxxx; 20: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 21: MOV temp[4].x, -temp[3].yyyy; 22: MOV temp[4].y, temp[3].xxxx; 23: RCP temp[3].x, temp[1].wwww; 24: SLT temp[5].x, const[8].wwww, const[4].xxxx; 25: MOV temp[6].w, const[8].yyyy; 26: ADD temp[7].x, const[8].yyyy, -temp[3].xxxx; 27: MUL temp[7].x, temp[0].yyyy, temp[7].xxxx; 28: MAD temp[0].x, temp[0].xxxx, temp[3].xxxx, temp[7].xxxx; 29: MUL temp[0].x, const[8].wwww, temp[0].xxxx; 30: MUL temp[0].x, input[3].zzzz, temp[0].xxxx; 31: MAD temp[0].xy, temp[0].xxxx, temp[4].xyyy, temp[2].xyyy; 32: RCP temp[2].x, const[6].xxxx; 33: RCP temp[2].y, const[6].yyyy; 34: MAD temp[6].xy, temp[0].xyyy, temp[2].xyyy, const[7].xyyy; 35: ADD temp[0].x, const[8].yyyy, -temp[5].xxxx; 36: MUL temp[0].x, input[1].xxxx, temp[0].xxxx; 37: MAD temp[0].x, input[1].yyyy, temp[5].xxxx, temp[0].xxxx; 38: ADD temp[0].x, temp[0].xxxx, -const[5].xxxx; 39: MOV temp[6].z, temp[0].xxxx; 40: SSG temp[0].x, temp[1].wwww; 41: MUL temp[0], temp[0].xxxx, temp[6]; 42: MOV output[2], input[2].xxxx; 43: MOV temp[8], temp[0]; 44: MOV output[1].xy, input[3].xyxx; 45: MOV output[0], temp[8]; 46: MOV output[3], temp[8]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[0].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[0].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[4].xxxx; 6: MAD temp[1], const[1], input[4].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MUL temp[2].xy, const[6].xyyy, temp[1].xyyy; 9: RCP temp[3].x, temp[1].wwww; 10: MUL temp[2].xy, temp[2].xyyy, temp[3].xxxx; 11: MUL temp[3], const[0], input[4].zzzz; 12: MAD temp[3], const[1], input[4].wwww, temp[3]; 13: ADD temp[3].xyw, temp[3], const[3]; 14: MUL temp[4].xy, const[6].xyyy, temp[3].xyyy; 15: RCP temp[3].x, temp[3].wwww; 16: MUL temp[3].xy, temp[4].xyyy, temp[3].xxxx; 17: ADD temp[3].xy, temp[3].xyyy, -temp[2].xyyy; 18: DP4 temp[4].x, temp[3].xy00, temp[3].xy00; 19: RSQ temp[4].x, temp[4].xxxx; 20: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 21: MOV temp[4].x, -temp[3].yyyy; 22: MOV temp[4].y, temp[3].xxxx; 23: RCP temp[3].x, temp[1].wwww; 24: SLT temp[5].x, const[8].wwww, const[4].xxxx; 25: MOV temp[6].w, const[8].yyyy; 26: ADD temp[7].x, const[8].yyyy, -temp[3].xxxx; 27: MUL temp[7].x, temp[0].yyyy, temp[7].xxxx; 28: MAD temp[0].x, temp[0].xxxx, temp[3].xxxx, temp[7].xxxx; 29: MUL temp[0].x, const[8].wwww, temp[0].xxxx; 30: MUL temp[0].x, input[3].zzzz, temp[0].xxxx; 31: MAD temp[0].xy, temp[0].xxxx, temp[4].xyyy, temp[2].xyyy; 32: RCP temp[2].x, const[6].xxxx; 33: RCP temp[2].y, const[6].yyyy; 34: MAD temp[6].xy, temp[0].xyyy, temp[2].xyyy, const[7].xyyy; 35: ADD temp[0].x, const[8].yyyy, -temp[5].xxxx; 36: MUL temp[0].x, input[1].xxxx, temp[0].xxxx; 37: MAD temp[0].x, input[1].yyyy, temp[5].xxxx, temp[0].xxxx; 38: ADD temp[0].x, temp[0].xxxx, -const[5].xxxx; 39: MOV temp[6].z, temp[0].xxxx; 40: SLT temp[0].x, none.0000, temp[1].wwww; 41: SLT temp[9].x, temp[1].wwww, none.0000; 42: ADD temp[0].x, temp[0], -temp[9]; 43: MUL temp[0], temp[0].xxxx, temp[6]; 44: MOV output[2], input[2].xxxx; 45: MOV temp[8], temp[0]; 46: MOV output[1].xy, input[3].xyxx; 47: MOV output[0], temp[8]; 48: MOV output[3], temp[8]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[0].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[0].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[4].xxxx; 6: MAD temp[1], const[1], input[4].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MUL temp[2].xy, const[6].xyyy, temp[1].xyyy; 9: RCP temp[3].x, temp[1].wwww; 10: MUL temp[2].xy, temp[2].xyyy, temp[3].xxxx; 11: MUL temp[3], const[0], input[4].zzzz; 12: MAD temp[3], const[1], input[4].wwww, temp[3]; 13: ADD temp[3].xyw, temp[3], const[3]; 14: MUL temp[4].xy, const[6].xyyy, temp[3].xyyy; 15: RCP temp[3].x, temp[3].wwww; 16: MUL temp[3].xy, temp[4].xyyy, temp[3].xxxx; 17: ADD temp[3].xy, temp[3].xyyy, -temp[2].xyyy; 18: DP4 temp[4].x, temp[3].xy00, temp[3].xy00; 19: RSQ temp[4].x, temp[4].xxxx; 20: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 21: MOV temp[4].x, -temp[3].yyyy; 22: MOV temp[4].y, temp[3].xxxx; 23: RCP temp[3].x, temp[1].wwww; 24: SLT temp[5].x, const[8].wwww, const[4].xxxx; 25: MOV temp[6].w, const[8].yyyy; 26: ADD temp[7].x, const[8].yyyy, -temp[3].xxxx; 27: MUL temp[7].x, temp[0].yyyy, temp[7].xxxx; 28: MAD temp[0].x, temp[0].xxxx, temp[3].xxxx, temp[7].xxxx; 29: MUL temp[0].x, const[8].wwww, temp[0].xxxx; 30: MUL temp[0].x, input[3].zzzz, temp[0].xxxx; 31: MAD temp[0].xy, temp[0].xxxx, temp[4].xyyy, temp[2].xyyy; 32: RCP temp[2].x, const[6].xxxx; 33: RCP temp[2].y, const[6].yyyy; 34: MAD temp[6].xy, temp[0].xyyy, temp[2].xyyy, const[7].xyyy; 35: ADD temp[0].x, const[8].yyyy, -temp[5].xxxx; 36: MUL temp[0].x, input[1].xxxx, temp[0].xxxx; 37: MAD temp[0].x, input[1].yyyy, temp[5].xxxx, temp[0].xxxx; 38: ADD temp[0].x, temp[0].xxxx, -const[5].xxxx; 39: MOV temp[6].z, temp[0].xxxx; 40: SLT temp[0].x, none.0000, temp[1].wwww; 41: SLT temp[9].x, temp[1].wwww, none.0000; 42: ADD temp[0].x, temp[0], -temp[9]; 43: MUL temp[0], temp[0].xxxx, temp[6]; 44: MOV output[2], input[2].xxxx; 45: MOV temp[8], temp[0]; 46: MOV output[1].xy, input[3].xyxx; 47: MOV output[0], temp[8]; 48: MOV output[3], temp[8]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: SLT temp[0].x, const[8].x___, const[4].x___; 1: ADD temp[1].x, const[8].y___, -temp[0].x___; 2: MUL temp[1].xy, input[0].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[0].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[4].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[4].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MUL temp[2].xy, const[6].xy__, temp[1].xy__; 9: RCP temp[3].x, temp[1].w___; 10: MUL temp[2].xy, temp[2].xy__, temp[3].xx__; 11: MUL temp[3].xyw, const[0].xy_w, input[4].zz_z; 12: MAD temp[3].xyw, const[1].xy_w, input[4].ww_w, temp[3].xy_w; 13: ADD temp[3].xyw, temp[3].xy_w, const[3].xy_w; 14: MUL temp[4].xy, const[6].xy__, temp[3].xy__; 15: RCP temp[3].x, temp[3].w___; 16: MUL temp[3].xy, temp[4].xy__, temp[3].xx__; 17: ADD temp[3].xy, temp[3].xy__, -temp[2].xy__; 18: DP4 temp[4].x, temp[3].xy00, temp[3].xy00; 19: RSQ temp[4].x, temp[4].x___; 20: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 21: MOV temp[4].x, -temp[3].y___; 22: MOV temp[4].y, temp[3]._x__; 23: RCP temp[3].x, temp[1].w___; 24: SLT temp[5].x, const[8].w___, const[4].x___; 25: MOV temp[6].w, const[8].___y; 26: ADD temp[7].x, const[8].y___, -temp[3].x___; 27: MUL temp[7].x, temp[0].y___, temp[7].x___; 28: MAD temp[0].x, temp[0].x___, temp[3].x___, temp[7].x___; 29: MUL temp[0].x, const[8].w___, temp[0].x___; 30: MUL temp[0].x, input[3].z___, temp[0].x___; 31: MAD temp[0].xy, temp[0].xx__, temp[4].xy__, temp[2].xy__; 32: RCP temp[2].x, const[6].x___; 33: RCP temp[2].y, const[6]._y__; 34: MAD temp[6].xy, temp[0].xy__, temp[2].xy__, const[7].xy__; 35: ADD temp[0].x, const[8].y___, -temp[5].x___; 36: MUL temp[0].x, input[1].x___, temp[0].x___; 37: MAD temp[0].x, input[1].y___, temp[5].x___, temp[0].x___; 38: ADD temp[0].x, temp[0].x___, -const[5].x___; 39: MOV temp[6].z, temp[0].__x_; 40: SLT temp[0].x, none.0___, temp[1].w___; 41: SLT temp[9].x, temp[1].w___, none.0___; 42: ADD temp[0].x, temp[0].x___, -temp[9].x___; 43: MUL temp[0], temp[0].xxxx, temp[6]; 44: MOV output[2], input[2].xxxx; 45: MOV temp[8], temp[0]; 46: MOV output[1].xy, input[3].xy__; 47: MOV output[0], temp[8]; 48: MOV output[3], temp[8]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: SLT temp[0].x, none.0___, const[4].x___; 1: ADD temp[1].x, none.1___, -temp[0].x___; 2: MUL temp[1].xy, input[0].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[0].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[4].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[4].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MUL temp[2].xy, const[6].xy__, temp[1].xy__; 9: RCP temp[3].x, temp[1].w___; 10: MUL temp[2].xy, temp[2].xy__, temp[3].xx__; 11: MUL temp[3].xyw, const[0].xy_w, input[4].zz_z; 12: MAD temp[3].xyw, const[1].xy_w, input[4].ww_w, temp[3].xy_w; 13: ADD temp[3].xyw, temp[3].xy_w, const[3].xy_w; 14: MUL temp[4].xy, const[6].xy__, temp[3].xy__; 15: RCP temp[3].x, temp[3].w___; 16: MUL temp[3].xy, temp[4].xy__, temp[3].xx__; 17: ADD temp[3].xy, temp[3].xy__, -temp[2].xy__; 18: DP4 temp[4].x, temp[3].xy00, temp[3].xy00; 19: RSQ temp[4].x, temp[4].x___; 20: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 21: MOV temp[4].x, -temp[3].y___; 22: MOV temp[4].y, temp[3]._x__; 23: RCP temp[3].x, temp[1].w___; 24: SLT temp[5].x, const[8].w___, const[4].x___; 25: MOV temp[6].w, none.___1; 26: ADD temp[7].x, none.1___, -temp[3].x___; 27: MUL temp[7].x, temp[0].y___, temp[7].x___; 28: MAD temp[0].x, temp[0].x___, temp[3].x___, temp[7].x___; 29: MUL temp[0].x, const[8].w___, temp[0].x___; 30: MUL temp[0].x, input[3].z___, temp[0].x___; 31: MAD temp[0].xy, temp[0].xx__, temp[4].xy__, temp[2].xy__; 32: RCP temp[2].x, const[6].x___; 33: RCP temp[2].y, const[6]._y__; 34: MAD temp[6].xy, temp[0].xy__, temp[2].xy__, const[7].xy__; 35: ADD temp[0].x, none.1___, -temp[5].x___; 36: MUL temp[0].x, input[1].x___, temp[0].x___; 37: MAD temp[0].x, input[1].y___, temp[5].x___, temp[0].x___; 38: ADD temp[0].x, temp[0].x___, -const[5].x___; 39: MOV temp[6].z, temp[0].__x_; 40: SLT temp[0].x, none.0___, temp[1].w___; 41: SLT temp[9].x, temp[1].w___, none.0___; 42: ADD temp[0].x, temp[0].x___, -temp[9].x___; 43: MUL temp[0], temp[0].xxxx, temp[6]; 44: MOV output[2], input[2].xxxx; 45: MOV output[1].xy, input[3].xy__; 46: MOV output[0], temp[0]; 47: MOV output[3], temp[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: SLT temp[0].x, none.0___, const[4].x___; 1: ADD temp[1].x, none.1___, -temp[0].x___; 2: MUL temp[1].xy, input[0].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[0].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[4].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[4].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MUL temp[2].xy, const[6].xy__, temp[1].xy__; 9: RCP temp[3].x, temp[1].w___; 10: MUL temp[2].xy, temp[2].xy__, temp[3].xx__; 11: MUL temp[3].xyw, const[0].xy_w, input[4].zz_z; 12: MAD temp[3].xyw, const[1].xy_w, input[4].ww_w, temp[3].xy_w; 13: ADD temp[3].xyw, temp[3].xy_w, const[3].xy_w; 14: MUL temp[4].xy, const[6].xy__, temp[3].xy__; 15: RCP temp[3].x, temp[3].w___; 16: MUL temp[3].xy, temp[4].xy__, temp[3].xx__; 17: ADD temp[3].xy, temp[3].xy__, -temp[2].xy__; 18: DP4 temp[4].x, temp[3].xy00, temp[3].xy00; 19: RSQ temp[4].x, temp[4].x___; 20: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 21: MOV temp[4].x, -temp[3].y___; 22: MOV temp[4].y, temp[3]._x__; 23: RCP temp[3].x, temp[1].w___; 24: MOV temp[8], const[4].x___; 25: SLT temp[5].x, const[8].w___, temp[8]; 26: MOV temp[6].w, none.___1; 27: ADD temp[7].x, none.1___, -temp[3].x___; 28: MUL temp[7].x, temp[0].y___, temp[7].x___; 29: MAD temp[0].x, temp[0].x___, temp[3].x___, temp[7].x___; 30: MUL temp[0].x, const[8].w___, temp[0].x___; 31: MUL temp[0].x, input[3].z___, temp[0].x___; 32: MAD temp[0].xy, temp[0].xx__, temp[4].xy__, temp[2].xy__; 33: RCP temp[2].x, const[6].x___; 34: RCP temp[2].y, const[6]._y__; 35: MAD temp[6].xy, temp[0].xy__, temp[2].xy__, const[7].xy__; 36: ADD temp[0].x, none.1___, -temp[5].x___; 37: MUL temp[0].x, input[1].x___, temp[0].x___; 38: MAD temp[0].x, input[1].y___, temp[5].x___, temp[0].x___; 39: ADD temp[0].x, temp[0].x___, -const[5].x___; 40: MOV temp[6].z, temp[0].__x_; 41: SLT temp[0].x, none.0___, temp[1].w___; 42: SLT temp[9].x, temp[1].w___, none.0___; 43: ADD temp[0].x, temp[0].x___, -temp[9].x___; 44: MUL temp[0], temp[0].xxxx, temp[6]; 45: MOV output[2], input[2].xxxx; 46: MOV output[1].xy, input[3].xy__; 47: MOV output[0], temp[0]; 48: MOV output[3], temp[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: SLT temp[0].x, none.0___, const[4].x___; 1: ADD temp[1].x, none.1___, -temp[0].x___; 2: MUL temp[1].xy, input[0].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[0].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[4].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[4].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MUL temp[2].xy, const[6].xy__, temp[1].xy__; 9: RCP temp[3].x, temp[1].w___; 10: MUL temp[2].xy, temp[2].xy__, temp[3].xx__; 11: MUL temp[3].xyw, const[0].xy_w, input[4].zz_z; 12: MAD temp[3].xyw, const[1].xy_w, input[4].ww_w, temp[3].xy_w; 13: ADD temp[3].xyw, temp[3].xy_w, const[3].xy_w; 14: MUL temp[4].xy, const[6].xy__, temp[3].xy__; 15: RCP temp[3].x, temp[3].w___; 16: MUL temp[3].xy, temp[4].xy__, temp[3].xx__; 17: ADD temp[3].xy, temp[3].xy__, -temp[2].xy__; 18: DP4 temp[4].x, temp[3].xy00, temp[3].xy00; 19: RSQ temp[4].x, temp[4].x___; 20: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 21: MOV temp[4].x, -temp[3].y___; 22: MOV temp[4].y, temp[3]._x__; 23: RCP temp[3].x, temp[1].w___; 24: MOV temp[5], const[4].x___; 25: SLT temp[5].x, const[8].w___, temp[5]; 26: MOV temp[6].w, none.___1; 27: ADD temp[7].x, none.1___, -temp[3].x___; 28: MUL temp[7].x, temp[0].y___, temp[7].x___; 29: MAD temp[0].x, temp[0].x___, temp[3].x___, temp[7].x___; 30: MUL temp[0].x, const[8].w___, temp[0].x___; 31: MUL temp[0].x, input[3].z___, temp[0].x___; 32: MAD temp[0].xy, temp[0].xx__, temp[4].xy__, temp[2].xy__; 33: RCP temp[2].x, const[6].x___; 34: RCP temp[2].y, const[6]._y__; 35: MAD temp[6].xy, temp[0].xy__, temp[2].xy__, const[7].xy__; 36: ADD temp[0].x, none.1___, -temp[5].x___; 37: MUL temp[0].x, input[1].x___, temp[0].x___; 38: MAD temp[0].x, input[1].y___, temp[5].x___, temp[0].x___; 39: ADD temp[0].x, temp[0].x___, -const[5].x___; 40: MOV temp[6].z, temp[0].__x_; 41: SLT temp[0].x, none.0___, temp[1].w___; 42: SLT temp[1].x, temp[1].w___, none.0___; 43: ADD temp[0].x, temp[0].x___, -temp[1].x___; 44: MUL temp[0], temp[0].xxxx, temp[6]; 45: MOV output[2], input[2].xxxx; 46: MOV output[1].xy, input[3].xy__; 47: MOV output[0], temp[0]; 48: MOV output[3], temp[0]; CONST[8] = { 0.0000 1.0000 0.1250 0.5000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: SLT temp[0].x, none.0___, const[4].x___; 1: ADD temp[1].x, none.1___, -temp[0].x___; 2: MUL temp[1].xy, input[0].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[0].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[4].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[4].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MUL temp[2].xy, const[6].xy__, temp[1].xy__; 9: RCP temp[3].x, temp[1].w___; 10: MUL temp[2].xy, temp[2].xy__, temp[3].xx__; 11: MUL temp[3].xyw, const[0].xy_w, input[4].zz_z; 12: MAD temp[3].xyw, const[1].xy_w, input[4].ww_w, temp[3].xy_w; 13: ADD temp[3].xyw, temp[3].xy_w, const[3].xy_w; 14: MUL temp[4].xy, const[6].xy__, temp[3].xy__; 15: RCP temp[3].x, temp[3].w___; 16: MUL temp[3].xy, temp[4].xy__, temp[3].xx__; 17: ADD temp[3].xy, temp[3].xy__, -temp[2].xy__; 18: DP4 temp[4].x, temp[3].xy00, temp[3].xy00; 19: RSQ temp[4].x, temp[4].x___; 20: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 21: MOV temp[4].x, -temp[3].y___; 22: MOV temp[4].y, temp[3]._x__; 23: RCP temp[3].x, temp[1].w___; 24: MOV temp[5], const[4].x___; 25: SLT temp[5].x, const[8].w___, temp[5]; 26: MOV temp[6].w, none.___1; 27: ADD temp[7].x, none.1___, -temp[3].x___; 28: MUL temp[7].x, temp[0].y___, temp[7].x___; 29: MAD temp[0].x, temp[0].x___, temp[3].x___, temp[7].x___; 30: MUL temp[0].x, const[8].w___, temp[0].x___; 31: MUL temp[0].x, input[3].z___, temp[0].x___; 32: MAD temp[0].xy, temp[0].xx__, temp[4].xy__, temp[2].xy__; 33: RCP temp[2].x, const[6].x___; 34: RCP temp[2].y, const[6]._y__; 35: MAD temp[6].xy, temp[0].xy__, temp[2].xy__, const[7].xy__; 36: ADD temp[0].x, none.1___, -temp[5].x___; 37: MUL temp[0].x, input[1].x___, temp[0].x___; 38: MAD temp[0].x, input[1].y___, temp[5].x___, temp[0].x___; 39: ADD temp[0].x, temp[0].x___, -const[5].x___; 40: MOV temp[6].z, temp[0].__x_; 41: SLT temp[0].x, none.0___, temp[1].w___; 42: SLT temp[1].x, temp[1].w___, none.0___; 43: ADD temp[0].x, temp[0].x___, -temp[1].x___; 44: MUL temp[0], temp[0].xxxx, temp[6]; 45: MOV output[2], input[2].xxxx; 46: MOV output[1].xy, input[3].xy__; 47: MOV output[0], temp[0]; 48: MOV output[3], temp[0]; Final vertex program code: 0: op: 0x0010000a dst: 0t op: VE_SET_LESS_THAN src0: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src1: 0x01ff0082 reg: 4c swiz: X/ U/ U/ U src2: 0x01248082 reg: 4c swiz: 0/ 0/ 0/ 0 1: op: 0x00102003 dst: 1t op: VE_ADD src0: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src1: 0x1fff0000 reg: 0t swiz: -X/-U/-U/-U 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: 0x01f80020 reg: 1t swiz: X/ X/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 3: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01fb4001 reg: 0i swiz: Z/ W/ U/ U src1: 0x01f80000 reg: 0t swiz: X/ X/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 4: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01fa4102 reg: 8c swiz: Z/ Z/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 5: op: 0x00b02002 dst: 1t op: VE_MULTIPLY src0: 0x00f90002 reg: 0c swiz: X/ Y/ U/ W src1: 0x00380081 reg: 4i swiz: X/ X/ U/ X src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 6: op: 0x00b02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00f90022 reg: 1c swiz: X/ Y/ U/ W src1: 0x00792081 reg: 4i swiz: Y/ Y/ U/ Y src2: 0x00f90020 reg: 1t swiz: X/ Y/ U/ W 7: op: 0x00b02003 dst: 1t op: VE_ADD src0: 0x00f90020 reg: 1t swiz: X/ Y/ U/ W src1: 0x00f90062 reg: 3c swiz: X/ Y/ U/ W src2: 0x01248062 reg: 3c swiz: 0/ 0/ 0/ 0 8: op: 0x00304002 dst: 2t op: VE_MULTIPLY src0: 0x01f900c2 reg: 6c swiz: X/ Y/ U/ U src1: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 9: op: 0x00106046 dst: 3t op: ME_RECIP_DX src0: 0x00db6020 reg: 1t swiz: W/ W/ W/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 10: op: 0x00304002 dst: 2t op: VE_MULTIPLY src0: 0x01f90040 reg: 2t swiz: X/ Y/ U/ U src1: 0x01f80060 reg: 3t swiz: X/ X/ U/ U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 11: op: 0x00b06002 dst: 3t op: VE_MULTIPLY src0: 0x00f90002 reg: 0c swiz: X/ Y/ U/ W src1: 0x00ba4081 reg: 4i swiz: Z/ Z/ U/ Z src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 12: op: 0x00b06004 dst: 3t op: VE_MULTIPLY_ADD src0: 0x00f90022 reg: 1c swiz: X/ Y/ U/ W src1: 0x00fb6081 reg: 4i swiz: W/ W/ U/ W src2: 0x00f90060 reg: 3t swiz: X/ Y/ U/ W 13: op: 0x00b06003 dst: 3t op: VE_ADD src0: 0x00f90060 reg: 3t swiz: X/ Y/ U/ W src1: 0x00f90062 reg: 3c swiz: X/ Y/ U/ W src2: 0x01248062 reg: 3c swiz: 0/ 0/ 0/ 0 14: op: 0x00308002 dst: 4t op: VE_MULTIPLY src0: 0x01f900c2 reg: 6c swiz: X/ Y/ U/ U src1: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 15: op: 0x00106046 dst: 3t op: ME_RECIP_DX src0: 0x00db6060 reg: 3t swiz: W/ W/ W/ W src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 16: op: 0x00306002 dst: 3t op: VE_MULTIPLY src0: 0x01f90080 reg: 4t swiz: X/ Y/ U/ U src1: 0x01f80060 reg: 3t swiz: X/ X/ U/ U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 17: op: 0x00306003 dst: 3t op: VE_ADD src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x1ff90040 reg: 2t swiz: -X/-Y/-U/-U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 18: op: 0x00108001 dst: 4t op: VE_DOT_PRODUCT src0: 0x01210060 reg: 3t swiz: X/ Y/ 0/ 0 src1: 0x01210060 reg: 3t swiz: X/ Y/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 19: op: 0x00108048 dst: 4t op: ME_RECIP_SQRT_DX src0: 0x00000080 reg: 4t swiz: X/ X/ X/ X src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 20: op: 0x00306002 dst: 3t op: VE_MULTIPLY src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x01f80080 reg: 4t swiz: X/ X/ U/ U src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 21: op: 0x00108003 dst: 4t op: VE_ADD src0: 0x1fff2060 reg: 3t swiz: -Y/-U/-U/-U src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 22: op: 0x00208003 dst: 4t op: VE_ADD src0: 0x01f8e060 reg: 3t swiz: U/ X/ U/ U src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 23: op: 0x00106046 dst: 3t op: ME_RECIP_DX src0: 0x00db6020 reg: 1t swiz: W/ W/ W/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 24: op: 0x00f0a003 dst: 5t op: VE_ADD src0: 0x01ff0082 reg: 4c swiz: X/ U/ U/ U src1: 0x01248082 reg: 4c swiz: 0/ 0/ 0/ 0 src2: 0x01248082 reg: 4c swiz: 0/ 0/ 0/ 0 25: op: 0x0010a00a dst: 5t op: VE_SET_LESS_THAN src0: 0x01ff6102 reg: 8c swiz: W/ U/ U/ U src1: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 26: op: 0x0080c003 dst: 6t op: VE_ADD src0: 0x017fe000 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 27: op: 0x0010e003 dst: 7t op: VE_ADD src0: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src1: 0x1fff0060 reg: 3t swiz: -X/-U/-U/-U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 28: op: 0x0010e002 dst: 7t op: VE_MULTIPLY src0: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U src1: 0x01ff00e0 reg: 7t swiz: X/ U/ U/ U src2: 0x012480e0 reg: 7t swiz: 0/ 0/ 0/ 0 29: op: 0x00100080 dst: 0t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U src2: 0x01ff00e0 reg: 7t swiz: X/ U/ U/ U 30: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff6102 reg: 8c swiz: W/ U/ U/ U src1: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 31: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff4061 reg: 3i swiz: Z/ U/ U/ U src1: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 32: op: 0x00300080 dst: 0t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01f80000 reg: 0t swiz: X/ X/ U/ U src1: 0x01f90080 reg: 4t swiz: X/ Y/ U/ U src2: 0x01f90040 reg: 2t swiz: X/ Y/ U/ U 33: op: 0x00104046 dst: 2t op: ME_RECIP_DX src0: 0x000000c2 reg: 6c swiz: X/ X/ X/ X src1: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 34: op: 0x00204046 dst: 2t op: ME_RECIP_DX src0: 0x004920c2 reg: 6c swiz: Y/ Y/ Y/ Y src1: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 35: op: 0x0030c004 dst: 6t op: VE_MULTIPLY_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f90040 reg: 2t swiz: X/ Y/ U/ U src2: 0x01f900e2 reg: 7c swiz: X/ Y/ U/ U 36: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src1: 0x1fff00a0 reg: 5t swiz: -X/-U/-U/-U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 37: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff0021 reg: 1i swiz: X/ U/ U/ U src1: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 38: op: 0x00100004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01ff2021 reg: 1i swiz: Y/ U/ U/ U src1: 0x01ff00a0 reg: 5t swiz: X/ U/ U/ U src2: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U 39: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x1fff00a2 reg: 5c swiz: -X/-U/-U/-U src2: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 40: op: 0x0040c003 dst: 6t op: VE_ADD src0: 0x01c7e000 reg: 0t swiz: U/ U/ X/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 41: op: 0x0010000a dst: 0t op: VE_SET_LESS_THAN src0: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src1: 0x01ff6020 reg: 1t swiz: W/ U/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 42: op: 0x0010200a dst: 1t op: VE_SET_LESS_THAN src0: 0x01ff6020 reg: 1t swiz: W/ U/ U/ U src1: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 43: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x1fff0020 reg: 1t swiz: -X/-U/-U/-U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 44: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00000000 reg: 0t swiz: X/ X/ X/ X src1: 0x00d100c0 reg: 6t swiz: X/ Y/ Z/ W src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 45: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00000041 reg: 2i swiz: X/ X/ X/ X src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 46: op: 0x00302203 dst: 1o op: VE_ADD src0: 0x01f90061 reg: 3i swiz: X/ Y/ U/ U src1: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 47: 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 48: 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 fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[12], PERSPECTIVE DCL IN[1], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL CONST[2] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL IMM FLT32 { 0.5000, 26.0000, 0.0000, 127.5000} IMM FLT32 { 2.0000, 1.0000, 0.0000, 0.0000} 0: ADD TEMP[0].x, IN[0].yyyy, IMM[0].xxxx 1: RCP TEMP[1].x, CONST[2].xxxx 2: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[1].xxxx 3: FRC TEMP[1].x, TEMP[0].xxxx 4: FLR TEMP[0].x, TEMP[0].xxxx 5: MAD TEMP[0].x, IMM[0].yyyy, TEMP[0].xxxx, CONST[0].xxxx 6: ADD TEMP[0].x, TEMP[0].xxxx, IMM[0].xxxx 7: RCP TEMP[2].x, CONST[2].yyyy 8: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[2].xxxx 9: MOV TEMP[1].y, TEMP[0].xxxx 10: MOV TEMP[0].x, IMM[0].zzzz 11: RCP TEMP[2].x, CONST[2].yyyy 12: MOV TEMP[0].y, TEMP[2].xxxx 13: MAD TEMP[0].xy, IMM[1].xxxx, TEMP[0].xyyy, TEMP[1].xyyy 14: TEX TEMP[0].xy, TEMP[0].xyyy, SAMP[0], 2D 15: MUL TEMP[0].xy, IMM[0].wwww, TEMP[0].xyyy 16: RCP TEMP[2].x, TEMP[0].yyyy 17: MUL TEMP[2].x, IN[1].xxxx, TEMP[2].xxxx 18: FRC TEMP[2].x, TEMP[2].xxxx 19: MUL TEMP[2].x, TEMP[0].yyyy, TEMP[2].xxxx 20: SGE TEMP[2].x, TEMP[2].xxxx, TEMP[0].xxxx 21: SLT TEMP[2].x, IMM[0].xxxx, TEMP[2].xxxx 22: CMP TEMP[0].x, -TEMP[2].xxxx, IMM[1].yyyy, IMM[0].zzzz 23: KIL -TEMP[0].xxxx 24: TEX TEMP[0], TEMP[1].xyyy, SAMP[0], 2D 25: MOV OUT[0], TEMP[0] 26: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[4].xxxx, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0].xy, temp[0].xyyy, 2D[0]; 15: MUL temp[0].xy, const[3].wwww, temp[0].xyyy; 16: RCP temp[2].x, temp[0].yyyy; 17: MUL temp[2].x, input[1].xxxx, temp[2].xxxx; 18: FRC temp[2].x, temp[2].xxxx; 19: MUL temp[2].x, temp[0].yyyy, temp[2].xxxx; 20: SGE temp[2].x, temp[2].xxxx, temp[0].xxxx; 21: SLT temp[2].x, const[3].xxxx, temp[2].xxxx; 22: CMP temp[0].x, -temp[2].xxxx, const[4].yyyy, const[3].zzzz; 23: KIL -temp[0].xxxx; 24: TEX temp[0], temp[1].xyyy, 2D[0]; 25: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[4].xxxx, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0].xy, temp[0].xyyy, 2D[0]; 15: MUL temp[0].xy, const[3].wwww, temp[0].xyyy; 16: RCP temp[2].x, temp[0].yyyy; 17: MUL temp[2].x, input[1].xxxx, temp[2].xxxx; 18: FRC temp[2].x, temp[2].xxxx; 19: MUL temp[2].x, temp[0].yyyy, temp[2].xxxx; 20: SGE temp[2].x, temp[2].xxxx, temp[0].xxxx; 21: SLT temp[2].x, const[3].xxxx, temp[2].xxxx; 22: CMP temp[0].x, -temp[2].xxxx, const[4].yyyy, const[3].zzzz; 23: KIL -temp[0].xxxx; 24: TEX temp[0], temp[1].xyyy, 2D[0]; 25: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[4].xxxx, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0].xy, temp[0].xyyy, 2D[0]; 15: MUL temp[0].xy, const[3].wwww, temp[0].xyyy; 16: RCP temp[2].x, temp[0].yyyy; 17: MUL temp[2].x, input[1].xxxx, temp[2].xxxx; 18: FRC temp[2].x, temp[2].xxxx; 19: MUL temp[2].x, temp[0].yyyy, temp[2].xxxx; 20: SGE temp[2].x, temp[2].xxxx, temp[0].xxxx; 21: SLT temp[2].x, const[3].xxxx, temp[2].xxxx; 22: CMP temp[0].x, -temp[2].xxxx, const[4].yyyy, const[3].zzzz; 23: KIL -temp[0].xxxx; 24: TEX temp[0], temp[1].xyyy, 2D[0]; 25: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[4].xxxx, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0].xy, temp[0].xyyy, 2D[0]; 15: MUL temp[0].xy, const[3].wwww, temp[0].xyyy; 16: RCP temp[2].x, temp[0].yyyy; 17: MUL temp[2].x, input[1].xxxx, temp[2].xxxx; 18: FRC temp[2].x, temp[2].xxxx; 19: MUL temp[2].x, temp[0].yyyy, temp[2].xxxx; 20: SGE temp[2].x, temp[2].xxxx, temp[0].xxxx; 21: SLT temp[2].x, const[3].xxxx, temp[2].xxxx; 22: CMP temp[0].x, -temp[2].xxxx, const[4].yyyy, const[3].zzzz; 23: KIL -temp[0].xxxx; 24: TEX temp[0], temp[1].xyyy, 2D[0]; 25: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[4].xxxx, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0].xy, temp[0].xyyy, 2D[0]; 15: MUL temp[0].xy, const[3].wwww, temp[0].xyyy; 16: RCP temp[2].x, temp[0].yyyy; 17: MUL temp[2].x, input[1].xxxx, temp[2].xxxx; 18: FRC temp[2].x, temp[2].xxxx; 19: MUL temp[2].x, temp[0].yyyy, temp[2].xxxx; 20: SGE temp[2].x, temp[2].xxxx, temp[0].xxxx; 21: SLT temp[2].x, const[3].xxxx, temp[2].xxxx; 22: CMP temp[0].x, -temp[2].xxxx, const[4].yyyy, const[3].zzzz; 23: KIL -temp[0].xxxx; 24: TEX temp[0], temp[1].xyyy, 2D[0]; 25: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[4].xxxx, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[3], temp[0].xyyy, 2D[0]; 15: MOV temp[0].xy, temp[3]; 16: MUL temp[0].xy, const[3].wwww, temp[0].xyyy; 17: RCP temp[2].x, temp[0].yyyy; 18: MUL temp[2].x, input[1].xxxx, temp[2].xxxx; 19: FRC temp[2].x, temp[2].xxxx; 20: MUL temp[2].x, temp[0].yyyy, temp[2].xxxx; 21: SGE temp[2].x, temp[2].xxxx, temp[0].xxxx; 22: SLT temp[2].x, const[3].xxxx, temp[2].xxxx; 23: CMP temp[0].x, -temp[2].xxxx, const[4].yyyy, const[3].zzzz; 24: KIL -temp[0].xxxx; 25: TEX temp[0], temp[1].xyyy, 2D[0]; 26: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FRC temp[4].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, -temp[4]; 6: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 7: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 8: RCP temp[2].x, const[2].yyyy; 9: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 10: MOV temp[1].y, temp[0].xxxx; 11: MOV temp[0].x, const[3].zzzz; 12: RCP temp[2].x, const[2].yyyy; 13: MOV temp[0].y, temp[2].xxxx; 14: MAD temp[0].xy, const[4].xxxx, temp[0].xyyy, temp[1].xyyy; 15: TEX temp[3], temp[0].xyyy, 2D[0]; 16: MOV temp[0].xy, temp[3]; 17: MUL temp[0].xy, const[3].wwww, temp[0].xyyy; 18: RCP temp[2].x, temp[0].yyyy; 19: MUL temp[2].x, input[1].xxxx, temp[2].xxxx; 20: FRC temp[2].x, temp[2].xxxx; 21: MUL temp[2].x, temp[0].yyyy, temp[2].xxxx; 22: ADD temp[5].x, temp[2].xxxx, -temp[0].xxxx; 23: CMP temp[2].x, temp[5], none.0000, none.1111; 24: ADD temp[6].x, const[3].xxxx, -temp[2].xxxx; 25: CMP temp[2].x, temp[6], none.1111, none.0000; 26: CMP temp[0].x, -temp[2].xxxx, const[4].yyyy, const[3].zzzz; 27: KIL -temp[0].xxxx; 28: TEX temp[0], temp[1].xyyy, 2D[0]; 29: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].x, input[0].y___, const[3].x___; 1: RCP temp[1].x, const[2].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[4].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[4].x___; 6: MAD temp[0].x, const[3].y___, temp[0].x___, const[0].x___; 7: ADD temp[0].x, temp[0].x___, const[3].x___; 8: RCP temp[2].x, const[2].y___; 9: MUL temp[0].x, temp[0].x___, temp[2].x___; 10: MOV temp[1].y, temp[0]._x__; 11: MOV temp[0].x, const[3].z___; 12: RCP temp[2].x, const[2].y___; 13: MOV temp[0].y, temp[2]._x__; 14: MAD temp[0].xy, const[4].xx__, temp[0].xy__, temp[1].xy__; 15: TEX temp[3].xy, temp[0].xy__, 2D[0]; 16: MOV temp[0].xy, temp[3].xy__; 17: MUL temp[0].xy, const[3].ww__, temp[0].xy__; 18: RCP temp[2].x, temp[0].y___; 19: MUL temp[2].x, input[1].x___, temp[2].x___; 20: FRC temp[2].x, temp[2].x___; 21: MUL temp[2].x, temp[0].y___, temp[2].x___; 22: ADD temp[5].x, temp[2].x___, -temp[0].x___; 23: CMP temp[2].x, temp[5].x___, none.0___, none.1___; 24: ADD temp[6].x, const[3].x___, -temp[2].x___; 25: CMP temp[2].x, temp[6].x___, none.1___, none.0___; 26: CMP temp[0].x, -temp[2].x___, const[4].y___, const[3].z___; 27: KIL -temp[0].xxxx; 28: TEX temp[0], temp[1].xy__, 2D[0]; 29: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].x, input[0].y___, const[3].x___; 1: RCP temp[1].x, const[2].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[4].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[4].x___; 6: MAD temp[0].x, const[3].y___, temp[0].x___, const[0].x___; 7: ADD temp[0].x, temp[0].x___, const[3].x___; 8: RCP temp[2].x, const[2].y___; 9: MUL temp[0].x, temp[0].x___, temp[2].x___; 10: MOV temp[1].y, temp[0]._x__; 11: MOV temp[0].x, const[3].z___; 12: RCP temp[2].x, const[2].y___; 13: MOV temp[0].y, temp[2]._x__; 14: MAD temp[0].xy, const[4].xx__, temp[0].xy__, temp[1].xy__; 15: TEX temp[3].xy, temp[0].xy__, 2D[0]; 16: MOV temp[0].xy, temp[3].xy__; 17: MUL temp[0].xy, const[3].ww__, temp[0].xy__; 18: RCP temp[2].x, temp[0].y___; 19: MUL temp[2].x, input[1].x___, temp[2].x___; 20: FRC temp[2].x, temp[2].x___; 21: MUL temp[2].x, temp[0].y___, temp[2].x___; 22: ADD temp[5].x, temp[2].x___, -temp[0].x___; 23: CMP temp[2].x, temp[5].x___, none.0___, none.1___; 24: ADD temp[6].x, const[3].x___, -temp[2].x___; 25: CMP temp[2].x, temp[6].x___, none.1___, none.0___; 26: CMP temp[0].x, -temp[2].x___, const[4].y___, const[3].z___; 27: KIL -temp[0].xxxx; 28: TEX temp[0], temp[1].xy__, 2D[0]; 29: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[7].x, input[0].y___, const[3].x___; 1: RCP temp[8].x, const[2].x___; 2: MUL temp[9].x, temp[7].x___, temp[8].x___; 3: FRC temp[10].x, temp[9].x___; 4: FRC temp[11].x, temp[9].x___; 5: ADD temp[12].x, temp[9].x___, -temp[11].x___; 6: MAD temp[13].x, const[3].y___, temp[12].x___, const[0].x___; 7: ADD temp[14].x, temp[13].x___, const[3].x___; 8: RCP temp[15].x, const[2].y___; 9: MUL temp[16].x, temp[14].x___, temp[15].x___; 10: MOV temp[10].y, temp[16]._x__; 11: MOV temp[17].x, const[3].z___; 12: RCP temp[18].x, const[2].y___; 13: MOV temp[17].y, temp[18]._x__; 14: MAD temp[19].xy, const[4].xx__, temp[17].xy__, temp[10].xy__; 15: TEX temp[20].xy, temp[19].xy__, 2D[0]; 16: MOV temp[21].xy, temp[20].xy__; 17: MUL temp[22].xy, const[3].ww__, temp[21].xy__; 18: RCP temp[23].x, temp[22].y___; 19: MUL temp[24].x, input[1].x___, temp[23].x___; 20: FRC temp[25].x, temp[24].x___; 21: MUL temp[26].x, temp[22].y___, temp[25].x___; 22: ADD temp[27].x, temp[26].x___, -temp[22].x___; 23: CMP temp[28].x, temp[27].x___, none.0___, none.1___; 24: ADD temp[29].x, const[3].x___, -temp[28].x___; 25: CMP temp[30].x, temp[29].x___, none.1___, none.0___; 26: CMP temp[31].x, -temp[30].x___, const[4].y___, const[3].z___; 27: KIL -temp[31].xxxx; 28: TEX temp[32], temp[10].xy__, 2D[0]; 29: MOV output[0], temp[32]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[7].x, input[0].y___, none.H___; 1: RCP temp[8].x, const[2].x___; 2: MUL temp[9].x, temp[7].x___, temp[8].x___; 3: FRC temp[10].x, temp[9].x___; 4: FRC temp[11].x, temp[9].x___; 5: ADD temp[12].x, temp[9].x___, -temp[11].x___; 6: MAD temp[13].x, const[3].y___, temp[12].x___, const[0].x___; 7: ADD temp[14].x, temp[13].x___, none.H___; 8: RCP temp[15].x, const[2].y___; 9: MUL temp[16].x, temp[14].x___, temp[15].x___; 10: MOV temp[10].y, temp[16]._x__; 11: MOV temp[17].x, none.0___; 12: RCP temp[18].x, const[2].y___; 13: MOV temp[17].y, temp[18]._x__; 14: MAD temp[19].xy, const[4].xx__, temp[17].xy__, temp[10].xy__; 15: TEX temp[20].xy, temp[19].xy__, 2D[0]; 16: MUL temp[22].xy, const[3].ww__, temp[20].xy__; 17: RCP temp[23].x, temp[22].y___; 18: MUL temp[24].x, input[1].x___, temp[23].x___; 19: FRC temp[25].x, temp[24].x___; 20: MUL temp[26].x, temp[22].y___, temp[25].x___; 21: CMP temp[28].x, (temp[26] - temp[22]).x___, none.0___, none.1___; 22: ADD temp[29].x, none.H___, -temp[28].x___; 23: CMP temp[30].x, temp[29].x___, none.1___, none.0___; 24: CMP temp[31].x, -temp[30].x___, none.1___, none.0___; 25: KIL -temp[31].xxxx; 26: TEX temp[32], temp[10].xy__, 2D[0]; 27: MOV output[0], temp[32]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[7].x, input[0].y___, none.H___; 1: RCP temp[8].x, const[2].x___; 2: MUL temp[9].x, temp[7].x___, temp[8].x___; 3: FRC temp[10].x, temp[9].x___; 4: FRC temp[11].x, temp[9].x___; 5: ADD temp[12].x, temp[9].x___, -temp[11].x___; 6: MAD temp[13].x, const[3].y___, temp[12].x___, const[0].x___; 7: ADD temp[14].x, temp[13].x___, none.H___; 8: RCP temp[15].x, const[2].y___; 9: MUL temp[16].x, temp[14].x___, temp[15].x___; 10: MOV temp[10].y, temp[16]._x__; 11: MOV temp[17].x, none.0___; 12: RCP temp[18].x, const[2].y___; 13: MOV temp[17].y, temp[18]._x__; 14: MAD temp[19].xy, const[4].xx__, temp[17].xy__, temp[10].xy__; 15: TEX temp[20].xy, temp[19].xy__, 2D[0]; 16: MUL temp[22].xy, const[3].ww__, temp[20].xy__; 17: RCP temp[23].x, temp[22].y___; 18: MUL temp[24].x, input[1].x___, temp[23].x___; 19: FRC temp[25].x, temp[24].x___; 20: MUL temp[26].x, temp[22].y___, temp[25].x___; 21: CMP temp[28].x, (temp[26] - temp[22]).x___, none.0___, none.1___; 22: ADD temp[29].x, none.H___, -temp[28].x___; 23: CMP temp[30].x, temp[29].x___, none.1___, none.0___; 24: CMP temp[31].x, -temp[30].x___, none.1___, none.0___; 25: MOV temp[0], -temp[31].xxxx; 26: KIL temp[0]; 27: TEX temp[32], temp[10].xy__, 2D[0]; 28: MOV output[0], temp[32]; CONST[2] = { 0.5000 26.0000 0.0000 127.5000 } CONST[3] = { 2.0000 1.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[7].x, input[0].y___, none.H___; 1: RCP temp[8].x, const[1].x___; 2: MUL temp[9].x, temp[7].x___, temp[8].x___; 3: FRC temp[10].x, temp[9].x___; 4: FRC temp[11].x, temp[9].x___; 5: ADD temp[12].x, temp[9].x___, -temp[11].x___; 6: MAD temp[13].x, const[2].y___, temp[12].x___, const[0].x___; 7: ADD temp[14].x, temp[13].x___, none.H___; 8: RCP temp[15].x, const[1].y___; 9: MUL temp[16].x, temp[14].x___, temp[15].x___; 10: MOV temp[10].y, temp[16]._x__; 11: MOV temp[17].x, none.0___; 12: RCP temp[18].x, const[1].y___; 13: MOV temp[17].y, temp[18]._x__; 14: MAD temp[19].xy, const[3].xx__, temp[17].xy__, temp[10].xy__; 15: TEX temp[20].xy, temp[19].xy__, 2D[0]; 16: MUL temp[22].xy, const[2].ww__, temp[20].xy__; 17: RCP temp[23].x, temp[22].y___; 18: MUL temp[24].x, input[1].x___, temp[23].x___; 19: FRC temp[25].x, temp[24].x___; 20: MUL temp[26].x, temp[22].y___, temp[25].x___; 21: CMP temp[28].x, (temp[26] - temp[22]).x___, none.0___, none.1___; 22: ADD temp[29].x, none.H___, -temp[28].x___; 23: CMP temp[30].x, temp[29].x___, none.1___, none.0___; 24: CMP temp[31].x, -temp[30].x___, none.1___, none.0___; 25: MOV temp[0], -temp[31].xxxx; 26: KIL temp[0]; 27: TEX temp[32], temp[10].xy__, 2D[0]; 28: MOV output[0], temp[32]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[7].x, src0.y__, src0.111, src0.H__ 1: src0.xyz = const[1] REPL_ALPHA temp[8].x RCP, src0.x 2: src0.xyz = temp[7], src1.xyz = temp[8] MAD temp[9].x, src0.x__, src1.x__, src0.000 3: src0.xyz = temp[9] FRC temp[10].x, src0.x__ 4: src0.xyz = temp[9] FRC temp[11].x, src0.x__ 5: src0.xyz = temp[9], src1.xyz = temp[11] MAD temp[12].x, src0.x__, src0.111, -src1.x__ 6: src0.xyz = const[2], src1.xyz = temp[12], src2.xyz = const[0] MAD temp[13].x, src0.y__, src1.x__, src2.x__ 7: src0.xyz = temp[13] MAD temp[14].x, src0.x__, src0.111, src0.H__ 8: src0.xyz = const[1] REPL_ALPHA temp[15].x RCP, src0.y 9: src0.xyz = temp[14], src1.xyz = temp[15] MAD temp[16].x, src0.x__, src1.x__, src0.000 10: src0.xyz = temp[16] MAD temp[10].y, src0._x_, src0.111, src0.000 11: MAD temp[17].x, src0.0__, src0.111, src0.000 12: src0.xyz = const[1] REPL_ALPHA temp[18].x RCP, src0.y 13: src0.xyz = temp[18] MAD temp[17].y, src0._x_, src0.111, src0.000 14: src0.xyz = const[3], src1.xyz = temp[17], src2.xyz = temp[10] MAD temp[19].xy, src0.xx_, src1.xy_, src2.xy_ 15: TEX temp[20].xy, temp[19].xy__, 2D[0]; 16: src0.xyz = temp[20], src0.w = const[2] MAD temp[22].xy, src0.ww_, src0.xy_, src0.000 17: src0.xyz = temp[22] REPL_ALPHA temp[23].x RCP, src0.y 18: src0.xyz = input[1], src1.xyz = temp[23] MAD temp[24].x, src0.x__, src1.x__, src0.000 19: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 20: src0.xyz = temp[22], src1.xyz = temp[25] MAD temp[26].x, src0.y__, src1.x__, src0.000 21: src0.xyz = temp[22], src1.xyz = temp[26], srcp.xyz = (src1 - src0) CMP temp[28].x, src0.1__, src0.0__, srcp.x__ 22: src0.xyz = temp[28] MAD temp[29].x, src0.H__, src0.111, -src0.x__ 23: src0.xyz = temp[29] CMP temp[30].x, src0.0__, src0.1__, src0.x__ 24: src0.xyz = temp[30] CMP temp[31].x, src0.0__, src0.1__, -src0.x__ 25: src0.xyz = temp[31] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 26: KIL temp[0]; 27: TEX temp[32], temp[10].xy__, 2D[0]; 28: src0.xyz = temp[32], src0.w = temp[32] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[1] MAD temp[17].x, src0.0__, src0.111, src0.000 RCP temp[15].w, src0.y 1: src0.xyz = input[0], src1.xyz = const[1] MAD temp[7].x, src0.y__, src0.111, src0.H__ RCP temp[8].w, src1.x 2: src0.xyz = temp[7], src0.w = temp[8], src1.xyz = temp[8], src2.xyz = const[1] MAD temp[9].x, src0.x__, src0.w__, src0.000 RCP temp[18].w, src2.y 3: src0.xyz = temp[9] FRC temp[10].x, src0.x__ FRC temp[11].w, src0.x 4: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[11] MAD temp[17].y, src0._w_, src0.111, src0.000 MAD temp[12].w, src1.x, src0.1, -src1.w 5: src0.xyz = const[2], src0.w = temp[12], src1.xyz = temp[12], src2.xyz = const[0] MAD temp[13].x, src0.y__, src0.w__, src2.x__ 6: src0.xyz = temp[13] MAD temp[14].x, src0.x__, src0.111, src0.H__ 7: src0.xyz = temp[14], src0.w = temp[15], src1.xyz = temp[15] MAD temp[16].x, src0.x__, src0.w__, src0.000 8: src0.xyz = temp[16] MAD temp[10].y, src0._x_, src0.111, src0.000 9: src0.xyz = const[3], src1.xyz = temp[17], src2.xyz = temp[10] MAD temp[19].xy, src0.xx_, src1.xy_, src2.xy_ 10: BEGIN_TEX; 11: TEX temp[32], temp[10].xy__, 2D[0]; 12: TEX temp[20].xy, temp[19].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[20], src0.w = const[2] SEM_WAIT MAD temp[22].xy, src0.ww_, src0.xy_, src0.000 14: src0.xyz = temp[22] RCP temp[23].w, src0.y 15: src0.xyz = input[1], src0.w = temp[23], src1.xyz = temp[23] MAD temp[24].x, src0.x__, src0.w__, src0.000 16: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 17: src0.xyz = temp[22], src1.xyz = temp[25] MAD temp[26].x, src0.y__, src1.x__, src0.000 18: src0.xyz = temp[22], src1.xyz = temp[26], srcp.xyz = (src1 - src0) CMP temp[28].x, src0.1__, src0.0__, srcp.x__ 19: src0.xyz = temp[28] MAD temp[29].x, src0.H__, src0.111, -src0.x__ 20: src0.xyz = temp[29] CMP temp[30].x, src0.0__, src0.1__, src0.x__ 21: src0.xyz = temp[30] CMP temp[31].x, src0.0__, src0.1__, -src0.x__ 22: src0.xyz = temp[31] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 23: BEGIN_TEX; 24: KIL temp[0]; 25: src0.xyz = temp[32], src0.w = temp[32] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[1] MAD temp[17].x, src0.0__, src0.111, src0.000 RCP temp[15].w, src0.y 1: src0.xyz = input[0], src1.xyz = const[1] MAD temp[7].x, src0.y__, src0.111, src0.H__ RCP temp[8].w, src1.x 2: src0.xyz = temp[7], src0.w = temp[8], src2.xyz = const[1] MAD temp[9].x, src0.x__, src0.w__, src0.000 RCP temp[18].w, src2.y 3: src0.xyz = temp[9] FRC temp[10].x, src0.x__ FRC temp[11].w, src0.x 4: src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[11] MAD temp[17].y, src0._w_, src0.111, src0.000 MAD temp[12].w, src1.x, src0.1, -src1.w 5: src0.xyz = const[2], src0.w = temp[12], src2.xyz = const[0] MAD temp[13].x, src0.y__, src0.w__, src2.x__ 6: src0.xyz = temp[13] MAD temp[14].x, src0.x__, src0.111, src0.H__ 7: src0.xyz = temp[14], src0.w = temp[15] MAD temp[16].x, src0.x__, src0.w__, src0.000 8: src0.xyz = temp[16] MAD temp[10].y, src0._x_, src0.111, src0.000 9: src0.xyz = const[3], src1.xyz = temp[17], src2.xyz = temp[10] MAD temp[19].xy, src0.xx_, src1.xy_, src2.xy_ 10: BEGIN_TEX; 11: TEX temp[32], temp[10].xy__, 2D[0]; 12: TEX temp[20].xy, temp[19].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[20], src0.w = const[2] SEM_WAIT MAD temp[22].xy, src0.ww_, src0.xy_, src0.000 14: src0.xyz = temp[22] RCP temp[23].w, src0.y 15: src0.xyz = input[1], src0.w = temp[23] MAD temp[24].x, src0.x__, src0.w__, src0.000 16: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 17: src0.xyz = temp[22], src1.xyz = temp[25] MAD temp[26].x, src0.y__, src1.x__, src0.000 18: src0.xyz = temp[22], src1.xyz = temp[26], srcp.xyz = (src1 - src0) CMP temp[28].x, src0.1__, src0.0__, srcp.x__ 19: src0.xyz = temp[28] MAD temp[29].x, src0.H__, src0.111, -src0.x__ 20: src0.xyz = temp[29] CMP temp[30].x, src0.0__, src0.1__, src0.x__ 21: src0.xyz = temp[30] CMP temp[31].x, src0.0__, src0.1__, -src0.x__ 22: src0.xyz = temp[31] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 23: BEGIN_TEX; 24: KIL temp[0]; 25: src0.xyz = temp[32], src0.w = temp[32] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[1] MAD temp[2].x, src0.0__, src0.11_, src0.00_ RCP temp[0].w, src0.y 1: src0.xyz = input[0], src1.xyz = const[1] MAD temp[0].x, src0.y__, src0.1__, src0.H__ RCP temp[1].w, src1.x 2: src0.xyz = temp[0], src0.w = temp[1], src2.xyz = const[1] MAD temp[0].x, src0.x__, src0.w__, src0.0__ RCP temp[1].w, src2.y 3: src0.xyz = temp[0] FRC temp[3].x, src0.x__ FRC temp[2].w, src0.x 4: src0.w = temp[1], src1.xyz = temp[0], src1.w = temp[2] MAD temp[2].y, src0._w_, src0.11_, src0.00_ MAD temp[1].w, src1.x, src0.1, -src1.w 5: src0.xyz = const[2], src0.w = temp[1], src2.xyz = const[0] MAD temp[0].x, src0.y__, src0.w__, src2.x__ 6: src0.xyz = temp[0] MAD temp[0].x, src0.x__, src0.1__, src0.H__ 7: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].x, src0.x__, src0.w__, src0.0__ 8: src0.xyz = temp[0] MAD temp[3].y, src0._x_, src0.11_, src0.00_ 9: src0.xyz = const[3], src1.xyz = temp[2], src2.xyz = temp[3] MAD temp[0].xy, src0.xx_, src1.xy_, src2.xy_ 10: BEGIN_TEX; 11: TEX temp[2], temp[3].xy__, 2D[0]; 12: TEX temp[0].xy, temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 13: src0.xyz = temp[0], src0.w = const[2] SEM_WAIT MAD temp[0].xy, src0.ww_, src0.xy_, src0.00_ 14: src0.xyz = temp[0] RCP temp[0].w, src0.y 15: src0.xyz = input[1], src0.w = temp[0] MAD temp[0].z, src0.__x, src0.__w, src0.__0 16: src0.xyz = temp[0] FRC temp[0].z, src0.__z 17: src0.xyz = temp[0], src1.xyz = temp[0] MAD temp[1].x, src0.y__, src1.z__, src0.0__ 18: src0.xyz = temp[0], src1.xyz = temp[1], srcp.xyz = (src1 - src0) CMP temp[0].x, src0.1__, src0.0__, srcp.x__ 19: src0.xyz = temp[0] MAD temp[0].x, src0.H__, src0.1__, -src0.x__ 20: src0.xyz = temp[0] CMP temp[0].x, src0.0__, src0.1__, src0.x__ 21: src0.xyz = temp[0] CMP temp[0].x, src0.0__, src0.1__, -src0.x__ 22: src0.xyz = temp[0] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 23: BEGIN_TEX; 24: KIL temp[0]; 25: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=11************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 9, tex_end: 0 (code_addr: 00000240) 0: xyz: c1 t0 t0 bias-> t2.x (00880021) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 0.0 1.0 0.0 op: 00050a94 w: c1.y c1.x c1.x op: 05000001 1: xyz: t0 c1 t0 bias-> t0.x (00800840) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t0.yyy 1.0 0.5 op: 00058a82 w: c1.x t0.x t0.x op: 05000003 2: xyz: t0 t0 c1 bias-> t0.x (00821000) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t0.xyz t1.www 0.0 op: 00050600 w: c1.y t0.x t0.x op: 05000007 3: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t0.xyz t0.xxx t0.xxx op: 04804080 w: t0.x t0.x t0.x op: 03800000 4: xyz: t0 t0 t0 bias-> t2.y (01080000) w: t1 t2 t0 bias-> t1.w (00840081) xyz: t1.www 1.0 0.0 op: 00050a8c w: t0.x 1.0 -t2.w op: 000a8883 5: xyz: c2 t0 c0 bias-> t0.x (00820022) w: t1 t0 t0 bias-> (00000001) xyz: c2.yyy t1.www c0.xyz op: 00020602 w: c2.x c2.x c2.x op: 00000000 6: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.5 op: 00058a80 w: t0.x t0.x t0.x op: 00000000 7: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 8: xyz: t0 t0 t0 bias-> t3.y (010c0000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx 1.0 0.0 op: 00050a81 w: t0.x t0.x t0.x op: 00000000 9: xyz: c3 t2 t3 bias-> t0.xy (018030a3) w: t0 t0 t0 bias-> (00000000) xyz: c3.xxx t2.xyz t3.xyz op: 00020201 w: c3.x c3.x c3.x op: 00000000 NODE 1: alu_offset: 10, tex_offset: 0, alu_end: 9, tex_end: 1 (code_addr: 0002024a) TEX: TEX t2, t3, texture[0] (00008083) TEX t0, t0, texture[0] (00008000) 10: xyz: t0 t0 t0 bias-> t0.xy (01800000) w: c2 t0 t0 bias-> (00000022) xyz: c2.www t0.xyz 0.0 op: 0005000c w: t0.x t0.x t0.x op: 00000000 11: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.y t0.x t0.x op: 05000001 12: xyz: t1 t0 t0 bias-> t0.z (02000001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xxx t0.www 0.0 op: 00050601 w: t1.x t1.x t1.x op: 00000000 13: xyz: t0 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xxx t0.xxx op: 04804080 w: t0.x t0.x t0.x op: 00000000 14: xyz: t0 t0 t0 bias-> t1.x (00840000) w: t0 t0 t0 bias-> (00000000) xyz: t0.yyy t0.zzz 0.0 op: 80050382 NOP w: t0.x t0.x t0.x op: 00000000 15: xyz: t0 t1 t0 sub-> t0.x (00800040) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 0.0 srcp.xyz op: 0423ca15 w: t0.x t0.x t0.x op: 00000000 16: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: 0.5 1.0 -t0.xyz op: 00080a96 w: t0.x t0.x t0.x op: 00000000 17: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 t0.xyz op: 04000a94 w: t0.x t0.x t0.x op: 00000000 18: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 -t0.xyz op: 04080a94 w: t0.x t0.x t0.x op: 00000000 19: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t0.xxx 1.0 0.0 op: 00050aa1 w: -t0.x 1.0 0.0 op: 000408a0 NODE 2: alu_offset: 20, tex_offset: 2, alu_end: 0, tex_end: 0 (code_addr: 00402014) TEX: KIL t0, t0, texture[0] (00010000) 20: xyz: t2 t0 t0 bias-> o0.xyz (1c000002) w: t2 t0 t0 bias-> o0.w (01000002) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t2.w 1.0 0.0 op: 00040889 GLSL source for fragment shader 16: #version 120 vec4 x(in vec4 q, in float r){ return q; } uniform vec2 b; uniform sampler2D c; vec2 y(in float q, in float r){ (q = ((q + 0.5) / b[0])); return vec2(fract(q), ((((26.0 * floor(q)) + r) + 0.5) / b[1])); } vec2 z(){ return vec2(0.0, (1.0 / b[1])); } float A(in vec2 q){ return q[1]; } vec4 B(in vec2 q, in vec2 r){ return (vec4(127.5, 127.5, 255.0, 255.0) * texture2D(c, (q + (2.0 * r)))); } varying float g; varying vec2 j; uniform float k; void C(in float q){ float r = length((gl_PointCoord - 0.5)); (q *= step(r, 0.5)); if ((q == 0.0)) discard; } vec4 D(in vec4 q){ return q; } void main(){ vec4 q, r; vec2 s, t; (s = y(A(j), k)); (t = z()); (q = x(texture2D(c, s), j[0])); (r = B(s, t)); float u, v; (u = step(252.0, (r[0] + r[1]))); (v = (u * (((g > 0.5)) ? (r[2]) : ((((g < -0.5)) ? (1.0) : (r[3])))))); C(v); (gl_FragColor = D(q)); } GLSL IR for shader 16: ( (declare (uniform ) float k) (declare (in ) vec2 j) (declare (in ) float g) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 b) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (declare (in ) vec2 gl_PointCoord) (function x (signature vec4 (parameters (declare (in ) vec4 q) (declare (in ) float r) ) ( (return (var_ref q) ) )) ) (function y (signature vec2 (parameters (declare (in ) float q) (declare (in ) float r) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref q) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref q) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref q) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref r) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function z (signature vec2 (parameters ) ( (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (constant float (0.000000)) ) (assign (y) (var_ref vec_ctor) (expression float rcp (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function A (signature float (parameters (declare (in ) vec2 q) ) ( (return (swiz y (var_ref q) )) )) ) (function B (signature vec4 (parameters (declare (in ) vec2 q) (declare (in ) vec2 r) ) ( (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref c) (expression vec2 + (var_ref q) (expression vec2 * (constant float (2.000000)) (var_ref r) ) ) )) (return (expression vec4 * (constant vec4 (127.500000 127.500000 255.000000 255.000000)) (var_ref texture2D_retval) ) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) (function C (signature void (parameters (declare (in ) float q) ) ( (declare (temporary ) float length_retval) (call length (var_ref length_retval) ((expression vec2 + (var_ref gl_PointCoord) (expression float neg (constant float (0.500000)) ) ) )) (declare (temporary ) float step_retval) (call step (var_ref step_retval) ((var_ref length_retval) (constant float (0.500000)) )) (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (var_ref q) (var_ref step_retval) ) ) (assign (x) (var_ref q) (var_ref assignment_tmp) ) (if (expression bool all_equal (var_ref assignment_tmp) (constant float (0.000000)) ) ( (discard ) ) ()) )) ) (function length (signature float (parameters (declare (in ) vec2 arg0) ) ( )) ) (function step (signature float (parameters (declare (in ) float edge) (declare (in ) float x) ) ( )) ) (function D (signature vec4 (parameters (declare (in ) vec4 q) ) ( (return (var_ref q) ) )) ) (function main (signature void (parameters ) ( (declare () vec2 t) (declare () vec2 s) (declare () vec4 r) (declare () vec4 q) (declare (temporary ) float A_retval) (call A (var_ref A_retval) ((var_ref j) )) (declare (temporary ) vec2 y_retval) (call y (var_ref y_retval) ((var_ref A_retval) (var_ref k) )) (assign (xy) (var_ref s) (var_ref y_retval) ) (declare (temporary ) vec2 z_retval) (call z (var_ref z_retval) ()) (assign (xy) (var_ref t) (var_ref z_retval) ) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref c) (var_ref s) )) (declare (temporary ) vec4 x_retval) (call x (var_ref x_retval) ((var_ref texture2D_retval) (swiz x (var_ref j) ))) (assign (xyzw) (var_ref q) (var_ref x_retval) ) (declare (temporary ) vec4 B_retval) (call B (var_ref B_retval) ((var_ref s) (var_ref t) )) (assign (xyzw) (var_ref r) (var_ref B_retval) ) (declare (temporary ) float step_retval) (call step (var_ref step_retval) ((constant float (252.000000)) (expression float + (swiz x (var_ref B_retval) )(swiz y (var_ref B_retval) )) )) (declare (temporary ) float conditional_tmp) (if (expression bool > (var_ref g) (constant float (0.500000)) ) ( (assign (x) (var_ref conditional_tmp) (swiz z (var_ref r) )) ) ( (declare (temporary ) float conditional_tmp@65) (if (expression bool < (var_ref g) (constant float (-0.500000)) ) ( (assign (x) (var_ref conditional_tmp@65) (constant float (1.000000)) ) ) ( (assign (x) (var_ref conditional_tmp@65) (swiz w (var_ref r) )) )) (assign (x) (var_ref conditional_tmp) (var_ref conditional_tmp@65) ) )) (call C ((expression float * (var_ref step_retval) (var_ref conditional_tmp) ) )) (declare (temporary ) vec4 D_retval) (call D (var_ref D_retval) ((var_ref q) )) (assign (xyzw) (var_ref gl_FragColor) (var_ref D_retval) ) )) ) ) GLSL source for vertex shader 17: vec4 H(in vec4 x, in float y){ return x; } uniform vec2 b, f, p; uniform sampler2D c; vec2 I(in float x, in float y){ (x = ((x + 0.5) / b[0])); return vec2(fract(x), ((((26.0 * floor(x)) + y) + 0.5) / b[1])); } vec2 K(){ return vec2(0.0, (1.0 / b[1])); } float L(in vec2 x){ return x[1]; } varying float g; varying vec2 j; uniform float k, l, m, n; attribute vec2 t; attribute vec3 u; attribute vec4 v; attribute vec2 w; uniform mat4 o; vec2 O(){ return (mix(v.xy, v.zw, float((n > 0.0))) / 8.0); } vec4 P(in vec2 x, in vec2 y, in vec2 z){ vec4 A = (o * vec4(t, 0.0, 1.0)); (A.xy += (p * A[3])); return A; } vec4 Q(in vec4 x){ return vec4((x.xy / x[3]), (mix(w[0], w[1], float((n > 0.5))) - m), 1.0); } void R(in vec2 x, in vec4 y){ (gl_PointSize = (x[1] + ((x[0] - x[1]) / y[3]))); (gl_PointSize *= step(gl_PointSize, l)); } void main(){ float x, z; (x = u[0]); vec2 y, A, B, C; (y = u.xy); (z = u[2]); (A = O()); (j = y); vec4 E = P(B, C, A); R(A, E); (gl_Position = Q(E)); (g = z); } GLSL IR for shader 17: ( (declare (uniform ) mat4 o) (declare (in ) vec2 w) (declare (in ) vec4 v) (declare (in ) vec3 u) (declare (in ) vec2 t) (declare (uniform ) float n) (declare (uniform ) float m) (declare (uniform ) float l) (declare (uniform ) float k) (declare (out ) vec2 j) (declare (out ) float g) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 p) (declare (uniform ) vec2 f) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function H (signature vec4 (parameters (declare (in ) vec4 x) (declare (in ) float y) ) ( (return (var_ref x) ) )) ) (function I (signature vec2 (parameters (declare (in ) float x) (declare (in ) float y) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref x) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref x) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref x) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref y) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function K (signature vec2 (parameters ) ( (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (constant float (0.000000)) ) (assign (y) (var_ref vec_ctor) (expression float rcp (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function L (signature float (parameters (declare (in ) vec2 x) ) ( (return (swiz y (var_ref x) )) )) ) (function O (signature vec2 (parameters ) ( (declare (temporary ) vec2 mix_retval) (call mix (var_ref mix_retval) ((swiz xy (var_ref v) )(swiz zw (var_ref v) )(expression float b2f (expression bool > (var_ref n) (constant float (0.000000)) ) ) )) (return (expression vec2 / (var_ref mix_retval) (constant float (8.000000)) ) ) )) ) (function mix (signature vec2 (parameters (declare (in ) vec2 arg0) (declare (in ) vec2 arg1) (declare (in ) float arg2) ) ( )) (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) (declare (in ) float arg2) ) ( )) ) (function P (signature vec4 (parameters (declare (in ) vec2 x) (declare (in ) vec2 y) (declare (in ) vec2 z) ) ( (declare () vec4 A) (declare (temporary ) vec4 vec_ctor) (assign (zw) (var_ref vec_ctor) (constant vec2 (0.000000 1.000000)) ) (assign (xy) (var_ref vec_ctor) (var_ref t) ) (declare (temporary ) vec4 assignment_tmp) (assign (xyzw) (var_ref assignment_tmp) (expression vec4 * (var_ref o) (var_ref vec_ctor) ) ) (assign (zw) (var_ref A) (swiz zw (var_ref assignment_tmp) )) (assign (xy) (var_ref A) (expression vec2 + (swiz xy (var_ref assignment_tmp) )(expression vec2 * (var_ref p) (swiz w (var_ref assignment_tmp) )) ) ) (return (var_ref A) ) )) ) (function Q (signature vec4 (parameters (declare (in ) vec4 x) ) ( (declare (temporary ) float mix_retval) (call mix (var_ref mix_retval) ((swiz x (var_ref w) )(swiz y (var_ref w) )(expression float b2f (expression bool > (var_ref n) (constant float (0.500000)) ) ) )) (declare (temporary ) vec4 vec_ctor) (assign (w) (var_ref vec_ctor) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor) (expression vec2 / (swiz xy (var_ref x) )(swiz w (var_ref x) )) ) (assign (z) (var_ref vec_ctor) (expression float + (var_ref mix_retval) (expression float neg (var_ref m) ) ) ) (return (var_ref vec_ctor) ) )) ) (function R (signature void (parameters (declare (in ) vec2 x) (declare (in ) vec4 y) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float + (swiz y (var_ref x) )(expression float / (expression float + (swiz x (var_ref x) )(expression float neg (swiz y (var_ref x) )) ) (swiz w (var_ref y) )) ) ) (assign (x) (var_ref gl_PointSize) (var_ref assignment_tmp) ) (declare (temporary ) float step_retval) (call step (var_ref step_retval) ((var_ref assignment_tmp) (var_ref l) )) (assign (x) (var_ref gl_PointSize) (expression float * (var_ref gl_PointSize) (var_ref step_retval) ) ) )) ) (function step (signature float (parameters (declare (in ) float edge) (declare (in ) float x) ) ( )) ) (function main (signature void (parameters ) ( (declare () vec4 E) (declare () vec2 C) (declare () vec2 B) (declare () vec2 A) (declare () vec2 y) (declare () float z) (assign (xy) (var_ref y) (swiz xy (var_ref u) )) (assign (x) (var_ref z) (swiz z (var_ref u) )) (declare (temporary ) vec2 O_retval) (call O (var_ref O_retval) ()) (assign (xy) (var_ref A) (var_ref O_retval) ) (assign (xy) (var_ref j) (var_ref y) ) (declare (temporary ) vec4 P_retval) (call P (var_ref P_retval) ((var_ref B) (var_ref C) (var_ref O_retval) )) (assign (xyzw) (var_ref E) (var_ref P_retval) ) (call R ((var_ref A) (var_ref P_retval) )) (declare (temporary ) vec4 Q_retval) (call Q (var_ref Q_retval) ((var_ref E) )) (assign (xyzw) (var_ref gl_Position) (var_ref Q_retval) ) (assign (x) (var_ref g) (var_ref z) ) )) ) ) GLSL IR for linked vertex program 18: ( (declare (uniform ) mat4 o) (declare (in ) vec2 w) (declare (in ) vec4 v) (declare (in ) vec3 u) (declare (in ) vec2 t) (declare (uniform ) float n) (declare (uniform ) float m) (declare (uniform ) float l) (declare (out ) vec2 j) (declare (out ) float g) (declare (uniform ) vec2 p) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (function main (signature void (parameters ) ( (declare (temporary ) vec2 O_retval) (declare () float arg2) (assign (x) (var_ref arg2) (expression float b2f (expression bool > (var_ref n) (constant float (0.000000)) ) ) ) (assign (xy) (var_ref O_retval) (expression vec2 * (expression vec2 + (expression vec2 * (swiz xy (var_ref v) )(expression float + (constant float (1.000000)) (expression float neg (var_ref arg2) ) ) ) (expression vec2 * (swiz zw (var_ref v) )(var_ref arg2) ) ) (constant float (0.125000)) ) ) (assign (xy) (var_ref j) (swiz xy (var_ref u) )) (declare () vec4 A) (declare (temporary ) vec4 flattening_tmp) (assign (xyzw) (var_ref flattening_tmp) (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref o) (constant int (0)) ) (swiz x (var_ref t) )) (expression vec4 * (array_ref (var_ref o) (constant int (1)) ) (swiz y (var_ref t) )) ) (array_ref (var_ref o) (constant int (3)) ) ) ) (assign (zw) (var_ref A) (swiz zw (var_ref flattening_tmp) )) (assign (xy) (var_ref A) (expression vec2 + (swiz xy (var_ref flattening_tmp) )(expression vec2 * (var_ref p) (swiz w (var_ref flattening_tmp) )) ) ) (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float + (swiz y (var_ref O_retval) )(expression float * (expression float + (swiz x (var_ref O_retval) )(expression float neg (swiz y (var_ref O_retval) )) ) (expression float rcp (swiz w (var_ref flattening_tmp) )) ) ) ) (assign (x) (var_ref gl_PointSize) (expression float * (var_ref assignment_tmp) (expression float b2f (expression bool >= (var_ref l) (var_ref assignment_tmp) ) ) ) ) (declare () float arg2@66) (assign (x) (var_ref arg2@66) (expression float b2f (expression bool > (var_ref n) (constant float (0.500000)) ) ) ) (declare (temporary ) vec4 vec_ctor) (assign (w) (var_ref vec_ctor) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor) (expression vec2 * (swiz xy (var_ref A) )(expression float rcp (swiz w (var_ref flattening_tmp) )) ) ) (assign (z) (var_ref vec_ctor) (expression float + (expression float + (expression float * (swiz x (var_ref w) )(expression float + (constant float (1.000000)) (expression float neg (var_ref arg2@66) ) ) ) (expression float * (swiz y (var_ref w) )(var_ref arg2@66) ) ) (expression float neg (var_ref m) ) ) ) (assign (xyzw) (var_ref gl_Position) (var_ref vec_ctor) ) (assign (x) (var_ref g) (swiz z (var_ref u) )) (assign (x) (var_ref g@67) (var_ref g) ) (assign (xyzw) (var_ref gl_Position@68) (var_ref gl_Position) ) (assign (x) (var_ref gl_PointSize@69) (var_ref gl_PointSize) ) (assign (xy) (var_ref j@70) (var_ref j) ) )) ) ) GLSL IR for linked fragment program 18: ( (declare (uniform ) float k) (declare (in ) vec2 j) (declare (in ) float g) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_FragColor) (declare (in ) vec2 gl_PointCoord) (function main (signature void (parameters ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (expression float + (swiz y (var_ref j) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref b) )) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float fract (var_ref assignment_tmp) ) ) (assign (y) (var_ref vec_ctor) (expression float * (expression float + (expression float + (expression float * (constant float (26.000000)) (expression float floor (var_ref assignment_tmp) ) ) (var_ref k) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref b) )) ) ) (declare (temporary ) vec2 vec_ctor@71) (assign (x) (var_ref vec_ctor@71) (constant float (0.000000)) ) (assign (y) (var_ref vec_ctor@71) (expression float rcp (swiz y (var_ref b) )) ) (declare (temporary ) vec4 B_retval) (assign (xyzw) (var_ref B_retval) (expression vec4 * (constant vec4 (127.500000 127.500000 255.000000 255.000000)) (tex vec4 (var_ref c) (expression vec2 + (var_ref vec_ctor) (expression vec2 * (constant float (2.000000)) (var_ref vec_ctor@71) ) ) 0 1 () )) ) (declare (temporary ) float conditional_tmp) (declare (temporary ) bool if_to_cond_assign_then) (assign (x) (var_ref if_to_cond_assign_then) (expression bool > (var_ref g) (constant float (0.500000)) ) ) (assign (var_ref if_to_cond_assign_then) (x) (var_ref conditional_tmp) (swiz z (var_ref B_retval) )) (declare (temporary ) bool if_to_cond_assign_else) (assign (x) (var_ref if_to_cond_assign_else) (expression bool ! (var_ref if_to_cond_assign_then) ) ) (declare (temporary ) float conditional_tmp@72) (declare (temporary ) bool if_to_cond_assign_then@73) (assign (x) (var_ref if_to_cond_assign_then@73) (expression bool && (var_ref if_to_cond_assign_else) (expression bool < (var_ref g) (constant float (-0.500000)) ) ) ) (assign (var_ref if_to_cond_assign_then@73) (x) (var_ref conditional_tmp@72) (constant float (1.000000)) ) (assign (expression bool && (var_ref if_to_cond_assign_else) (expression bool ! (var_ref if_to_cond_assign_then@73) ) ) (x) (var_ref conditional_tmp@72) (swiz w (var_ref B_retval) )) (assign (var_ref if_to_cond_assign_else) (x) (var_ref conditional_tmp) (var_ref conditional_tmp@72) ) (declare () float q) (assign (x) (var_ref q) (expression float * (expression float b2f (expression bool >= (expression float + (swiz x (var_ref B_retval) )(swiz y (var_ref B_retval) )) (constant float (252.000000)) ) ) (var_ref conditional_tmp) ) ) (declare () vec2 arg0) (assign (xy) (var_ref arg0) (expression vec2 + (var_ref gl_PointCoord) (constant float (-0.500000)) ) ) (declare (temporary ) float assignment_tmp@74) (assign (x) (var_ref assignment_tmp@74) (expression float * (var_ref q) (expression float b2f (expression bool >= (constant float (0.500000)) (expression float sqrt (expression float dot (var_ref arg0) (var_ref arg0) ) ) ) ) ) ) (assign (x) (var_ref q) (var_ref assignment_tmp@74) ) (declare (temporary ) bool discard_cond_temp) (assign (x) (var_ref discard_cond_temp) (constant bool (0)) ) (assign (expression bool all_equal (var_ref assignment_tmp@74) (constant float (0.000000)) ) (x) (var_ref discard_cond_temp) (constant bool (1)) ) (discard (var_ref discard_cond_temp) ) (assign (xyzw) (var_ref gl_FragColor) (tex vec4 (var_ref c) (var_ref vec_ctor) 0 1 () )) (assign (xyzw) (var_ref gl_FragColor@75) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL OUT[0], POSITION DCL OUT[1], PSIZE DCL OUT[2], GENERIC[12] DCL OUT[3], GENERIC[13] DCL CONST[0..7] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL IMM FLT32 { 0.0000, 1.0000, 0.1250, 0.5000} 0: SLT TEMP[0].x, IMM[0].xxxx, CONST[4].xxxx 1: ADD TEMP[1].x, IMM[0].yyyy, -TEMP[0].xxxx 2: MUL TEMP[1].xy, IN[1].xyyy, TEMP[1].xxxx 3: MAD TEMP[0].xy, IN[1].zwww, TEMP[0].xxxx, TEMP[1].xyyy 4: MUL TEMP[0].xy, TEMP[0].xyyy, IMM[0].zzzz 5: MUL TEMP[1], CONST[0], IN[3].xxxx 6: MAD TEMP[1], CONST[1], IN[3].yyyy, TEMP[1] 7: ADD TEMP[1].xyw, TEMP[1], CONST[3] 8: MAD TEMP[2].xy, CONST[7].xyyy, TEMP[1].wwww, TEMP[1].xyyy 9: ADD TEMP[3].x, TEMP[0].xxxx, -TEMP[0].yyyy 10: RCP TEMP[4].x, TEMP[1].wwww 11: MAD TEMP[0].x, TEMP[3].xxxx, TEMP[4].xxxx, TEMP[0].yyyy 12: SGE TEMP[3].x, CONST[6].xxxx, TEMP[0].xxxx 13: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[3].xxxx 14: SLT TEMP[3].x, IMM[0].wwww, CONST[4].xxxx 15: MOV TEMP[4].w, IMM[0].yyyy 16: RCP TEMP[1].x, TEMP[1].wwww 17: MUL TEMP[4].xy, TEMP[2].xyyy, TEMP[1].xxxx 18: ADD TEMP[1].x, IMM[0].yyyy, -TEMP[3].xxxx 19: MUL TEMP[1].x, IN[0].xxxx, TEMP[1].xxxx 20: MAD TEMP[1].x, IN[0].yyyy, TEMP[3].xxxx, TEMP[1].xxxx 21: ADD TEMP[1].x, TEMP[1].xxxx, -CONST[5].xxxx 22: MOV TEMP[4].z, TEMP[1].xxxx 23: MOV OUT[3], IN[2].zzzz 24: MOV OUT[0], TEMP[4] 25: MOV OUT[1], TEMP[0].xxxx 26: MOV OUT[2].xy, IN[2].xyxx 27: END Vertex Program: before compilation # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[1].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[3].xxxx; 6: MAD temp[1], const[1], input[3].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MAD temp[2].xy, const[7].xyyy, temp[1].wwww, temp[1].xyyy; 9: ADD temp[3].x, temp[0].xxxx, -temp[0].yyyy; 10: RCP temp[4].x, temp[1].wwww; 11: MAD temp[0].x, temp[3].xxxx, temp[4].xxxx, temp[0].yyyy; 12: SGE temp[3].x, const[6].xxxx, temp[0].xxxx; 13: MUL temp[0].x, temp[0].xxxx, temp[3].xxxx; 14: SLT temp[3].x, const[8].wwww, const[4].xxxx; 15: MOV temp[4].w, const[8].yyyy; 16: RCP temp[1].x, temp[1].wwww; 17: MUL temp[4].xy, temp[2].xyyy, temp[1].xxxx; 18: ADD temp[1].x, const[8].yyyy, -temp[3].xxxx; 19: MUL temp[1].x, input[0].xxxx, temp[1].xxxx; 20: MAD temp[1].x, input[0].yyyy, temp[3].xxxx, temp[1].xxxx; 21: ADD temp[1].x, temp[1].xxxx, -const[5].xxxx; 22: MOV temp[4].z, temp[1].xxxx; 23: MOV output[3], input[2].zzzz; 24: MOV temp[5], temp[4]; 25: MOV output[1], temp[0].xxxx; 26: MOV output[2].xy, input[2].xyxx; 27: MOV output[0], temp[5]; 28: MOV output[4], temp[5]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[1].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[3].xxxx; 6: MAD temp[1], const[1], input[3].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MAD temp[2].xy, const[7].xyyy, temp[1].wwww, temp[1].xyyy; 9: ADD temp[3].x, temp[0].xxxx, -temp[0].yyyy; 10: RCP temp[4].x, temp[1].wwww; 11: MAD temp[0].x, temp[3].xxxx, temp[4].xxxx, temp[0].yyyy; 12: SGE temp[3].x, const[6].xxxx, temp[0].xxxx; 13: MUL temp[0].x, temp[0].xxxx, temp[3].xxxx; 14: SLT temp[3].x, const[8].wwww, const[4].xxxx; 15: MOV temp[4].w, const[8].yyyy; 16: RCP temp[1].x, temp[1].wwww; 17: MUL temp[4].xy, temp[2].xyyy, temp[1].xxxx; 18: ADD temp[1].x, const[8].yyyy, -temp[3].xxxx; 19: MUL temp[1].x, input[0].xxxx, temp[1].xxxx; 20: MAD temp[1].x, input[0].yyyy, temp[3].xxxx, temp[1].xxxx; 21: ADD temp[1].x, temp[1].xxxx, -const[5].xxxx; 22: MOV temp[4].z, temp[1].xxxx; 23: MOV output[3], input[2].zzzz; 24: MOV temp[5], temp[4]; 25: MOV output[1], temp[0].xxxx; 26: MOV output[2].xy, input[2].xyxx; 27: MOV output[0], temp[5]; 28: MOV output[4], temp[5]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[1].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[3].xxxx; 6: MAD temp[1], const[1], input[3].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MAD temp[2].xy, const[7].xyyy, temp[1].wwww, temp[1].xyyy; 9: ADD temp[3].x, temp[0].xxxx, -temp[0].yyyy; 10: RCP temp[4].x, temp[1].wwww; 11: MAD temp[0].x, temp[3].xxxx, temp[4].xxxx, temp[0].yyyy; 12: SGE temp[3].x, const[6].xxxx, temp[0].xxxx; 13: MUL temp[0].x, temp[0].xxxx, temp[3].xxxx; 14: SLT temp[3].x, const[8].wwww, const[4].xxxx; 15: MOV temp[4].w, const[8].yyyy; 16: RCP temp[1].x, temp[1].wwww; 17: MUL temp[4].xy, temp[2].xyyy, temp[1].xxxx; 18: ADD temp[1].x, const[8].yyyy, -temp[3].xxxx; 19: MUL temp[1].x, input[0].xxxx, temp[1].xxxx; 20: MAD temp[1].x, input[0].yyyy, temp[3].xxxx, temp[1].xxxx; 21: ADD temp[1].x, temp[1].xxxx, -const[5].xxxx; 22: MOV temp[4].z, temp[1].xxxx; 23: MOV output[3], input[2].zzzz; 24: MOV temp[5], temp[4]; 25: MOV output[1], temp[0].xxxx; 26: MOV output[2].xy, input[2].xyxx; 27: MOV output[0], temp[5]; 28: MOV output[4], temp[5]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[1].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[3].xxxx; 6: MAD temp[1], const[1], input[3].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MAD temp[2].xy, const[7].xyyy, temp[1].wwww, temp[1].xyyy; 9: ADD temp[3].x, temp[0].xxxx, -temp[0].yyyy; 10: RCP temp[4].x, temp[1].wwww; 11: MAD temp[0].x, temp[3].xxxx, temp[4].xxxx, temp[0].yyyy; 12: SGE temp[3].x, const[6].xxxx, temp[0].xxxx; 13: MUL temp[0].x, temp[0].xxxx, temp[3].xxxx; 14: SLT temp[3].x, const[8].wwww, const[4].xxxx; 15: MOV temp[4].w, const[8].yyyy; 16: RCP temp[1].x, temp[1].wwww; 17: MUL temp[4].xy, temp[2].xyyy, temp[1].xxxx; 18: ADD temp[1].x, const[8].yyyy, -temp[3].xxxx; 19: MUL temp[1].x, input[0].xxxx, temp[1].xxxx; 20: MAD temp[1].x, input[0].yyyy, temp[3].xxxx, temp[1].xxxx; 21: ADD temp[1].x, temp[1].xxxx, -const[5].xxxx; 22: MOV temp[4].z, temp[1].xxxx; 23: MOV output[3], input[2].zzzz; 24: MOV temp[5], temp[4]; 25: MOV output[1], temp[0].xxxx; 26: MOV output[2].xy, input[2].xyxx; 27: MOV output[0], temp[5]; 28: MOV output[4], temp[5]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: SLT temp[0].x, const[8].xxxx, const[4].xxxx; 1: ADD temp[1].x, const[8].yyyy, -temp[0].xxxx; 2: MUL temp[1].xy, input[1].xyyy, temp[1].xxxx; 3: MAD temp[0].xy, input[1].zwww, temp[0].xxxx, temp[1].xyyy; 4: MUL temp[0].xy, temp[0].xyyy, const[8].zzzz; 5: MUL temp[1], const[0], input[3].xxxx; 6: MAD temp[1], const[1], input[3].yyyy, temp[1]; 7: ADD temp[1].xyw, temp[1], const[3]; 8: MAD temp[2].xy, const[7].xyyy, temp[1].wwww, temp[1].xyyy; 9: ADD temp[3].x, temp[0].xxxx, -temp[0].yyyy; 10: RCP temp[4].x, temp[1].wwww; 11: MAD temp[0].x, temp[3].xxxx, temp[4].xxxx, temp[0].yyyy; 12: SGE temp[3].x, const[6].xxxx, temp[0].xxxx; 13: MUL temp[0].x, temp[0].xxxx, temp[3].xxxx; 14: SLT temp[3].x, const[8].wwww, const[4].xxxx; 15: MOV temp[4].w, const[8].yyyy; 16: RCP temp[1].x, temp[1].wwww; 17: MUL temp[4].xy, temp[2].xyyy, temp[1].xxxx; 18: ADD temp[1].x, const[8].yyyy, -temp[3].xxxx; 19: MUL temp[1].x, input[0].xxxx, temp[1].xxxx; 20: MAD temp[1].x, input[0].yyyy, temp[3].xxxx, temp[1].xxxx; 21: ADD temp[1].x, temp[1].xxxx, -const[5].xxxx; 22: MOV temp[4].z, temp[1].xxxx; 23: MOV output[3], input[2].zzzz; 24: MOV temp[5], temp[4]; 25: MOV output[1], temp[0].xxxx; 26: MOV output[2].xy, input[2].xyxx; 27: MOV output[0], temp[5]; 28: MOV output[4], temp[5]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: SLT temp[0].x, const[8].x___, const[4].x___; 1: ADD temp[1].x, const[8].y___, -temp[0].x___; 2: MUL temp[1].xy, input[1].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[1].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[3].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[3].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MAD temp[2].xy, const[7].xy__, temp[1].ww__, temp[1].xy__; 9: ADD temp[3].x, temp[0].x___, -temp[0].y___; 10: RCP temp[4].x, temp[1].w___; 11: MAD temp[0].x, temp[3].x___, temp[4].x___, temp[0].y___; 12: SGE temp[3].x, const[6].x___, temp[0].x___; 13: MUL temp[0].x, temp[0].x___, temp[3].x___; 14: SLT temp[3].x, const[8].w___, const[4].x___; 15: MOV temp[4].w, const[8].___y; 16: RCP temp[1].x, temp[1].w___; 17: MUL temp[4].xy, temp[2].xy__, temp[1].xx__; 18: ADD temp[1].x, const[8].y___, -temp[3].x___; 19: MUL temp[1].x, input[0].x___, temp[1].x___; 20: MAD temp[1].x, input[0].y___, temp[3].x___, temp[1].x___; 21: ADD temp[1].x, temp[1].x___, -const[5].x___; 22: MOV temp[4].z, temp[1].__x_; 23: MOV output[3], input[2].zzzz; 24: MOV temp[5], temp[4]; 25: MOV output[1], temp[0].xxxx; 26: MOV output[2].xy, input[2].xy__; 27: MOV output[0], temp[5]; 28: MOV output[4], temp[5]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: SLT temp[0].x, none.0___, const[4].x___; 1: ADD temp[1].x, none.1___, -temp[0].x___; 2: MUL temp[1].xy, input[1].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[1].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[3].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[3].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MAD temp[2].xy, const[7].xy__, temp[1].ww__, temp[1].xy__; 9: ADD temp[3].x, temp[0].x___, -temp[0].y___; 10: RCP temp[4].x, temp[1].w___; 11: MAD temp[0].x, temp[3].x___, temp[4].x___, temp[0].y___; 12: SGE temp[3].x, const[6].x___, temp[0].x___; 13: MUL temp[0].x, temp[0].x___, temp[3].x___; 14: SLT temp[3].x, const[8].w___, const[4].x___; 15: MOV temp[4].w, none.___1; 16: RCP temp[1].x, temp[1].w___; 17: MUL temp[4].xy, temp[2].xy__, temp[1].xx__; 18: ADD temp[1].x, none.1___, -temp[3].x___; 19: MUL temp[1].x, input[0].x___, temp[1].x___; 20: MAD temp[1].x, input[0].y___, temp[3].x___, temp[1].x___; 21: ADD temp[1].x, temp[1].x___, -const[5].x___; 22: MOV temp[4].z, temp[1].__x_; 23: MOV output[3], input[2].zzzz; 24: MOV output[1], temp[0].xxxx; 25: MOV output[2].xy, input[2].xy__; 26: MOV output[0], temp[4]; 27: MOV output[4], temp[4]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: SLT temp[0].x, none.0___, const[4].x___; 1: ADD temp[1].x, none.1___, -temp[0].x___; 2: MUL temp[1].xy, input[1].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[1].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[3].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[3].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MAD temp[2].xy, const[7].xy__, temp[1].ww__, temp[1].xy__; 9: ADD temp[3].x, temp[0].x___, -temp[0].y___; 10: RCP temp[4].x, temp[1].w___; 11: MAD temp[0].x, temp[3].x___, temp[4].x___, temp[0].y___; 12: SGE temp[3].x, const[6].x___, temp[0].x___; 13: MUL temp[0].x, temp[0].x___, temp[3].x___; 14: MOV temp[5], const[4].x___; 15: SLT temp[3].x, const[8].w___, temp[5]; 16: MOV temp[4].w, none.___1; 17: RCP temp[1].x, temp[1].w___; 18: MUL temp[4].xy, temp[2].xy__, temp[1].xx__; 19: ADD temp[1].x, none.1___, -temp[3].x___; 20: MUL temp[1].x, input[0].x___, temp[1].x___; 21: MAD temp[1].x, input[0].y___, temp[3].x___, temp[1].x___; 22: ADD temp[1].x, temp[1].x___, -const[5].x___; 23: MOV temp[4].z, temp[1].__x_; 24: MOV output[3], input[2].zzzz; 25: MOV output[1], temp[0].xxxx; 26: MOV output[2].xy, input[2].xy__; 27: MOV output[0], temp[4]; 28: MOV output[4], temp[4]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: SLT temp[0].x, none.0___, const[4].x___; 1: ADD temp[1].x, none.1___, -temp[0].x___; 2: MUL temp[1].xy, input[1].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[1].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[3].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[3].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MAD temp[2].xy, const[7].xy__, temp[1].ww__, temp[1].xy__; 9: ADD temp[3].x, temp[0].x___, -temp[0].y___; 10: RCP temp[4].x, temp[1].w___; 11: MAD temp[0].x, temp[3].x___, temp[4].x___, temp[0].y___; 12: SGE temp[3].x, const[6].x___, temp[0].x___; 13: MUL temp[0].x, temp[0].x___, temp[3].x___; 14: MOV temp[5], const[4].x___; 15: SLT temp[3].x, const[8].w___, temp[5]; 16: MOV temp[4].w, none.___1; 17: RCP temp[1].x, temp[1].w___; 18: MUL temp[4].xy, temp[2].xy__, temp[1].xx__; 19: ADD temp[1].x, none.1___, -temp[3].x___; 20: MUL temp[1].x, input[0].x___, temp[1].x___; 21: MAD temp[1].x, input[0].y___, temp[3].x___, temp[1].x___; 22: ADD temp[1].x, temp[1].x___, -const[5].x___; 23: MOV temp[4].z, temp[1].__x_; 24: MOV output[3], input[2].zzzz; 25: MOV output[1], temp[0].xxxx; 26: MOV output[2].xy, input[2].xy__; 27: MOV output[0], temp[4]; 28: MOV output[4], temp[4]; CONST[8] = { 0.0000 1.0000 0.1250 0.5000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: SLT temp[0].x, none.0___, const[4].x___; 1: ADD temp[1].x, none.1___, -temp[0].x___; 2: MUL temp[1].xy, input[1].xy__, temp[1].xx__; 3: MAD temp[0].xy, input[1].zw__, temp[0].xx__, temp[1].xy__; 4: MUL temp[0].xy, temp[0].xy__, const[8].zz__; 5: MUL temp[1].xyw, const[0].xy_w, input[3].xx_x; 6: MAD temp[1].xyw, const[1].xy_w, input[3].yy_y, temp[1].xy_w; 7: ADD temp[1].xyw, temp[1].xy_w, const[3].xy_w; 8: MAD temp[2].xy, const[7].xy__, temp[1].ww__, temp[1].xy__; 9: ADD temp[3].x, temp[0].x___, -temp[0].y___; 10: RCP temp[4].x, temp[1].w___; 11: MAD temp[0].x, temp[3].x___, temp[4].x___, temp[0].y___; 12: SGE temp[3].x, const[6].x___, temp[0].x___; 13: MUL temp[0].x, temp[0].x___, temp[3].x___; 14: MOV temp[5], const[4].x___; 15: SLT temp[3].x, const[8].w___, temp[5]; 16: MOV temp[4].w, none.___1; 17: RCP temp[1].x, temp[1].w___; 18: MUL temp[4].xy, temp[2].xy__, temp[1].xx__; 19: ADD temp[1].x, none.1___, -temp[3].x___; 20: MUL temp[1].x, input[0].x___, temp[1].x___; 21: MAD temp[1].x, input[0].y___, temp[3].x___, temp[1].x___; 22: ADD temp[1].x, temp[1].x___, -const[5].x___; 23: MOV temp[4].z, temp[1].__x_; 24: MOV output[3], input[2].zzzz; 25: MOV output[1], temp[0].xxxx; 26: MOV output[2].xy, input[2].xy__; 27: MOV output[0], temp[4]; 28: MOV output[4], temp[4]; Final vertex program code: 0: op: 0x0010000a dst: 0t op: VE_SET_LESS_THAN src0: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src1: 0x01ff0082 reg: 4c swiz: X/ U/ U/ U src2: 0x01248082 reg: 4c swiz: 0/ 0/ 0/ 0 1: op: 0x00102003 dst: 1t op: VE_ADD src0: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src1: 0x1fff0000 reg: 0t swiz: -X/-U/-U/-U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 2: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x01f80020 reg: 1t swiz: X/ X/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 3: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01fb4021 reg: 1i swiz: Z/ W/ U/ U src1: 0x01f80000 reg: 0t swiz: X/ X/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 4: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01fa4102 reg: 8c swiz: Z/ Z/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 5: op: 0x00b02002 dst: 1t op: VE_MULTIPLY src0: 0x00f90002 reg: 0c swiz: X/ Y/ U/ W src1: 0x00380061 reg: 3i swiz: X/ X/ U/ X src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 6: op: 0x00b02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00f90022 reg: 1c swiz: X/ Y/ U/ W src1: 0x00792061 reg: 3i swiz: Y/ Y/ U/ Y src2: 0x00f90020 reg: 1t swiz: X/ Y/ U/ W 7: op: 0x00b02003 dst: 1t op: VE_ADD src0: 0x00f90020 reg: 1t swiz: X/ Y/ U/ W src1: 0x00f90062 reg: 3c swiz: X/ Y/ U/ W src2: 0x01248062 reg: 3c swiz: 0/ 0/ 0/ 0 8: op: 0x00304004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x01f900e2 reg: 7c swiz: X/ Y/ U/ U src1: 0x01fb6020 reg: 1t swiz: W/ W/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 9: op: 0x00106003 dst: 3t op: VE_ADD src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x1fff2000 reg: 0t swiz: -Y/-U/-U/-U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 10: op: 0x00108046 dst: 4t op: ME_RECIP_DX src0: 0x00db6020 reg: 1t swiz: W/ W/ W/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 11: op: 0x00100080 dst: 0t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U src1: 0x01ff0080 reg: 4t swiz: X/ U/ U/ U src2: 0x01ff2000 reg: 0t swiz: Y/ U/ U/ U 12: op: 0x00106009 dst: 3t op: VE_SET_GREATER_THAN_EQUAL src0: 0x01ff00c2 reg: 6c swiz: X/ U/ U/ U src1: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 13: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src1: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 14: op: 0x00f0a003 dst: 5t op: VE_ADD src0: 0x01ff0082 reg: 4c swiz: X/ U/ U/ U src1: 0x01248082 reg: 4c swiz: 0/ 0/ 0/ 0 src2: 0x01248082 reg: 4c swiz: 0/ 0/ 0/ 0 15: op: 0x0010600a dst: 3t op: VE_SET_LESS_THAN src0: 0x01ff6102 reg: 8c swiz: W/ U/ U/ U src1: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 16: op: 0x00808003 dst: 4t op: VE_ADD src0: 0x017fe000 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 17: op: 0x00102046 dst: 1t op: ME_RECIP_DX src0: 0x00db6020 reg: 1t swiz: W/ W/ W/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 18: op: 0x00308002 dst: 4t op: VE_MULTIPLY src0: 0x01f90040 reg: 2t swiz: X/ Y/ U/ U src1: 0x01f80020 reg: 1t swiz: X/ X/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 19: op: 0x00102003 dst: 1t op: VE_ADD src0: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src1: 0x1fff0060 reg: 3t swiz: -X/-U/-U/-U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 20: op: 0x00102002 dst: 1t op: VE_MULTIPLY src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 21: op: 0x00102004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01ff2001 reg: 0i swiz: Y/ U/ U/ U src1: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U src2: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U 22: op: 0x00102003 dst: 1t op: VE_ADD src0: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src1: 0x1fff00a2 reg: 5c swiz: -X/-U/-U/-U src2: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 23: op: 0x00408003 dst: 4t op: VE_ADD src0: 0x01c7e020 reg: 1t swiz: U/ U/ X/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 24: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00924041 reg: 2i swiz: Z/ Z/ Z/ Z src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 25: op: 0x00f02203 dst: 1o op: VE_ADD 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 26: op: 0x00304203 dst: 2o op: VE_ADD src0: 0x01f90041 reg: 2i swiz: X/ Y/ U/ U src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 27: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 28: op: 0x00f08203 dst: 4o op: VE_ADD src0: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[9], LINEAR DCL IN[1], GENERIC[12], PERSPECTIVE DCL IN[2], GENERIC[13], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL CONST[2] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM FLT32 { 0.5000, 26.0000, 0.0000, 2.0000} IMM FLT32 { 127.5000, 255.0000, 1.0000, -0.5000} IMM FLT32 { 252.0000, 0.0000, 0.0000, 0.0000} 0: ADD TEMP[0].x, IN[1].yyyy, IMM[0].xxxx 1: RCP TEMP[1].x, CONST[2].xxxx 2: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[1].xxxx 3: FRC TEMP[1].x, TEMP[0].xxxx 4: FLR TEMP[0].x, TEMP[0].xxxx 5: MAD TEMP[0].x, IMM[0].yyyy, TEMP[0].xxxx, CONST[0].xxxx 6: ADD TEMP[0].x, TEMP[0].xxxx, IMM[0].xxxx 7: RCP TEMP[2].x, CONST[2].yyyy 8: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[2].xxxx 9: MOV TEMP[1].y, TEMP[0].xxxx 10: MOV TEMP[0].x, IMM[0].zzzz 11: RCP TEMP[2].x, CONST[2].yyyy 12: MOV TEMP[0].y, TEMP[2].xxxx 13: MAD TEMP[0].xy, IMM[0].wwww, TEMP[0].xyyy, TEMP[1].xyyy 14: TEX TEMP[0], TEMP[0].xyyy, SAMP[0], 2D 15: MUL TEMP[0], IMM[1].xxyy, TEMP[0] 16: SLT TEMP[2].x, IMM[0].xxxx, IN[2].xxxx 17: ADD TEMP[3].x, -TEMP[2].xxxx, IMM[1].zzzz 18: SLT TEMP[4].x, IN[2].xxxx, IMM[1].wwww 19: MUL TEMP[4].x, TEMP[3].xxxx, TEMP[4].xxxx 20: MAD TEMP[5].x, TEMP[3].xxxx, -TEMP[4].xxxx, TEMP[3].xxxx 21: CMP TEMP[4].x, -TEMP[5].xxxx, TEMP[0].wwww, IMM[1].zzzz 22: CMP TEMP[2].x, -TEMP[3].xxxx, TEMP[4].xxxx, TEMP[0].zzzz 23: ADD TEMP[0].x, TEMP[0].xxxx, TEMP[0].yyyy 24: SGE TEMP[0].x, TEMP[0].xxxx, IMM[2].xxxx 25: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[2].xxxx 26: ADD TEMP[2].xy, IN[0].xyyy, IMM[1].wwww 27: DP2 TEMP[2].x, TEMP[2].xyyy, TEMP[2].xyyy 28: RSQ TEMP[3].x, TEMP[2].xxxx 29: MUL TEMP[3].x, TEMP[3].xxxx, TEMP[2].xxxx 30: CMP TEMP[3].x, -TEMP[2].xxxx, TEMP[3].xxxx, IMM[0].zzzz 31: SGE TEMP[2].x, IMM[0].xxxx, TEMP[3].xxxx 32: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[2].xxxx 33: SEQ TEMP[2].x, TEMP[0].xxxx, IMM[0].zzzz 34: CMP TEMP[0].x, -TEMP[2].xxxx, IMM[1].zzzz, IMM[0].zzzz 35: KIL -TEMP[0].xxxx 36: TEX TEMP[0], TEMP[1].xyyy, SAMP[0], 2D 37: MOV OUT[0], TEMP[0] 38: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].x, input[1].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[3].wwww, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0], temp[0].xyyy, 2D[0]; 15: MUL temp[0], const[4].xxyy, temp[0]; 16: SLT temp[2].x, const[3].xxxx, input[2].xxxx; 17: ADD temp[3].x, -temp[2].xxxx, const[4].zzzz; 18: SLT temp[4].x, input[2].xxxx, const[4].wwww; 19: MUL temp[4].x, temp[3].xxxx, temp[4].xxxx; 20: MAD temp[5].x, temp[3].xxxx, -temp[4].xxxx, temp[3].xxxx; 21: CMP temp[4].x, -temp[5].xxxx, temp[0].wwww, const[4].zzzz; 22: CMP temp[2].x, -temp[3].xxxx, temp[4].xxxx, temp[0].zzzz; 23: ADD temp[0].x, temp[0].xxxx, temp[0].yyyy; 24: SGE temp[0].x, temp[0].xxxx, const[5].xxxx; 25: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 26: ADD temp[2].xy, input[0].xyyy, const[4].wwww; 27: DP2 temp[2].x, temp[2].xyyy, temp[2].xyyy; 28: RSQ temp[3].x, temp[2].xxxx; 29: MUL temp[3].x, temp[3].xxxx, temp[2].xxxx; 30: CMP temp[3].x, -temp[2].xxxx, temp[3].xxxx, const[3].zzzz; 31: SGE temp[2].x, const[3].xxxx, temp[3].xxxx; 32: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 33: SEQ temp[2].x, temp[0].xxxx, const[3].zzzz; 34: CMP temp[0].x, -temp[2].xxxx, const[4].zzzz, const[3].zzzz; 35: KIL -temp[0].xxxx; 36: TEX temp[0], temp[1].xyyy, 2D[0]; 37: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].x, input[1].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[3].wwww, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0], temp[0].xyyy, 2D[0]; 15: MUL temp[0], const[4].xxyy, temp[0]; 16: SLT temp[2].x, const[3].xxxx, input[2].xxxx; 17: ADD temp[3].x, -temp[2].xxxx, const[4].zzzz; 18: SLT temp[4].x, input[2].xxxx, const[4].wwww; 19: MUL temp[4].x, temp[3].xxxx, temp[4].xxxx; 20: MAD temp[5].x, temp[3].xxxx, -temp[4].xxxx, temp[3].xxxx; 21: CMP temp[4].x, -temp[5].xxxx, temp[0].wwww, const[4].zzzz; 22: CMP temp[2].x, -temp[3].xxxx, temp[4].xxxx, temp[0].zzzz; 23: ADD temp[0].x, temp[0].xxxx, temp[0].yyyy; 24: SGE temp[0].x, temp[0].xxxx, const[5].xxxx; 25: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 26: ADD temp[2].xy, input[0].xyyy, const[4].wwww; 27: DP2 temp[2].x, temp[2].xyyy, temp[2].xyyy; 28: RSQ temp[3].x, temp[2].xxxx; 29: MUL temp[3].x, temp[3].xxxx, temp[2].xxxx; 30: CMP temp[3].x, -temp[2].xxxx, temp[3].xxxx, const[3].zzzz; 31: SGE temp[2].x, const[3].xxxx, temp[3].xxxx; 32: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 33: SEQ temp[2].x, temp[0].xxxx, const[3].zzzz; 34: CMP temp[0].x, -temp[2].xxxx, const[4].zzzz, const[3].zzzz; 35: KIL -temp[0].xxxx; 36: TEX temp[0], temp[1].xyyy, 2D[0]; 37: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].x, input[1].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[3].wwww, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0], temp[0].xyyy, 2D[0]; 15: MUL temp[0], const[4].xxyy, temp[0]; 16: SLT temp[2].x, const[3].xxxx, input[2].xxxx; 17: ADD temp[3].x, -temp[2].xxxx, const[4].zzzz; 18: SLT temp[4].x, input[2].xxxx, const[4].wwww; 19: MUL temp[4].x, temp[3].xxxx, temp[4].xxxx; 20: MAD temp[5].x, temp[3].xxxx, -temp[4].xxxx, temp[3].xxxx; 21: CMP temp[4].x, -temp[5].xxxx, temp[0].wwww, const[4].zzzz; 22: CMP temp[2].x, -temp[3].xxxx, temp[4].xxxx, temp[0].zzzz; 23: ADD temp[0].x, temp[0].xxxx, temp[0].yyyy; 24: SGE temp[0].x, temp[0].xxxx, const[5].xxxx; 25: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 26: ADD temp[2].xy, input[0].xyyy, const[4].wwww; 27: DP2 temp[2].x, temp[2].xyyy, temp[2].xyyy; 28: RSQ temp[3].x, temp[2].xxxx; 29: MUL temp[3].x, temp[3].xxxx, temp[2].xxxx; 30: CMP temp[3].x, -temp[2].xxxx, temp[3].xxxx, const[3].zzzz; 31: SGE temp[2].x, const[3].xxxx, temp[3].xxxx; 32: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 33: SEQ temp[2].x, temp[0].xxxx, const[3].zzzz; 34: CMP temp[0].x, -temp[2].xxxx, const[4].zzzz, const[3].zzzz; 35: KIL -temp[0].xxxx; 36: TEX temp[0], temp[1].xyyy, 2D[0]; 37: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].x, input[1].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[3].wwww, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0], temp[0].xyyy, 2D[0]; 15: MUL temp[0], const[4].xxyy, temp[0]; 16: SLT temp[2].x, const[3].xxxx, input[2].xxxx; 17: ADD temp[3].x, -temp[2].xxxx, const[4].zzzz; 18: SLT temp[4].x, input[2].xxxx, const[4].wwww; 19: MUL temp[4].x, temp[3].xxxx, temp[4].xxxx; 20: MAD temp[5].x, temp[3].xxxx, -temp[4].xxxx, temp[3].xxxx; 21: CMP temp[4].x, -temp[5].xxxx, temp[0].wwww, const[4].zzzz; 22: CMP temp[2].x, -temp[3].xxxx, temp[4].xxxx, temp[0].zzzz; 23: ADD temp[0].x, temp[0].xxxx, temp[0].yyyy; 24: SGE temp[0].x, temp[0].xxxx, const[5].xxxx; 25: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 26: ADD temp[2].xy, input[0].xyyy, const[4].wwww; 27: DP2 temp[2].x, temp[2].xyyy, temp[2].xyyy; 28: RSQ temp[3].x, temp[2].xxxx; 29: MUL temp[3].x, temp[3].xxxx, temp[2].xxxx; 30: CMP temp[3].x, -temp[2].xxxx, temp[3].xxxx, const[3].zzzz; 31: SGE temp[2].x, const[3].xxxx, temp[3].xxxx; 32: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 33: SEQ temp[2].x, temp[0].xxxx, const[3].zzzz; 34: CMP temp[0].x, -temp[2].xxxx, const[4].zzzz, const[3].zzzz; 35: KIL -temp[0].xxxx; 36: TEX temp[0], temp[1].xyyy, 2D[0]; 37: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].x, input[1].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[3].wwww, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0], temp[0].xyyy, 2D[0]; 15: MUL temp[0], const[4].xxyy, temp[0]; 16: SLT temp[2].x, const[3].xxxx, input[2].xxxx; 17: ADD temp[3].x, -temp[2].xxxx, const[4].zzzz; 18: SLT temp[4].x, input[2].xxxx, const[4].wwww; 19: MUL temp[4].x, temp[3].xxxx, temp[4].xxxx; 20: MAD temp[5].x, temp[3].xxxx, -temp[4].xxxx, temp[3].xxxx; 21: CMP temp[4].x, -temp[5].xxxx, temp[0].wwww, const[4].zzzz; 22: CMP temp[2].x, -temp[3].xxxx, temp[4].xxxx, temp[0].zzzz; 23: ADD temp[0].x, temp[0].xxxx, temp[0].yyyy; 24: SGE temp[0].x, temp[0].xxxx, const[5].xxxx; 25: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 26: ADD temp[2].xy, input[0].xyyy, const[4].wwww; 27: DP2 temp[2].x, temp[2].xyyy, temp[2].xyyy; 28: RSQ temp[3].x, temp[2].xxxx; 29: MUL temp[3].x, temp[3].xxxx, temp[2].xxxx; 30: CMP temp[3].x, -temp[2].xxxx, temp[3].xxxx, const[3].zzzz; 31: SGE temp[2].x, const[3].xxxx, temp[3].xxxx; 32: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 33: SEQ temp[2].x, temp[0].xxxx, const[3].zzzz; 34: CMP temp[0].x, -temp[2].xxxx, const[4].zzzz, const[3].zzzz; 35: KIL -temp[0].xxxx; 36: TEX temp[0], temp[1].xyyy, 2D[0]; 37: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].x, input[1].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 7: RCP temp[2].x, const[2].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: MOV temp[0].x, const[3].zzzz; 11: RCP temp[2].x, const[2].yyyy; 12: MOV temp[0].y, temp[2].xxxx; 13: MAD temp[0].xy, const[3].wwww, temp[0].xyyy, temp[1].xyyy; 14: TEX temp[0], temp[0].xyyy, 2D[0]; 15: MUL temp[0], const[4].xxyy, temp[0]; 16: SLT temp[2].x, const[3].xxxx, input[2].xxxx; 17: ADD temp[3].x, -temp[2].xxxx, const[4].zzzz; 18: SLT temp[4].x, input[2].xxxx, const[4].wwww; 19: MUL temp[4].x, temp[3].xxxx, temp[4].xxxx; 20: MAD temp[5].x, temp[3].xxxx, -temp[4].xxxx, temp[3].xxxx; 21: CMP temp[4].x, -temp[5].xxxx, temp[0].wwww, const[4].zzzz; 22: CMP temp[2].x, -temp[3].xxxx, temp[4].xxxx, temp[0].zzzz; 23: ADD temp[0].x, temp[0].xxxx, temp[0].yyyy; 24: SGE temp[0].x, temp[0].xxxx, const[5].xxxx; 25: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 26: ADD temp[2].xy, input[0].xyyy, const[4].wwww; 27: DP2 temp[2].x, temp[2].xyyy, temp[2].xyyy; 28: RSQ temp[3].x, temp[2].xxxx; 29: MUL temp[3].x, temp[3].xxxx, temp[2].xxxx; 30: CMP temp[3].x, -temp[2].xxxx, temp[3].xxxx, const[3].zzzz; 31: SGE temp[2].x, const[3].xxxx, temp[3].xxxx; 32: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 33: SEQ temp[2].x, temp[0].xxxx, const[3].zzzz; 34: CMP temp[0].x, -temp[2].xxxx, const[4].zzzz, const[3].zzzz; 35: KIL -temp[0].xxxx; 36: TEX temp[0], temp[1].xyyy, 2D[0]; 37: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].x, input[1].yyyy, const[3].xxxx; 1: RCP temp[1].x, const[2].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FRC temp[6].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, -temp[6]; 6: MAD temp[0].x, const[3].yyyy, temp[0].xxxx, const[0].xxxx; 7: ADD temp[0].x, temp[0].xxxx, const[3].xxxx; 8: RCP temp[2].x, const[2].yyyy; 9: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 10: MOV temp[1].y, temp[0].xxxx; 11: MOV temp[0].x, const[3].zzzz; 12: RCP temp[2].x, const[2].yyyy; 13: MOV temp[0].y, temp[2].xxxx; 14: MAD temp[0].xy, const[3].wwww, temp[0].xyyy, temp[1].xyyy; 15: TEX temp[0], temp[0].xyyy, 2D[0]; 16: MUL temp[0], const[4].xxyy, temp[0]; 17: ADD temp[2].x, const[3].xxxx, -input[2].xxxx; 18: CMP temp[2].x, temp[2], none.1111, none.0000; 19: ADD temp[3].x, -temp[2].xxxx, const[4].zzzz; 20: ADD temp[4].x, input[2].xxxx, -const[4].wwww; 21: CMP temp[4].x, temp[4], none.1111, none.0000; 22: MUL temp[4].x, temp[3].xxxx, temp[4].xxxx; 23: MAD temp[5].x, temp[3].xxxx, -temp[4].xxxx, temp[3].xxxx; 24: CMP temp[4].x, -temp[5].xxxx, temp[0].wwww, const[4].zzzz; 25: CMP temp[2].x, -temp[3].xxxx, temp[4].xxxx, temp[0].zzzz; 26: ADD temp[0].x, temp[0].xxxx, temp[0].yyyy; 27: ADD temp[7].x, temp[0].xxxx, -const[5].xxxx; 28: CMP temp[0].x, temp[7], none.0000, none.1111; 29: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 30: ADD temp[2].xy, input[0].xyyy, const[4].wwww; 31: DP3 temp[2].x, temp[2].xy00, temp[2].xy00; 32: RSQ temp[3].x, |temp[2].xxxx|; 33: MUL temp[3].x, temp[3].xxxx, temp[2].xxxx; 34: CMP temp[3].x, -temp[2].xxxx, temp[3].xxxx, const[3].zzzz; 35: ADD temp[2].x, const[3].xxxx, -temp[3].xxxx; 36: CMP temp[2].x, temp[2], none.0000, none.1111; 37: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 38: ADD temp[2].x, temp[0].xxxx, -const[3].zzzz; 39: CMP temp[2].x, -|temp[2]|, none.0000, none.1111; 40: CMP temp[0].x, -temp[2].xxxx, const[4].zzzz, const[3].zzzz; 41: KIL -temp[0].xxxx; 42: TEX temp[0], temp[1].xyyy, 2D[0]; 43: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].x, input[1].y___, const[3].x___; 1: RCP temp[1].x, const[2].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[6].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[6].x___; 6: MAD temp[0].x, const[3].y___, temp[0].x___, const[0].x___; 7: ADD temp[0].x, temp[0].x___, const[3].x___; 8: RCP temp[2].x, const[2].y___; 9: MUL temp[0].x, temp[0].x___, temp[2].x___; 10: MOV temp[1].y, temp[0]._x__; 11: MOV temp[0].x, const[3].z___; 12: RCP temp[2].x, const[2].y___; 13: MOV temp[0].y, temp[2]._x__; 14: MAD temp[0].xy, const[3].ww__, temp[0].xy__, temp[1].xy__; 15: TEX temp[0], temp[0].xy__, 2D[0]; 16: MUL temp[0], const[4].xxyy, temp[0]; 17: ADD temp[2].x, const[3].x___, -input[2].x___; 18: CMP temp[2].x, temp[2].x___, none.1___, none.0___; 19: ADD temp[3].x, -temp[2].x___, const[4].z___; 20: ADD temp[4].x, input[2].x___, -const[4].w___; 21: CMP temp[4].x, temp[4].x___, none.1___, none.0___; 22: MUL temp[4].x, temp[3].x___, temp[4].x___; 23: MAD temp[5].x, temp[3].x___, -temp[4].x___, temp[3].x___; 24: CMP temp[4].x, -temp[5].x___, temp[0].w___, const[4].z___; 25: CMP temp[2].x, -temp[3].x___, temp[4].x___, temp[0].z___; 26: ADD temp[0].x, temp[0].x___, temp[0].y___; 27: ADD temp[7].x, temp[0].x___, -const[5].x___; 28: CMP temp[0].x, temp[7].x___, none.0___, none.1___; 29: MUL temp[0].x, temp[0].x___, temp[2].x___; 30: ADD temp[2].xy, input[0].xy__, const[4].ww__; 31: DP3 temp[2].x, temp[2].xy0_, temp[2].xy0_; 32: RSQ temp[3].x, |temp[2].x___|; 33: MUL temp[3].x, temp[3].x___, temp[2].x___; 34: CMP temp[3].x, -temp[2].x___, temp[3].x___, const[3].z___; 35: ADD temp[2].x, const[3].x___, -temp[3].x___; 36: CMP temp[2].x, temp[2].x___, none.0___, none.1___; 37: MUL temp[0].x, temp[0].x___, temp[2].x___; 38: ADD temp[2].x, temp[0].x___, -const[3].z___; 39: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 40: CMP temp[0].x, -temp[2].x___, const[4].z___, const[3].z___; 41: KIL -temp[0].xxxx; 42: TEX temp[0], temp[1].xy__, 2D[0]; 43: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].x, input[1].y___, const[3].x___; 1: RCP temp[1].x, const[2].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[6].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[6].x___; 6: MAD temp[0].x, const[3].y___, temp[0].x___, const[0].x___; 7: ADD temp[0].x, temp[0].x___, const[3].x___; 8: RCP temp[2].x, const[2].y___; 9: MUL temp[0].x, temp[0].x___, temp[2].x___; 10: MOV temp[1].y, temp[0]._x__; 11: MOV temp[0].x, const[3].z___; 12: RCP temp[2].x, const[2].y___; 13: MOV temp[0].y, temp[2]._x__; 14: MAD temp[0].xy, const[3].ww__, temp[0].xy__, temp[1].xy__; 15: TEX temp[0], temp[0].xy__, 2D[0]; 16: MUL temp[0], const[4].xxyy, temp[0]; 17: ADD temp[2].x, const[3].x___, -input[2].x___; 18: CMP temp[2].x, temp[2].x___, none.1___, none.0___; 19: ADD temp[3].x, -temp[2].x___, const[4].z___; 20: ADD temp[4].x, input[2].x___, -const[4].w___; 21: CMP temp[4].x, temp[4].x___, none.1___, none.0___; 22: MUL temp[4].x, temp[3].x___, temp[4].x___; 23: MAD temp[5].x, temp[3].x___, -temp[4].x___, temp[3].x___; 24: CMP temp[4].x, -temp[5].x___, temp[0].w___, const[4].z___; 25: CMP temp[2].x, -temp[3].x___, temp[4].x___, temp[0].z___; 26: ADD temp[0].x, temp[0].x___, temp[0].y___; 27: ADD temp[7].x, temp[0].x___, -const[5].x___; 28: CMP temp[0].x, temp[7].x___, none.0___, none.1___; 29: MUL temp[0].x, temp[0].x___, temp[2].x___; 30: ADD temp[2].xy, input[0].xy__, const[4].ww__; 31: DP3 temp[2].x, temp[2].xy0_, temp[2].xy0_; 32: RSQ temp[3].x, |temp[2].x___|; 33: MUL temp[3].x, temp[3].x___, temp[2].x___; 34: CMP temp[3].x, -temp[2].x___, temp[3].x___, const[3].z___; 35: ADD temp[2].x, const[3].x___, -temp[3].x___; 36: CMP temp[2].x, temp[2].x___, none.0___, none.1___; 37: MUL temp[0].x, temp[0].x___, temp[2].x___; 38: ADD temp[2].x, temp[0].x___, -const[3].z___; 39: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 40: CMP temp[0].x, -temp[2].x___, const[4].z___, const[3].z___; 41: KIL -temp[0].xxxx; 42: TEX temp[0], temp[1].xy__, 2D[0]; 43: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[8].x, input[1].y___, const[3].x___; 1: RCP temp[9].x, const[2].x___; 2: MUL temp[10].x, temp[8].x___, temp[9].x___; 3: FRC temp[11].x, temp[10].x___; 4: FRC temp[12].x, temp[10].x___; 5: ADD temp[13].x, temp[10].x___, -temp[12].x___; 6: MAD temp[14].x, const[3].y___, temp[13].x___, const[0].x___; 7: ADD temp[15].x, temp[14].x___, const[3].x___; 8: RCP temp[16].x, const[2].y___; 9: MUL temp[17].x, temp[15].x___, temp[16].x___; 10: MOV temp[11].y, temp[17]._x__; 11: MOV temp[18].x, const[3].z___; 12: RCP temp[19].x, const[2].y___; 13: MOV temp[18].y, temp[19]._x__; 14: MAD temp[20].xy, const[3].ww__, temp[18].xy__, temp[11].xy__; 15: TEX temp[21], temp[20].xy__, 2D[0]; 16: MUL temp[22], const[4].xxyy, temp[21]; 17: ADD temp[23].x, const[3].x___, -input[2].x___; 18: CMP temp[24].x, temp[23].x___, none.1___, none.0___; 19: ADD temp[25].x, -temp[24].x___, const[4].z___; 20: ADD temp[26].x, input[2].x___, -const[4].w___; 21: CMP temp[27].x, temp[26].x___, none.1___, none.0___; 22: MUL temp[28].x, temp[25].x___, temp[27].x___; 23: MAD temp[29].x, temp[25].x___, -temp[28].x___, temp[25].x___; 24: CMP temp[30].x, -temp[29].x___, temp[22].w___, const[4].z___; 25: CMP temp[31].x, -temp[25].x___, temp[30].x___, temp[22].z___; 26: ADD temp[32].x, temp[22].x___, temp[22].y___; 27: ADD temp[33].x, temp[32].x___, -const[5].x___; 28: CMP temp[34].x, temp[33].x___, none.0___, none.1___; 29: MUL temp[35].x, temp[34].x___, temp[31].x___; 30: ADD temp[36].xy, input[0].xy__, const[4].ww__; 31: DP3 temp[37].x, temp[36].xy0_, temp[36].xy0_; 32: RSQ temp[38].x, |temp[37].x___|; 33: MUL temp[39].x, temp[38].x___, temp[37].x___; 34: CMP temp[40].x, -temp[37].x___, temp[39].x___, const[3].z___; 35: ADD temp[41].x, const[3].x___, -temp[40].x___; 36: CMP temp[42].x, temp[41].x___, none.0___, none.1___; 37: MUL temp[43].x, temp[35].x___, temp[42].x___; 38: ADD temp[44].x, temp[43].x___, -const[3].z___; 39: CMP temp[45].x, -|temp[44].x___|, none.0___, none.1___; 40: CMP temp[46].x, -temp[45].x___, const[4].z___, const[3].z___; 41: KIL -temp[46].xxxx; 42: TEX temp[47], temp[11].xy__, 2D[0]; 43: MOV output[0], temp[47]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[8].x, input[1].y___, none.H___; 1: RCP temp[9].x, const[2].x___; 2: MUL temp[10].x, temp[8].x___, temp[9].x___; 3: FRC temp[11].x, temp[10].x___; 4: FRC temp[12].x, temp[10].x___; 5: ADD temp[13].x, temp[10].x___, -temp[12].x___; 6: MAD temp[14].x, const[3].y___, temp[13].x___, const[0].x___; 7: ADD temp[15].x, temp[14].x___, none.H___; 8: RCP temp[16].x, const[2].y___; 9: MUL temp[17].x, temp[15].x___, temp[16].x___; 10: MOV temp[11].y, temp[17]._x__; 11: MOV temp[18].x, none.0___; 12: RCP temp[19].x, const[2].y___; 13: MOV temp[18].y, temp[19]._x__; 14: MAD temp[20].xy, const[3].ww__, temp[18].xy__, temp[11].xy__; 15: TEX temp[21], temp[20].xy__, 2D[0]; 16: MUL temp[22], const[4].xxyy, temp[21]; 17: ADD temp[23].x, none.H___, -input[2].x___; 18: CMP temp[24].x, temp[23].x___, none.1___, none.0___; 19: ADD temp[25].x, -temp[24].x___, none.1___; 20: ADD temp[26].x, input[2].x___, none.H-_-_-_; 21: CMP temp[27].x, temp[26].x___, none.1___, none.0___; 22: MUL temp[28].x, temp[25].x___, temp[27].x___; 23: MAD temp[29].x, temp[25].x___, -temp[28].x___, temp[25].x___; 24: CMP temp[30].x, -temp[29].x___, temp[22].w___, none.1___; 25: CMP temp[31].x, -temp[25].x___, temp[30].x___, temp[22].z___; 26: ADD temp[32].x, temp[22].x___, temp[22].y___; 27: CMP temp[34].x, (temp[32] - const[5]).x___, none.0___, none.1___; 28: MUL temp[35].x, temp[34].x___, temp[31].x___; 29: ADD temp[36].xy, input[0].xy__, none.-H-H__; 30: DP3 temp[37].x, temp[36].xy0_, temp[36].xy0_; 31: RSQ temp[38].x, |temp[37].x___|; 32: MUL temp[39].x, temp[38].x___, temp[37].x___; 33: CMP temp[40].x, -temp[37].x___, temp[39].x___, none.0___; 34: ADD temp[41].x, none.H___, -temp[40].x___; 35: CMP temp[42].x, temp[41].x___, none.0___, none.1___; 36: MUL temp[43].x, temp[35].x___, temp[42].x___; 37: CMP temp[45].x, -|temp[43].x___|, none.0___, none.1___; 38: CMP temp[46].x, -temp[45].x___, none.1___, none.0___; 39: KIL -temp[46].xxxx; 40: TEX temp[47], temp[11].xy__, 2D[0]; 41: MOV output[0], temp[47]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[8].x, input[1].y___, none.H___; 1: RCP temp[9].x, const[2].x___; 2: MUL temp[10].x, temp[8].x___, temp[9].x___; 3: FRC temp[11].x, temp[10].x___; 4: FRC temp[12].x, temp[10].x___; 5: ADD temp[13].x, temp[10].x___, -temp[12].x___; 6: MAD temp[14].x, const[3].y___, temp[13].x___, const[0].x___; 7: ADD temp[15].x, temp[14].x___, none.H___; 8: RCP temp[16].x, const[2].y___; 9: MUL temp[17].x, temp[15].x___, temp[16].x___; 10: MOV temp[11].y, temp[17]._x__; 11: MOV temp[18].x, none.0___; 12: RCP temp[19].x, const[2].y___; 13: MOV temp[18].y, temp[19]._x__; 14: MAD temp[20].xy, const[3].ww__, temp[18].xy__, temp[11].xy__; 15: TEX temp[21], temp[20].xy__, 2D[0]; 16: MOV temp[0].xyw, const[4].xx_y; 17: MOV temp[0].z, const[4].__y_; 18: MUL temp[22], temp[0], temp[21]; 19: ADD temp[23].x, none.H___, -input[2].x___; 20: CMP temp[24].x, temp[23].x___, none.1___, none.0___; 21: ADD temp[25].x, -temp[24].x___, none.1___; 22: ADD temp[26].x, input[2].x___, none.H-_-_-_; 23: CMP temp[27].x, temp[26].x___, none.1___, none.0___; 24: MUL temp[28].x, temp[25].x___, temp[27].x___; 25: MAD temp[29].x, temp[25].x___, -temp[28].x___, temp[25].x___; 26: CMP temp[30].x, -temp[29].x___, temp[22].w___, none.1___; 27: CMP temp[31].x, -temp[25].x___, temp[30].x___, temp[22].z___; 28: ADD temp[32].x, temp[22].x___, temp[22].y___; 29: CMP temp[34].x, (temp[32] - const[5]).x___, none.0___, none.1___; 30: MUL temp[35].x, temp[34].x___, temp[31].x___; 31: ADD temp[36].xy, input[0].xy__, none.-H-H__; 32: MOV temp[1].xy, temp[36].xy__; 33: MOV temp[1].z, temp[36].__0_; 34: MOV temp[2].xy, temp[36].xy__; 35: MOV temp[2].z, temp[36].__0_; 36: DP3 temp[37].x, temp[1].xyz_, temp[2].xyz_; 37: RSQ temp[38].x, |temp[37].x___|; 38: MUL temp[39].x, temp[38].x___, temp[37].x___; 39: CMP temp[40].x, -temp[37].x___, temp[39].x___, none.0___; 40: ADD temp[41].x, none.H___, -temp[40].x___; 41: CMP temp[42].x, temp[41].x___, none.0___, none.1___; 42: MUL temp[43].x, temp[35].x___, temp[42].x___; 43: CMP temp[45].x, -|temp[43].x___|, none.0___, none.1___; 44: CMP temp[46].x, -temp[45].x___, none.1___, none.0___; 45: MOV temp[3], -temp[46].xxxx; 46: KIL temp[3]; 47: TEX temp[47], temp[11].xy__, 2D[0]; 48: MOV output[0], temp[47]; CONST[2] = { 0.5000 26.0000 0.0000 2.0000 } CONST[3] = { 127.5000 255.0000 1.0000 -0.5000 } CONST[4] = { 252.0000 0.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[8].x, input[1].y___, none.H___; 1: RCP temp[9].x, const[1].x___; 2: MUL temp[10].x, temp[8].x___, temp[9].x___; 3: FRC temp[11].x, temp[10].x___; 4: FRC temp[12].x, temp[10].x___; 5: ADD temp[13].x, temp[10].x___, -temp[12].x___; 6: MAD temp[14].x, const[2].y___, temp[13].x___, const[0].x___; 7: ADD temp[15].x, temp[14].x___, none.H___; 8: RCP temp[16].x, const[1].y___; 9: MUL temp[17].x, temp[15].x___, temp[16].x___; 10: MOV temp[11].y, temp[17]._x__; 11: MOV temp[18].x, none.0___; 12: RCP temp[19].x, const[1].y___; 13: MOV temp[18].y, temp[19]._x__; 14: MAD temp[20].xy, const[2].ww__, temp[18].xy__, temp[11].xy__; 15: TEX temp[21], temp[20].xy__, 2D[0]; 16: MOV temp[0].xyw, const[3].xx_y; 17: MOV temp[0].z, const[3].__y_; 18: MUL temp[22], temp[0], temp[21]; 19: ADD temp[23].x, none.H___, -input[2].x___; 20: CMP temp[24].x, temp[23].x___, none.1___, none.0___; 21: ADD temp[25].x, -temp[24].x___, none.1___; 22: ADD temp[26].x, input[2].x___, none.H-_-_-_; 23: CMP temp[27].x, temp[26].x___, none.1___, none.0___; 24: MUL temp[28].x, temp[25].x___, temp[27].x___; 25: MAD temp[29].x, temp[25].x___, -temp[28].x___, temp[25].x___; 26: CMP temp[30].x, -temp[29].x___, temp[22].w___, none.1___; 27: CMP temp[31].x, -temp[25].x___, temp[30].x___, temp[22].z___; 28: ADD temp[32].x, temp[22].x___, temp[22].y___; 29: CMP temp[34].x, (temp[32] - const[4]).x___, none.0___, none.1___; 30: MUL temp[35].x, temp[34].x___, temp[31].x___; 31: ADD temp[36].xy, input[0].xy__, none.-H-H__; 32: MOV temp[1].xy, temp[36].xy__; 33: MOV temp[1].z, temp[36].__0_; 34: MOV temp[2].xy, temp[36].xy__; 35: MOV temp[2].z, temp[36].__0_; 36: DP3 temp[37].x, temp[1].xyz_, temp[2].xyz_; 37: RSQ temp[38].x, |temp[37].x___|; 38: MUL temp[39].x, temp[38].x___, temp[37].x___; 39: CMP temp[40].x, -temp[37].x___, temp[39].x___, none.0___; 40: ADD temp[41].x, none.H___, -temp[40].x___; 41: CMP temp[42].x, temp[41].x___, none.0___, none.1___; 42: MUL temp[43].x, temp[35].x___, temp[42].x___; 43: CMP temp[45].x, -|temp[43].x___|, none.0___, none.1___; 44: CMP temp[46].x, -temp[45].x___, none.1___, none.0___; 45: MOV temp[3], -temp[46].xxxx; 46: KIL temp[3]; 47: TEX temp[47], temp[11].xy__, 2D[0]; 48: MOV output[0], temp[47]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1] MAD temp[8].x, src0.y__, src0.111, src0.H__ 1: src0.xyz = const[1] REPL_ALPHA temp[9].x RCP, src0.x 2: src0.xyz = temp[8], src1.xyz = temp[9] MAD temp[10].x, src0.x__, src1.x__, src0.000 3: src0.xyz = temp[10] FRC temp[11].x, src0.x__ 4: src0.xyz = temp[10] FRC temp[12].x, src0.x__ 5: src0.xyz = temp[10], src1.xyz = temp[12] MAD temp[13].x, src0.x__, src0.111, -src1.x__ 6: src0.xyz = const[2], src1.xyz = temp[13], src2.xyz = const[0] MAD temp[14].x, src0.y__, src1.x__, src2.x__ 7: src0.xyz = temp[14] MAD temp[15].x, src0.x__, src0.111, src0.H__ 8: src0.xyz = const[1] REPL_ALPHA temp[16].x RCP, src0.y 9: src0.xyz = temp[15], src1.xyz = temp[16] MAD temp[17].x, src0.x__, src1.x__, src0.000 10: src0.xyz = temp[17] MAD temp[11].y, src0._x_, src0.111, src0.000 11: MAD temp[18].x, src0.0__, src0.111, src0.000 12: src0.xyz = const[1] REPL_ALPHA temp[19].x RCP, src0.y 13: src0.xyz = temp[19] MAD temp[18].y, src0._x_, src0.111, src0.000 14: src0.xyz = temp[18], src0.w = const[2], src1.xyz = temp[11] MAD temp[20].xy, src0.ww_, src0.xy_, src1.xy_ 15: TEX temp[21], temp[20].xy__, 2D[0]; 16: src0.xyz = const[3] MAD temp[0].xy, src0.xx_, src0.111, src0.000 MAD temp[0].w, src0.y, src0.1, src0.0 17: src0.xyz = const[3] MAD temp[0].z, src0.__y, src0.111, src0.000 18: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[21], src1.w = temp[21] MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[22].w, src0.w, src1.w, src0.0 19: src0.xyz = input[2] MAD temp[23].x, src0.H__, src0.111, -src0.x__ 20: src0.xyz = temp[23] CMP temp[24].x, src0.0__, src0.1__, src0.x__ 21: src0.xyz = temp[24] MAD temp[25].x, -src0.x__, src0.111, src0.1__ 22: src0.xyz = input[2] MAD temp[26].x, src0.x__, src0.111, src0.H__ 23: src0.xyz = temp[26] CMP temp[27].x, src0.0__, src0.1__, src0.x__ 24: src0.xyz = temp[25], src1.xyz = temp[27] MAD temp[28].x, src0.x__, src1.x__, src0.000 25: src0.xyz = temp[25], src1.xyz = temp[28] MAD temp[29].x, src0.x__, -src1.x__, src0.x__ 26: src0.xyz = temp[29], src0.w = temp[22] CMP temp[30].x, src0.1__, src0.w__, -src0.x__ 27: src0.xyz = temp[22], src1.xyz = temp[30], src2.xyz = temp[25] CMP temp[31].x, src0.z__, src1.x__, -src2.x__ 28: src0.xyz = temp[22] MAD temp[32].x, src0.x__, src0.111, src0.y__ 29: src0.xyz = const[4], src1.xyz = temp[32], srcp.xyz = (src1 - src0) CMP temp[34].x, src0.1__, src0.0__, srcp.x__ 30: src0.xyz = temp[34], src1.xyz = temp[31] MAD temp[35].x, src0.x__, src1.x__, src0.000 31: src0.xyz = input[0] MAD temp[36].xy, src0.xy_, src0.111, -src0.HH_ 32: src0.xyz = temp[36] MAD temp[1].xy, src0.xy_, src0.111, src0.000 33: MAD temp[1].z, src0.__0, src0.111, src0.000 34: src0.xyz = temp[36] MAD temp[2].xy, src0.xy_, src0.111, src0.000 35: MAD temp[2].z, src0.__0, src0.111, src0.000 36: src0.xyz = temp[1], src1.xyz = temp[2] DP3 temp[37].x, src0.xyz, src1.xyz 37: src0.xyz = temp[37] REPL_ALPHA temp[38].x RSQ, |src0.x| 38: src0.xyz = temp[38], src1.xyz = temp[37] MAD temp[39].x, src0.x__, src1.x__, src0.000 39: src0.xyz = temp[39], src1.xyz = temp[37] CMP temp[40].x, src0.0__, src0.x__, -src1.x__ 40: src0.xyz = temp[40] MAD temp[41].x, src0.H__, src0.111, -src0.x__ 41: src0.xyz = temp[41] CMP temp[42].x, src0.1__, src0.0__, src0.x__ 42: src0.xyz = temp[35], src1.xyz = temp[42] MAD temp[43].x, src0.x__, src1.x__, src0.000 43: src0.xyz = temp[43] CMP temp[45].x, src0.1__, src0.0__, -|src0.x__| 44: src0.xyz = temp[45] CMP temp[46].x, src0.0__, src0.1__, -src0.x__ 45: src0.xyz = temp[46] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 46: KIL temp[3]; 47: TEX temp[47], temp[11].xy__, 2D[0]; 48: src0.xyz = temp[47], src0.w = temp[47] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[2] MAD temp[26].x, src0.x__, src0.111, src0.H__ MAD temp[23].w, src0.H, src0.1, -src0.x 1: src0.xyz = input[0], src1.xyz = temp[26] MAD temp[36].xy, src0.xy_, src0.111, -src0.HH_ CMP temp[27].w, src0.0, src0.1, src1.x 2: src0.w = temp[23] MAD temp[1].z, src0.__0, src0.111, src0.000 CMP temp[24].w, src0.0, src0.1, src0.w 3: src0.w = temp[24] MAD temp[2].z, src0.__0, src0.111, src0.000 MAD temp[25].w, -src0.w, src0.1, src0.1 4: src0.xyz = temp[36], src0.w = temp[25], src1.w = temp[27] MAD temp[2].xy, src0.xy_, src0.111, src0.000 MAD temp[28].w, src0.w, src1.w, src0.0 5: src0.xyz = temp[36], src0.w = temp[25], src1.w = temp[28] MAD temp[1].xy, src0.xy_, src0.111, src0.000 MAD temp[29].w, src0.w, -src1.w, src0.w 6: src0.xyz = const[3], src1.xyz = const[1] MAD temp[0].z, src0.__y, src0.111, src0.000 RCP temp[19].w, src1.y 7: src0.xyz = const[1] MAD temp[18].x, src0.0__, src0.111, src0.000 RCP temp[16].w, src0.y 8: src0.xyz = input[1], src1.xyz = const[1] MAD temp[8].x, src0.y__, src0.111, src0.H__ RCP temp[9].w, src1.x 9: src0.xyz = temp[1], src0.w = temp[9], src1.xyz = temp[2], src2.xyz = temp[8] DP3 temp[37].x, src0.xyz, src1.xyz MAD temp[10].w, src2.x, src0.w, src0.0 10: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[37] MAD temp[18].y, src0._w_, src0.111, src0.000 RSQ temp[38].w, |src1.x| 11: src0.xyz = temp[10], src0.w = temp[10] FRC temp[11].x, src0.w__ FRC temp[12].w, src0.w 12: src0.xyz = temp[10], src0.w = temp[10], src1.xyz = temp[12], src1.w = temp[12], src2.xyz = temp[37], src2.w = temp[38] MAD temp[13].x, src0.w__, src0.111, -src1.w__ MAD temp[39].w, src2.w, src2.x, src0.0 13: src0.xyz = const[3] MAD temp[0].xy, src0.xx_, src0.111, src0.000 MAD temp[0].w, src0.y, src0.1, src0.0 14: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[37] CMP temp[40].x, src0.0__, src0.w__, -src1.x__ 15: src0.xyz = const[2], src1.xyz = temp[13], src2.xyz = const[0] MAD temp[14].w, src0.y, src1.x, src2.x 16: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[40] MAD temp[15].x, src0.w__, src0.111, src0.H__ MAD temp[41].w, src0.H, src0.1, -src1.x 17: src0.xyz = temp[41], src0.w = temp[41], src1.xyz = temp[15], src1.w = temp[16] CMP temp[42].x, src0.1__, src0.0__, src0.w__ MAD temp[17].w, src1.x, src1.w, src0.0 18: src0.xyz = temp[17], src0.w = temp[17] MAD temp[11].y, src0._w_, src0.111, src0.000 19: src0.xyz = temp[18], src0.w = const[2], src1.xyz = temp[11] MAD temp[20].xy, src0.ww_, src0.xy_, src1.xy_ 20: BEGIN_TEX; 21: TEX temp[47], temp[11].xy__, 2D[0]; 22: TEX temp[21], temp[20].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 23: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[21], src1.w = temp[21] SEM_WAIT MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[22].w, src0.w, src1.w, src0.0 24: src0.xyz = temp[22], src0.w = temp[22], src1.w = temp[29] MAD temp[32].x, src0.x__, src0.111, src0.y__ CMP temp[30].w, src0.1, src0.w, -src1.w 25: src0.xyz = temp[22], src0.w = temp[25], src1.xyz = temp[30], src1.w = temp[30], src2.xyz = temp[25] CMP temp[31].x, src0.z__, src1.w__, -src0.w__ 26: src0.xyz = const[4], src1.xyz = temp[32], srcp.xyz = (src1 - src0) CMP temp[34].w, src0.1, src0.0, srcp.x 27: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[31] MAD temp[35].x, src0.w__, src1.x__, src0.000 28: src0.xyz = temp[35], src1.xyz = temp[42] MAD temp[43].x, src0.x__, src1.x__, src0.000 29: src0.xyz = temp[43] CMP temp[45].x, src0.1__, src0.0__, -|src0.x__| 30: src0.xyz = temp[45] CMP temp[46].x, src0.0__, src0.1__, -src0.x__ 31: src0.xyz = temp[46] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 32: BEGIN_TEX; 33: KIL temp[3]; 34: src0.xyz = temp[47], src0.w = temp[47] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[2] MAD temp[26].x, src0.x__, src0.111, src0.H__ MAD temp[23].w, src0.H, src0.1, -src0.x 1: src0.xyz = input[0], src1.xyz = temp[26] MAD temp[36].xy, src0.xy_, src0.111, -src0.HH_ CMP temp[27].w, src0.0, src0.1, src1.x 2: src0.w = temp[23] MAD temp[1].z, src0.__0, src0.111, src0.000 CMP temp[24].w, src0.0, src0.1, src0.w 3: src0.w = temp[24] MAD temp[2].z, src0.__0, src0.111, src0.000 MAD temp[25].w, -src0.w, src0.1, src0.1 4: src0.xyz = temp[36], src0.w = temp[25], src1.w = temp[27] MAD temp[2].xy, src0.xy_, src0.111, src0.000 MAD temp[28].w, src0.w, src1.w, src0.0 5: src0.xyz = temp[36], src0.w = temp[25], src1.w = temp[28] MAD temp[1].xy, src0.xy_, src0.111, src0.000 MAD temp[29].w, src0.w, -src1.w, src0.w 6: src0.xyz = const[3], src1.xyz = const[1] MAD temp[0].z, src0.__y, src0.111, src0.000 RCP temp[19].w, src1.y 7: src0.xyz = const[1] MAD temp[18].x, src0.0__, src0.111, src0.000 RCP temp[16].w, src0.y 8: src0.xyz = input[1], src1.xyz = const[1] MAD temp[8].x, src0.y__, src0.111, src0.H__ RCP temp[9].w, src1.x 9: src0.xyz = temp[1], src0.w = temp[9], src1.xyz = temp[2], src2.xyz = temp[8] DP3 temp[37].x, src0.xyz, src1.xyz MAD temp[10].w, src2.x, src0.w, src0.0 10: src0.w = temp[19], src1.xyz = temp[37] MAD temp[18].y, src0._w_, src0.111, src0.000 RSQ temp[38].w, |src1.x| 11: src0.w = temp[10] FRC temp[11].x, src0.w__ FRC temp[12].w, src0.w 12: src0.w = temp[10], src1.w = temp[12], src2.xyz = temp[37], src2.w = temp[38] MAD temp[13].x, src0.w__, src0.111, -src1.w__ MAD temp[39].w, src2.w, src2.x, src0.0 13: src0.xyz = const[3] MAD temp[0].xy, src0.xx_, src0.111, src0.000 MAD temp[0].w, src0.y, src0.1, src0.0 14: src0.w = temp[39], src1.xyz = temp[37] CMP temp[40].x, src0.0__, src0.w__, -src1.x__ 15: src0.xyz = const[2], src1.xyz = temp[13], src2.xyz = const[0] MAD temp[14].w, src0.y, src1.x, src2.x 16: src0.w = temp[14], src1.xyz = temp[40] MAD temp[15].x, src0.w__, src0.111, src0.H__ MAD temp[41].w, src0.H, src0.1, -src1.x 17: src0.w = temp[41], src1.xyz = temp[15], src1.w = temp[16] CMP temp[42].x, src0.1__, src0.0__, src0.w__ MAD temp[17].w, src1.x, src1.w, src0.0 18: src0.w = temp[17] MAD temp[11].y, src0._w_, src0.111, src0.000 19: src0.xyz = temp[18], src0.w = const[2], src1.xyz = temp[11] MAD temp[20].xy, src0.ww_, src0.xy_, src1.xy_ 20: BEGIN_TEX; 21: TEX temp[47], temp[11].xy__, 2D[0]; 22: TEX temp[21], temp[20].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 23: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[21], src1.w = temp[21] SEM_WAIT MAD temp[22].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[22].w, src0.w, src1.w, src0.0 24: src0.xyz = temp[22], src0.w = temp[22], src1.w = temp[29] MAD temp[32].x, src0.x__, src0.111, src0.y__ CMP temp[30].w, src0.1, src0.w, -src1.w 25: src0.xyz = temp[22], src0.w = temp[25], src1.w = temp[30] CMP temp[31].x, src0.z__, src1.w__, -src0.w__ 26: src0.xyz = const[4], src1.xyz = temp[32], srcp.xyz = (src1 - src0) CMP temp[34].w, src0.1, src0.0, srcp.x 27: src0.w = temp[34], src1.xyz = temp[31] MAD temp[35].x, src0.w__, src1.x__, src0.000 28: src0.xyz = temp[35], src1.xyz = temp[42] MAD temp[43].x, src0.x__, src1.x__, src0.000 29: src0.xyz = temp[43] CMP temp[45].x, src0.1__, src0.0__, -|src0.x__| 30: src0.xyz = temp[45] CMP temp[46].x, src0.0__, src0.1__, -src0.x__ 31: src0.xyz = temp[46] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 32: BEGIN_TEX; 33: KIL temp[3]; 34: src0.xyz = temp[47], src0.w = temp[47] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[2] MAD temp[0].z, src0.__x, src0.__1, src0.__H MAD temp[0].w, src0.H, src0.1, -src0.x 1: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xy, src0.xy_, src0.11_, -src0.HH_ CMP temp[1].w, src0.0, src0.1, src1.z 2: src0.w = temp[0] MAD temp[2].z, src0.__0, src0.111, src0.000 CMP temp[0].w, src0.0, src0.1, src0.w 3: src0.w = temp[0] MAD temp[3].z, src0.__0, src0.111, src0.000 MAD temp[0].w, -src0.w, src0.1, src0.1 4: src0.xyz = temp[0], src0.w = temp[0], src1.w = temp[1] MAD temp[3].xy, src0.xy_, src0.111, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 5: src0.xyz = temp[0], src0.w = temp[0], src1.w = temp[1] MAD temp[2].xy, src0.xy_, src0.111, src0.000 MAD temp[1].w, src0.w, -src1.w, src0.w 6: src0.xyz = const[3], src1.xyz = const[1] MAD temp[0].z, src0.__y, src0.111, src0.000 RCP temp[2].w, src1.y 7: src0.xyz = const[1] MAD temp[4].x, src0.0__, src0.11_, src0.00_ RCP temp[3].w, src0.y 8: src0.xyz = input[1], src1.xyz = const[1] MAD temp[1].x, src0.y__, src0.1__, src0.H__ RCP temp[4].w, src1.x 9: src0.xyz = temp[2], src0.w = temp[4], src1.xyz = temp[3], src2.xyz = temp[1] DP3 temp[1].x, src0.xyz, src1.xyz MAD temp[4].w, src2.x, src0.w, src0.0 10: src0.w = temp[2], src1.xyz = temp[1] MAD temp[4].y, src0._w_, src0.11_, src0.00_ RSQ temp[2].w, |src1.x| 11: src0.w = temp[4] FRC temp[2].x, src0.w__ FRC temp[5].w, src0.w 12: src0.w = temp[4], src1.w = temp[5], src2.xyz = temp[1], src2.w = temp[2] MAD temp[1].y, src0._w_, src0._1_, -src1._w_ MAD temp[2].w, src2.w, src2.x, src0.0 13: src0.xyz = const[3] MAD temp[0].xy, src0.xx_, src0.111, src0.000 MAD temp[4].w, src0.y, src0.1, src0.0 14: src0.w = temp[2], src1.xyz = temp[1] CMP temp[1].x, src0.0__, src0.w__, -src1.x__ 15: src0.xyz = const[2], src1.xyz = temp[1], src2.xyz = const[0] MAD temp[2].w, src0.y, src1.y, src2.x 16: src0.w = temp[2], src1.xyz = temp[1] MAD temp[1].x, src0.w__, src0.1__, src0.H__ MAD temp[2].w, src0.H, src0.1, -src1.x 17: src0.w = temp[2], src1.xyz = temp[1], src1.w = temp[3] CMP temp[1].x, src0.1__, src0.0__, src0.w__ MAD temp[2].w, src1.x, src1.w, src0.0 18: src0.w = temp[2] MAD temp[2].y, src0._w_, src0.11_, src0.00_ 19: src0.xyz = temp[4], src0.w = const[2], src1.xyz = temp[2] MAD temp[3].xy, src0.ww_, src0.xy_, src1.xy_ 20: BEGIN_TEX; 21: TEX temp[2], temp[2].xy__, 2D[0]; 22: TEX temp[3], temp[3].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 23: src0.xyz = temp[0], src0.w = temp[4], src1.xyz = temp[3], src1.w = temp[3] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[3].w, src0.w, src1.w, src0.0 24: src0.xyz = temp[0], src0.w = temp[3], src1.w = temp[1] MAD temp[3].x, src0.x__, src0.1__, src0.y__ CMP temp[1].w, src0.1, src0.w, -src1.w 25: src0.xyz = temp[0], src0.w = temp[0], src1.w = temp[1] CMP temp[0].x, src0.z__, src1.w__, -src0.w__ 26: src0.xyz = const[4], src1.xyz = temp[3], srcp.xyz = (src1 - src0) CMP temp[0].w, src0.1, src0.0, srcp.x 27: src0.w = temp[0], src1.xyz = temp[0] MAD temp[0].x, src0.w__, src1.x__, src0.0__ 28: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[0].x, src0.x__, src1.x__, src0.0__ 29: src0.xyz = temp[0] CMP temp[0].x, src0.1__, src0.0__, -|src0.x__| 30: src0.xyz = temp[0] CMP temp[0].x, src0.0__, src0.1__, -src0.x__ 31: src0.xyz = temp[0] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 32: BEGIN_TEX; 33: KIL temp[0]; 34: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=12************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 19, tex_end: 0 (code_addr: 000004c0) 0: xyz: t2 t0 t0 bias-> t0.z (02000002) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t2.xxx 1.0 0.5 op: 00058a81 w: 0.5 1.0 -t2.x op: 00080892 1: xyz: t0 t0 t0 bias-> t0.xy (01800000) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t0.xyz 1.0 -0.5 op: 000d8a80 w: 0.0 1.0 t0.z op: 03014890 2: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 0.0 1.0 0.0 op: 00050a94 w: 0.0 1.0 t0.w op: 03024890 3: xyz: t0 t0 t0 bias-> t3.z (020c0000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 0.0 1.0 0.0 op: 00050a94 w: -t0.w 1.0 1.0 op: 000448a9 4: xyz: t0 t0 t0 bias-> t3.xy (018c0000) w: t0 t1 t0 bias-> t1.w (00840040) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w t1.w 0.0 op: 00040509 5: xyz: t0 t0 t0 bias-> t2.xy (01880000) w: t0 t1 t0 bias-> t1.w (00840040) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w -t1.w t0.w op: 00025509 6: xyz: c3 c1 t0 bias-> t0.z (02000863) w: t0 t0 t0 bias-> t2.w (00880000) xyz: c3.yyy 1.0 0.0 op: 00050a82 w: c1.y c3.x c3.x op: 05000004 7: xyz: c1 t0 t0 bias-> t4.x (00900021) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: 0.0 1.0 0.0 op: 00050a94 w: c1.y c1.x c1.x op: 05000001 8: xyz: t1 c1 t0 bias-> t1.x (00840841) w: t0 t0 t0 bias-> t4.w (00900000) xyz: t1.yyy 1.0 0.5 op: 00058a82 w: c1.x t1.x t1.x op: 05000003 9: xyz: t2 t3 t1 bias-> t1.x (008410c2) w: t4 t0 t0 bias-> t4.w (00900004) xyz: t2.xyz t3.xyz t2.xxx op: 00804200 w: t1.x t4.w 0.0 op: 00040486 10: xyz: t0 t1 t0 bias-> t4.y (01100040) w: t2 t0 t0 bias-> t2.w (00880002) xyz: t2.www 1.0 0.0 op: 00050a8c w: |t1.x| t0.x t0.x op: 05800043 11: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t4 t0 t0 bias-> t5.w (00940004) xyz: t4.www t0.xxx t0.xxx op: 0480408c w: t4.w t0.x t0.x op: 03800009 12: xyz: t0 t0 t1 bias-> t1.y (01041000) w: t4 t5 t2 bias-> t2.w (00882144) xyz: t4.www 1.0 -t5.www op: 000b4a8c w: t2.w t1.x 0.0 op: 0004030b 13: xyz: c3 t0 t0 bias-> t0.xy (01800023) w: t0 t0 t0 bias-> t4.w (00900000) xyz: c3.xxx 1.0 0.0 op: 00050a81 w: c3.y 1.0 0.0 op: 00040881 14: xyz: t32 t1 t0 bias-> t1.x (00840040) w: t2 t0 t0 bias-> (00000002) xyz: 0.0 t2.www -t1.xyz op: 04090614 w: t32.x t32.x t32.x op: 00000000 15: xyz: c2 t1 c0 bias-> (00020062) w: t0 t0 t0 bias-> t2.w (00880000) xyz: c2.xxx c2.xxx c2.xxx op: 00004081 w: c2.y t1.y c0.x op: 00018201 16: xyz: t0 t1 t0 bias-> t1.x (00840040) w: t2 t0 t0 bias-> t2.w (00880002) xyz: t2.www 1.0 0.5 op: 00058a8c w: 0.5 1.0 -t1.x op: 0008c892 17: xyz: t32 t1 t0 bias-> t1.x (00840040) w: t2 t3 t0 bias-> t2.w (008800c2) xyz: 1.0 0.0 t2.www op: 04030a15 w: t1.x t3.w 0.0 op: 00040503 18: 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 19: xyz: t4 t2 t0 bias-> t3.xy (018c0084) w: c2 t0 t0 bias-> (00000022) xyz: c2.www t4.xyz t2.xyz op: 0001000c w: t4.x t4.x t4.x op: 00000000 NODE 1: alu_offset: 20, tex_offset: 0, alu_end: 8, tex_end: 1 (code_addr: 00020214) TEX: TEX t2, t2, texture[0] (00008082) TEX t3, t3, texture[0] (000080c3) 20: xyz: t0 t3 t0 bias-> t0.xyz (038000c0) w: t4 t3 t0 bias-> t3.w (008c00c4) xyz: t0.xyz t3.xyz 0.0 op: 00050200 w: t4.w t3.w 0.0 op: 00040509 21: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t3 t1 t0 bias-> t1.w (00840043) xyz: t0.xyz 1.0 t0.yyy op: 00008a80 w: 1.0 t3.w -t1.w op: 030a8491 22: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t1 t0 bias-> (00000040) xyz: t0.zzz t1.www -t0.www op: 040b0683 w: t0.x t0.x t0.x op: 00000000 23: xyz: c4 t3 t0 sub-> (000000e4) w: t0 t0 t0 bias-> t0.w (00800000) xyz: c4.xxx c4.xxx c4.xxx op: 00204081 w: 1.0 0.0 srcp.x op: 03030811 24: xyz: t32 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www t0.xyz 0.0 op: 0005020c w: t32.x t32.x t32.x op: 00000000 25: xyz: t0 t1 t0 bias-> t0.x (00800040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t1.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 26: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 0.0 -|t0.xyz| op: 04180a15 w: t0.x t0.x t0.x op: 00000000 27: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 -t0.xyz op: 04080a94 w: t0.x t0.x t0.x op: 00000000 28: xyz: t0 t0 t0 bias-> t0.xyz (03800000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: -t0.xxx 1.0 0.0 op: 00050aa1 w: -t0.x 1.0 0.0 op: 000408a0 NODE 2: alu_offset: 29, tex_offset: 2, alu_end: 0, tex_end: 0 (code_addr: 0040201d) TEX: KIL t0, t0, texture[0] (00010000) 29: xyz: t2 t0 t0 bias-> o0.xyz (1c000002) w: t2 t0 t0 bias-> o0.w (01000002) xyz: t2.xyz 1.0 0.0 op: 00050a80 w: t2.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR 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: Initial fragment program FRAG DCL IN[0], COLOR, PERSPECTIVE DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=13************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 GLSL source for fragment shader 19: vec4 D(in vec4 r, in float s){ return r; } uniform vec2 b, g, q; uniform sampler2D c, f, p; vec2 E(in float r, in float s){ (r = ((r + 0.5) / b[0])); return vec2(fract(r), ((((26.0 * floor(r)) + s) + 0.5) / b[1])); } float F(in vec2 r){ return r[1]; } vec4 G(in float r){ (r = ((r + 0.5) / g[0])); return floor((0.5 + (255.0 * texture2D(f, vec2(fract(r), ((floor(r) + 0.5) / g[1])))))); } float H(in vec4 r){ return (mod(r[0], 32.0) / 31.0); } float I(in vec4 r){ float s = ((r[1] * 16.0) + floor((r[3] / 16.0))); return ((s / 2.0) + -1023.0); } float J(in vec4 r){ float s = ((r[2] * 16.0) + mod(r[3], 16.0)); return ((s / 2.0) + -1023.0); } vec2 K(in vec4 r){ return vec2(I(r), J(r)); } varying vec2 i; varying vec3 j; varying vec4 k; varying vec2 l; uniform float m; void main(){ vec4 r = G(j[2]); vec2 s, u; (s = K(r)); float t = H(r); (u = (l - s)); if (((t == 0.0) || (dot(u, u) >= 0.60000002))) discard; float v = texture2D(p, (i / q))[3]; vec2 w, x, y; (w = (i / q)); (x = (vec2(1.0, 0.0) / q)); (y = (vec2(0.0, 1.0) / q)); (v += ((((((((0.54540002 * texture2D(p, ((w - x) - y))[3]) + (0.97170001 * texture2D(p, (w - x))[3])) + (0.54540002 * texture2D(p, ((w - x) + y))[3])) + (0.97170001 * texture2D(p, (w - y))[3])) + (0.97170001 * texture2D(p, (w + y))[3])) + (0.54540002 * texture2D(p, ((w + x) - y))[3])) + (0.97170001 * texture2D(p, (w + x))[3])) + (0.54540002 * texture2D(p, ((w + x) + y))[3]))); (v = min(v, 1.0)); if ((v == 0.0)) discard; vec4 B; (B = texture2D(c, E(F(j.xy), m))); (B[3] *= t); (B[3] *= v); (gl_FragColor = D(B, j[0])); } GLSL IR for shader 19: ( (declare (uniform ) float m) (declare (in ) vec2 l) (declare (in ) vec4 k) (declare (in ) vec3 j) (declare (in ) vec2 i) (declare (uniform ) sampler2D p) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 q) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function D (signature vec4 (parameters (declare (in ) vec4 r) (declare (in ) float s) ) ( (return (var_ref r) ) )) ) (function E (signature vec2 (parameters (declare (in ) float r) (declare (in ) float s) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref r) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref r) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref r) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref s) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) (signature vec4 (parameters (declare (in ) vec4 arg0) ) ( )) ) (function F (signature float (parameters (declare (in ) vec2 r) ) ( (return (swiz y (var_ref r) )) )) ) (function G (signature vec4 (parameters (declare (in ) float r) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref r) (constant float (0.500000)) ) (swiz x (var_ref g) )) ) (assign (x) (var_ref r) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref r) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (var_ref floor_retval) (constant float (0.500000)) ) (swiz y (var_ref g) )) ) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref f) (var_ref vec_ctor) )) (declare (temporary ) vec4 floor_retval@76) (call floor (var_ref floor_retval@76) ((expression vec4 + (constant float (0.500000)) (expression vec4 * (constant float (255.000000)) (var_ref texture2D_retval) ) ) )) (return (var_ref floor_retval@76) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) (function H (signature float (parameters (declare (in ) vec4 r) ) ( (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((swiz x (var_ref r) )(constant float (32.000000)) )) (return (expression float / (var_ref mod_retval) (constant float (31.000000)) ) ) )) ) (function mod (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function I (signature float (parameters (declare (in ) vec4 r) ) ( (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((expression float / (swiz w (var_ref r) )(constant float (16.000000)) ) )) (return (expression float + (expression float / (expression float + (expression float * (swiz y (var_ref r) )(constant float (16.000000)) ) (var_ref floor_retval) ) (constant float (2.000000)) ) (constant float (-1023.000000)) ) ) )) ) (function J (signature float (parameters (declare (in ) vec4 r) ) ( (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((swiz w (var_ref r) )(constant float (16.000000)) )) (return (expression float + (expression float / (expression float + (expression float * (swiz z (var_ref r) )(constant float (16.000000)) ) (var_ref mod_retval) ) (constant float (2.000000)) ) (constant float (-1023.000000)) ) ) )) ) (function K (signature vec2 (parameters (declare (in ) vec4 r) ) ( (declare (temporary ) float I_retval) (call I (var_ref I_retval) ((var_ref r) )) (declare (temporary ) float J_retval) (call J (var_ref J_retval) ((var_ref r) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref I_retval) ) (assign (y) (var_ref vec_ctor) (var_ref J_retval) ) (return (var_ref vec_ctor) ) )) ) (function main (signature void (parameters ) ( (declare () vec4 B) (declare () vec2 y) (declare () vec2 x) (declare () vec2 w) (declare () float v) (declare () float t) (declare () vec2 s) (declare () vec4 r) (declare (temporary ) vec4 G_retval) (call G (var_ref G_retval) ((swiz z (var_ref j) ))) (assign (xyzw) (var_ref r) (var_ref G_retval) ) (declare (temporary ) vec2 K_retval) (call K (var_ref K_retval) ((var_ref G_retval) )) (assign (xy) (var_ref s) (var_ref K_retval) ) (declare (temporary ) float H_retval) (call H (var_ref H_retval) ((var_ref r) )) (assign (x) (var_ref t) (var_ref H_retval) ) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 + (var_ref l) (expression vec2 neg (var_ref s) ) ) ) (declare (temporary ) bool or_tmp) (if (expression bool all_equal (var_ref H_retval) (constant float (0.000000)) ) ( (assign (x) (var_ref or_tmp) (constant bool (1)) ) ) ( (declare (temporary ) float dot_retval) (call dot (var_ref dot_retval) ((var_ref assignment_tmp) (var_ref assignment_tmp) )) (assign (x) (var_ref or_tmp) (expression bool >= (var_ref dot_retval) (constant float (0.600000)) ) ) )) (if (var_ref or_tmp) ( (discard ) ) ()) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref p) (expression vec2 / (var_ref i) (var_ref q) ) )) (assign (x) (var_ref v) (swiz w (var_ref texture2D_retval) )) (declare (temporary ) vec2 assignment_tmp@77) (assign (xy) (var_ref assignment_tmp@77) (expression vec2 / (var_ref i) (var_ref q) ) ) (assign (xy) (var_ref w) (var_ref assignment_tmp@77) ) (declare (temporary ) vec2 assignment_tmp@78) (assign (xy) (var_ref assignment_tmp@78) (expression vec2 / (constant vec2 (1.000000 0.000000)) (var_ref q) ) ) (assign (xy) (var_ref x) (var_ref assignment_tmp@78) ) (declare (temporary ) vec2 assignment_tmp@79) (assign (xy) (var_ref assignment_tmp@79) (expression vec2 / (constant vec2 (0.000000 1.000000)) (var_ref q) ) ) (assign (xy) (var_ref y) (var_ref assignment_tmp@79) ) (declare (temporary ) vec4 texture2D_retval@80) (call texture2D (var_ref texture2D_retval@80) ((var_ref p) (expression vec2 + (expression vec2 + (var_ref assignment_tmp@77) (expression vec2 neg (var_ref assignment_tmp@78) ) ) (expression vec2 neg (var_ref assignment_tmp@79) ) ) )) (declare (temporary ) vec4 texture2D_retval@81) (call texture2D (var_ref texture2D_retval@81) ((var_ref p) (expression vec2 + (var_ref w) (expression vec2 neg (var_ref x) ) ) )) (declare (temporary ) vec4 texture2D_retval@82) (call texture2D (var_ref texture2D_retval@82) ((var_ref p) (expression vec2 + (expression vec2 + (var_ref w) (expression vec2 neg (var_ref x) ) ) (var_ref y) ) )) (declare (temporary ) vec4 texture2D_retval@83) (call texture2D (var_ref texture2D_retval@83) ((var_ref p) (expression vec2 + (var_ref w) (expression vec2 neg (var_ref y) ) ) )) (declare (temporary ) vec4 texture2D_retval@84) (call texture2D (var_ref texture2D_retval@84) ((var_ref p) (expression vec2 + (var_ref w) (var_ref y) ) )) (declare (temporary ) vec4 texture2D_retval@85) (call texture2D (var_ref texture2D_retval@85) ((var_ref p) (expression vec2 + (expression vec2 + (var_ref w) (var_ref x) ) (expression vec2 neg (var_ref y) ) ) )) (declare (temporary ) vec4 texture2D_retval@86) (call texture2D (var_ref texture2D_retval@86) ((var_ref p) (expression vec2 + (var_ref w) (var_ref x) ) )) (declare (temporary ) vec4 texture2D_retval@87) (call texture2D (var_ref texture2D_retval@87) ((var_ref p) (expression vec2 + (expression vec2 + (var_ref w) (var_ref x) ) (var_ref y) ) )) (declare (temporary ) float assignment_tmp@88) (assign (x) (var_ref assignment_tmp@88) (expression float + (var_ref v) (expression float + (expression float + (expression float + (expression float + (expression float + (expression float + (expression float + (expression float * (constant float (0.545400)) (swiz w (var_ref texture2D_retval@80) )) (expression float * (constant float (0.971700)) (swiz w (var_ref texture2D_retval@81) )) ) (expression float * (constant float (0.545400)) (swiz w (var_ref texture2D_retval@82) )) ) (expression float * (constant float (0.971700)) (swiz w (var_ref texture2D_retval@83) )) ) (expression float * (constant float (0.971700)) (swiz w (var_ref texture2D_retval@84) )) ) (expression float * (constant float (0.545400)) (swiz w (var_ref texture2D_retval@85) )) ) (expression float * (constant float (0.971700)) (swiz w (var_ref texture2D_retval@86) )) ) (expression float * (constant float (0.545400)) (swiz w (var_ref texture2D_retval@87) )) ) ) ) (assign (x) (var_ref v) (var_ref assignment_tmp@88) ) (declare (temporary ) float min_retval) (call min (var_ref min_retval) ((var_ref assignment_tmp@88) (constant float (1.000000)) )) (assign (x) (var_ref v) (var_ref min_retval) ) (if (expression bool all_equal (var_ref min_retval) (constant float (0.000000)) ) ( (discard ) ) ()) (declare (temporary ) float F_retval) (call F (var_ref F_retval) ((swiz xy (var_ref j) ))) (declare (temporary ) vec2 E_retval) (call E (var_ref E_retval) ((var_ref F_retval) (var_ref m) )) (declare (temporary ) vec4 texture2D_retval@89) (call texture2D (var_ref texture2D_retval@89) ((var_ref c) (var_ref E_retval) )) (assign (xyz) (var_ref B) (swiz xyz (var_ref texture2D_retval@89) )) (assign (w) (var_ref B) (expression float * (swiz w (var_ref texture2D_retval@89) )(var_ref t) ) ) (assign (w) (var_ref B) (expression float * (swiz w (var_ref B) )(var_ref v) ) ) (declare (temporary ) vec4 D_retval) (call D (var_ref D_retval) ((var_ref B) (swiz x (var_ref j) ))) (assign (xyzw) (var_ref gl_FragColor) (var_ref D_retval) ) )) ) (function dot (signature float (parameters (declare (in ) vec2 arg0) (declare (in ) vec2 arg1) ) ( )) ) (function min (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) ) GLSL source for vertex shader 20: uniform vec2 b, g, h; uniform sampler2D c, f; vec2 J(in float A, in float B){ (A = ((A + 0.5) / b[0])); return vec2(fract(A), ((((26.0 * floor(A)) + B) + 0.5) / b[1])); } float L(in vec2 A){ return A[1]; } vec2 R(in vec4 A, in vec2 B, in vec2 C, in bool D){ vec2 E, F, G, H, I; (E = (h / 2.0)); (F = (mod(h, 2.0) / 2.0)); (G = ((E * A.xy) / A[3])); (H = (G + (B * vec2(1.0, -1.0)))); (I = (floor(((H + 0.5) - F)) + F)); (I += ((1.0 - float(D)) * (H - I))); (I += (C * vec2(1.0, -1.0))); return ((I * A[3]) / E); } vec2 S(in vec4 A, in vec2 B){ return R(A, B, vec2(0.0, 0.0), false); } varying vec2 i; varying vec3 j; varying vec4 k; varying vec2 l; uniform float m; attribute vec2 s; attribute float t; attribute float u; attribute vec2 v; attribute vec3 w; attribute vec2 x; attribute vec3 y; attribute vec2 z; uniform mat4 n; uniform mat2 o; void main(){ vec2 A, B, D, F; (A = s); (A[0] += 4.0); (B = vec2(floor((t / 2.0)), ((-2.0 * mod(floor(((t + 1.0) / 2.0)), 2.0)) + 1.0))); (i = ((B * A) + v)); (i[0] -= 2.0); (j = y); vec4 C = (n * vec4(w, 1.0)); (C /= C[3]); (D = z); (l = z); (F = (o * x)); (gl_Position = vec4(S(C, (((F + D) + (B * A)) - vec2(2.0, 0.0))), u, 1.0)); } GLSL IR for shader 20: ( (declare (uniform ) mat2 o) (declare (uniform ) mat4 n) (declare (in ) vec2 z) (declare (in ) vec3 y) (declare (in ) vec2 x) (declare (in ) vec3 w) (declare (in ) vec2 v) (declare (in ) float u) (declare (in ) float t) (declare (in ) vec2 s) (declare (uniform ) float m) (declare (out ) vec2 l) (declare (out ) vec4 k) (declare (out ) vec3 j) (declare (out ) vec2 i) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 h) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function J (signature vec2 (parameters (declare (in ) float A) (declare (in ) float B) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref A) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref A) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref A) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref B) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) (signature vec2 (parameters (declare (in ) vec2 arg0) ) ( )) ) (function L (signature float (parameters (declare (in ) vec2 A) ) ( (return (swiz y (var_ref A) )) )) ) (function R (signature vec2 (parameters (declare (in ) vec4 A) (declare (in ) vec2 B) (declare (in ) vec2 C) (declare (in ) bool D) ) ( (declare () vec2 H) (declare () vec2 F) (declare () vec2 E) (assign (xy) (var_ref E) (expression vec2 / (var_ref h) (constant float (2.000000)) ) ) (declare (temporary ) vec2 mod_retval) (call mod (var_ref mod_retval) ((var_ref h) (constant float (2.000000)) )) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 / (var_ref mod_retval) (constant float (2.000000)) ) ) (assign (xy) (var_ref F) (var_ref assignment_tmp) ) (declare (temporary ) vec2 assignment_tmp@90) (assign (xy) (var_ref assignment_tmp@90) (expression vec2 + (expression vec2 / (expression vec2 * (var_ref E) (swiz xy (var_ref A) )) (swiz w (var_ref A) )) (expression vec2 * (var_ref B) (constant vec2 (1.000000 -1.000000)) ) ) ) (assign (xy) (var_ref H) (var_ref assignment_tmp@90) ) (declare (temporary ) vec2 floor_retval) (call floor (var_ref floor_retval) ((expression vec2 + (expression vec2 + (var_ref assignment_tmp@90) (constant float (0.500000)) ) (expression vec2 neg (var_ref assignment_tmp) ) ) )) (declare (temporary ) vec2 assignment_tmp@91) (assign (xy) (var_ref assignment_tmp@91) (expression vec2 + (var_ref floor_retval) (var_ref F) ) ) (return (expression vec2 / (expression vec2 * (expression vec2 + (expression vec2 + (var_ref assignment_tmp@91) (expression vec2 * (expression float + (constant float (1.000000)) (expression float neg (expression float b2f (var_ref D) ) ) ) (expression vec2 + (var_ref H) (expression vec2 neg (var_ref assignment_tmp@91) ) ) ) ) (expression vec2 * (var_ref C) (constant vec2 (1.000000 -1.000000)) ) ) (swiz w (var_ref A) )) (var_ref E) ) ) )) ) (function mod (signature vec2 (parameters (declare (in ) vec2 arg0) (declare (in ) float arg1) ) ( )) (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function S (signature vec2 (parameters (declare (in ) vec4 A) (declare (in ) vec2 B) ) ( (declare (temporary ) vec2 R_retval) (call R (var_ref R_retval) ((var_ref A) (var_ref B) (constant vec2 (0.000000 0.000000)) (constant bool (0)) )) (return (var_ref R_retval) ) )) ) (function main (signature void (parameters ) ( (declare () vec2 A) (assign (y) (var_ref A) (swiz y (var_ref s) )) (assign (x) (var_ref A) (expression float + (swiz x (var_ref s) )(constant float (4.000000)) ) ) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((expression float / (var_ref t) (constant float (2.000000)) ) )) (declare (temporary ) float floor_retval@92) (call floor (var_ref floor_retval@92) ((expression float / (expression float + (var_ref t) (constant float (1.000000)) ) (constant float (2.000000)) ) )) (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((var_ref floor_retval@92) (constant float (2.000000)) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref floor_retval) ) (assign (y) (var_ref vec_ctor) (expression float + (expression float * (constant float (-2.000000)) (var_ref mod_retval) ) (constant float (1.000000)) ) ) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 + (expression vec2 * (var_ref vec_ctor) (var_ref A) ) (var_ref v) ) ) (assign (y) (var_ref i) (swiz y (var_ref assignment_tmp) )) (assign (x) (var_ref i) (expression float + (swiz x (var_ref assignment_tmp) )(constant float (-2.000000)) ) ) (assign (xyz) (var_ref j) (var_ref y) ) (declare (temporary ) vec4 vec_ctor@93) (assign (w) (var_ref vec_ctor@93) (constant float (1.000000)) ) (assign (xyz) (var_ref vec_ctor@93) (var_ref w) ) (declare (temporary ) vec4 assignment_tmp@94) (assign (xyzw) (var_ref assignment_tmp@94) (expression vec4 * (var_ref n) (var_ref vec_ctor@93) ) ) (assign (xy) (var_ref l) (var_ref z) ) (declare (temporary ) vec2 S_retval) (call S (var_ref S_retval) ((expression vec4 / (var_ref assignment_tmp@94) (swiz w (var_ref assignment_tmp@94) )) (expression vec2 + (expression vec2 + (expression vec2 + (expression vec2 * (var_ref o) (var_ref x) ) (var_ref z) ) (expression vec2 * (var_ref vec_ctor) (var_ref A) ) ) (expression vec2 neg (constant vec2 (2.000000 0.000000)) ) ) )) (declare (temporary ) vec4 vec_ctor@95) (assign (w) (var_ref vec_ctor@95) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor@95) (var_ref S_retval) ) (assign (z) (var_ref vec_ctor@95) (var_ref u) ) (assign (xyzw) (var_ref gl_Position) (var_ref vec_ctor@95) ) )) ) ) GLSL IR for linked vertex program 21: ( (declare (uniform ) mat2 o) (declare (uniform ) mat4 n) (declare (in ) vec2 z) (declare (in ) vec3 y) (declare (in ) vec2 x) (declare (in ) vec3 w) (declare (in ) vec2 v) (declare (in ) float u) (declare (in ) float t) (declare (in ) vec2 s) (declare (out ) vec2 l) (declare (out ) vec3 j) (declare (out ) vec2 i) (declare (uniform ) vec2 h) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare () vec2 A) (assign (y) (var_ref A) (swiz y (var_ref s) )) (assign (x) (var_ref A) (expression float + (swiz x (var_ref s) )(constant float (4.000000)) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float floor (expression float * (var_ref t) (constant float (0.500000)) ) ) ) (assign (y) (var_ref vec_ctor) (expression float + (expression float * (expression float fract (expression float * (expression float floor (expression float * (expression float + (var_ref t) (constant float (1.000000)) ) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) (constant float (-4.000000)) ) (constant float (1.000000)) ) ) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 + (expression vec2 * (var_ref vec_ctor) (var_ref A) ) (var_ref v) ) ) (assign (y) (var_ref i) (swiz y (var_ref assignment_tmp) )) (assign (x) (var_ref i) (expression float + (swiz x (var_ref assignment_tmp) )(constant float (-2.000000)) ) ) (assign (xyz) (var_ref j) (var_ref y) ) (declare (temporary ) vec4 flattening_tmp) (assign (xyzw) (var_ref flattening_tmp) (expression vec4 + (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref n) (constant int (0)) ) (swiz x (var_ref w) )) (expression vec4 * (array_ref (var_ref n) (constant int (1)) ) (swiz y (var_ref w) )) ) (expression vec4 * (array_ref (var_ref n) (constant int (2)) ) (swiz z (var_ref w) )) ) (array_ref (var_ref n) (constant int (3)) ) ) ) (assign (xy) (var_ref l) (var_ref z) ) (declare () vec4 A@96) (assign (xyzw) (var_ref A@96) (expression vec4 * (var_ref flattening_tmp) (expression float rcp (swiz w (var_ref flattening_tmp) )) ) ) (declare () vec2 E) (assign (xy) (var_ref E) (expression vec2 * (var_ref h) (constant float (0.500000)) ) ) (declare (temporary ) vec2 assignment_tmp@97) (assign (xy) (var_ref assignment_tmp@97) (expression vec2 fract (expression vec2 * (var_ref h) (constant float (0.500000)) ) ) ) (declare (temporary ) vec2 assignment_tmp@98) (assign (xy) (var_ref assignment_tmp@98) (expression vec2 + (expression vec2 * (expression vec2 * (var_ref E) (swiz xy (var_ref A@96) )) (expression float rcp (swiz w (var_ref A@96) )) ) (expression vec2 * (expression vec2 + (expression vec2 + (expression vec2 + (expression vec2 + (expression vec2 * (array_ref (var_ref o) (constant int (0)) ) (swiz x (var_ref x) )) (expression vec2 * (array_ref (var_ref o) (constant int (1)) ) (swiz y (var_ref x) )) ) (var_ref z) ) (expression vec2 * (var_ref vec_ctor) (var_ref A) ) ) (constant vec2 (-2.000000 -0.000000)) ) (constant vec2 (1.000000 -1.000000)) ) ) ) (declare (temporary ) vec2 assignment_tmp@99) (assign (xy) (var_ref assignment_tmp@99) (expression vec2 + (expression vec2 floor (expression vec2 + (expression vec2 + (var_ref assignment_tmp@98) (constant float (0.500000)) ) (expression vec2 neg (var_ref assignment_tmp@97) ) ) ) (var_ref assignment_tmp@97) ) ) (declare (temporary ) vec4 vec_ctor@100) (assign (w) (var_ref vec_ctor@100) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor@100) (expression vec2 * (expression vec2 * (expression vec2 + (var_ref assignment_tmp@99) (expression vec2 + (var_ref assignment_tmp@98) (expression vec2 neg (var_ref assignment_tmp@99) ) ) ) (swiz w (var_ref A@96) )) (expression vec2 rcp (var_ref E) ) ) ) (assign (z) (var_ref vec_ctor@100) (var_ref u) ) (assign (xyzw) (var_ref gl_Position) (var_ref vec_ctor@100) ) (assign (xy) (var_ref l@101) (var_ref l) ) (assign (xyzw) (var_ref gl_Position@102) (var_ref gl_Position) ) (assign (xy) (var_ref i@103) (var_ref i) ) (assign (xyz) (var_ref j@104) (var_ref j) ) )) ) ) GLSL IR for linked fragment program 21: ( (declare (uniform ) float m) (declare (in ) vec2 l) (declare (in ) vec3 j) (declare (in ) vec2 i) (declare (uniform ) sampler2D p) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 q) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare () vec4 B) (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (expression float + (swiz z (var_ref j) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref g) )) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float fract (var_ref assignment_tmp) ) ) (assign (y) (var_ref vec_ctor) (expression float * (expression float + (expression float floor (var_ref assignment_tmp) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref g) )) ) ) (declare (temporary ) vec4 floor_retval) (assign (xyzw) (var_ref floor_retval) (expression vec4 floor (expression vec4 + (constant float (0.500000)) (expression vec4 * (constant float (255.000000)) (tex vec4 (var_ref f) (var_ref vec_ctor) 0 1 () )) ) ) ) (declare (temporary ) vec2 vec_ctor@105) (assign (x) (var_ref vec_ctor@105) (expression float + (expression float * (expression float + (expression float * (swiz y (var_ref floor_retval) )(constant float (16.000000)) ) (expression float floor (expression float * (swiz w (var_ref floor_retval) )(constant float (0.062500)) ) ) ) (constant float (0.500000)) ) (constant float (-1023.000000)) ) ) (assign (y) (var_ref vec_ctor@105) (expression float + (expression float * (expression float + (expression float * (swiz z (var_ref floor_retval) )(constant float (16.000000)) ) (expression float * (constant float (16.000000)) (expression float fract (expression float * (swiz w (var_ref floor_retval) )(constant float (0.062500)) ) ) ) ) (constant float (0.500000)) ) (constant float (-1023.000000)) ) ) (declare (temporary ) float H_retval) (assign (x) (var_ref H_retval) (expression float * (constant float (1.032258)) (expression float fract (expression float * (swiz x (var_ref floor_retval) )(constant float (0.031250)) ) ) ) ) (declare (temporary ) vec2 assignment_tmp@106) (assign (xy) (var_ref assignment_tmp@106) (expression vec2 + (var_ref l) (expression vec2 neg (var_ref vec_ctor@105) ) ) ) (declare (temporary ) bool or_tmp) (declare (temporary ) bool if_to_cond_assign_then) (assign (x) (var_ref if_to_cond_assign_then) (expression bool all_equal (var_ref H_retval) (constant float (0.000000)) ) ) (assign (var_ref if_to_cond_assign_then) (x) (var_ref or_tmp) (constant bool (1)) ) (assign (expression bool ! (var_ref if_to_cond_assign_then) ) (x) (var_ref or_tmp) (expression bool >= (expression float dot (var_ref assignment_tmp@106) (var_ref assignment_tmp@106) ) (constant float (0.600000)) ) ) (declare (temporary ) bool discard_cond_temp) (assign (x) (var_ref discard_cond_temp) (constant bool (0)) ) (assign (var_ref or_tmp) (x) (var_ref discard_cond_temp) (constant bool (1)) ) (discard (var_ref discard_cond_temp) ) (declare (temporary ) vec2 assignment_tmp@107) (assign (xy) (var_ref assignment_tmp@107) (expression vec2 * (var_ref i) (expression vec2 rcp (var_ref q) ) ) ) (declare (temporary ) vec2 assignment_tmp@108) (assign (xy) (var_ref assignment_tmp@108) (expression vec2 * (constant vec2 (1.000000 0.000000)) (expression vec2 rcp (var_ref q) ) ) ) (declare (temporary ) vec2 assignment_tmp@109) (assign (xy) (var_ref assignment_tmp@109) (expression vec2 * (constant vec2 (0.000000 1.000000)) (expression vec2 rcp (var_ref q) ) ) ) (declare (temporary ) float min_retval) (assign (x) (var_ref min_retval) (expression float min (expression float + (swiz w (tex vec4 (var_ref p) (expression vec2 * (var_ref i) (expression vec2 rcp (var_ref q) ) ) 0 1 () ))(expression float + (expression float + (expression float + (expression float + (expression float + (expression float + (expression float + (expression float * (constant float (0.545400)) (swiz w (tex vec4 (var_ref p) (expression vec2 + (expression vec2 + (var_ref assignment_tmp@107) (expression vec2 neg (var_ref assignment_tmp@108) ) ) (expression vec2 neg (var_ref assignment_tmp@109) ) ) 0 1 () ))) (expression float * (constant float (0.971700)) (swiz w (tex vec4 (var_ref p) (expression vec2 + (var_ref assignment_tmp@107) (expression vec2 neg (var_ref assignment_tmp@108) ) ) 0 1 () ))) ) (expression float * (constant float (0.545400)) (swiz w (tex vec4 (var_ref p) (expression vec2 + (expression vec2 + (var_ref assignment_tmp@107) (expression vec2 neg (var_ref assignment_tmp@108) ) ) (var_ref assignment_tmp@109) ) 0 1 () ))) ) (expression float * (constant float (0.971700)) (swiz w (tex vec4 (var_ref p) (expression vec2 + (var_ref assignment_tmp@107) (expression vec2 neg (var_ref assignment_tmp@109) ) ) 0 1 () ))) ) (expression float * (constant float (0.971700)) (swiz w (tex vec4 (var_ref p) (expression vec2 + (var_ref assignment_tmp@107) (var_ref assignment_tmp@109) ) 0 1 () ))) ) (expression float * (constant float (0.545400)) (swiz w (tex vec4 (var_ref p) (expression vec2 + (expression vec2 + (var_ref assignment_tmp@107) (var_ref assignment_tmp@108) ) (expression vec2 neg (var_ref assignment_tmp@109) ) ) 0 1 () ))) ) (expression float * (constant float (0.971700)) (swiz w (tex vec4 (var_ref p) (expression vec2 + (var_ref assignment_tmp@107) (var_ref assignment_tmp@108) ) 0 1 () ))) ) (expression float * (constant float (0.545400)) (swiz w (tex vec4 (var_ref p) (expression vec2 + (expression vec2 + (var_ref assignment_tmp@107) (var_ref assignment_tmp@108) ) (var_ref assignment_tmp@109) ) 0 1 () ))) ) ) (constant float (1.000000)) ) ) (declare (temporary ) bool discard_cond_temp@110) (assign (x) (var_ref discard_cond_temp@110) (constant bool (0)) ) (assign (expression bool all_equal (var_ref min_retval) (constant float (0.000000)) ) (x) (var_ref discard_cond_temp@110) (constant bool (1)) ) (discard (var_ref discard_cond_temp@110) ) (declare (temporary ) float assignment_tmp@111) (assign (x) (var_ref assignment_tmp@111) (expression float * (expression float + (swiz y (var_ref j) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref b) )) ) ) (declare (temporary ) vec2 vec_ctor@112) (assign (x) (var_ref vec_ctor@112) (expression float fract (var_ref assignment_tmp@111) ) ) (assign (y) (var_ref vec_ctor@112) (expression float * (expression float + (expression float + (expression float * (constant float (26.000000)) (expression float floor (var_ref assignment_tmp@111) ) ) (var_ref m) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref b) )) ) ) (declare (temporary ) vec4 texture2D_retval) (assign (xyzw) (var_ref texture2D_retval) (tex vec4 (var_ref c) (var_ref vec_ctor@112) 0 1 () )) (assign (xyz) (var_ref B) (swiz xyz (var_ref texture2D_retval) )) (assign (w) (var_ref B) (expression float * (swiz w (var_ref texture2D_retval) )(var_ref H_retval) ) ) (assign (w) (var_ref B) (expression float * (swiz w (var_ref B) )(var_ref min_retval) ) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref B) ) (assign (xyzw) (var_ref gl_FragColor@113) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL IN[5] DCL IN[6] DCL IN[7] DCL OUT[0], POSITION DCL OUT[1], GENERIC[12] DCL OUT[2], GENERIC[13] DCL OUT[3], GENERIC[14] DCL CONST[0..6] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL IMM FLT32 { 4.0000, 0.5000, 1.0000, -4.0000} IMM FLT32 { -2.0000, -0.0000, 1.0000, -1.0000} 0: MOV TEMP[0].y, IN[7].yyyy 1: ADD TEMP[0].x, IN[7].xxxx, IMM[0].xxxx 2: MUL TEMP[1].x, IN[6].xxxx, IMM[0].yyyy 3: FLR TEMP[1].x, TEMP[1].xxxx 4: ADD TEMP[2].x, IN[6].xxxx, IMM[0].zzzz 5: MUL TEMP[2].x, TEMP[2].xxxx, IMM[0].yyyy 6: FLR TEMP[2].x, TEMP[2].xxxx 7: MUL TEMP[2].x, TEMP[2].xxxx, IMM[0].yyyy 8: FRC TEMP[2].x, TEMP[2].xxxx 9: MAD TEMP[2].x, TEMP[2].xxxx, IMM[0].wwww, IMM[0].zzzz 10: MOV TEMP[1].y, TEMP[2].xxxx 11: MAD TEMP[2].xy, TEMP[1].xyyy, TEMP[0].xyyy, IN[4].xyyy 12: MOV TEMP[3].y, TEMP[2].yyyy 13: ADD TEMP[3].x, TEMP[2].xxxx, IMM[1].xxxx 14: MUL TEMP[2], CONST[2], IN[3].xxxx 15: MAD TEMP[2], CONST[3], IN[3].yyyy, TEMP[2] 16: MAD TEMP[2], CONST[4], IN[3].zzzz, TEMP[2] 17: ADD TEMP[2], TEMP[2], CONST[5] 18: RCP TEMP[4].x, TEMP[2].wwww 19: MUL TEMP[2].xyw, TEMP[2], TEMP[4].xxxx 20: MUL TEMP[4].xy, CONST[6].xyyy, IMM[0].yyyy 21: MUL TEMP[5].xy, CONST[6].xyyy, IMM[0].yyyy 22: FRC TEMP[5].xy, TEMP[5].xyyy 23: MUL TEMP[6].xy, CONST[0].xyyy, IN[2].xxxx 24: MAD TEMP[6].xy, CONST[1].xyyy, IN[2].yyyy, TEMP[6].xyyy 25: ADD TEMP[6].xy, TEMP[6].xyyy, IN[0].xyyy 26: MAD TEMP[0].xy, TEMP[1].xyyy, TEMP[0].xyyy, TEMP[6].xyyy 27: ADD TEMP[0].xy, TEMP[0].xyyy, IMM[1].xyyy 28: MUL TEMP[1].xy, TEMP[4].xyyy, TEMP[2].xyyy 29: RCP TEMP[6].x, TEMP[2].wwww 30: MUL TEMP[1].xy, TEMP[1].xyyy, TEMP[6].xxxx 31: MAD TEMP[0].xy, TEMP[0].xyyy, IMM[1].zwww, TEMP[1].xyyy 32: ADD TEMP[1].xy, TEMP[0].xyyy, IMM[0].yyyy 33: ADD TEMP[1].xy, TEMP[1].xyyy, -TEMP[5].xyyy 34: FLR TEMP[1].xy, TEMP[1].xyyy 35: ADD TEMP[1].xy, TEMP[1].xyyy, TEMP[5].xyyy 36: MOV TEMP[5].w, IMM[0].zzzz 37: ADD TEMP[0].xy, TEMP[0].xyyy, -TEMP[1].xyyy 38: ADD TEMP[0].xy, TEMP[1].xyyy, TEMP[0].xyyy 39: MUL TEMP[0].xy, TEMP[0].xyyy, TEMP[2].wwww 40: RCP TEMP[1].x, TEMP[4].xxxx 41: RCP TEMP[1].y, TEMP[4].yyyy 42: MUL TEMP[5].xy, TEMP[0].xyyy, TEMP[1].xyyy 43: MOV TEMP[5].z, IN[5].xxxx 44: MOV OUT[1].xy, IN[0].xyxx 45: MOV OUT[0], TEMP[5] 46: MOV OUT[3].xy, TEMP[3].xyxx 47: MOV OUT[2].xyz, IN[1].xyzx 48: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FLR temp[1].x, temp[1].xxxx; 4: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 6: FLR temp[2].x, temp[2].xxxx; 7: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 8: FRC temp[2].x, temp[2].xxxx; 9: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 10: MOV temp[1].y, temp[2].xxxx; 11: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 12: MOV temp[3].y, temp[2].yyyy; 13: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 14: MUL temp[2], const[2], input[3].xxxx; 15: MAD temp[2], const[3], input[3].yyyy, temp[2]; 16: MAD temp[2], const[4], input[3].zzzz, temp[2]; 17: ADD temp[2], temp[2], const[5]; 18: RCP temp[4].x, temp[2].wwww; 19: MUL temp[2].xyw, temp[2], temp[4].xxxx; 20: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 21: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 22: FRC temp[5].xy, temp[5].xyyy; 23: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 24: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 25: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 26: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 27: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 28: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 29: RCP temp[6].x, temp[2].wwww; 30: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 31: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 32: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 33: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 34: FLR temp[1].xy, temp[1].xyyy; 35: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 36: MOV temp[5].w, const[7].zzzz; 37: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 38: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 39: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 40: RCP temp[1].x, temp[4].xxxx; 41: RCP temp[1].y, temp[4].yyyy; 42: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 43: MOV temp[5].z, input[5].xxxx; 44: MOV output[1].xy, input[0].xyxx; 45: MOV temp[7], temp[5]; 46: MOV output[3].xy, temp[3].xyxx; 47: MOV output[2].xyz, input[1].xyzx; 48: MOV output[0], temp[7]; 49: MOV output[4], temp[7]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FLR temp[1].x, temp[1].xxxx; 4: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 6: FLR temp[2].x, temp[2].xxxx; 7: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 8: FRC temp[2].x, temp[2].xxxx; 9: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 10: MOV temp[1].y, temp[2].xxxx; 11: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 12: MOV temp[3].y, temp[2].yyyy; 13: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 14: MUL temp[2], const[2], input[3].xxxx; 15: MAD temp[2], const[3], input[3].yyyy, temp[2]; 16: MAD temp[2], const[4], input[3].zzzz, temp[2]; 17: ADD temp[2], temp[2], const[5]; 18: RCP temp[4].x, temp[2].wwww; 19: MUL temp[2].xyw, temp[2], temp[4].xxxx; 20: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 21: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 22: FRC temp[5].xy, temp[5].xyyy; 23: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 24: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 25: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 26: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 27: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 28: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 29: RCP temp[6].x, temp[2].wwww; 30: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 31: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 32: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 33: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 34: FLR temp[1].xy, temp[1].xyyy; 35: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 36: MOV temp[5].w, const[7].zzzz; 37: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 38: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 39: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 40: RCP temp[1].x, temp[4].xxxx; 41: RCP temp[1].y, temp[4].yyyy; 42: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 43: MOV temp[5].z, input[5].xxxx; 44: MOV output[1].xy, input[0].xyxx; 45: MOV temp[7], temp[5]; 46: MOV output[3].xy, temp[3].xyxx; 47: MOV output[2].xyz, input[1].xyzx; 48: MOV output[0], temp[7]; 49: MOV output[4], temp[7]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FLR temp[1].x, temp[1].xxxx; 4: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 6: FLR temp[2].x, temp[2].xxxx; 7: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 8: FRC temp[2].x, temp[2].xxxx; 9: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 10: MOV temp[1].y, temp[2].xxxx; 11: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 12: MOV temp[3].y, temp[2].yyyy; 13: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 14: MUL temp[2], const[2], input[3].xxxx; 15: MAD temp[2], const[3], input[3].yyyy, temp[2]; 16: MAD temp[2], const[4], input[3].zzzz, temp[2]; 17: ADD temp[2], temp[2], const[5]; 18: RCP temp[4].x, temp[2].wwww; 19: MUL temp[2].xyw, temp[2], temp[4].xxxx; 20: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 21: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 22: FRC temp[5].xy, temp[5].xyyy; 23: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 24: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 25: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 26: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 27: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 28: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 29: RCP temp[6].x, temp[2].wwww; 30: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 31: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 32: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 33: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 34: FLR temp[1].xy, temp[1].xyyy; 35: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 36: MOV temp[5].w, const[7].zzzz; 37: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 38: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 39: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 40: RCP temp[1].x, temp[4].xxxx; 41: RCP temp[1].y, temp[4].yyyy; 42: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 43: MOV temp[5].z, input[5].xxxx; 44: MOV output[1].xy, input[0].xyxx; 45: MOV temp[7], temp[5]; 46: MOV output[3].xy, temp[3].xyxx; 47: MOV output[2].xyz, input[1].xyzx; 48: MOV output[0], temp[7]; 49: MOV output[4], temp[7]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FRC temp[8].x, temp[1].xxxx; 4: ADD temp[1].x, temp[1].xxxx, -temp[8]; 5: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 6: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 7: FRC temp[9].x, temp[2].xxxx; 8: ADD temp[2].x, temp[2].xxxx, -temp[9]; 9: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 10: FRC temp[2].x, temp[2].xxxx; 11: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 12: MOV temp[1].y, temp[2].xxxx; 13: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 14: MOV temp[3].y, temp[2].yyyy; 15: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 16: MUL temp[2], const[2], input[3].xxxx; 17: MAD temp[2], const[3], input[3].yyyy, temp[2]; 18: MAD temp[2], const[4], input[3].zzzz, temp[2]; 19: ADD temp[2], temp[2], const[5]; 20: RCP temp[4].x, temp[2].wwww; 21: MUL temp[2].xyw, temp[2], temp[4].xxxx; 22: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 23: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 24: FRC temp[5].xy, temp[5].xyyy; 25: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 26: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 27: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 28: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 29: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 30: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 31: RCP temp[6].x, temp[2].wwww; 32: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 33: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 34: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 35: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 36: FRC temp[10].xy, temp[1].xyyy; 37: ADD temp[1].xy, temp[1].xyyy, -temp[10]; 38: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 39: MOV temp[5].w, const[7].zzzz; 40: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 41: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 42: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 43: RCP temp[1].x, temp[4].xxxx; 44: RCP temp[1].y, temp[4].yyyy; 45: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 46: MOV temp[5].z, input[5].xxxx; 47: MOV output[1].xy, input[0].xyxx; 48: MOV temp[7], temp[5]; 49: MOV output[3].xy, temp[3].xyxx; 50: MOV output[2].xyz, input[1].xyzx; 51: MOV output[0], temp[7]; 52: MOV output[4], temp[7]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FRC temp[8].x, temp[1].xxxx; 4: ADD temp[1].x, temp[1].xxxx, -temp[8]; 5: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 6: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 7: FRC temp[9].x, temp[2].xxxx; 8: ADD temp[2].x, temp[2].xxxx, -temp[9]; 9: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 10: FRC temp[2].x, temp[2].xxxx; 11: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 12: MOV temp[1].y, temp[2].xxxx; 13: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 14: MOV temp[3].y, temp[2].yyyy; 15: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 16: MUL temp[2], const[2], input[3].xxxx; 17: MAD temp[2], const[3], input[3].yyyy, temp[2]; 18: MAD temp[2], const[4], input[3].zzzz, temp[2]; 19: ADD temp[2], temp[2], const[5]; 20: RCP temp[4].x, temp[2].wwww; 21: MUL temp[2].xyw, temp[2], temp[4].xxxx; 22: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 23: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 24: FRC temp[5].xy, temp[5].xyyy; 25: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 26: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 27: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 28: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 29: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 30: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 31: RCP temp[6].x, temp[2].wwww; 32: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 33: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 34: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 35: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 36: FRC temp[10].xy, temp[1].xyyy; 37: ADD temp[1].xy, temp[1].xyyy, -temp[10]; 38: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 39: MOV temp[5].w, const[7].zzzz; 40: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 41: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 42: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 43: RCP temp[1].x, temp[4].xxxx; 44: RCP temp[1].y, temp[4].yyyy; 45: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 46: MOV temp[5].z, input[5].xxxx; 47: MOV output[1].xy, input[0].xyxx; 48: MOV temp[7], temp[5]; 49: MOV output[3].xy, temp[3].xyxx; 50: MOV output[2].xyz, input[1].xyzx; 51: MOV output[0], temp[7]; 52: MOV output[4], temp[7]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[8].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[8].x___; 5: ADD temp[2].x, input[6].x___, const[7].z___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[9].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[9].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, const[7].z___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MUL temp[4].xy, const[6].xy__, const[7].yy__; 23: MUL temp[5].xy, const[6].xy__, const[7].yy__; 24: FRC temp[5].xy, temp[5].xy__; 25: MUL temp[6].xy, const[0].xy__, input[2].xx__; 26: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 27: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 28: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 29: ADD temp[0].xy, temp[0].xy__, const[8].xy__; 30: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 31: RCP temp[6].x, temp[2].w___; 32: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 33: MAD temp[0].xy, temp[0].xy__, const[8].zw__, temp[1].xy__; 34: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 35: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 36: FRC temp[10].xy, temp[1].xy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[10].xy__; 38: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 39: MOV temp[5].w, const[7].___z; 40: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 41: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 42: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 43: RCP temp[1].x, temp[4].x___; 44: RCP temp[1].y, temp[4]._y__; 45: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 46: MOV temp[5].z, input[5].__x_; 47: MOV output[1].xy, input[0].xy__; 48: MOV temp[7], temp[5]; 49: MOV output[3].xy, temp[3].xy__; 50: MOV output[2].xyz, input[1].xyz_; 51: MOV output[0], temp[7]; 52: MOV output[4], temp[7]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[8].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[8].x___; 5: ADD temp[2].x, input[6].x___, none.1___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[9].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[9].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, none.1___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MUL temp[4].xy, const[6].xy__, const[7].yy__; 23: MUL temp[5].xy, const[6].xy__, const[7].yy__; 24: FRC temp[5].xy, temp[5].xy__; 25: MUL temp[6].xy, const[0].xy__, input[2].xx__; 26: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 27: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 28: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 29: ADD temp[0].xy, temp[0].xy__, const[8].x0__; 30: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 31: RCP temp[6].x, temp[2].w___; 32: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 33: MAD temp[0].xy, temp[0].xy__, none.1-1__, temp[1].xy__; 34: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 35: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 36: FRC temp[10].xy, temp[1].xy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[10].xy__; 38: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 39: MOV temp[5].w, none.___1; 40: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 41: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 42: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 43: RCP temp[1].x, temp[4].x___; 44: RCP temp[1].y, temp[4]._y__; 45: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 46: MOV temp[5].z, input[5].__x_; 47: MOV output[1].xy, input[0].xy__; 48: MOV output[3].xy, temp[3].xy__; 49: MOV output[2].xyz, input[1].xyz_; 50: MOV output[0], temp[5]; 51: MOV output[4], temp[5]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[8].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[8].x___; 5: ADD temp[2].x, input[6].x___, none.1___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[9].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[9].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, none.1___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MOV temp[7], const[7].yy__; 23: MUL temp[4].xy, const[6].xy__, temp[7]; 24: MOV temp[11], const[7].yy__; 25: MUL temp[5].xy, const[6].xy__, temp[11]; 26: FRC temp[5].xy, temp[5].xy__; 27: MUL temp[6].xy, const[0].xy__, input[2].xx__; 28: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 29: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 30: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 31: ADD temp[0].xy, temp[0].xy__, const[8].x0__; 32: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 33: RCP temp[6].x, temp[2].w___; 34: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 35: MAD temp[0].xy, temp[0].xy__, none.1-1__, temp[1].xy__; 36: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 38: FRC temp[10].xy, temp[1].xy__; 39: ADD temp[1].xy, temp[1].xy__, -temp[10].xy__; 40: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 41: MOV temp[5].w, none.___1; 42: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 43: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 44: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 45: RCP temp[1].x, temp[4].x___; 46: RCP temp[1].y, temp[4]._y__; 47: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 48: MOV temp[5].z, input[5].__x_; 49: MOV output[1].xy, input[0].xy__; 50: MOV output[3].xy, temp[3].xy__; 51: MOV output[2].xyz, input[1].xyz_; 52: MOV output[0], temp[5]; 53: MOV output[4], temp[5]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[2].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[2].x___; 5: ADD temp[2].x, input[6].x___, none.1___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[3].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[3].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, none.1___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MOV temp[5], const[7].yy__; 23: MUL temp[4].xy, const[6].xy__, temp[5]; 24: MOV temp[5], const[7].yy__; 25: MUL temp[5].xy, const[6].xy__, temp[5]; 26: FRC temp[5].xy, temp[5].xy__; 27: MUL temp[6].xy, const[0].xy__, input[2].xx__; 28: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 29: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 30: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 31: ADD temp[0].xy, temp[0].xy__, const[8].x0__; 32: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 33: RCP temp[6].x, temp[2].w___; 34: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 35: MAD temp[0].xy, temp[0].xy__, none.1-1__, temp[1].xy__; 36: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 38: FRC temp[6].xy, temp[1].xy__; 39: ADD temp[1].xy, temp[1].xy__, -temp[6].xy__; 40: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 41: MOV temp[5].w, none.___1; 42: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 43: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 44: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 45: RCP temp[1].x, temp[4].x___; 46: RCP temp[1].y, temp[4]._y__; 47: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 48: MOV temp[5].z, input[5].__x_; 49: MOV output[1].xy, input[0].xy__; 50: MOV output[3].xy, temp[3].xy__; 51: MOV output[2].xyz, input[1].xyz_; 52: MOV output[0], temp[5]; 53: MOV output[4], temp[5]; CONST[7] = { 4.0000 0.5000 1.0000 -4.0000 } CONST[8] = { -2.0000 -0.0000 1.0000 -1.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[2].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[2].x___; 5: ADD temp[2].x, input[6].x___, none.1___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[3].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[3].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, none.1___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MOV temp[5], const[7].yy__; 23: MUL temp[4].xy, const[6].xy__, temp[5]; 24: MOV temp[5], const[7].yy__; 25: MUL temp[5].xy, const[6].xy__, temp[5]; 26: FRC temp[5].xy, temp[5].xy__; 27: MUL temp[6].xy, const[0].xy__, input[2].xx__; 28: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 29: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 30: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 31: ADD temp[0].xy, temp[0].xy__, const[8].x0__; 32: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 33: RCP temp[6].x, temp[2].w___; 34: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 35: MAD temp[0].xy, temp[0].xy__, none.1-1__, temp[1].xy__; 36: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 38: FRC temp[6].xy, temp[1].xy__; 39: ADD temp[1].xy, temp[1].xy__, -temp[6].xy__; 40: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 41: MOV temp[5].w, none.___1; 42: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 43: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 44: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 45: RCP temp[1].x, temp[4].x___; 46: RCP temp[1].y, temp[4]._y__; 47: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 48: MOV temp[5].z, input[5].__x_; 49: MOV output[1].xy, input[0].xy__; 50: MOV output[3].xy, temp[3].xy__; 51: MOV output[2].xyz, input[1].xyz_; 52: MOV output[0], temp[5]; 53: MOV output[4], temp[5]; Final vertex program code: 0: op: 0x00200003 dst: 0t op: VE_ADD src0: 0x01f9e0e1 reg: 7i swiz: U/ Y/ U/ U src1: 0x012480e1 reg: 7i swiz: 0/ 0/ 0/ 0 src2: 0x012480e1 reg: 7i swiz: 0/ 0/ 0/ 0 1: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff00e1 reg: 7i swiz: X/ U/ U/ U src1: 0x01ff00e2 reg: 7c swiz: X/ U/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 2: op: 0x00102002 dst: 1t op: VE_MULTIPLY src0: 0x01ff00c1 reg: 6i swiz: X/ U/ U/ U src1: 0x01ff20e2 reg: 7c swiz: Y/ U/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 3: op: 0x00104006 dst: 2t op: VE_FRACTION 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: 0x00102003 dst: 1t op: VE_ADD src0: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src1: 0x1fff0040 reg: 2t swiz: -X/-U/-U/-U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 5: op: 0x00104003 dst: 2t op: VE_ADD src0: 0x01ff00c1 reg: 6i swiz: X/ U/ U/ U src1: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 6: op: 0x00104002 dst: 2t op: VE_MULTIPLY src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff20e2 reg: 7c swiz: Y/ U/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 7: op: 0x00106006 dst: 3t op: VE_FRACTION 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 8: op: 0x00104003 dst: 2t op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x1fff0060 reg: 3t swiz: -X/-U/-U/-U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 9: op: 0x00104002 dst: 2t op: VE_MULTIPLY src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff20e2 reg: 7c swiz: Y/ U/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 10: op: 0x00104006 dst: 2t op: VE_FRACTION 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 11: op: 0x00104004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff60e2 reg: 7c swiz: W/ U/ U/ U src2: 0x01ffa040 reg: 2t swiz: 1/ U/ U/ U 12: op: 0x00202003 dst: 1t op: VE_ADD src0: 0x01f8e040 reg: 2t swiz: U/ X/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 13: op: 0x00304004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01f90081 reg: 4i swiz: X/ Y/ U/ U 14: op: 0x00206003 dst: 3t 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 15: op: 0x00106003 dst: 3t op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff0102 reg: 8c swiz: X/ U/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 16: op: 0x00b04002 dst: 2t op: VE_MULTIPLY src0: 0x00f90042 reg: 2c swiz: X/ Y/ U/ W src1: 0x00380061 reg: 3i swiz: X/ X/ U/ X src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 17: op: 0x00b04004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x00f90062 reg: 3c swiz: X/ Y/ U/ W src1: 0x00792061 reg: 3i swiz: Y/ Y/ U/ Y src2: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W 18: op: 0x00b04004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x00f90082 reg: 4c swiz: X/ Y/ U/ W src1: 0x00ba4061 reg: 3i swiz: Z/ Z/ U/ Z src2: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W 19: op: 0x00b04003 dst: 2t op: VE_ADD src0: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W src1: 0x00f900a2 reg: 5c swiz: X/ Y/ U/ W src2: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 20: op: 0x00108046 dst: 4t op: ME_RECIP_DX src0: 0x00db6040 reg: 2t swiz: W/ W/ W/ W src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 21: op: 0x00b04002 dst: 2t op: VE_MULTIPLY src0: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W src1: 0x00380080 reg: 4t swiz: X/ X/ U/ X src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 22: op: 0x00f0a003 dst: 5t op: VE_ADD src0: 0x01f920e2 reg: 7c swiz: Y/ Y/ U/ U src1: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 23: op: 0x00308002 dst: 4t op: VE_MULTIPLY src0: 0x01f900c2 reg: 6c swiz: X/ Y/ U/ U src1: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 24: op: 0x00f0a003 dst: 5t op: VE_ADD src0: 0x01f920e2 reg: 7c swiz: Y/ Y/ U/ U src1: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 25: op: 0x0030a002 dst: 5t op: VE_MULTIPLY src0: 0x01f900c2 reg: 6c swiz: X/ Y/ U/ U src1: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 26: op: 0x0030a006 dst: 5t op: VE_FRACTION src0: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 27: op: 0x0030c002 dst: 6t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80041 reg: 2i swiz: X/ X/ U/ U src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 28: op: 0x0030c004 dst: 6t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92041 reg: 2i swiz: Y/ Y/ U/ U src2: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U 29: op: 0x0030c003 dst: 6t op: VE_ADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 30: op: 0x00300080 dst: 0t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U 31: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01fc0102 reg: 8c swiz: X/ 0/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 32: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90080 reg: 4t swiz: X/ Y/ U/ U src1: 0x01f90040 reg: 2t swiz: X/ Y/ U/ U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 33: op: 0x0010c046 dst: 6t op: ME_RECIP_DX src0: 0x00db6040 reg: 2t swiz: W/ W/ W/ W src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 34: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f800c0 reg: 6t swiz: X/ X/ U/ U src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 35: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x05fda000 reg: 0t swiz: 1/-1/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 36: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f920e2 reg: 7c swiz: Y/ Y/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 37: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x1ff900a0 reg: 5t swiz: -X/-Y/-U/-U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 38: op: 0x0030c006 dst: 6t op: VE_FRACTION src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 39: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x1ff900c0 reg: 6t swiz: -X/-Y/-U/-U src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 40: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 41: op: 0x0080a003 dst: 5t op: VE_ADD src0: 0x017fe000 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 42: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x1ff90020 reg: 1t swiz: -X/-Y/-U/-U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 43: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 44: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01fb6040 reg: 2t swiz: W/ W/ U/ U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 45: op: 0x00102046 dst: 1t op: ME_RECIP_DX src0: 0x00000080 reg: 4t swiz: X/ X/ X/ X src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 46: op: 0x00202046 dst: 1t op: ME_RECIP_DX src0: 0x00492080 reg: 4t swiz: Y/ Y/ Y/ Y src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 47: op: 0x0030a002 dst: 5t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 48: op: 0x0040a003 dst: 5t op: VE_ADD src0: 0x01c7e0a1 reg: 5i swiz: U/ U/ X/ U src1: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 src2: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 49: op: 0x00302203 dst: 1o 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 50: op: 0x00306203 dst: 3o op: VE_ADD src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 51: op: 0x00704203 dst: 2o op: VE_ADD src0: 0x01d10021 reg: 1i swiz: X/ Y/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 52: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 53: op: 0x00f08203 dst: 4o op: VE_ADD src0: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[12], PERSPECTIVE DCL IN[1], GENERIC[13], PERSPECTIVE DCL IN[2], GENERIC[14], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[0] DCL CONST[4..6] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL DCL TEMP[7], LOCAL DCL TEMP[8], LOCAL DCL TEMP[9], LOCAL DCL TEMP[10], LOCAL DCL TEMP[11], LOCAL IMM FLT32 { 0.5000, 255.0000, 16.0000, 0.0625} IMM FLT32 {-1023.0000, 1.0323, 0.0312, 0.0000} IMM FLT32 { 1.0000, 0.6000, 0.0000, 0.5454} IMM FLT32 { 0.9717, 26.0000, 0.0000, 0.0000} 0: ADD TEMP[0].x, IN[1].zzzz, IMM[0].xxxx 1: RCP TEMP[1].x, CONST[5].xxxx 2: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[1].xxxx 3: FRC TEMP[1].x, TEMP[0].xxxx 4: FLR TEMP[0].x, TEMP[0].xxxx 5: ADD TEMP[0].x, TEMP[0].xxxx, IMM[0].xxxx 6: RCP TEMP[2].x, CONST[5].yyyy 7: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[2].xxxx 8: MOV TEMP[1].y, TEMP[0].xxxx 9: TEX TEMP[0], TEMP[1].xyyy, SAMP[1], 2D 10: MAD TEMP[0], IMM[0].yyyy, TEMP[0], IMM[0].xxxx 11: FLR TEMP[0], TEMP[0] 12: MUL TEMP[1].x, TEMP[0].wwww, IMM[0].wwww 13: FLR TEMP[1].x, TEMP[1].xxxx 14: MAD TEMP[1].x, TEMP[0].yyyy, IMM[0].zzzz, TEMP[1].xxxx 15: MAD TEMP[1].x, TEMP[1].xxxx, IMM[0].xxxx, IMM[1].xxxx 16: MUL TEMP[2].x, TEMP[0].wwww, IMM[0].wwww 17: FRC TEMP[2].x, TEMP[2].xxxx 18: MUL TEMP[3].x, TEMP[0].zzzz, IMM[0].zzzz 19: MAD TEMP[2].x, IMM[0].zzzz, TEMP[2].xxxx, TEMP[3].xxxx 20: MAD TEMP[2].x, TEMP[2].xxxx, IMM[0].xxxx, IMM[1].xxxx 21: MOV TEMP[1].y, TEMP[2].xxxx 22: MUL TEMP[0].x, TEMP[0].xxxx, IMM[1].zzzz 23: FRC TEMP[0].x, TEMP[0].xxxx 24: MUL TEMP[0].x, IMM[1].yyyy, TEMP[0].xxxx 25: ADD TEMP[1].xy, IN[0].xyyy, -TEMP[1].xyyy 26: SEQ TEMP[2].x, TEMP[0].xxxx, IMM[1].wwww 27: DP2 TEMP[3].x, TEMP[1].xyyy, TEMP[1].xyyy 28: SGE TEMP[3].x, TEMP[3].xxxx, IMM[2].yyyy 29: ADD TEMP[2].x, -TEMP[2].xxxx, IMM[2].xxxx 30: CMP TEMP[1].x, -TEMP[2].xxxx, TEMP[3].xxxx, IMM[2].xxxx 31: CMP TEMP[1].x, -TEMP[1].xxxx, IMM[2].xxxx, IMM[1].wwww 32: KIL -TEMP[1].xxxx 33: RCP TEMP[1].x, CONST[4].xxxx 34: RCP TEMP[1].y, CONST[4].yyyy 35: MUL TEMP[1].xy, IN[2].xyyy, TEMP[1].xyyy 36: RCP TEMP[2].x, CONST[4].xxxx 37: RCP TEMP[2].y, CONST[4].yyyy 38: MUL TEMP[2].xy, IMM[2].xzzz, TEMP[2].xyyy 39: RCP TEMP[3].x, CONST[4].xxxx 40: RCP TEMP[3].y, CONST[4].yyyy 41: MUL TEMP[3].xy, IMM[2].zxxx, TEMP[3].xyyy 42: RCP TEMP[4].x, CONST[4].xxxx 43: RCP TEMP[4].y, CONST[4].yyyy 44: MUL TEMP[4].xy, IN[2].xyyy, TEMP[4].xyyy 45: TEX TEMP[4].w, TEMP[4].xyyy, SAMP[0], 2D 46: ADD TEMP[5].xy, TEMP[1].xyyy, TEMP[2].xyyy 47: ADD TEMP[5].xy, TEMP[5].xyyy, TEMP[3].xyyy 48: TEX TEMP[5].w, TEMP[5].xyyy, SAMP[0], 2D 49: ADD TEMP[6].xy, TEMP[1].xyyy, TEMP[2].xyyy 50: TEX TEMP[6].w, TEMP[6].xyyy, SAMP[0], 2D 51: ADD TEMP[7].xy, TEMP[1].xyyy, TEMP[2].xyyy 52: ADD TEMP[7].xy, TEMP[7].xyyy, -TEMP[3].xyyy 53: TEX TEMP[7].w, TEMP[7].xyyy, SAMP[0], 2D 54: ADD TEMP[8].xy, TEMP[1].xyyy, TEMP[3].xyyy 55: TEX TEMP[8].w, TEMP[8].xyyy, SAMP[0], 2D 56: ADD TEMP[9].xy, TEMP[1].xyyy, -TEMP[3].xyyy 57: TEX TEMP[9].w, TEMP[9].xyyy, SAMP[0], 2D 58: ADD TEMP[10].xy, TEMP[1].xyyy, -TEMP[2].xyyy 59: ADD TEMP[10].xy, TEMP[10].xyyy, TEMP[3].xyyy 60: TEX TEMP[10].w, TEMP[10].xyyy, SAMP[0], 2D 61: ADD TEMP[11].xy, TEMP[1].xyyy, -TEMP[2].xyyy 62: TEX TEMP[11].w, TEMP[11].xyyy, SAMP[0], 2D 63: ADD TEMP[1].xy, TEMP[1].xyyy, -TEMP[2].xyyy 64: ADD TEMP[1].xy, TEMP[1].xyyy, -TEMP[3].xyyy 65: TEX TEMP[1].w, TEMP[1].xyyy, SAMP[0], 2D 66: MUL TEMP[1].x, IMM[2].wwww, TEMP[1].wwww 67: MAD TEMP[1].x, IMM[3].xxxx, TEMP[11].wwww, TEMP[1].xxxx 68: MAD TEMP[1].x, IMM[2].wwww, TEMP[10].wwww, TEMP[1].xxxx 69: MAD TEMP[1].x, IMM[3].xxxx, TEMP[9].wwww, TEMP[1].xxxx 70: MAD TEMP[1].x, IMM[3].xxxx, TEMP[8].wwww, TEMP[1].xxxx 71: MAD TEMP[1].x, IMM[2].wwww, TEMP[7].wwww, TEMP[1].xxxx 72: MAD TEMP[1].x, IMM[3].xxxx, TEMP[6].wwww, TEMP[1].xxxx 73: MAD TEMP[1].x, IMM[2].wwww, TEMP[5].wwww, TEMP[1].xxxx 74: ADD TEMP[1].x, TEMP[4].wwww, TEMP[1].xxxx 75: MIN TEMP[1].x, TEMP[1].xxxx, IMM[2].xxxx 76: SEQ TEMP[3].x, TEMP[1].xxxx, IMM[1].wwww 77: CMP TEMP[2].x, -TEMP[3].xxxx, IMM[2].xxxx, IMM[1].wwww 78: KIL -TEMP[2].xxxx 79: ADD TEMP[2].x, IN[1].yyyy, IMM[0].xxxx 80: RCP TEMP[3].x, CONST[6].xxxx 81: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 82: FRC TEMP[3].x, TEMP[2].xxxx 83: FLR TEMP[2].x, TEMP[2].xxxx 84: MAD TEMP[2].x, IMM[3].yyyy, TEMP[2].xxxx, CONST[0].xxxx 85: ADD TEMP[2].x, TEMP[2].xxxx, IMM[0].xxxx 86: RCP TEMP[4].x, CONST[6].yyyy 87: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[4].xxxx 88: MOV TEMP[3].y, TEMP[2].xxxx 89: TEX TEMP[2], TEMP[3].xyyy, SAMP[2], 2D 90: MOV TEMP[3].xyz, TEMP[2].xyzx 91: MUL TEMP[0].x, TEMP[2].wwww, TEMP[0].xxxx 92: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[1].xxxx 93: MOV TEMP[3].w, TEMP[0].xxxx 94: MOV OUT[0], TEMP[3] 95: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: RCP temp[2].x, const[4].xxxx; 37: RCP temp[2].y, const[4].yyyy; 38: MUL temp[2].xy, const[9].xzzz, temp[2].xyyy; 39: RCP temp[3].x, const[4].xxxx; 40: RCP temp[3].y, const[4].yyyy; 41: MUL temp[3].xy, const[9].zxxx, temp[3].xyyy; 42: RCP temp[4].x, const[4].xxxx; 43: RCP temp[4].y, const[4].yyyy; 44: MUL temp[4].xy, input[2].xyyy, temp[4].xyyy; 45: TEX temp[4].w, temp[4].xyyy, 2D[0]; 46: ADD temp[5].xy, temp[1].xyyy, temp[2].xyyy; 47: ADD temp[5].xy, temp[5].xyyy, temp[3].xyyy; 48: TEX temp[5].w, temp[5].xyyy, 2D[0]; 49: ADD temp[6].xy, temp[1].xyyy, temp[2].xyyy; 50: TEX temp[6].w, temp[6].xyyy, 2D[0]; 51: ADD temp[7].xy, temp[1].xyyy, temp[2].xyyy; 52: ADD temp[7].xy, temp[7].xyyy, -temp[3].xyyy; 53: TEX temp[7].w, temp[7].xyyy, 2D[0]; 54: ADD temp[8].xy, temp[1].xyyy, temp[3].xyyy; 55: TEX temp[8].w, temp[8].xyyy, 2D[0]; 56: ADD temp[9].xy, temp[1].xyyy, -temp[3].xyyy; 57: TEX temp[9].w, temp[9].xyyy, 2D[0]; 58: ADD temp[10].xy, temp[1].xyyy, -temp[2].xyyy; 59: ADD temp[10].xy, temp[10].xyyy, temp[3].xyyy; 60: TEX temp[10].w, temp[10].xyyy, 2D[0]; 61: ADD temp[11].xy, temp[1].xyyy, -temp[2].xyyy; 62: TEX temp[11].w, temp[11].xyyy, 2D[0]; 63: ADD temp[1].xy, temp[1].xyyy, -temp[2].xyyy; 64: ADD temp[1].xy, temp[1].xyyy, -temp[3].xyyy; 65: TEX temp[1].w, temp[1].xyyy, 2D[0]; 66: MUL temp[1].x, const[9].wwww, temp[1].wwww; 67: MAD temp[1].x, const[10].xxxx, temp[11].wwww, temp[1].xxxx; 68: MAD temp[1].x, const[9].wwww, temp[10].wwww, temp[1].xxxx; 69: MAD temp[1].x, const[10].xxxx, temp[9].wwww, temp[1].xxxx; 70: MAD temp[1].x, const[10].xxxx, temp[8].wwww, temp[1].xxxx; 71: MAD temp[1].x, const[9].wwww, temp[7].wwww, temp[1].xxxx; 72: MAD temp[1].x, const[10].xxxx, temp[6].wwww, temp[1].xxxx; 73: MAD temp[1].x, const[9].wwww, temp[5].wwww, temp[1].xxxx; 74: ADD temp[1].x, temp[4].wwww, temp[1].xxxx; 75: MIN temp[1].x, temp[1].xxxx, const[9].xxxx; 76: SEQ temp[3].x, temp[1].xxxx, const[8].wwww; 77: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 78: KIL -temp[2].xxxx; 79: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 80: RCP temp[3].x, const[6].xxxx; 81: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 82: FRC temp[3].x, temp[2].xxxx; 83: FLR temp[2].x, temp[2].xxxx; 84: MAD temp[2].x, const[10].yyyy, temp[2].xxxx, const[0].xxxx; 85: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 86: RCP temp[4].x, const[6].yyyy; 87: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 88: MOV temp[3].y, temp[2].xxxx; 89: TEX temp[2], temp[3].xyyy, 2D[2]; 90: MOV temp[3].xyz, temp[2].xyzx; 91: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 92: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 93: MOV temp[3].w, temp[0].xxxx; 94: MOV output[0], temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: RCP temp[2].x, const[4].xxxx; 37: RCP temp[2].y, const[4].yyyy; 38: MUL temp[2].xy, const[9].xzzz, temp[2].xyyy; 39: RCP temp[3].x, const[4].xxxx; 40: RCP temp[3].y, const[4].yyyy; 41: MUL temp[3].xy, const[9].zxxx, temp[3].xyyy; 42: RCP temp[4].x, const[4].xxxx; 43: RCP temp[4].y, const[4].yyyy; 44: MUL temp[4].xy, input[2].xyyy, temp[4].xyyy; 45: TEX temp[4].w, temp[4].xyyy, 2D[0]; 46: ADD temp[5].xy, temp[1].xyyy, temp[2].xyyy; 47: ADD temp[5].xy, temp[5].xyyy, temp[3].xyyy; 48: TEX temp[5].w, temp[5].xyyy, 2D[0]; 49: ADD temp[6].xy, temp[1].xyyy, temp[2].xyyy; 50: TEX temp[6].w, temp[6].xyyy, 2D[0]; 51: ADD temp[7].xy, temp[1].xyyy, temp[2].xyyy; 52: ADD temp[7].xy, temp[7].xyyy, -temp[3].xyyy; 53: TEX temp[7].w, temp[7].xyyy, 2D[0]; 54: ADD temp[8].xy, temp[1].xyyy, temp[3].xyyy; 55: TEX temp[8].w, temp[8].xyyy, 2D[0]; 56: ADD temp[9].xy, temp[1].xyyy, -temp[3].xyyy; 57: TEX temp[9].w, temp[9].xyyy, 2D[0]; 58: ADD temp[10].xy, temp[1].xyyy, -temp[2].xyyy; 59: ADD temp[10].xy, temp[10].xyyy, temp[3].xyyy; 60: TEX temp[10].w, temp[10].xyyy, 2D[0]; 61: ADD temp[11].xy, temp[1].xyyy, -temp[2].xyyy; 62: TEX temp[11].w, temp[11].xyyy, 2D[0]; 63: ADD temp[1].xy, temp[1].xyyy, -temp[2].xyyy; 64: ADD temp[1].xy, temp[1].xyyy, -temp[3].xyyy; 65: TEX temp[1].w, temp[1].xyyy, 2D[0]; 66: MUL temp[1].x, const[9].wwww, temp[1].wwww; 67: MAD temp[1].x, const[10].xxxx, temp[11].wwww, temp[1].xxxx; 68: MAD temp[1].x, const[9].wwww, temp[10].wwww, temp[1].xxxx; 69: MAD temp[1].x, const[10].xxxx, temp[9].wwww, temp[1].xxxx; 70: MAD temp[1].x, const[10].xxxx, temp[8].wwww, temp[1].xxxx; 71: MAD temp[1].x, const[9].wwww, temp[7].wwww, temp[1].xxxx; 72: MAD temp[1].x, const[10].xxxx, temp[6].wwww, temp[1].xxxx; 73: MAD temp[1].x, const[9].wwww, temp[5].wwww, temp[1].xxxx; 74: ADD temp[1].x, temp[4].wwww, temp[1].xxxx; 75: MIN temp[1].x, temp[1].xxxx, const[9].xxxx; 76: SEQ temp[3].x, temp[1].xxxx, const[8].wwww; 77: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 78: KIL -temp[2].xxxx; 79: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 80: RCP temp[3].x, const[6].xxxx; 81: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 82: FRC temp[3].x, temp[2].xxxx; 83: FLR temp[2].x, temp[2].xxxx; 84: MAD temp[2].x, const[10].yyyy, temp[2].xxxx, const[0].xxxx; 85: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 86: RCP temp[4].x, const[6].yyyy; 87: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 88: MOV temp[3].y, temp[2].xxxx; 89: TEX temp[2], temp[3].xyyy, 2D[2]; 90: MOV temp[3].xyz, temp[2].xyzx; 91: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 92: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 93: MOV temp[3].w, temp[0].xxxx; 94: MOV output[0], temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: RCP temp[2].x, const[4].xxxx; 37: RCP temp[2].y, const[4].yyyy; 38: MUL temp[2].xy, const[9].xzzz, temp[2].xyyy; 39: RCP temp[3].x, const[4].xxxx; 40: RCP temp[3].y, const[4].yyyy; 41: MUL temp[3].xy, const[9].zxxx, temp[3].xyyy; 42: RCP temp[4].x, const[4].xxxx; 43: RCP temp[4].y, const[4].yyyy; 44: MUL temp[4].xy, input[2].xyyy, temp[4].xyyy; 45: TEX temp[4].w, temp[4].xyyy, 2D[0]; 46: ADD temp[5].xy, temp[1].xyyy, temp[2].xyyy; 47: ADD temp[5].xy, temp[5].xyyy, temp[3].xyyy; 48: TEX temp[5].w, temp[5].xyyy, 2D[0]; 49: ADD temp[6].xy, temp[1].xyyy, temp[2].xyyy; 50: TEX temp[6].w, temp[6].xyyy, 2D[0]; 51: ADD temp[7].xy, temp[1].xyyy, temp[2].xyyy; 52: ADD temp[7].xy, temp[7].xyyy, -temp[3].xyyy; 53: TEX temp[7].w, temp[7].xyyy, 2D[0]; 54: ADD temp[8].xy, temp[1].xyyy, temp[3].xyyy; 55: TEX temp[8].w, temp[8].xyyy, 2D[0]; 56: ADD temp[9].xy, temp[1].xyyy, -temp[3].xyyy; 57: TEX temp[9].w, temp[9].xyyy, 2D[0]; 58: ADD temp[10].xy, temp[1].xyyy, -temp[2].xyyy; 59: ADD temp[10].xy, temp[10].xyyy, temp[3].xyyy; 60: TEX temp[10].w, temp[10].xyyy, 2D[0]; 61: ADD temp[11].xy, temp[1].xyyy, -temp[2].xyyy; 62: TEX temp[11].w, temp[11].xyyy, 2D[0]; 63: ADD temp[1].xy, temp[1].xyyy, -temp[2].xyyy; 64: ADD temp[1].xy, temp[1].xyyy, -temp[3].xyyy; 65: TEX temp[1].w, temp[1].xyyy, 2D[0]; 66: MUL temp[1].x, const[9].wwww, temp[1].wwww; 67: MAD temp[1].x, const[10].xxxx, temp[11].wwww, temp[1].xxxx; 68: MAD temp[1].x, const[9].wwww, temp[10].wwww, temp[1].xxxx; 69: MAD temp[1].x, const[10].xxxx, temp[9].wwww, temp[1].xxxx; 70: MAD temp[1].x, const[10].xxxx, temp[8].wwww, temp[1].xxxx; 71: MAD temp[1].x, const[9].wwww, temp[7].wwww, temp[1].xxxx; 72: MAD temp[1].x, const[10].xxxx, temp[6].wwww, temp[1].xxxx; 73: MAD temp[1].x, const[9].wwww, temp[5].wwww, temp[1].xxxx; 74: ADD temp[1].x, temp[4].wwww, temp[1].xxxx; 75: MIN temp[1].x, temp[1].xxxx, const[9].xxxx; 76: SEQ temp[3].x, temp[1].xxxx, const[8].wwww; 77: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 78: KIL -temp[2].xxxx; 79: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 80: RCP temp[3].x, const[6].xxxx; 81: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 82: FRC temp[3].x, temp[2].xxxx; 83: FLR temp[2].x, temp[2].xxxx; 84: MAD temp[2].x, const[10].yyyy, temp[2].xxxx, const[0].xxxx; 85: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 86: RCP temp[4].x, const[6].yyyy; 87: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 88: MOV temp[3].y, temp[2].xxxx; 89: TEX temp[2], temp[3].xyyy, 2D[2]; 90: MOV temp[3].xyz, temp[2].xyzx; 91: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 92: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 93: MOV temp[3].w, temp[0].xxxx; 94: MOV output[0], temp[3]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: RCP temp[2].x, const[4].xxxx; 37: RCP temp[2].y, const[4].yyyy; 38: MUL temp[2].xy, const[9].xzzz, temp[2].xyyy; 39: RCP temp[3].x, const[4].xxxx; 40: RCP temp[3].y, const[4].yyyy; 41: MUL temp[3].xy, const[9].zxxx, temp[3].xyyy; 42: RCP temp[4].x, const[4].xxxx; 43: RCP temp[4].y, const[4].yyyy; 44: MUL temp[4].xy, input[2].xyyy, temp[4].xyyy; 45: TEX temp[4].w, temp[4].xyyy, 2D[0]; 46: ADD temp[5].xy, temp[1].xyyy, temp[2].xyyy; 47: ADD temp[5].xy, temp[5].xyyy, temp[3].xyyy; 48: TEX temp[5].w, temp[5].xyyy, 2D[0]; 49: ADD temp[6].xy, temp[1].xyyy, temp[2].xyyy; 50: TEX temp[6].w, temp[6].xyyy, 2D[0]; 51: ADD temp[7].xy, temp[1].xyyy, temp[2].xyyy; 52: ADD temp[7].xy, temp[7].xyyy, -temp[3].xyyy; 53: TEX temp[7].w, temp[7].xyyy, 2D[0]; 54: ADD temp[8].xy, temp[1].xyyy, temp[3].xyyy; 55: TEX temp[8].w, temp[8].xyyy, 2D[0]; 56: ADD temp[9].xy, temp[1].xyyy, -temp[3].xyyy; 57: TEX temp[9].w, temp[9].xyyy, 2D[0]; 58: ADD temp[10].xy, temp[1].xyyy, -temp[2].xyyy; 59: ADD temp[10].xy, temp[10].xyyy, temp[3].xyyy; 60: TEX temp[10].w, temp[10].xyyy, 2D[0]; 61: ADD temp[11].xy, temp[1].xyyy, -temp[2].xyyy; 62: TEX temp[11].w, temp[11].xyyy, 2D[0]; 63: ADD temp[1].xy, temp[1].xyyy, -temp[2].xyyy; 64: ADD temp[1].xy, temp[1].xyyy, -temp[3].xyyy; 65: TEX temp[1].w, temp[1].xyyy, 2D[0]; 66: MUL temp[1].x, const[9].wwww, temp[1].wwww; 67: MAD temp[1].x, const[10].xxxx, temp[11].wwww, temp[1].xxxx; 68: MAD temp[1].x, const[9].wwww, temp[10].wwww, temp[1].xxxx; 69: MAD temp[1].x, const[10].xxxx, temp[9].wwww, temp[1].xxxx; 70: MAD temp[1].x, const[10].xxxx, temp[8].wwww, temp[1].xxxx; 71: MAD temp[1].x, const[9].wwww, temp[7].wwww, temp[1].xxxx; 72: MAD temp[1].x, const[10].xxxx, temp[6].wwww, temp[1].xxxx; 73: MAD temp[1].x, const[9].wwww, temp[5].wwww, temp[1].xxxx; 74: ADD temp[1].x, temp[4].wwww, temp[1].xxxx; 75: MIN temp[1].x, temp[1].xxxx, const[9].xxxx; 76: SEQ temp[3].x, temp[1].xxxx, const[8].wwww; 77: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 78: KIL -temp[2].xxxx; 79: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 80: RCP temp[3].x, const[6].xxxx; 81: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 82: FRC temp[3].x, temp[2].xxxx; 83: FLR temp[2].x, temp[2].xxxx; 84: MAD temp[2].x, const[10].yyyy, temp[2].xxxx, const[0].xxxx; 85: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 86: RCP temp[4].x, const[6].yyyy; 87: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 88: MOV temp[3].y, temp[2].xxxx; 89: TEX temp[2], temp[3].xyyy, 2D[2]; 90: MOV temp[3].xyz, temp[2].xyzx; 91: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 92: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 93: MOV temp[3].w, temp[0].xxxx; 94: MOV output[0], temp[3]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: RCP temp[2].x, const[4].xxxx; 37: RCP temp[2].y, const[4].yyyy; 38: MUL temp[2].xy, const[9].xzzz, temp[2].xyyy; 39: RCP temp[3].x, const[4].xxxx; 40: RCP temp[3].y, const[4].yyyy; 41: MUL temp[3].xy, const[9].zxxx, temp[3].xyyy; 42: RCP temp[4].x, const[4].xxxx; 43: RCP temp[4].y, const[4].yyyy; 44: MUL temp[4].xy, input[2].xyyy, temp[4].xyyy; 45: TEX temp[4].w, temp[4].xyyy, 2D[0]; 46: ADD temp[5].xy, temp[1].xyyy, temp[2].xyyy; 47: ADD temp[5].xy, temp[5].xyyy, temp[3].xyyy; 48: TEX temp[5].w, temp[5].xyyy, 2D[0]; 49: ADD temp[6].xy, temp[1].xyyy, temp[2].xyyy; 50: TEX temp[6].w, temp[6].xyyy, 2D[0]; 51: ADD temp[7].xy, temp[1].xyyy, temp[2].xyyy; 52: ADD temp[7].xy, temp[7].xyyy, -temp[3].xyyy; 53: TEX temp[7].w, temp[7].xyyy, 2D[0]; 54: ADD temp[8].xy, temp[1].xyyy, temp[3].xyyy; 55: TEX temp[8].w, temp[8].xyyy, 2D[0]; 56: ADD temp[9].xy, temp[1].xyyy, -temp[3].xyyy; 57: TEX temp[9].w, temp[9].xyyy, 2D[0]; 58: ADD temp[10].xy, temp[1].xyyy, -temp[2].xyyy; 59: ADD temp[10].xy, temp[10].xyyy, temp[3].xyyy; 60: TEX temp[10].w, temp[10].xyyy, 2D[0]; 61: ADD temp[11].xy, temp[1].xyyy, -temp[2].xyyy; 62: TEX temp[11].w, temp[11].xyyy, 2D[0]; 63: ADD temp[1].xy, temp[1].xyyy, -temp[2].xyyy; 64: ADD temp[1].xy, temp[1].xyyy, -temp[3].xyyy; 65: TEX temp[1].w, temp[1].xyyy, 2D[0]; 66: MUL temp[1].x, const[9].wwww, temp[1].wwww; 67: MAD temp[1].x, const[10].xxxx, temp[11].wwww, temp[1].xxxx; 68: MAD temp[1].x, const[9].wwww, temp[10].wwww, temp[1].xxxx; 69: MAD temp[1].x, const[10].xxxx, temp[9].wwww, temp[1].xxxx; 70: MAD temp[1].x, const[10].xxxx, temp[8].wwww, temp[1].xxxx; 71: MAD temp[1].x, const[9].wwww, temp[7].wwww, temp[1].xxxx; 72: MAD temp[1].x, const[10].xxxx, temp[6].wwww, temp[1].xxxx; 73: MAD temp[1].x, const[9].wwww, temp[5].wwww, temp[1].xxxx; 74: ADD temp[1].x, temp[4].wwww, temp[1].xxxx; 75: MIN temp[1].x, temp[1].xxxx, const[9].xxxx; 76: SEQ temp[3].x, temp[1].xxxx, const[8].wwww; 77: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 78: KIL -temp[2].xxxx; 79: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 80: RCP temp[3].x, const[6].xxxx; 81: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 82: FRC temp[3].x, temp[2].xxxx; 83: FLR temp[2].x, temp[2].xxxx; 84: MAD temp[2].x, const[10].yyyy, temp[2].xxxx, const[0].xxxx; 85: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 86: RCP temp[4].x, const[6].yyyy; 87: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 88: MOV temp[3].y, temp[2].xxxx; 89: TEX temp[2], temp[3].xyyy, 2D[2]; 90: MOV temp[3].xyz, temp[2].xyzx; 91: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 92: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 93: MOV temp[3].w, temp[0].xxxx; 94: MOV output[0], temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: RCP temp[2].x, const[4].xxxx; 37: RCP temp[2].y, const[4].yyyy; 38: MUL temp[2].xy, const[9].xzzz, temp[2].xyyy; 39: RCP temp[3].x, const[4].xxxx; 40: RCP temp[3].y, const[4].yyyy; 41: MUL temp[3].xy, const[9].zxxx, temp[3].xyyy; 42: RCP temp[4].x, const[4].xxxx; 43: RCP temp[4].y, const[4].yyyy; 44: MUL temp[4].xy, input[2].xyyy, temp[4].xyyy; 45: TEX temp[12], temp[4].xyyy, 2D[0]; 46: MOV temp[4].w, temp[12]; 47: ADD temp[5].xy, temp[1].xyyy, temp[2].xyyy; 48: ADD temp[5].xy, temp[5].xyyy, temp[3].xyyy; 49: TEX temp[13], temp[5].xyyy, 2D[0]; 50: MOV temp[5].w, temp[13]; 51: ADD temp[6].xy, temp[1].xyyy, temp[2].xyyy; 52: TEX temp[14], temp[6].xyyy, 2D[0]; 53: MOV temp[6].w, temp[14]; 54: ADD temp[7].xy, temp[1].xyyy, temp[2].xyyy; 55: ADD temp[7].xy, temp[7].xyyy, -temp[3].xyyy; 56: TEX temp[15], temp[7].xyyy, 2D[0]; 57: MOV temp[7].w, temp[15]; 58: ADD temp[8].xy, temp[1].xyyy, temp[3].xyyy; 59: TEX temp[16], temp[8].xyyy, 2D[0]; 60: MOV temp[8].w, temp[16]; 61: ADD temp[9].xy, temp[1].xyyy, -temp[3].xyyy; 62: TEX temp[17], temp[9].xyyy, 2D[0]; 63: MOV temp[9].w, temp[17]; 64: ADD temp[10].xy, temp[1].xyyy, -temp[2].xyyy; 65: ADD temp[10].xy, temp[10].xyyy, temp[3].xyyy; 66: TEX temp[18], temp[10].xyyy, 2D[0]; 67: MOV temp[10].w, temp[18]; 68: ADD temp[11].xy, temp[1].xyyy, -temp[2].xyyy; 69: TEX temp[19], temp[11].xyyy, 2D[0]; 70: MOV temp[11].w, temp[19]; 71: ADD temp[1].xy, temp[1].xyyy, -temp[2].xyyy; 72: ADD temp[1].xy, temp[1].xyyy, -temp[3].xyyy; 73: TEX temp[20], temp[1].xyyy, 2D[0]; 74: MOV temp[1].w, temp[20]; 75: MUL temp[1].x, const[9].wwww, temp[1].wwww; 76: MAD temp[1].x, const[10].xxxx, temp[11].wwww, temp[1].xxxx; 77: MAD temp[1].x, const[9].wwww, temp[10].wwww, temp[1].xxxx; 78: MAD temp[1].x, const[10].xxxx, temp[9].wwww, temp[1].xxxx; 79: MAD temp[1].x, const[10].xxxx, temp[8].wwww, temp[1].xxxx; 80: MAD temp[1].x, const[9].wwww, temp[7].wwww, temp[1].xxxx; 81: MAD temp[1].x, const[10].xxxx, temp[6].wwww, temp[1].xxxx; 82: MAD temp[1].x, const[9].wwww, temp[5].wwww, temp[1].xxxx; 83: ADD temp[1].x, temp[4].wwww, temp[1].xxxx; 84: MIN temp[1].x, temp[1].xxxx, const[9].xxxx; 85: SEQ temp[3].x, temp[1].xxxx, const[8].wwww; 86: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 87: KIL -temp[2].xxxx; 88: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 89: RCP temp[3].x, const[6].xxxx; 90: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 91: FRC temp[3].x, temp[2].xxxx; 92: FLR temp[2].x, temp[2].xxxx; 93: MAD temp[2].x, const[10].yyyy, temp[2].xxxx, const[0].xxxx; 94: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 95: RCP temp[4].x, const[6].yyyy; 96: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 97: MOV temp[3].y, temp[2].xxxx; 98: TEX temp[2], temp[3].xyyy, 2D[2]; 99: MOV temp[3].xyz, temp[2].xyzx; 100: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 101: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 102: MOV temp[3].w, temp[0].xxxx; 103: MOV output[0], temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FRC temp[21].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, -temp[21]; 6: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 7: RCP temp[2].x, const[5].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: TEX temp[0], temp[1].xyyy, 2D[1]; 11: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 12: FRC temp[22], temp[0]; 13: ADD temp[0], temp[0], -temp[22]; 14: MUL temp[1].x, temp[0].wwww, const[7].wwww; 15: FRC temp[23].x, temp[1].xxxx; 16: ADD temp[1].x, temp[1].xxxx, -temp[23]; 17: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 18: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 19: MUL temp[2].x, temp[0].wwww, const[7].wwww; 20: FRC temp[2].x, temp[2].xxxx; 21: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 22: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 23: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 24: MOV temp[1].y, temp[2].xxxx; 25: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 26: FRC temp[0].x, temp[0].xxxx; 27: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 28: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 29: ADD temp[2].x, temp[0].xxxx, -const[8].wwww; 30: CMP temp[2].x, -|temp[2]|, none.0000, none.1111; 31: DP3 temp[3].x, temp[1].xy00, temp[1].xy00; 32: ADD temp[24].x, temp[3].xxxx, -const[9].yyyy; 33: CMP temp[3].x, temp[24], none.0000, none.1111; 34: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 35: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 36: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 37: KIL -temp[1].xxxx; 38: RCP temp[1].x, const[4].xxxx; 39: RCP temp[1].y, const[4].yyyy; 40: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 41: RCP temp[2].x, const[4].xxxx; 42: RCP temp[2].y, const[4].yyyy; 43: MUL temp[2].xy, const[9].xzzz, temp[2].xyyy; 44: RCP temp[3].x, const[4].xxxx; 45: RCP temp[3].y, const[4].yyyy; 46: MUL temp[3].xy, const[9].zxxx, temp[3].xyyy; 47: RCP temp[4].x, const[4].xxxx; 48: RCP temp[4].y, const[4].yyyy; 49: MUL temp[4].xy, input[2].xyyy, temp[4].xyyy; 50: TEX temp[12], temp[4].xyyy, 2D[0]; 51: MOV temp[4].w, temp[12]; 52: ADD temp[5].xy, temp[1].xyyy, temp[2].xyyy; 53: ADD temp[5].xy, temp[5].xyyy, temp[3].xyyy; 54: TEX temp[13], temp[5].xyyy, 2D[0]; 55: MOV temp[5].w, temp[13]; 56: ADD temp[6].xy, temp[1].xyyy, temp[2].xyyy; 57: TEX temp[14], temp[6].xyyy, 2D[0]; 58: MOV temp[6].w, temp[14]; 59: ADD temp[7].xy, temp[1].xyyy, temp[2].xyyy; 60: ADD temp[7].xy, temp[7].xyyy, -temp[3].xyyy; 61: TEX temp[15], temp[7].xyyy, 2D[0]; 62: MOV temp[7].w, temp[15]; 63: ADD temp[8].xy, temp[1].xyyy, temp[3].xyyy; 64: TEX temp[16], temp[8].xyyy, 2D[0]; 65: MOV temp[8].w, temp[16]; 66: ADD temp[9].xy, temp[1].xyyy, -temp[3].xyyy; 67: TEX temp[17], temp[9].xyyy, 2D[0]; 68: MOV temp[9].w, temp[17]; 69: ADD temp[10].xy, temp[1].xyyy, -temp[2].xyyy; 70: ADD temp[10].xy, temp[10].xyyy, temp[3].xyyy; 71: TEX temp[18], temp[10].xyyy, 2D[0]; 72: MOV temp[10].w, temp[18]; 73: ADD temp[11].xy, temp[1].xyyy, -temp[2].xyyy; 74: TEX temp[19], temp[11].xyyy, 2D[0]; 75: MOV temp[11].w, temp[19]; 76: ADD temp[1].xy, temp[1].xyyy, -temp[2].xyyy; 77: ADD temp[1].xy, temp[1].xyyy, -temp[3].xyyy; 78: TEX temp[20], temp[1].xyyy, 2D[0]; 79: MOV temp[1].w, temp[20]; 80: MUL temp[1].x, const[9].wwww, temp[1].wwww; 81: MAD temp[1].x, const[10].xxxx, temp[11].wwww, temp[1].xxxx; 82: MAD temp[1].x, const[9].wwww, temp[10].wwww, temp[1].xxxx; 83: MAD temp[1].x, const[10].xxxx, temp[9].wwww, temp[1].xxxx; 84: MAD temp[1].x, const[10].xxxx, temp[8].wwww, temp[1].xxxx; 85: MAD temp[1].x, const[9].wwww, temp[7].wwww, temp[1].xxxx; 86: MAD temp[1].x, const[10].xxxx, temp[6].wwww, temp[1].xxxx; 87: MAD temp[1].x, const[9].wwww, temp[5].wwww, temp[1].xxxx; 88: ADD temp[1].x, temp[4].wwww, temp[1].xxxx; 89: MIN temp[1].x, temp[1].xxxx, const[9].xxxx; 90: ADD temp[3].x, temp[1].xxxx, -const[8].wwww; 91: CMP temp[3].x, -|temp[3]|, none.0000, none.1111; 92: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 93: KIL -temp[2].xxxx; 94: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 95: RCP temp[3].x, const[6].xxxx; 96: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 97: FRC temp[3].x, temp[2].xxxx; 98: FRC temp[25].x, temp[2].xxxx; 99: ADD temp[2].x, temp[2].xxxx, -temp[25]; 100: MAD temp[2].x, const[10].yyyy, temp[2].xxxx, const[0].xxxx; 101: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 102: RCP temp[4].x, const[6].yyyy; 103: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 104: MOV temp[3].y, temp[2].xxxx; 105: TEX temp[2], temp[3].xyyy, 2D[2]; 106: MOV temp[3].xyz, temp[2].xyzx; 107: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 108: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 109: MOV temp[3].w, temp[0].xxxx; 110: MOV output[0], temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].x, input[1].z___, const[7].x___; 1: RCP temp[1].x, const[5].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[21].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[21].x___; 6: ADD temp[0].x, temp[0].x___, const[7].x___; 7: RCP temp[2].x, const[5].y___; 8: MUL temp[0].x, temp[0].x___, temp[2].x___; 9: MOV temp[1].y, temp[0]._x__; 10: TEX temp[0], temp[1].xy__, 2D[1]; 11: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 12: FRC temp[22], temp[0]; 13: ADD temp[0], temp[0], -temp[22]; 14: MUL temp[1].x, temp[0].w___, const[7].w___; 15: FRC temp[23].x, temp[1].x___; 16: ADD temp[1].x, temp[1].x___, -temp[23].x___; 17: MAD temp[1].x, temp[0].y___, const[7].z___, temp[1].x___; 18: MAD temp[1].x, temp[1].x___, const[7].x___, const[8].x___; 19: MUL temp[2].x, temp[0].w___, const[7].w___; 20: FRC temp[2].x, temp[2].x___; 21: MUL temp[3].x, temp[0].z___, const[7].z___; 22: MAD temp[2].x, const[7].z___, temp[2].x___, temp[3].x___; 23: MAD temp[2].x, temp[2].x___, const[7].x___, const[8].x___; 24: MOV temp[1].y, temp[2]._x__; 25: MUL temp[0].x, temp[0].x___, const[8].z___; 26: FRC temp[0].x, temp[0].x___; 27: MUL temp[0].x, const[8].y___, temp[0].x___; 28: ADD temp[1].xy, input[0].xy__, -temp[1].xy__; 29: ADD temp[2].x, temp[0].x___, -const[8].w___; 30: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 31: DP3 temp[3].x, temp[1].xy0_, temp[1].xy0_; 32: ADD temp[24].x, temp[3].x___, -const[9].y___; 33: CMP temp[3].x, temp[24].x___, none.0___, none.1___; 34: ADD temp[2].x, -temp[2].x___, const[9].x___; 35: CMP temp[1].x, -temp[2].x___, temp[3].x___, const[9].x___; 36: CMP temp[1].x, -temp[1].x___, const[9].x___, const[8].w___; 37: KIL -temp[1].xxxx; 38: RCP temp[1].x, const[4].x___; 39: RCP temp[1].y, const[4]._y__; 40: MUL temp[1].xy, input[2].xy__, temp[1].xy__; 41: RCP temp[2].x, const[4].x___; 42: RCP temp[2].y, const[4]._y__; 43: MUL temp[2].xy, const[9].xz__, temp[2].xy__; 44: RCP temp[3].x, const[4].x___; 45: RCP temp[3].y, const[4]._y__; 46: MUL temp[3].xy, const[9].zx__, temp[3].xy__; 47: RCP temp[4].x, const[4].x___; 48: RCP temp[4].y, const[4]._y__; 49: MUL temp[4].xy, input[2].xy__, temp[4].xy__; 50: TEX temp[12].w, temp[4].xy__, 2D[0]; 51: MOV temp[4].w, temp[12].___w; 52: ADD temp[5].xy, temp[1].xy__, temp[2].xy__; 53: ADD temp[5].xy, temp[5].xy__, temp[3].xy__; 54: TEX temp[13].w, temp[5].xy__, 2D[0]; 55: MOV temp[5].w, temp[13].___w; 56: ADD temp[6].xy, temp[1].xy__, temp[2].xy__; 57: TEX temp[14].w, temp[6].xy__, 2D[0]; 58: MOV temp[6].w, temp[14].___w; 59: ADD temp[7].xy, temp[1].xy__, temp[2].xy__; 60: ADD temp[7].xy, temp[7].xy__, -temp[3].xy__; 61: TEX temp[15].w, temp[7].xy__, 2D[0]; 62: MOV temp[7].w, temp[15].___w; 63: ADD temp[8].xy, temp[1].xy__, temp[3].xy__; 64: TEX temp[16].w, temp[8].xy__, 2D[0]; 65: MOV temp[8].w, temp[16].___w; 66: ADD temp[9].xy, temp[1].xy__, -temp[3].xy__; 67: TEX temp[17].w, temp[9].xy__, 2D[0]; 68: MOV temp[9].w, temp[17].___w; 69: ADD temp[10].xy, temp[1].xy__, -temp[2].xy__; 70: ADD temp[10].xy, temp[10].xy__, temp[3].xy__; 71: TEX temp[18].w, temp[10].xy__, 2D[0]; 72: MOV temp[10].w, temp[18].___w; 73: ADD temp[11].xy, temp[1].xy__, -temp[2].xy__; 74: TEX temp[19].w, temp[11].xy__, 2D[0]; 75: MOV temp[11].w, temp[19].___w; 76: ADD temp[1].xy, temp[1].xy__, -temp[2].xy__; 77: ADD temp[1].xy, temp[1].xy__, -temp[3].xy__; 78: TEX temp[20].w, temp[1].xy__, 2D[0]; 79: MOV temp[1].w, temp[20].___w; 80: MUL temp[1].x, const[9].w___, temp[1].w___; 81: MAD temp[1].x, const[10].x___, temp[11].w___, temp[1].x___; 82: MAD temp[1].x, const[9].w___, temp[10].w___, temp[1].x___; 83: MAD temp[1].x, const[10].x___, temp[9].w___, temp[1].x___; 84: MAD temp[1].x, const[10].x___, temp[8].w___, temp[1].x___; 85: MAD temp[1].x, const[9].w___, temp[7].w___, temp[1].x___; 86: MAD temp[1].x, const[10].x___, temp[6].w___, temp[1].x___; 87: MAD temp[1].x, const[9].w___, temp[5].w___, temp[1].x___; 88: ADD temp[1].x, temp[4].w___, temp[1].x___; 89: MIN temp[1].x, temp[1].x___, const[9].x___; 90: ADD temp[3].x, temp[1].x___, -const[8].w___; 91: CMP temp[3].x, -|temp[3].x___|, none.0___, none.1___; 92: CMP temp[2].x, -temp[3].x___, const[9].x___, const[8].w___; 93: KIL -temp[2].xxxx; 94: ADD temp[2].x, input[1].y___, const[7].x___; 95: RCP temp[3].x, const[6].x___; 96: MUL temp[2].x, temp[2].x___, temp[3].x___; 97: FRC temp[3].x, temp[2].x___; 98: FRC temp[25].x, temp[2].x___; 99: ADD temp[2].x, temp[2].x___, -temp[25].x___; 100: MAD temp[2].x, const[10].y___, temp[2].x___, const[0].x___; 101: ADD temp[2].x, temp[2].x___, const[7].x___; 102: RCP temp[4].x, const[6].y___; 103: MUL temp[2].x, temp[2].x___, temp[4].x___; 104: MOV temp[3].y, temp[2]._x__; 105: TEX temp[2], temp[3].xy__, 2D[2]; 106: MOV temp[3].xyz, temp[2].xyz_; 107: MUL temp[0].x, temp[2].w___, temp[0].x___; 108: MUL temp[0].x, temp[0].x___, temp[1].x___; 109: MOV temp[3].w, temp[0].___x; 110: MOV output[0], temp[3]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].x, input[1].z___, const[7].x___; 1: RCP temp[1].x, const[5].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[21].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[21].x___; 6: ADD temp[0].x, temp[0].x___, const[7].x___; 7: RCP temp[2].x, const[5].y___; 8: MUL temp[0].x, temp[0].x___, temp[2].x___; 9: MOV temp[1].y, temp[0]._x__; 10: TEX temp[0], temp[1].xy__, 2D[1]; 11: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 12: FRC temp[22], temp[0]; 13: ADD temp[0], temp[0], -temp[22]; 14: MUL temp[1].x, temp[0].w___, const[7].w___; 15: FRC temp[23].x, temp[1].x___; 16: ADD temp[1].x, temp[1].x___, -temp[23].x___; 17: MAD temp[1].x, temp[0].y___, const[7].z___, temp[1].x___; 18: MAD temp[1].x, temp[1].x___, const[7].x___, const[8].x___; 19: MUL temp[2].x, temp[0].w___, const[7].w___; 20: FRC temp[2].x, temp[2].x___; 21: MUL temp[3].x, temp[0].z___, const[7].z___; 22: MAD temp[2].x, const[7].z___, temp[2].x___, temp[3].x___; 23: MAD temp[2].x, temp[2].x___, const[7].x___, const[8].x___; 24: MOV temp[1].y, temp[2]._x__; 25: MUL temp[0].x, temp[0].x___, const[8].z___; 26: FRC temp[0].x, temp[0].x___; 27: MUL temp[0].x, const[8].y___, temp[0].x___; 28: ADD temp[1].xy, input[0].xy__, -temp[1].xy__; 29: ADD temp[2].x, temp[0].x___, -const[8].w___; 30: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 31: DP3 temp[3].x, temp[1].xy0_, temp[1].xy0_; 32: ADD temp[24].x, temp[3].x___, -const[9].y___; 33: CMP temp[3].x, temp[24].x___, none.0___, none.1___; 34: ADD temp[2].x, -temp[2].x___, const[9].x___; 35: CMP temp[1].x, -temp[2].x___, temp[3].x___, const[9].x___; 36: CMP temp[1].x, -temp[1].x___, const[9].x___, const[8].w___; 37: KIL -temp[1].xxxx; 38: RCP temp[1].x, const[4].x___; 39: RCP temp[1].y, const[4]._y__; 40: MUL temp[1].xy, input[2].xy__, temp[1].xy__; 41: RCP temp[2].x, const[4].x___; 42: RCP temp[2].y, const[4]._y__; 43: MUL temp[2].xy, const[9].xz__, temp[2].xy__; 44: RCP temp[3].x, const[4].x___; 45: RCP temp[3].y, const[4]._y__; 46: MUL temp[3].xy, const[9].zx__, temp[3].xy__; 47: RCP temp[4].x, const[4].x___; 48: RCP temp[4].y, const[4]._y__; 49: MUL temp[4].xy, input[2].xy__, temp[4].xy__; 50: TEX temp[12].w, temp[4].xy__, 2D[0]; 51: MOV temp[4].w, temp[12].___w; 52: ADD temp[5].xy, temp[1].xy__, temp[2].xy__; 53: ADD temp[5].xy, temp[5].xy__, temp[3].xy__; 54: TEX temp[13].w, temp[5].xy__, 2D[0]; 55: MOV temp[5].w, temp[13].___w; 56: ADD temp[6].xy, temp[1].xy__, temp[2].xy__; 57: TEX temp[14].w, temp[6].xy__, 2D[0]; 58: MOV temp[6].w, temp[14].___w; 59: ADD temp[7].xy, temp[1].xy__, temp[2].xy__; 60: ADD temp[7].xy, temp[7].xy__, -temp[3].xy__; 61: TEX temp[15].w, temp[7].xy__, 2D[0]; 62: MOV temp[7].w, temp[15].___w; 63: ADD temp[8].xy, temp[1].xy__, temp[3].xy__; 64: TEX temp[16].w, temp[8].xy__, 2D[0]; 65: MOV temp[8].w, temp[16].___w; 66: ADD temp[9].xy, temp[1].xy__, -temp[3].xy__; 67: TEX temp[17].w, temp[9].xy__, 2D[0]; 68: MOV temp[9].w, temp[17].___w; 69: ADD temp[10].xy, temp[1].xy__, -temp[2].xy__; 70: ADD temp[10].xy, temp[10].xy__, temp[3].xy__; 71: TEX temp[18].w, temp[10].xy__, 2D[0]; 72: MOV temp[10].w, temp[18].___w; 73: ADD temp[11].xy, temp[1].xy__, -temp[2].xy__; 74: TEX temp[19].w, temp[11].xy__, 2D[0]; 75: MOV temp[11].w, temp[19].___w; 76: ADD temp[1].xy, temp[1].xy__, -temp[2].xy__; 77: ADD temp[1].xy, temp[1].xy__, -temp[3].xy__; 78: TEX temp[20].w, temp[1].xy__, 2D[0]; 79: MOV temp[1].w, temp[20].___w; 80: MUL temp[1].x, const[9].w___, temp[1].w___; 81: MAD temp[1].x, const[10].x___, temp[11].w___, temp[1].x___; 82: MAD temp[1].x, const[9].w___, temp[10].w___, temp[1].x___; 83: MAD temp[1].x, const[10].x___, temp[9].w___, temp[1].x___; 84: MAD temp[1].x, const[10].x___, temp[8].w___, temp[1].x___; 85: MAD temp[1].x, const[9].w___, temp[7].w___, temp[1].x___; 86: MAD temp[1].x, const[10].x___, temp[6].w___, temp[1].x___; 87: MAD temp[1].x, const[9].w___, temp[5].w___, temp[1].x___; 88: ADD temp[1].x, temp[4].w___, temp[1].x___; 89: MIN temp[1].x, temp[1].x___, const[9].x___; 90: ADD temp[3].x, temp[1].x___, -const[8].w___; 91: CMP temp[3].x, -|temp[3].x___|, none.0___, none.1___; 92: CMP temp[2].x, -temp[3].x___, const[9].x___, const[8].w___; 93: KIL -temp[2].xxxx; 94: ADD temp[2].x, input[1].y___, const[7].x___; 95: RCP temp[3].x, const[6].x___; 96: MUL temp[2].x, temp[2].x___, temp[3].x___; 97: FRC temp[3].x, temp[2].x___; 98: FRC temp[25].x, temp[2].x___; 99: ADD temp[2].x, temp[2].x___, -temp[25].x___; 100: MAD temp[2].x, const[10].y___, temp[2].x___, const[0].x___; 101: ADD temp[2].x, temp[2].x___, const[7].x___; 102: RCP temp[4].x, const[6].y___; 103: MUL temp[2].x, temp[2].x___, temp[4].x___; 104: MOV temp[3].y, temp[2]._x__; 105: TEX temp[2], temp[3].xy__, 2D[2]; 106: MOV temp[3].xyz, temp[2].xyz_; 107: MUL temp[0].x, temp[2].w___, temp[0].x___; 108: MUL temp[0].x, temp[0].x___, temp[1].x___; 109: MOV temp[3].w, temp[0].___x; 110: MOV output[0], temp[3]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[26].x, input[1].z___, const[7].x___; 1: RCP temp[27].x, const[5].x___; 2: MUL temp[28].x, temp[26].x___, temp[27].x___; 3: FRC temp[29].x, temp[28].x___; 4: FRC temp[30].x, temp[28].x___; 5: ADD temp[31].x, temp[28].x___, -temp[30].x___; 6: ADD temp[32].x, temp[31].x___, const[7].x___; 7: RCP temp[33].x, const[5].y___; 8: MUL temp[34].x, temp[32].x___, temp[33].x___; 9: MOV temp[29].y, temp[34]._x__; 10: TEX temp[35], temp[29].xy__, 2D[1]; 11: MAD temp[36], const[7].yyyy, temp[35], const[7].xxxx; 12: FRC temp[37], temp[36]; 13: ADD temp[38], temp[36], -temp[37]; 14: MUL temp[39].x, temp[38].w___, const[7].w___; 15: FRC temp[40].x, temp[39].x___; 16: ADD temp[41].x, temp[39].x___, -temp[40].x___; 17: MAD temp[42].x, temp[38].y___, const[7].z___, temp[41].x___; 18: MAD temp[43].x, temp[42].x___, const[7].x___, const[8].x___; 19: MUL temp[44].x, temp[38].w___, const[7].w___; 20: FRC temp[45].x, temp[44].x___; 21: MUL temp[46].x, temp[38].z___, const[7].z___; 22: MAD temp[47].x, const[7].z___, temp[45].x___, temp[46].x___; 23: MAD temp[48].x, temp[47].x___, const[7].x___, const[8].x___; 24: MOV temp[43].y, temp[48]._x__; 25: MUL temp[49].x, temp[38].x___, const[8].z___; 26: FRC temp[50].x, temp[49].x___; 27: MUL temp[51].x, const[8].y___, temp[50].x___; 28: ADD temp[52].xy, input[0].xy__, -temp[43].xy__; 29: ADD temp[53].x, temp[51].x___, -const[8].w___; 30: CMP temp[54].x, -|temp[53].x___|, none.0___, none.1___; 31: DP3 temp[55].x, temp[52].xy0_, temp[52].xy0_; 32: ADD temp[56].x, temp[55].x___, -const[9].y___; 33: CMP temp[57].x, temp[56].x___, none.0___, none.1___; 34: ADD temp[58].x, -temp[54].x___, const[9].x___; 35: CMP temp[59].x, -temp[58].x___, temp[57].x___, const[9].x___; 36: CMP temp[60].x, -temp[59].x___, const[9].x___, const[8].w___; 37: KIL -temp[60].xxxx; 38: RCP temp[61].x, const[4].x___; 39: RCP temp[61].y, const[4]._y__; 40: MUL temp[62].xy, input[2].xy__, temp[61].xy__; 41: RCP temp[63].x, const[4].x___; 42: RCP temp[63].y, const[4]._y__; 43: MUL temp[64].xy, const[9].xz__, temp[63].xy__; 44: RCP temp[65].x, const[4].x___; 45: RCP temp[65].y, const[4]._y__; 46: MUL temp[66].xy, const[9].zx__, temp[65].xy__; 47: RCP temp[67].x, const[4].x___; 48: RCP temp[67].y, const[4]._y__; 49: MUL temp[68].xy, input[2].xy__, temp[67].xy__; 50: TEX temp[69].w, temp[68].xy__, 2D[0]; 51: MOV temp[70].w, temp[69].___w; 52: ADD temp[71].xy, temp[62].xy__, temp[64].xy__; 53: ADD temp[72].xy, temp[71].xy__, temp[66].xy__; 54: TEX temp[73].w, temp[72].xy__, 2D[0]; 55: MOV temp[74].w, temp[73].___w; 56: ADD temp[75].xy, temp[62].xy__, temp[64].xy__; 57: TEX temp[76].w, temp[75].xy__, 2D[0]; 58: MOV temp[77].w, temp[76].___w; 59: ADD temp[78].xy, temp[62].xy__, temp[64].xy__; 60: ADD temp[79].xy, temp[78].xy__, -temp[66].xy__; 61: TEX temp[80].w, temp[79].xy__, 2D[0]; 62: MOV temp[81].w, temp[80].___w; 63: ADD temp[82].xy, temp[62].xy__, temp[66].xy__; 64: TEX temp[83].w, temp[82].xy__, 2D[0]; 65: MOV temp[84].w, temp[83].___w; 66: ADD temp[85].xy, temp[62].xy__, -temp[66].xy__; 67: TEX temp[86].w, temp[85].xy__, 2D[0]; 68: MOV temp[87].w, temp[86].___w; 69: ADD temp[88].xy, temp[62].xy__, -temp[64].xy__; 70: ADD temp[89].xy, temp[88].xy__, temp[66].xy__; 71: TEX temp[90].w, temp[89].xy__, 2D[0]; 72: MOV temp[91].w, temp[90].___w; 73: ADD temp[92].xy, temp[62].xy__, -temp[64].xy__; 74: TEX temp[93].w, temp[92].xy__, 2D[0]; 75: MOV temp[94].w, temp[93].___w; 76: ADD temp[95].xy, temp[62].xy__, -temp[64].xy__; 77: ADD temp[96].xy, temp[95].xy__, -temp[66].xy__; 78: TEX temp[97].w, temp[96].xy__, 2D[0]; 79: MOV temp[98].w, temp[97].___w; 80: MUL temp[99].x, const[9].w___, temp[98].w___; 81: MAD temp[100].x, const[10].x___, temp[94].w___, temp[99].x___; 82: MAD temp[101].x, const[9].w___, temp[91].w___, temp[100].x___; 83: MAD temp[102].x, const[10].x___, temp[87].w___, temp[101].x___; 84: MAD temp[103].x, const[10].x___, temp[84].w___, temp[102].x___; 85: MAD temp[104].x, const[9].w___, temp[81].w___, temp[103].x___; 86: MAD temp[105].x, const[10].x___, temp[77].w___, temp[104].x___; 87: MAD temp[106].x, const[9].w___, temp[74].w___, temp[105].x___; 88: ADD temp[107].x, temp[70].w___, temp[106].x___; 89: MIN temp[108].x, temp[107].x___, const[9].x___; 90: ADD temp[109].x, temp[108].x___, -const[8].w___; 91: CMP temp[110].x, -|temp[109].x___|, none.0___, none.1___; 92: CMP temp[111].x, -temp[110].x___, const[9].x___, const[8].w___; 93: KIL -temp[111].xxxx; 94: ADD temp[112].x, input[1].y___, const[7].x___; 95: RCP temp[113].x, const[6].x___; 96: MUL temp[114].x, temp[112].x___, temp[113].x___; 97: FRC temp[115].x, temp[114].x___; 98: FRC temp[116].x, temp[114].x___; 99: ADD temp[117].x, temp[114].x___, -temp[116].x___; 100: MAD temp[118].x, const[10].y___, temp[117].x___, const[0].x___; 101: ADD temp[119].x, temp[118].x___, const[7].x___; 102: RCP temp[120].x, const[6].y___; 103: MUL temp[121].x, temp[119].x___, temp[120].x___; 104: MOV temp[115].y, temp[121]._x__; 105: TEX temp[122], temp[115].xy__, 2D[2]; 106: MOV temp[123].xyz, temp[122].xyz_; 107: MUL temp[124].x, temp[122].w___, temp[51].x___; 108: MUL temp[125].x, temp[124].x___, temp[108].x___; 109: MOV temp[123].w, temp[125].___x; 110: MOV output[0], temp[123]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[26].x, input[1].z___, none.H___; 1: RCP temp[27].x, const[5].x___; 2: MUL temp[28].x, temp[26].x___, temp[27].x___; 3: FRC temp[29].x, temp[28].x___; 4: FRC temp[30].x, temp[28].x___; 5: ADD temp[32].x, (temp[28] - temp[30]).x___, none.H___; 6: RCP temp[33].x, const[5].y___; 7: MUL temp[34].x, temp[32].x___, temp[33].x___; 8: MOV temp[29].y, temp[34]._x__; 9: TEX temp[35], temp[29].xy__, 2D[1]; 10: MAD temp[36], const[7].yyyy, temp[35], none.HHHH; 11: FRC temp[37], temp[36]; 12: ADD temp[38], temp[36], -temp[37]; 13: MUL temp[39].x, temp[38].w___, const[7].w___; 14: FRC temp[40].x, temp[39].x___; 15: ADD temp[41].x, temp[39].x___, -temp[40].x___; 16: MAD temp[42].x, temp[38].y___, const[7].z___, temp[41].x___; 17: MAD temp[43].x, temp[42].x___, none.H___, const[8].x___; 18: MUL temp[44].x, temp[38].w___, const[7].w___; 19: FRC temp[45].x, temp[44].x___; 20: MUL temp[46].x, temp[38].z___, const[7].z___; 21: MAD temp[47].x, const[7].z___, temp[45].x___, temp[46].x___; 22: MAD temp[48].x, temp[47].x___, none.H___, const[8].x___; 23: MOV temp[43].y, temp[48]._x__; 24: MUL temp[49].x, temp[38].x___, const[8].z___; 25: FRC temp[50].x, temp[49].x___; 26: MUL temp[51].x, const[8].y___, temp[50].x___; 27: CMP temp[54].x, -|temp[51].x___|, none.0___, none.1___; 28: DP3 temp[55].x, (input[0] - temp[43]).xy0_, (input[0] - temp[43]).xy0_; 29: ADD temp[56].x, temp[55].x___, -const[9].y___; 30: CMP temp[57].x, temp[56].x___, none.0___, none.1___; 31: ADD temp[58].x, -temp[54].x___, none.1___; 32: CMP temp[59].x, -temp[58].x___, temp[57].x___, none.1___; 33: CMP temp[60].x, -temp[59].x___, none.1___, none.0___; 34: KIL -temp[60].xxxx; 35: RCP temp[61].x, const[4].x___; 36: RCP temp[61].y, const[4]._y__; 37: MUL temp[62].xy, input[2].xy__, temp[61].xy__; 38: RCP temp[63].x, const[4].x___; 39: RCP temp[63].y, const[4]._y__; 40: MUL temp[64].xy, none.10__, temp[63].xy__; 41: RCP temp[65].x, const[4].x___; 42: RCP temp[65].y, const[4]._y__; 43: MUL temp[66].xy, const[9].zx__, temp[65].xy__; 44: RCP temp[67].x, const[4].x___; 45: RCP temp[67].y, const[4]._y__; 46: MUL temp[68].xy, input[2].xy__, temp[67].xy__; 47: TEX temp[69].w, temp[68].xy__, 2D[0]; 48: ADD temp[72].xy, (temp[64] + temp[62]).xy__, temp[66].xy__; 49: TEX temp[73].w, temp[72].xy__, 2D[0]; 50: ADD temp[75].xy, temp[62].xy__, temp[64].xy__; 51: TEX temp[76].w, temp[75].xy__, 2D[0]; 52: ADD temp[79].xy, (temp[64] + temp[62]).xy__, -temp[66].xy__; 53: TEX temp[80].w, temp[79].xy__, 2D[0]; 54: ADD temp[82].xy, temp[62].xy__, temp[66].xy__; 55: TEX temp[83].w, temp[82].xy__, 2D[0]; 56: ADD temp[85].xy, temp[62].xy__, -temp[66].xy__; 57: TEX temp[86].w, temp[85].xy__, 2D[0]; 58: ADD temp[89].xy, (temp[62] - temp[64]).xy__, temp[66].xy__; 59: TEX temp[90].w, temp[89].xy__, 2D[0]; 60: ADD temp[92].xy, temp[62].xy__, -temp[64].xy__; 61: TEX temp[93].w, temp[92].xy__, 2D[0]; 62: ADD temp[96].xy, (temp[62] - temp[64]).xy__, -temp[66].xy__; 63: TEX temp[97].w, temp[96].xy__, 2D[0]; 64: MUL temp[99].x, const[9].w___, temp[97].w___; 65: MAD temp[100].x, const[10].x___, temp[93].w___, temp[99].x___; 66: MAD temp[101].x, const[9].w___, temp[90].w___, temp[100].x___; 67: MAD temp[102].x, const[10].x___, temp[86].w___, temp[101].x___; 68: MAD temp[103].x, const[10].x___, temp[83].w___, temp[102].x___; 69: MAD temp[104].x, const[9].w___, temp[80].w___, temp[103].x___; 70: MAD temp[105].x, const[10].x___, temp[76].w___, temp[104].x___; 71: MAD temp[106].x, const[9].w___, temp[73].w___, temp[105].x___; 72: ADD temp[107].x, temp[69].w___, temp[106].x___; 73: MIN temp[108].x, temp[107].x___, none.1___; 74: CMP temp[110].x, -|temp[108].x___|, none.0___, none.1___; 75: CMP temp[111].x, -temp[110].x___, none.1___, none.0___; 76: KIL -temp[111].xxxx; 77: ADD temp[112].x, input[1].y___, none.H___; 78: RCP temp[113].x, const[6].x___; 79: MUL temp[114].x, temp[112].x___, temp[113].x___; 80: FRC temp[115].x, temp[114].x___; 81: FRC temp[116].x, temp[114].x___; 82: ADD temp[117].x, temp[114].x___, -temp[116].x___; 83: MAD temp[118].x, const[10].y___, temp[117].x___, const[0].x___; 84: ADD temp[119].x, temp[118].x___, none.H___; 85: RCP temp[120].x, const[6].y___; 86: MUL temp[121].x, temp[119].x___, temp[120].x___; 87: MOV temp[115].y, temp[121]._x__; 88: TEX temp[122], temp[115].xy__, 2D[2]; 89: MOV temp[123].xyz, temp[122].xyz_; 90: MUL temp[124].x, temp[122].w___, temp[51].x___; 91: MUL temp[125].x, temp[124].x___, temp[108].x___; 92: MOV temp[123].w, temp[125].___x; 93: MOV output[0], temp[123]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[26].x, input[1].z___, none.H___; 1: RCP temp[27].x, const[5].x___; 2: MUL temp[28].x, temp[26].x___, temp[27].x___; 3: FRC temp[29].x, temp[28].x___; 4: FRC temp[30].x, temp[28].x___; 5: ADD temp[32].x, (temp[28] - temp[30]).x___, none.H___; 6: RCP temp[33].x, const[5].y___; 7: MUL temp[34].x, temp[32].x___, temp[33].x___; 8: MOV temp[29].y, temp[34]._x__; 9: TEX temp[35], temp[29].xy__, 2D[1]; 10: MAD temp[36], const[7].yyyy, temp[35], none.HHHH; 11: FRC temp[37], temp[36]; 12: ADD temp[38], temp[36], -temp[37]; 13: MUL temp[39].x, temp[38].w___, const[7].w___; 14: FRC temp[40].x, temp[39].x___; 15: ADD temp[41].x, temp[39].x___, -temp[40].x___; 16: MAD temp[42].x, temp[38].y___, const[7].z___, temp[41].x___; 17: MAD temp[43].x, temp[42].x___, none.H___, const[8].x___; 18: MUL temp[44].x, temp[38].w___, const[7].w___; 19: FRC temp[45].x, temp[44].x___; 20: MUL temp[46].x, temp[38].z___, const[7].z___; 21: MAD temp[47].x, const[7].z___, temp[45].x___, temp[46].x___; 22: MAD temp[48].x, temp[47].x___, none.H___, const[8].x___; 23: MOV temp[43].y, temp[48]._x__; 24: MUL temp[49].x, temp[38].x___, const[8].z___; 25: FRC temp[50].x, temp[49].x___; 26: MUL temp[51].x, const[8].y___, temp[50].x___; 27: CMP temp[54].x, -|temp[51].x___|, none.0___, none.1___; 28: MOV temp[0].xy, (input[0] - temp[43]).xy__; 29: MOV temp[0].z, (input[0] - temp[43]).__0_; 30: MOV temp[1].xy, (input[0] - temp[43]).xy__; 31: MOV temp[1].z, (input[0] - temp[43]).__0_; 32: DP3 temp[55].x, temp[0].xyz_, temp[1].xyz_; 33: ADD temp[56].x, temp[55].x___, -const[9].y___; 34: CMP temp[57].x, temp[56].x___, none.0___, none.1___; 35: ADD temp[58].x, -temp[54].x___, none.1___; 36: CMP temp[59].x, -temp[58].x___, temp[57].x___, none.1___; 37: CMP temp[60].x, -temp[59].x___, none.1___, none.0___; 38: MOV temp[2], -temp[60].xxxx; 39: KIL temp[2]; 40: RCP temp[61].x, const[4].x___; 41: RCP temp[61].y, const[4]._y__; 42: MUL temp[62].xy, input[2].xy__, temp[61].xy__; 43: RCP temp[63].x, const[4].x___; 44: RCP temp[63].y, const[4]._y__; 45: MOV temp[3].x, none.1___; 46: MOV temp[3].y, none._0__; 47: MUL temp[64].xy, temp[3].xy__, temp[63].xy__; 48: RCP temp[65].x, const[4].x___; 49: RCP temp[65].y, const[4]._y__; 50: MUL temp[66].xy, const[9].zx__, temp[65].xy__; 51: RCP temp[67].x, const[4].x___; 52: RCP temp[67].y, const[4]._y__; 53: MUL temp[68].xy, input[2].xy__, temp[67].xy__; 54: TEX temp[69].w, temp[68].xy__, 2D[0]; 55: ADD temp[72].xy, (temp[64] + temp[62]).xy__, temp[66].xy__; 56: TEX temp[73].w, temp[72].xy__, 2D[0]; 57: ADD temp[75].xy, temp[62].xy__, temp[64].xy__; 58: TEX temp[76].w, temp[75].xy__, 2D[0]; 59: ADD temp[79].xy, (temp[64] + temp[62]).xy__, -temp[66].xy__; 60: TEX temp[80].w, temp[79].xy__, 2D[0]; 61: ADD temp[82].xy, temp[62].xy__, temp[66].xy__; 62: TEX temp[83].w, temp[82].xy__, 2D[0]; 63: ADD temp[85].xy, temp[62].xy__, -temp[66].xy__; 64: TEX temp[86].w, temp[85].xy__, 2D[0]; 65: ADD temp[89].xy, (temp[62] - temp[64]).xy__, temp[66].xy__; 66: TEX temp[90].w, temp[89].xy__, 2D[0]; 67: ADD temp[92].xy, temp[62].xy__, -temp[64].xy__; 68: TEX temp[93].w, temp[92].xy__, 2D[0]; 69: ADD temp[96].xy, (temp[62] - temp[64]).xy__, -temp[66].xy__; 70: TEX temp[97].w, temp[96].xy__, 2D[0]; 71: MUL temp[99].x, const[9].w___, temp[97].w___; 72: MAD temp[100].x, const[10].x___, temp[93].w___, temp[99].x___; 73: MAD temp[101].x, const[9].w___, temp[90].w___, temp[100].x___; 74: MAD temp[102].x, const[10].x___, temp[86].w___, temp[101].x___; 75: MAD temp[103].x, const[10].x___, temp[83].w___, temp[102].x___; 76: MAD temp[104].x, const[9].w___, temp[80].w___, temp[103].x___; 77: MAD temp[105].x, const[10].x___, temp[76].w___, temp[104].x___; 78: MAD temp[106].x, const[9].w___, temp[73].w___, temp[105].x___; 79: ADD temp[107].x, temp[69].w___, temp[106].x___; 80: MIN temp[108].x, temp[107].x___, none.1___; 81: CMP temp[110].x, -|temp[108].x___|, none.0___, none.1___; 82: CMP temp[111].x, -temp[110].x___, none.1___, none.0___; 83: MOV temp[4], -temp[111].xxxx; 84: KIL temp[4]; 85: ADD temp[112].x, input[1].y___, none.H___; 86: RCP temp[113].x, const[6].x___; 87: MUL temp[114].x, temp[112].x___, temp[113].x___; 88: FRC temp[115].x, temp[114].x___; 89: FRC temp[116].x, temp[114].x___; 90: ADD temp[117].x, temp[114].x___, -temp[116].x___; 91: MAD temp[118].x, const[10].y___, temp[117].x___, const[0].x___; 92: ADD temp[119].x, temp[118].x___, none.H___; 93: RCP temp[120].x, const[6].y___; 94: MUL temp[121].x, temp[119].x___, temp[120].x___; 95: MOV temp[115].y, temp[121]._x__; 96: TEX temp[122], temp[115].xy__, 2D[2]; 97: MOV temp[123].xyz, temp[122].xyz_; 98: MUL temp[124].x, temp[122].w___, temp[51].x___; 99: MUL temp[125].x, temp[124].x___, temp[108].x___; 100: MOV temp[123].w, temp[125].___x; 101: MOV output[0], temp[123]; CONST[4] = { 0.5000 255.0000 16.0000 0.0625 } CONST[5] = { -1023.0000 1.0323 0.0312 0.0000 } CONST[6] = { 1.0000 0.6000 0.0000 0.5454 } CONST[7] = { 0.9717 26.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[26].x, input[1].z___, none.H___; 1: RCP temp[27].x, const[2].x___; 2: MUL temp[28].x, temp[26].x___, temp[27].x___; 3: FRC temp[29].x, temp[28].x___; 4: FRC temp[30].x, temp[28].x___; 5: ADD temp[32].x, (temp[28] - temp[30]).x___, none.H___; 6: RCP temp[33].x, const[2].y___; 7: MUL temp[34].x, temp[32].x___, temp[33].x___; 8: MOV temp[29].y, temp[34]._x__; 9: TEX temp[35], temp[29].xy__, 2D[1]; 10: MAD temp[36], const[4].yyyy, temp[35], none.HHHH; 11: FRC temp[37], temp[36]; 12: ADD temp[38], temp[36], -temp[37]; 13: MUL temp[39].x, temp[38].w___, const[4].w___; 14: FRC temp[40].x, temp[39].x___; 15: ADD temp[41].x, temp[39].x___, -temp[40].x___; 16: MAD temp[42].x, temp[38].y___, const[4].z___, temp[41].x___; 17: MAD temp[43].x, temp[42].x___, none.H___, const[5].x___; 18: MUL temp[44].x, temp[38].w___, const[4].w___; 19: FRC temp[45].x, temp[44].x___; 20: MUL temp[46].x, temp[38].z___, const[4].z___; 21: MAD temp[47].x, const[4].z___, temp[45].x___, temp[46].x___; 22: MAD temp[48].x, temp[47].x___, none.H___, const[5].x___; 23: MOV temp[43].y, temp[48]._x__; 24: MUL temp[49].x, temp[38].x___, const[5].z___; 25: FRC temp[50].x, temp[49].x___; 26: MUL temp[51].x, const[5].y___, temp[50].x___; 27: CMP temp[54].x, -|temp[51].x___|, none.0___, none.1___; 28: MOV temp[0].xy, (input[0] - temp[43]).xy__; 29: MOV temp[0].z, (input[0] - temp[43]).__0_; 30: MOV temp[1].xy, (input[0] - temp[43]).xy__; 31: MOV temp[1].z, (input[0] - temp[43]).__0_; 32: DP3 temp[55].x, temp[0].xyz_, temp[1].xyz_; 33: ADD temp[56].x, temp[55].x___, -const[6].y___; 34: CMP temp[57].x, temp[56].x___, none.0___, none.1___; 35: ADD temp[58].x, -temp[54].x___, none.1___; 36: CMP temp[59].x, -temp[58].x___, temp[57].x___, none.1___; 37: CMP temp[60].x, -temp[59].x___, none.1___, none.0___; 38: MOV temp[2], -temp[60].xxxx; 39: KIL temp[2]; 40: RCP temp[61].x, const[1].x___; 41: RCP temp[61].y, const[1]._y__; 42: MUL temp[62].xy, input[2].xy__, temp[61].xy__; 43: RCP temp[63].x, const[1].x___; 44: RCP temp[63].y, const[1]._y__; 45: MOV temp[3].x, none.1___; 46: MOV temp[3].y, none._0__; 47: MUL temp[64].xy, temp[3].xy__, temp[63].xy__; 48: RCP temp[65].x, const[1].x___; 49: RCP temp[65].y, const[1]._y__; 50: MUL temp[66].xy, const[6].zx__, temp[65].xy__; 51: RCP temp[67].x, const[1].x___; 52: RCP temp[67].y, const[1]._y__; 53: MUL temp[68].xy, input[2].xy__, temp[67].xy__; 54: TEX temp[69].w, temp[68].xy__, 2D[0]; 55: ADD temp[72].xy, (temp[64] + temp[62]).xy__, temp[66].xy__; 56: TEX temp[73].w, temp[72].xy__, 2D[0]; 57: ADD temp[75].xy, temp[62].xy__, temp[64].xy__; 58: TEX temp[76].w, temp[75].xy__, 2D[0]; 59: ADD temp[79].xy, (temp[64] + temp[62]).xy__, -temp[66].xy__; 60: TEX temp[80].w, temp[79].xy__, 2D[0]; 61: ADD temp[82].xy, temp[62].xy__, temp[66].xy__; 62: TEX temp[83].w, temp[82].xy__, 2D[0]; 63: ADD temp[85].xy, temp[62].xy__, -temp[66].xy__; 64: TEX temp[86].w, temp[85].xy__, 2D[0]; 65: ADD temp[89].xy, (temp[62] - temp[64]).xy__, temp[66].xy__; 66: TEX temp[90].w, temp[89].xy__, 2D[0]; 67: ADD temp[92].xy, temp[62].xy__, -temp[64].xy__; 68: TEX temp[93].w, temp[92].xy__, 2D[0]; 69: ADD temp[96].xy, (temp[62] - temp[64]).xy__, -temp[66].xy__; 70: TEX temp[97].w, temp[96].xy__, 2D[0]; 71: MUL temp[99].x, const[6].w___, temp[97].w___; 72: MAD temp[100].x, const[7].x___, temp[93].w___, temp[99].x___; 73: MAD temp[101].x, const[6].w___, temp[90].w___, temp[100].x___; 74: MAD temp[102].x, const[7].x___, temp[86].w___, temp[101].x___; 75: MAD temp[103].x, const[7].x___, temp[83].w___, temp[102].x___; 76: MAD temp[104].x, const[6].w___, temp[80].w___, temp[103].x___; 77: MAD temp[105].x, const[7].x___, temp[76].w___, temp[104].x___; 78: MAD temp[106].x, const[6].w___, temp[73].w___, temp[105].x___; 79: ADD temp[107].x, temp[69].w___, temp[106].x___; 80: MIN temp[108].x, temp[107].x___, none.1___; 81: CMP temp[110].x, -|temp[108].x___|, none.0___, none.1___; 82: CMP temp[111].x, -temp[110].x___, none.1___, none.0___; 83: MOV temp[4], -temp[111].xxxx; 84: KIL temp[4]; 85: ADD temp[112].x, input[1].y___, none.H___; 86: RCP temp[113].x, const[3].x___; 87: MUL temp[114].x, temp[112].x___, temp[113].x___; 88: FRC temp[115].x, temp[114].x___; 89: FRC temp[116].x, temp[114].x___; 90: ADD temp[117].x, temp[114].x___, -temp[116].x___; 91: MAD temp[118].x, const[7].y___, temp[117].x___, const[0].x___; 92: ADD temp[119].x, temp[118].x___, none.H___; 93: RCP temp[120].x, const[3].y___; 94: MUL temp[121].x, temp[119].x___, temp[120].x___; 95: MOV temp[115].y, temp[121]._x__; 96: TEX temp[122], temp[115].xy__, 2D[2]; 97: MOV temp[123].xyz, temp[122].xyz_; 98: MUL temp[124].x, temp[122].w___, temp[51].x___; 99: MUL temp[125].x, temp[124].x___, temp[108].x___; 100: MOV temp[123].w, temp[125].___x; 101: MOV output[0], temp[123]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1] MAD temp[26].x, src0.z__, src0.111, src0.H__ 1: src0.xyz = const[2] REPL_ALPHA temp[27].x RCP, src0.x 2: src0.xyz = temp[26], src1.xyz = temp[27] MAD temp[28].x, src0.x__, src1.x__, src0.000 3: src0.xyz = temp[28] FRC temp[29].x, src0.x__ 4: src0.xyz = temp[28] FRC temp[30].x, src0.x__ 5: src0.xyz = temp[30], src1.xyz = temp[28], srcp.xyz = (src1 - src0) MAD temp[32].x, srcp.x__, src0.111, src0.H__ 6: src0.xyz = const[2] REPL_ALPHA temp[33].x RCP, src0.y 7: src0.xyz = temp[32], src1.xyz = temp[33] MAD temp[34].x, src0.x__, src1.x__, src0.000 8: src0.xyz = temp[34] MAD temp[29].y, src0._x_, src0.111, src0.000 9: TEX temp[35], temp[29].xy__, 2D[1]; 10: src0.xyz = const[4], src0.w = temp[35], src1.xyz = temp[35] MAD temp[36].xyz, src0.yyy, src1.xyz, src0.HHH MAD temp[36].w, src0.y, src0.w, src0.H 11: src0.xyz = temp[36], src0.w = temp[36] FRC temp[37].xyz, src0.xyz FRC temp[37].w, src0.w 12: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[37], src1.w = temp[37] MAD temp[38].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[38].w, src0.w, src0.1, -src1.w 13: src0.w = temp[38], src1.w = const[4] MAD temp[39].x, src0.w__, src1.w__, src0.000 14: src0.xyz = temp[39] FRC temp[40].x, src0.x__ 15: src0.xyz = temp[39], src1.xyz = temp[40] MAD temp[41].x, src0.x__, src0.111, -src1.x__ 16: src0.xyz = temp[38], src1.xyz = const[4], src2.xyz = temp[41] MAD temp[42].x, src0.y__, src1.z__, src2.x__ 17: src0.xyz = temp[42], src1.xyz = const[5] MAD temp[43].x, src0.x__, src0.H__, src1.x__ 18: src0.w = temp[38], src1.w = const[4] MAD temp[44].x, src0.w__, src1.w__, src0.000 19: src0.xyz = temp[44] FRC temp[45].x, src0.x__ 20: src0.xyz = temp[38], src1.xyz = const[4] MAD temp[46].x, src0.z__, src1.z__, src0.000 21: src0.xyz = const[4], src1.xyz = temp[45], src2.xyz = temp[46] MAD temp[47].x, src0.z__, src1.x__, src2.x__ 22: src0.xyz = temp[47], src1.xyz = const[5] MAD temp[48].x, src0.x__, src0.H__, src1.x__ 23: src0.xyz = temp[48] MAD temp[43].y, src0._x_, src0.111, src0.000 24: src0.xyz = temp[38], src1.xyz = const[5] MAD temp[49].x, src0.x__, src1.z__, src0.000 25: src0.xyz = temp[49] FRC temp[50].x, src0.x__ 26: src0.xyz = const[5], src1.xyz = temp[50] MAD temp[51].x, src0.y__, src1.x__, src0.000 27: src0.xyz = temp[51] CMP temp[54].x, src0.1__, src0.0__, -|src0.x__| 28: src0.xyz = temp[43], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[0].xy, srcp.xy_, src0.111, src0.000 29: MAD temp[0].z, src0.__0, src0.111, src0.000 30: src0.xyz = temp[43], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[1].xy, srcp.xy_, src0.111, src0.000 31: MAD temp[1].z, src0.__0, src0.111, src0.000 32: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[55].x, src0.xyz, src1.xyz 33: src0.xyz = temp[55], src1.xyz = const[6] MAD temp[56].x, src0.x__, src0.111, -src1.y__ 34: src0.xyz = temp[56] CMP temp[57].x, src0.1__, src0.0__, src0.x__ 35: src0.xyz = temp[54] MAD temp[58].x, -src0.x__, src0.111, src0.1__ 36: src0.xyz = temp[57], src1.xyz = temp[58] CMP temp[59].x, src0.1__, src0.x__, -src1.x__ 37: src0.xyz = temp[59] CMP temp[60].x, src0.0__, src0.1__, -src0.x__ 38: src0.xyz = temp[60] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 39: KIL temp[2]; 40: src0.xyz = const[1] REPL_ALPHA temp[61].x RCP, src0.x 41: src0.xyz = const[1] REPL_ALPHA temp[61].y RCP, src0.y 42: src0.xyz = input[2], src1.xyz = temp[61] MAD temp[62].xy, src0.xy_, src1.xy_, src0.000 43: src0.xyz = const[1] REPL_ALPHA temp[63].x RCP, src0.x 44: src0.xyz = const[1] REPL_ALPHA temp[63].y RCP, src0.y 45: MAD temp[3].x, src0.1__, src0.111, src0.000 46: MAD temp[3].y, src0._0_, src0.111, src0.000 47: src0.xyz = temp[3], src1.xyz = temp[63] MAD temp[64].xy, src0.xy_, src1.xy_, src0.000 48: src0.xyz = const[1] REPL_ALPHA temp[65].x RCP, src0.x 49: src0.xyz = const[1] REPL_ALPHA temp[65].y RCP, src0.y 50: src0.xyz = const[6], src1.xyz = temp[65] MAD temp[66].xy, src0.zx_, src1.xy_, src0.000 51: src0.xyz = const[1] REPL_ALPHA temp[67].x RCP, src0.x 52: src0.xyz = const[1] REPL_ALPHA temp[67].y RCP, src0.y 53: src0.xyz = input[2], src1.xyz = temp[67] MAD temp[68].xy, src0.xy_, src1.xy_, src0.000 54: TEX temp[69].w, temp[68].xy__, 2D[0]; 55: src0.xyz = temp[62], src1.xyz = temp[64], src2.xyz = temp[66], srcp.xyz = (src1 + src0) MAD temp[72].xy, srcp.xy_, src0.111, src2.xy_ 56: TEX temp[73].w, temp[72].xy__, 2D[0]; 57: src0.xyz = temp[62], src1.xyz = temp[64] MAD temp[75].xy, src0.xy_, src0.111, src1.xy_ 58: TEX temp[76].w, temp[75].xy__, 2D[0]; 59: src0.xyz = temp[62], src1.xyz = temp[64], src2.xyz = temp[66], srcp.xyz = (src1 + src0) MAD temp[79].xy, srcp.xy_, src0.111, -src2.xy_ 60: TEX temp[80].w, temp[79].xy__, 2D[0]; 61: src0.xyz = temp[62], src1.xyz = temp[66] MAD temp[82].xy, src0.xy_, src0.111, src1.xy_ 62: TEX temp[83].w, temp[82].xy__, 2D[0]; 63: src0.xyz = temp[62], src1.xyz = temp[66] MAD temp[85].xy, src0.xy_, src0.111, -src1.xy_ 64: TEX temp[86].w, temp[85].xy__, 2D[0]; 65: src0.xyz = temp[64], src1.xyz = temp[62], src2.xyz = temp[66], srcp.xyz = (src1 - src0) MAD temp[89].xy, srcp.xy_, src0.111, src2.xy_ 66: TEX temp[90].w, temp[89].xy__, 2D[0]; 67: src0.xyz = temp[62], src1.xyz = temp[64] MAD temp[92].xy, src0.xy_, src0.111, -src1.xy_ 68: TEX temp[93].w, temp[92].xy__, 2D[0]; 69: src0.xyz = temp[64], src1.xyz = temp[62], src2.xyz = temp[66], srcp.xyz = (src1 - src0) MAD temp[96].xy, srcp.xy_, src0.111, -src2.xy_ 70: TEX temp[97].w, temp[96].xy__, 2D[0]; 71: src0.w = const[6], src1.w = temp[97] MAD temp[99].x, src0.w__, src1.w__, src0.000 72: src0.xyz = const[7], src0.w = temp[93], src1.xyz = temp[99] MAD temp[100].x, src0.x__, src0.w__, src1.x__ 73: src0.xyz = temp[100], src0.w = const[6], src1.w = temp[90] MAD temp[101].x, src0.w__, src1.w__, src0.x__ 74: src0.xyz = const[7], src0.w = temp[86], src1.xyz = temp[101] MAD temp[102].x, src0.x__, src0.w__, src1.x__ 75: src0.xyz = const[7], src0.w = temp[83], src1.xyz = temp[102] MAD temp[103].x, src0.x__, src0.w__, src1.x__ 76: src0.xyz = temp[103], src0.w = const[6], src1.w = temp[80] MAD temp[104].x, src0.w__, src1.w__, src0.x__ 77: src0.xyz = const[7], src0.w = temp[76], src1.xyz = temp[104] MAD temp[105].x, src0.x__, src0.w__, src1.x__ 78: src0.xyz = temp[105], src0.w = const[6], src1.w = temp[73] MAD temp[106].x, src0.w__, src1.w__, src0.x__ 79: src0.xyz = temp[106], src0.w = temp[69] MAD temp[107].x, src0.w__, src0.111, src0.x__ 80: src0.xyz = temp[107] MIN temp[108].x, src0.x__, src0.1__ 81: src0.xyz = temp[108] CMP temp[110].x, src0.1__, src0.0__, -|src0.x__| 82: src0.xyz = temp[110] CMP temp[111].x, src0.0__, src0.1__, -src0.x__ 83: src0.xyz = temp[111] MAD temp[4].xyz, -src0.xxx, src0.111, src0.000 MAD temp[4].w, -src0.x, src0.1, src0.0 84: KIL temp[4]; 85: src0.xyz = input[1] MAD temp[112].x, src0.y__, src0.111, src0.H__ 86: src0.xyz = const[3] REPL_ALPHA temp[113].x RCP, src0.x 87: src0.xyz = temp[112], src1.xyz = temp[113] MAD temp[114].x, src0.x__, src1.x__, src0.000 88: src0.xyz = temp[114] FRC temp[115].x, src0.x__ 89: src0.xyz = temp[114] FRC temp[116].x, src0.x__ 90: src0.xyz = temp[114], src1.xyz = temp[116] MAD temp[117].x, src0.x__, src0.111, -src1.x__ 91: src0.xyz = const[7], src1.xyz = temp[117], src2.xyz = const[0] MAD temp[118].x, src0.y__, src1.x__, src2.x__ 92: src0.xyz = temp[118] MAD temp[119].x, src0.x__, src0.111, src0.H__ 93: src0.xyz = const[3] REPL_ALPHA temp[120].x RCP, src0.y 94: src0.xyz = temp[119], src1.xyz = temp[120] MAD temp[121].x, src0.x__, src1.x__, src0.000 95: src0.xyz = temp[121] MAD temp[115].y, src0._x_, src0.111, src0.000 96: TEX temp[122], temp[115].xy__, 2D[2]; 97: src0.xyz = temp[122] MAD temp[123].xyz, src0.xyz, src0.111, src0.000 98: src0.xyz = temp[51], src0.w = temp[122] MAD temp[124].x, src0.w__, src0.x__, src0.000 99: src0.xyz = temp[124], src1.xyz = temp[108] MAD temp[125].x, src0.x__, src1.x__, src0.000 100: src0.xyz = temp[125] MAD temp[123].w, src0.x, src0.1, src0.0 101: src0.xyz = temp[123], src0.w = temp[123] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[1] MAD temp[3].y, src0._0_, src0.111, src0.000 MAD temp[112].w, src0.y, src0.1, src0.H 1: src0.xyz = const[3] MAD temp[3].x, src0.1__, src0.111, src0.000 RCP temp[120].w, src0.y 2: src0.xyz = const[3] MAD temp[1].z, src0.__0, src0.111, src0.000 RCP temp[113].w, src0.x 3: src0.xyz = const[2] MAD temp[0].z, src0.__0, src0.111, src0.000 RCP temp[33].w, src0.y 4: src0.xyz = input[1], src1.xyz = const[2] MAD temp[26].x, src0.z__, src0.111, src0.H__ RCP temp[27].w, src1.x 5: src0.xyz = temp[26], src0.w = temp[27], src1.xyz = temp[27], src1.w = temp[112], src2.w = temp[113] MAD temp[28].x, src0.x__, src0.w__, src0.000 MAD temp[114].w, src1.w, src2.w, src0.0 6: src0.xyz = temp[28], src0.w = temp[114] FRC temp[30].x, src0.x__ FRC temp[116].w, src0.w 7: src0.xyz = temp[114], src0.w = temp[114], src1.w = temp[116] FRC temp[115].x, src0.w__ MAD temp[117].w, src0.w, src0.1, -src1.w 8: src0.xyz = temp[30], src1.xyz = temp[28], srcp.xyz = (src1 - src0) FRC temp[29].x, src1.x__ MAD temp[32].w, srcp.x, src0.1, src0.H 9: src0.xyz = const[1] REPL_ALPHA temp[61].x RCP, src0.x 10: src0.xyz = const[7], src0.w = temp[117], src1.xyz = temp[117], src2.xyz = const[0] MAD temp[118].w, src0.y, src0.w, src2.x 11: src0.xyz = temp[118], src0.w = temp[118], src1.w = temp[32], src2.w = temp[33] MAD temp[119].x, src0.w__, src0.111, src0.H__ MAD temp[34].w, src1.w, src2.w, src0.0 12: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[119], src1.w = temp[120] MAD temp[29].y, src0._w_, src0.111, src0.000 MAD temp[121].w, src1.x, src1.w, src0.0 13: src0.xyz = const[1] REPL_ALPHA temp[61].y RCP, src0.y 14: src0.xyz = const[1] REPL_ALPHA temp[63].x RCP, src0.x 15: src0.xyz = const[1] REPL_ALPHA temp[63].y RCP, src0.y 16: src0.xyz = const[1] REPL_ALPHA temp[65].x RCP, src0.x 17: src0.xyz = const[1] REPL_ALPHA temp[65].y RCP, src0.y 18: src0.xyz = const[1] REPL_ALPHA temp[67].x RCP, src0.x 19: src0.xyz = const[1] REPL_ALPHA temp[67].y RCP, src0.y 20: src0.xyz = temp[121], src0.w = temp[121] MAD temp[115].y, src0._w_, src0.111, src0.000 21: src0.xyz = input[2], src1.xyz = temp[61] MAD temp[62].xy, src0.xy_, src1.xy_, src0.000 22: src0.xyz = temp[3], src1.xyz = temp[63] MAD temp[64].xy, src0.xy_, src1.xy_, src0.000 23: src0.xyz = const[6], src1.xyz = temp[65] MAD temp[66].xy, src0.zx_, src1.xy_, src0.000 24: src0.xyz = input[2], src1.xyz = temp[67] MAD temp[68].xy, src0.xy_, src1.xy_, src0.000 25: src0.xyz = temp[64], src1.xyz = temp[62], src2.xyz = temp[66], srcp.xyz = (src1 - src0) MAD temp[96].xy, srcp.xy_, src0.111, -src2.xy_ 26: src0.xyz = temp[64], src1.xyz = temp[62], src2.xyz = temp[66], srcp.xyz = (src1 - src0) MAD temp[89].xy, srcp.xy_, src0.111, src2.xy_ 27: src0.xyz = temp[62], src1.xyz = temp[64], src2.xyz = temp[66], srcp.xyz = (src1 + src0) MAD temp[79].xy, srcp.xy_, src0.111, -src2.xy_ 28: src0.xyz = temp[62], src1.xyz = temp[64], src2.xyz = temp[66], srcp.xyz = (src1 + src0) MAD temp[72].xy, srcp.xy_, src0.111, src2.xy_ 29: src0.xyz = temp[62], src1.xyz = temp[64] MAD temp[92].xy, src0.xy_, src0.111, -src1.xy_ 30: BEGIN_TEX; 31: TEX temp[35], temp[29].xy__, 2D[1]; 32: TEX temp[122], temp[115].xy__, 2D[2]; 33: TEX temp[69].w, temp[68].xy__, 2D[0]; 34: TEX temp[97].w, temp[96].xy__, 2D[0]; 35: TEX temp[90].w, temp[89].xy__, 2D[0]; 36: TEX temp[80].w, temp[79].xy__, 2D[0]; 37: TEX temp[73].w, temp[72].xy__, 2D[0]; 38: TEX temp[93].w, temp[92].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[62], src0.w = const[6], src1.xyz = temp[64], src1.w = temp[97] SEM_WAIT MAD temp[75].xy, src0.xy_, src0.111, src1.xy_ MAD temp[99].w, src0.w, src1.w, src0.0 40: src0.xyz = temp[62], src0.w = temp[93], src1.xyz = temp[66], src1.w = temp[99], src2.xyz = const[7] MAD temp[85].xy, src0.xy_, src0.111, -src1.xy_ MAD temp[100].w, src2.x, src0.w, src1.w 41: src0.xyz = temp[62], src0.w = const[6], src1.xyz = temp[66], src1.w = temp[90], src2.w = temp[100] MAD temp[82].xy, src0.xy_, src0.111, src1.xy_ MAD temp[101].w, src0.w, src1.w, src2.w 42: src0.xyz = const[4], src0.w = temp[35], src1.xyz = temp[35] MAD temp[36].xyz, src0.yyy, src1.xyz, src0.HHH MAD temp[36].w, src0.y, src0.w, src0.H 43: src0.xyz = temp[122] MAD temp[123].xyz, src0.xyz, src0.111, src0.000 44: src0.xyz = temp[36], src0.w = temp[36] FRC temp[37].xyz, src0.xyz FRC temp[37].w, src0.w 45: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[37], src1.w = temp[37] MAD temp[38].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[38].w, src0.w, src0.1, -src1.w 46: src0.w = temp[38], src1.w = const[4] MAD temp[39].x, src0.w__, src1.w__, src0.000 MAD temp[44].w, src0.w, src1.w, src0.0 47: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[39] FRC temp[45].x, src0.w__ FRC temp[40].w, src1.x 48: src0.xyz = temp[38], src1.xyz = const[4], src2.xyz = const[5] MAD temp[46].x, src0.z__, src1.z__, src0.000 MAD temp[49].w, src0.x, src2.z, src0.0 49: src0.xyz = temp[49], src0.w = temp[49], src1.xyz = temp[39], src1.w = temp[40] FRC temp[50].x, src0.w__ MAD temp[41].w, src1.x, src0.1, -src1.w 50: src0.xyz = const[4], src1.xyz = temp[45], src2.xyz = temp[46] MAD temp[47].w, src0.z, src1.x, src2.x 51: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = const[5], src2.xyz = temp[50] MAD temp[48].x, src0.w__, src0.H__, src1.x__ MAD temp[51].w, src1.y, src2.x, src0.0 52: src0.xyz = temp[51], src0.w = temp[51], src1.w = temp[122] CMP temp[54].x, src0.1__, src0.0__, -|src0.w__| MAD temp[124].w, src1.w, src0.w, src0.0 53: src0.xyz = temp[48], src0.w = temp[41], src1.xyz = temp[38], src2.xyz = const[4] MAD temp[43].y, src0._x_, src0.111, src0.000 MAD temp[42].w, src1.y, src2.z, src0.w 54: src0.xyz = temp[42], src0.w = temp[42], src1.xyz = const[5], src2.xyz = temp[54] MAD temp[43].x, src0.w__, src0.H__, src1.x__ MAD temp[58].w, -src2.x, src0.1, src0.1 55: src0.xyz = temp[43], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[1].xy, srcp.xy_, src0.111, src0.000 56: src0.xyz = temp[43], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[0].xy, srcp.xy_, src0.111, src0.000 57: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[55].x, src0.xyz, src1.xyz 58: src0.xyz = temp[55], src1.xyz = const[6] MAD temp[56].x, src0.x__, src0.111, -src1.y__ 59: src0.xyz = temp[56] CMP temp[57].x, src0.1__, src0.0__, src0.x__ 60: src0.xyz = temp[57], src0.w = temp[58], src1.xyz = temp[58] CMP temp[59].x, src0.1__, src0.x__, -src0.w__ 61: src0.xyz = temp[59] CMP temp[60].x, src0.0__, src0.1__, -src0.x__ 62: src0.xyz = temp[60] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 63: BEGIN_TEX; 64: TEX temp[76].w, temp[75].xy__, 2D[0]; 65: TEX temp[86].w, temp[85].xy__, 2D[0]; 66: TEX temp[83].w, temp[82].xy__, 2D[0]; 67: KIL temp[2]; 68: src0.xyz = const[7], src0.w = temp[86], src1.xyz = temp[101], src1.w = temp[101] SEM_WAIT MAD temp[102].x, src0.x__, src0.w__, src1.w__ 69: src0.xyz = const[7], src0.w = temp[83], src1.xyz = temp[102] MAD temp[103].x, src0.x__, src0.w__, src1.x__ 70: src0.xyz = temp[103], src0.w = const[6], src1.w = temp[80] MAD temp[104].x, src0.w__, src1.w__, src0.x__ 71: src0.xyz = const[7], src0.w = temp[76], src1.xyz = temp[104] MAD temp[105].x, src0.x__, src0.w__, src1.x__ 72: src0.xyz = temp[105], src0.w = const[6], src1.w = temp[73] MAD temp[106].x, src0.w__, src1.w__, src0.x__ 73: src0.xyz = temp[106], src0.w = temp[69] MAD temp[107].x, src0.w__, src0.111, src0.x__ 74: src0.xyz = temp[107] MIN temp[108].x, src0.x__, src0.1__ 75: src0.xyz = temp[108], src0.w = temp[124] CMP temp[110].x, src0.1__, src0.0__, -|src0.x__| MAD temp[125].w, src0.w, src0.x, src0.0 76: src0.xyz = temp[110], src0.w = temp[125] CMP temp[111].x, src0.0__, src0.1__, -src0.x__ MAD temp[123].w, src0.w, src0.1, src0.0 77: src0.xyz = temp[111] MAD temp[4].xyz, -src0.xxx, src0.111, src0.000 MAD temp[4].w, -src0.x, src0.1, src0.0 78: BEGIN_TEX; 79: KIL temp[4]; 80: src0.xyz = temp[123], src0.w = temp[123] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[1] MAD temp[3].y, src0._0_, src0.111, src0.000 MAD temp[112].w, src0.y, src0.1, src0.H 1: src0.xyz = const[3] MAD temp[3].x, src0.1__, src0.111, src0.000 RCP temp[120].w, src0.y 2: src0.xyz = const[3] MAD temp[1].z, src0.__0, src0.111, src0.000 RCP temp[113].w, src0.x 3: src0.xyz = const[2] MAD temp[0].z, src0.__0, src0.111, src0.000 RCP temp[33].w, src0.y 4: src0.xyz = input[1], src1.xyz = const[2] MAD temp[26].x, src0.z__, src0.111, src0.H__ RCP temp[27].w, src1.x 5: src0.xyz = temp[26], src0.w = temp[27], src1.w = temp[112], src2.w = temp[113] MAD temp[28].x, src0.x__, src0.w__, src0.000 MAD temp[114].w, src1.w, src2.w, src0.0 6: src0.xyz = temp[28], src0.w = temp[114] FRC temp[30].x, src0.x__ FRC temp[116].w, src0.w 7: src0.w = temp[114], src1.w = temp[116] FRC temp[115].x, src0.w__ MAD temp[117].w, src0.w, src0.1, -src1.w 8: src0.xyz = temp[30], src1.xyz = temp[28], srcp.xyz = (src1 - src0) FRC temp[29].x, src1.x__ MAD temp[32].w, srcp.x, src0.1, src0.H 9: src0.xyz = const[1] REPL_ALPHA temp[61].x RCP, src0.x 10: src0.xyz = const[7], src0.w = temp[117], src2.xyz = const[0] MAD temp[118].w, src0.y, src0.w, src2.x 11: src0.w = temp[118], src1.w = temp[32], src2.w = temp[33] MAD temp[119].x, src0.w__, src0.111, src0.H__ MAD temp[34].w, src1.w, src2.w, src0.0 12: src0.w = temp[34], src1.xyz = temp[119], src1.w = temp[120] MAD temp[29].y, src0._w_, src0.111, src0.000 MAD temp[121].w, src1.x, src1.w, src0.0 13: src0.xyz = const[1] REPL_ALPHA temp[61].y RCP, src0.y 14: src0.xyz = const[1] REPL_ALPHA temp[63].x RCP, src0.x 15: src0.xyz = const[1] REPL_ALPHA temp[63].y RCP, src0.y 16: src0.xyz = const[1] REPL_ALPHA temp[65].x RCP, src0.x 17: src0.xyz = const[1] REPL_ALPHA temp[65].y RCP, src0.y 18: src0.xyz = const[1] REPL_ALPHA temp[67].x RCP, src0.x 19: src0.xyz = const[1] REPL_ALPHA temp[67].y RCP, src0.y 20: src0.w = temp[121] MAD temp[115].y, src0._w_, src0.111, src0.000 21: src0.xyz = input[2], src1.xyz = temp[61] MAD temp[62].xy, src0.xy_, src1.xy_, src0.000 22: src0.xyz = temp[3], src1.xyz = temp[63] MAD temp[64].xy, src0.xy_, src1.xy_, src0.000 23: src0.xyz = const[6], src1.xyz = temp[65] MAD temp[66].xy, src0.zx_, src1.xy_, src0.000 24: src0.xyz = input[2], src1.xyz = temp[67] MAD temp[68].xy, src0.xy_, src1.xy_, src0.000 25: src0.xyz = temp[64], src1.xyz = temp[62], src2.xyz = temp[66], srcp.xyz = (src1 - src0) MAD temp[96].xy, srcp.xy_, src0.111, -src2.xy_ 26: src0.xyz = temp[64], src1.xyz = temp[62], src2.xyz = temp[66], srcp.xyz = (src1 - src0) MAD temp[89].xy, srcp.xy_, src0.111, src2.xy_ 27: src0.xyz = temp[62], src1.xyz = temp[64], src2.xyz = temp[66], srcp.xyz = (src1 + src0) MAD temp[79].xy, srcp.xy_, src0.111, -src2.xy_ 28: src0.xyz = temp[62], src1.xyz = temp[64], src2.xyz = temp[66], srcp.xyz = (src1 + src0) MAD temp[72].xy, srcp.xy_, src0.111, src2.xy_ 29: src0.xyz = temp[62], src1.xyz = temp[64] MAD temp[92].xy, src0.xy_, src0.111, -src1.xy_ 30: BEGIN_TEX; 31: TEX temp[35], temp[29].xy__, 2D[1]; 32: TEX temp[122], temp[115].xy__, 2D[2]; 33: TEX temp[69].w, temp[68].xy__, 2D[0]; 34: TEX temp[97].w, temp[96].xy__, 2D[0]; 35: TEX temp[90].w, temp[89].xy__, 2D[0]; 36: TEX temp[80].w, temp[79].xy__, 2D[0]; 37: TEX temp[73].w, temp[72].xy__, 2D[0]; 38: TEX temp[93].w, temp[92].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[62], src0.w = const[6], src1.xyz = temp[64], src1.w = temp[97] SEM_WAIT MAD temp[75].xy, src0.xy_, src0.111, src1.xy_ MAD temp[99].w, src0.w, src1.w, src0.0 40: src0.xyz = temp[62], src0.w = temp[93], src1.xyz = temp[66], src1.w = temp[99], src2.xyz = const[7] MAD temp[85].xy, src0.xy_, src0.111, -src1.xy_ MAD temp[100].w, src2.x, src0.w, src1.w 41: src0.xyz = temp[62], src0.w = const[6], src1.xyz = temp[66], src1.w = temp[90], src2.w = temp[100] MAD temp[82].xy, src0.xy_, src0.111, src1.xy_ MAD temp[101].w, src0.w, src1.w, src2.w 42: src0.xyz = const[4], src0.w = temp[35], src1.xyz = temp[35] MAD temp[36].xyz, src0.yyy, src1.xyz, src0.HHH MAD temp[36].w, src0.y, src0.w, src0.H 43: src0.xyz = temp[122] MAD temp[123].xyz, src0.xyz, src0.111, src0.000 44: src0.xyz = temp[36], src0.w = temp[36] FRC temp[37].xyz, src0.xyz FRC temp[37].w, src0.w 45: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[37], src1.w = temp[37] MAD temp[38].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[38].w, src0.w, src0.1, -src1.w 46: src0.w = temp[38], src1.w = const[4] MAD temp[39].x, src0.w__, src1.w__, src0.000 MAD temp[44].w, src0.w, src1.w, src0.0 47: src0.w = temp[44], src1.xyz = temp[39] FRC temp[45].x, src0.w__ FRC temp[40].w, src1.x 48: src0.xyz = temp[38], src1.xyz = const[4], src2.xyz = const[5] MAD temp[46].x, src0.z__, src1.z__, src0.000 MAD temp[49].w, src0.x, src2.z, src0.0 49: src0.w = temp[49], src1.xyz = temp[39], src1.w = temp[40] FRC temp[50].x, src0.w__ MAD temp[41].w, src1.x, src0.1, -src1.w 50: src0.xyz = const[4], src1.xyz = temp[45], src2.xyz = temp[46] MAD temp[47].w, src0.z, src1.x, src2.x 51: src0.w = temp[47], src1.xyz = const[5], src2.xyz = temp[50] MAD temp[48].x, src0.w__, src0.H__, src1.x__ MAD temp[51].w, src1.y, src2.x, src0.0 52: src0.w = temp[51], src1.w = temp[122] CMP temp[54].x, src0.1__, src0.0__, -|src0.w__| MAD temp[124].w, src1.w, src0.w, src0.0 53: src0.xyz = temp[48], src0.w = temp[41], src1.xyz = temp[38], src2.xyz = const[4] MAD temp[43].y, src0._x_, src0.111, src0.000 MAD temp[42].w, src1.y, src2.z, src0.w 54: src0.w = temp[42], src1.xyz = const[5], src2.xyz = temp[54] MAD temp[43].x, src0.w__, src0.H__, src1.x__ MAD temp[58].w, -src2.x, src0.1, src0.1 55: src0.xyz = temp[43], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[1].xy, srcp.xy_, src0.111, src0.000 56: src0.xyz = temp[43], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[0].xy, srcp.xy_, src0.111, src0.000 57: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[55].x, src0.xyz, src1.xyz 58: src0.xyz = temp[55], src1.xyz = const[6] MAD temp[56].x, src0.x__, src0.111, -src1.y__ 59: src0.xyz = temp[56] CMP temp[57].x, src0.1__, src0.0__, src0.x__ 60: src0.xyz = temp[57], src0.w = temp[58] CMP temp[59].x, src0.1__, src0.x__, -src0.w__ 61: src0.xyz = temp[59] CMP temp[60].x, src0.0__, src0.1__, -src0.x__ 62: src0.xyz = temp[60] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 63: BEGIN_TEX; 64: TEX temp[76].w, temp[75].xy__, 2D[0]; 65: TEX temp[86].w, temp[85].xy__, 2D[0]; 66: TEX temp[83].w, temp[82].xy__, 2D[0]; 67: KIL temp[2]; 68: src0.xyz = const[7], src0.w = temp[86], src1.w = temp[101] SEM_WAIT MAD temp[102].x, src0.x__, src0.w__, src1.w__ 69: src0.xyz = const[7], src0.w = temp[83], src1.xyz = temp[102] MAD temp[103].x, src0.x__, src0.w__, src1.x__ 70: src0.xyz = temp[103], src0.w = const[6], src1.w = temp[80] MAD temp[104].x, src0.w__, src1.w__, src0.x__ 71: src0.xyz = const[7], src0.w = temp[76], src1.xyz = temp[104] MAD temp[105].x, src0.x__, src0.w__, src1.x__ 72: src0.xyz = temp[105], src0.w = const[6], src1.w = temp[73] MAD temp[106].x, src0.w__, src1.w__, src0.x__ 73: src0.xyz = temp[106], src0.w = temp[69] MAD temp[107].x, src0.w__, src0.111, src0.x__ 74: src0.xyz = temp[107] MIN temp[108].x, src0.x__, src0.1__ 75: src0.xyz = temp[108], src0.w = temp[124] CMP temp[110].x, src0.1__, src0.0__, -|src0.x__| MAD temp[125].w, src0.w, src0.x, src0.0 76: src0.xyz = temp[110], src0.w = temp[125] CMP temp[111].x, src0.0__, src0.1__, -src0.x__ MAD temp[123].w, src0.w, src0.1, src0.0 77: src0.xyz = temp[111] MAD temp[4].xyz, -src0.xxx, src0.111, src0.000 MAD temp[4].w, -src0.x, src0.1, src0.0 78: BEGIN_TEX; 79: KIL temp[4]; 80: src0.xyz = temp[123], src0.w = temp[123] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[1] MAD temp[3].y, src0._0_, src0.11_, src0.00_ MAD temp[0].w, src0.y, src0.1, src0.H 1: src0.xyz = const[3] MAD temp[3].x, src0.1__, src0.11_, src0.00_ RCP temp[1].w, src0.y 2: src0.xyz = const[3] MAD temp[4].z, src0.__0, src0.111, src0.000 RCP temp[2].w, src0.x 3: src0.xyz = const[2] MAD temp[5].z, src0.__0, src0.111, src0.000 RCP temp[3].w, src0.y 4: src0.xyz = input[1], src1.xyz = const[2] MAD temp[0].z, src0.__z, src0.__1, src0.__H RCP temp[4].w, src1.x 5: src0.xyz = temp[0], src0.w = temp[4], src1.w = temp[0], src2.w = temp[2] MAD temp[1].x, src0.z__, src0.w__, src0.0__ MAD temp[0].w, src1.w, src2.w, src0.0 6: src0.xyz = temp[1], src0.w = temp[0] FRC temp[6].x, src0.x__ FRC temp[2].w, src0.w 7: src0.w = temp[0], src1.w = temp[2] FRC temp[7].x, src0.w__ MAD temp[0].w, src0.w, src0.1, -src1.w 8: src0.xyz = temp[6], src1.xyz = temp[1], srcp.xyz = (src1 - src0) FRC temp[1].x, src1.x__ MAD temp[2].w, srcp.x, src0.1, src0.H 9: src0.xyz = const[1] REPL_ALPHA temp[6].x RCP, src0.x 10: src0.xyz = const[7], src0.w = temp[0], src2.xyz = const[0] MAD temp[0].w, src0.y, src0.w, src2.x 11: src0.w = temp[0], src1.w = temp[2], src2.w = temp[3] MAD temp[0].z, src0.__w, src0.__1, src0.__H MAD temp[0].w, src1.w, src2.w, src0.0 12: src0.w = temp[0], src1.xyz = temp[0], src1.w = temp[1] MAD temp[1].y, src0._w_, src0.11_, src0.00_ MAD temp[0].w, src1.z, src1.w, src0.0 13: src0.xyz = const[1] REPL_ALPHA temp[6].y RCP, src0.y 14: src0.xyz = const[1] REPL_ALPHA temp[8].x RCP, src0.x 15: src0.xyz = const[1] REPL_ALPHA temp[8].y RCP, src0.y 16: src0.xyz = const[1] REPL_ALPHA temp[9].x RCP, src0.x 17: src0.xyz = const[1] REPL_ALPHA temp[9].y RCP, src0.y 18: src0.xyz = const[1] REPL_ALPHA temp[10].x RCP, src0.x 19: src0.xyz = const[1] REPL_ALPHA temp[10].y RCP, src0.y 20: src0.w = temp[0] MAD temp[7].y, src0._w_, src0.11_, src0.00_ 21: src0.xyz = input[2], src1.xyz = temp[6] MAD temp[6].xy, src0.xy_, src1.xy_, src0.00_ 22: src0.xyz = temp[3], src1.xyz = temp[8] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 23: src0.xyz = const[6], src1.xyz = temp[9] MAD temp[8].xy, src0.zx_, src1.xy_, src0.00_ 24: src0.xyz = input[2], src1.xyz = temp[10] MAD temp[2].xy, src0.xy_, src1.xy_, src0.00_ 25: src0.xyz = temp[3], src1.xyz = temp[6], src2.xyz = temp[8], srcp.xyz = (src1 - src0) MAD temp[9].xy, srcp.xy_, src0.11_, -src2.xy_ 26: src0.xyz = temp[3], src1.xyz = temp[6], src2.xyz = temp[8], srcp.xyz = (src1 - src0) MAD temp[10].xy, srcp.xy_, src0.11_, src2.xy_ 27: src0.xyz = temp[6], src1.xyz = temp[3], src2.xyz = temp[8], srcp.xyz = (src1 + src0) MAD temp[11].xy, srcp.xy_, src0.11_, -src2.xy_ 28: src0.xyz = temp[6], src1.xyz = temp[3], src2.xyz = temp[8], srcp.xyz = (src1 + src0) MAD temp[12].xy, srcp.xy_, src0.11_, src2.xy_ 29: src0.xyz = temp[6], src1.xyz = temp[3] MAD temp[13].xy, src0.xy_, src0.11_, -src1.xy_ 30: BEGIN_TEX; 31: TEX temp[1], temp[1].xy__, 2D[1]; 32: TEX temp[7], temp[7].xy__, 2D[2]; 33: TEX temp[2].w, temp[2].xy__, 2D[0]; 34: TEX temp[9].w, temp[9].xy__, 2D[0]; 35: TEX temp[10].w, temp[10].xy__, 2D[0]; 36: TEX temp[11].w, temp[11].xy__, 2D[0]; 37: TEX temp[12].w, temp[12].xy__, 2D[0]; 38: TEX temp[13].w, temp[13].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 39: src0.xyz = temp[6], src0.w = const[6], src1.xyz = temp[3], src1.w = temp[9] SEM_WAIT MAD temp[3].xy, src0.xy_, src0.11_, src1.xy_ MAD temp[0].w, src0.w, src1.w, src0.0 40: src0.xyz = temp[6], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[0], src2.xyz = const[7] MAD temp[9].xy, src0.xy_, src0.11_, -src1.xy_ MAD temp[0].w, src2.x, src0.w, src1.w 41: src0.xyz = temp[6], src0.w = const[6], src1.xyz = temp[8], src1.w = temp[10], src2.w = temp[0] MAD temp[6].xy, src0.xy_, src0.11_, src1.xy_ MAD temp[0].w, src0.w, src1.w, src2.w 42: src0.xyz = const[4], src0.w = temp[1], src1.xyz = temp[1] MAD temp[1].xyz, src0.yyy, src1.xyz, src0.HHH MAD temp[1].w, src0.y, src0.w, src0.H 43: src0.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src0.111, src0.000 44: src0.xyz = temp[1], src0.w = temp[1] FRC temp[10].xyz, src0.xyz FRC temp[3].w, src0.w 45: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[10], src1.w = temp[3] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[1].w, src0.w, src0.1, -src1.w 46: src0.w = temp[1], src1.w = const[4] MAD temp[0].z, src0.__w, src1.__w, src0.__0 MAD temp[1].w, src0.w, src1.w, src0.0 47: src0.w = temp[1], src1.xyz = temp[0] FRC temp[3].z, src0.__w FRC temp[1].w, src1.z 48: src0.xyz = temp[1], src1.xyz = const[4], src2.xyz = const[5] MAD temp[6].z, src0.__z, src1.__z, src0.__0 MAD temp[3].w, src0.x, src2.z, src0.0 49: src0.w = temp[3], src1.xyz = temp[0], src1.w = temp[1] FRC temp[0].z, src0.__w MAD temp[1].w, src1.z, src0.1, -src1.w 50: src0.xyz = const[4], src1.xyz = temp[3], src2.xyz = temp[6] MAD temp[3].w, src0.z, src1.z, src2.z 51: src0.w = temp[3], src1.xyz = const[5], src2.xyz = temp[0] MAD temp[0].z, src0.__w, src0.__H, src1.__x MAD temp[3].w, src1.y, src2.z, src0.0 52: src0.w = temp[3], src1.w = temp[7] CMP temp[3].z, src0.__1, src0.__0, -|src0.__w| MAD temp[3].w, src1.w, src0.w, src0.0 53: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1], src2.xyz = const[4] MAD temp[1].y, src0._z_, src0.11_, src0.00_ MAD temp[1].w, src1.y, src2.z, src0.w 54: src0.w = temp[1], src1.xyz = const[5], src2.xyz = temp[3] MAD temp[1].x, src0.w__, src0.H__, src1.x__ MAD temp[1].w, -src2.z, src0.1, src0.1 55: src0.xyz = temp[1], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[4].xy, srcp.xy_, src0.111, src0.000 56: src0.xyz = temp[1], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[5].xy, srcp.xy_, src0.111, src0.000 57: src0.xyz = temp[5], src1.xyz = temp[4] DP3 temp[0].x, src0.xyz, src1.xyz 58: src0.xyz = temp[0], src1.xyz = const[6] MAD temp[0].x, src0.x__, src0.1__, -src1.y__ 59: src0.xyz = temp[0] CMP temp[0].x, src0.1__, src0.0__, src0.x__ 60: src0.xyz = temp[0], src0.w = temp[1] CMP temp[0].x, src0.1__, src0.x__, -src0.w__ 61: src0.xyz = temp[0] CMP temp[0].x, src0.0__, src0.1__, -src0.x__ 62: src0.xyz = temp[0] MAD temp[1].xyz, -src0.xxx, src0.111, src0.000 MAD temp[1].w, -src0.x, src0.1, src0.0 63: BEGIN_TEX; 64: TEX temp[4].w, temp[3].xy__, 2D[0]; 65: TEX temp[5].w, temp[9].xy__, 2D[0]; 66: TEX temp[6].w, temp[6].xy__, 2D[0]; 67: KIL temp[1]; 68: src0.xyz = const[7], src0.w = temp[5], src1.w = temp[0] SEM_WAIT MAD temp[0].x, src0.x__, src0.w__, src1.w__ 69: src0.xyz = const[7], src0.w = temp[6], src1.xyz = temp[0] MAD temp[0].x, src0.x__, src0.w__, src1.x__ 70: src0.xyz = temp[0], src0.w = const[6], src1.w = temp[11] MAD temp[0].x, src0.w__, src1.w__, src0.x__ 71: src0.xyz = const[7], src0.w = temp[4], src1.xyz = temp[0] MAD temp[0].x, src0.x__, src0.w__, src1.x__ 72: src0.xyz = temp[0], src0.w = const[6], src1.w = temp[12] MAD temp[0].x, src0.w__, src1.w__, src0.x__ 73: src0.xyz = temp[0], src0.w = temp[2] MAD temp[0].x, src0.w__, src0.1__, src0.x__ 74: src0.xyz = temp[0] MIN temp[0].x, src0.x__, src0.1__ 75: src0.xyz = temp[0], src0.w = temp[3] CMP temp[0].x, src0.1__, src0.0__, -|src0.x__| MAD temp[0].w, src0.w, src0.x, src0.0 76: src0.xyz = temp[0], src0.w = temp[0] CMP temp[0].x, src0.0__, src0.1__, -src0.x__ MAD temp[0].w, src0.w, src0.1, src0.0 77: src0.xyz = temp[0] MAD temp[1].xyz, -src0.xxx, src0.111, src0.000 MAD temp[1].w, -src0.x, src0.1, src0.0 78: BEGIN_TEX; 79: KIL temp[1]; 80: src0.xyz = temp[8], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 r300compiler error: compiler/r300_fragprog_emit.c::emit_alu(): Too many ALU instructions r300 FP: Compiler Error: compiler/r300_fragprog_emit.c::emit_alu(): Too many ALU instructions Using a dummy shader instead. r300: Initial fragment program FRAG DCL OUT[0], COLOR IMM FLT32 { 0.0000, 1.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxy 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 pc=14************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: 1.0 1.0 0.0 op: 00040891 GLSL source for fragment shader 22: vec4 D(in vec4 r, in float s){ return r; } uniform vec2 b, g, q; uniform sampler2D c, f, p; vec2 E(in float r, in float s){ (r = ((r + 0.5) / b[0])); return vec2(fract(r), ((((26.0 * floor(r)) + s) + 0.5) / b[1])); } float F(in vec2 r){ return r[1]; } vec4 G(in float r){ (r = ((r + 0.5) / g[0])); return floor((0.5 + (255.0 * texture2D(f, vec2(fract(r), ((floor(r) + 0.5) / g[1])))))); } float H(in vec4 r){ return (mod(r[0], 32.0) / 31.0); } float I(in vec4 r){ float s = ((r[1] * 16.0) + floor((r[3] / 16.0))); return ((s / 2.0) + -1023.0); } float J(in vec4 r){ float s = ((r[2] * 16.0) + mod(r[3], 16.0)); return ((s / 2.0) + -1023.0); } vec2 K(in vec4 r){ return vec2(I(r), J(r)); } varying vec2 i; varying vec3 j; varying vec4 k; varying vec2 l; uniform float m; void main(){ vec4 r = G(j[2]); vec2 s, u; (s = K(r)); float t = H(r); (u = (l - s)); if (((t == 0.0) || (dot(u, u) >= 0.60000002))) discard; float v = texture2D(p, (i / q))[3]; if ((v == 0.0)) discard; vec4 B; (B = texture2D(c, E(F(j.xy), m))); (B[3] *= t); (B[3] *= v); (gl_FragColor = D(B, j[0])); } GLSL IR for shader 22: ( (declare (uniform ) float m) (declare (in ) vec2 l) (declare (in ) vec4 k) (declare (in ) vec3 j) (declare (in ) vec2 i) (declare (uniform ) sampler2D p) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 q) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function D (signature vec4 (parameters (declare (in ) vec4 r) (declare (in ) float s) ) ( (return (var_ref r) ) )) ) (function E (signature vec2 (parameters (declare (in ) float r) (declare (in ) float s) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref r) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref r) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref r) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref s) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) (signature vec4 (parameters (declare (in ) vec4 arg0) ) ( )) ) (function F (signature float (parameters (declare (in ) vec2 r) ) ( (return (swiz y (var_ref r) )) )) ) (function G (signature vec4 (parameters (declare (in ) float r) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref r) (constant float (0.500000)) ) (swiz x (var_ref g) )) ) (assign (x) (var_ref r) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref r) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (var_ref floor_retval) (constant float (0.500000)) ) (swiz y (var_ref g) )) ) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref f) (var_ref vec_ctor) )) (declare (temporary ) vec4 floor_retval@114) (call floor (var_ref floor_retval@114) ((expression vec4 + (constant float (0.500000)) (expression vec4 * (constant float (255.000000)) (var_ref texture2D_retval) ) ) )) (return (var_ref floor_retval@114) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) (function H (signature float (parameters (declare (in ) vec4 r) ) ( (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((swiz x (var_ref r) )(constant float (32.000000)) )) (return (expression float / (var_ref mod_retval) (constant float (31.000000)) ) ) )) ) (function mod (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function I (signature float (parameters (declare (in ) vec4 r) ) ( (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((expression float / (swiz w (var_ref r) )(constant float (16.000000)) ) )) (return (expression float + (expression float / (expression float + (expression float * (swiz y (var_ref r) )(constant float (16.000000)) ) (var_ref floor_retval) ) (constant float (2.000000)) ) (constant float (-1023.000000)) ) ) )) ) (function J (signature float (parameters (declare (in ) vec4 r) ) ( (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((swiz w (var_ref r) )(constant float (16.000000)) )) (return (expression float + (expression float / (expression float + (expression float * (swiz z (var_ref r) )(constant float (16.000000)) ) (var_ref mod_retval) ) (constant float (2.000000)) ) (constant float (-1023.000000)) ) ) )) ) (function K (signature vec2 (parameters (declare (in ) vec4 r) ) ( (declare (temporary ) float I_retval) (call I (var_ref I_retval) ((var_ref r) )) (declare (temporary ) float J_retval) (call J (var_ref J_retval) ((var_ref r) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref I_retval) ) (assign (y) (var_ref vec_ctor) (var_ref J_retval) ) (return (var_ref vec_ctor) ) )) ) (function main (signature void (parameters ) ( (declare () vec4 B) (declare () float v) (declare () float t) (declare () vec2 s) (declare () vec4 r) (declare (temporary ) vec4 G_retval) (call G (var_ref G_retval) ((swiz z (var_ref j) ))) (assign (xyzw) (var_ref r) (var_ref G_retval) ) (declare (temporary ) vec2 K_retval) (call K (var_ref K_retval) ((var_ref G_retval) )) (assign (xy) (var_ref s) (var_ref K_retval) ) (declare (temporary ) float H_retval) (call H (var_ref H_retval) ((var_ref r) )) (assign (x) (var_ref t) (var_ref H_retval) ) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 + (var_ref l) (expression vec2 neg (var_ref s) ) ) ) (declare (temporary ) bool or_tmp) (if (expression bool all_equal (var_ref H_retval) (constant float (0.000000)) ) ( (assign (x) (var_ref or_tmp) (constant bool (1)) ) ) ( (declare (temporary ) float dot_retval) (call dot (var_ref dot_retval) ((var_ref assignment_tmp) (var_ref assignment_tmp) )) (assign (x) (var_ref or_tmp) (expression bool >= (var_ref dot_retval) (constant float (0.600000)) ) ) )) (if (var_ref or_tmp) ( (discard ) ) ()) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref p) (expression vec2 / (var_ref i) (var_ref q) ) )) (assign (x) (var_ref v) (swiz w (var_ref texture2D_retval) )) (if (expression bool all_equal (swiz w (var_ref texture2D_retval) )(constant float (0.000000)) ) ( (discard ) ) ()) (declare (temporary ) float F_retval) (call F (var_ref F_retval) ((swiz xy (var_ref j) ))) (declare (temporary ) vec2 E_retval) (call E (var_ref E_retval) ((var_ref F_retval) (var_ref m) )) (declare (temporary ) vec4 texture2D_retval@115) (call texture2D (var_ref texture2D_retval@115) ((var_ref c) (var_ref E_retval) )) (assign (xyz) (var_ref B) (swiz xyz (var_ref texture2D_retval@115) )) (assign (w) (var_ref B) (expression float * (swiz w (var_ref texture2D_retval@115) )(var_ref t) ) ) (assign (w) (var_ref B) (expression float * (swiz w (var_ref B) )(var_ref v) ) ) (declare (temporary ) vec4 D_retval) (call D (var_ref D_retval) ((var_ref B) (swiz x (var_ref j) ))) (assign (xyzw) (var_ref gl_FragColor) (var_ref D_retval) ) )) ) (function dot (signature float (parameters (declare (in ) vec2 arg0) (declare (in ) vec2 arg1) ) ( )) ) ) GLSL source for vertex shader 23: uniform vec2 b, g, h; uniform sampler2D c, f; vec2 J(in float A, in float B){ (A = ((A + 0.5) / b[0])); return vec2(fract(A), ((((26.0 * floor(A)) + B) + 0.5) / b[1])); } float L(in vec2 A){ return A[1]; } vec2 R(in vec4 A, in vec2 B, in vec2 C, in bool D){ vec2 E, F, G, H, I; (E = (h / 2.0)); (F = (mod(h, 2.0) / 2.0)); (G = ((E * A.xy) / A[3])); (H = (G + (B * vec2(1.0, -1.0)))); (I = (floor(((H + 0.5) - F)) + F)); (I += ((1.0 - float(D)) * (H - I))); (I += (C * vec2(1.0, -1.0))); return ((I * A[3]) / E); } vec2 S(in vec4 A, in vec2 B){ return R(A, B, vec2(0.0, 0.0), false); } varying vec2 i; varying vec3 j; varying vec4 k; varying vec2 l; uniform float m; attribute vec2 s; attribute float t; attribute float u; attribute vec2 v; attribute vec3 w; attribute vec2 x; attribute vec3 y; attribute vec2 z; uniform mat4 n; uniform mat2 o; void main(){ vec2 A, B, D, F; (A = s); (A[0] += 4.0); (B = vec2(floor((t / 2.0)), ((-2.0 * mod(floor(((t + 1.0) / 2.0)), 2.0)) + 1.0))); (i = ((B * A) + v)); (i[0] -= 2.0); (j = y); vec4 C = (n * vec4(w, 1.0)); (C /= C[3]); (D = z); (l = z); (F = (o * x)); (gl_Position = vec4(S(C, (((F + D) + (B * A)) - vec2(2.0, 0.0))), u, 1.0)); } GLSL IR for shader 23: ( (declare (uniform ) mat2 o) (declare (uniform ) mat4 n) (declare (in ) vec2 z) (declare (in ) vec3 y) (declare (in ) vec2 x) (declare (in ) vec3 w) (declare (in ) vec2 v) (declare (in ) float u) (declare (in ) float t) (declare (in ) vec2 s) (declare (uniform ) float m) (declare (out ) vec2 l) (declare (out ) vec4 k) (declare (out ) vec3 j) (declare (out ) vec2 i) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 h) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function J (signature vec2 (parameters (declare (in ) float A) (declare (in ) float B) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref A) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref A) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref A) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref B) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) (signature vec2 (parameters (declare (in ) vec2 arg0) ) ( )) ) (function L (signature float (parameters (declare (in ) vec2 A) ) ( (return (swiz y (var_ref A) )) )) ) (function R (signature vec2 (parameters (declare (in ) vec4 A) (declare (in ) vec2 B) (declare (in ) vec2 C) (declare (in ) bool D) ) ( (declare () vec2 H) (declare () vec2 F) (declare () vec2 E) (assign (xy) (var_ref E) (expression vec2 / (var_ref h) (constant float (2.000000)) ) ) (declare (temporary ) vec2 mod_retval) (call mod (var_ref mod_retval) ((var_ref h) (constant float (2.000000)) )) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 / (var_ref mod_retval) (constant float (2.000000)) ) ) (assign (xy) (var_ref F) (var_ref assignment_tmp) ) (declare (temporary ) vec2 assignment_tmp@116) (assign (xy) (var_ref assignment_tmp@116) (expression vec2 + (expression vec2 / (expression vec2 * (var_ref E) (swiz xy (var_ref A) )) (swiz w (var_ref A) )) (expression vec2 * (var_ref B) (constant vec2 (1.000000 -1.000000)) ) ) ) (assign (xy) (var_ref H) (var_ref assignment_tmp@116) ) (declare (temporary ) vec2 floor_retval) (call floor (var_ref floor_retval) ((expression vec2 + (expression vec2 + (var_ref assignment_tmp@116) (constant float (0.500000)) ) (expression vec2 neg (var_ref assignment_tmp) ) ) )) (declare (temporary ) vec2 assignment_tmp@117) (assign (xy) (var_ref assignment_tmp@117) (expression vec2 + (var_ref floor_retval) (var_ref F) ) ) (return (expression vec2 / (expression vec2 * (expression vec2 + (expression vec2 + (var_ref assignment_tmp@117) (expression vec2 * (expression float + (constant float (1.000000)) (expression float neg (expression float b2f (var_ref D) ) ) ) (expression vec2 + (var_ref H) (expression vec2 neg (var_ref assignment_tmp@117) ) ) ) ) (expression vec2 * (var_ref C) (constant vec2 (1.000000 -1.000000)) ) ) (swiz w (var_ref A) )) (var_ref E) ) ) )) ) (function mod (signature vec2 (parameters (declare (in ) vec2 arg0) (declare (in ) float arg1) ) ( )) (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function S (signature vec2 (parameters (declare (in ) vec4 A) (declare (in ) vec2 B) ) ( (declare (temporary ) vec2 R_retval) (call R (var_ref R_retval) ((var_ref A) (var_ref B) (constant vec2 (0.000000 0.000000)) (constant bool (0)) )) (return (var_ref R_retval) ) )) ) (function main (signature void (parameters ) ( (declare () vec2 A) (assign (y) (var_ref A) (swiz y (var_ref s) )) (assign (x) (var_ref A) (expression float + (swiz x (var_ref s) )(constant float (4.000000)) ) ) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((expression float / (var_ref t) (constant float (2.000000)) ) )) (declare (temporary ) float floor_retval@118) (call floor (var_ref floor_retval@118) ((expression float / (expression float + (var_ref t) (constant float (1.000000)) ) (constant float (2.000000)) ) )) (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((var_ref floor_retval@118) (constant float (2.000000)) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref floor_retval) ) (assign (y) (var_ref vec_ctor) (expression float + (expression float * (constant float (-2.000000)) (var_ref mod_retval) ) (constant float (1.000000)) ) ) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 + (expression vec2 * (var_ref vec_ctor) (var_ref A) ) (var_ref v) ) ) (assign (y) (var_ref i) (swiz y (var_ref assignment_tmp) )) (assign (x) (var_ref i) (expression float + (swiz x (var_ref assignment_tmp) )(constant float (-2.000000)) ) ) (assign (xyz) (var_ref j) (var_ref y) ) (declare (temporary ) vec4 vec_ctor@119) (assign (w) (var_ref vec_ctor@119) (constant float (1.000000)) ) (assign (xyz) (var_ref vec_ctor@119) (var_ref w) ) (declare (temporary ) vec4 assignment_tmp@120) (assign (xyzw) (var_ref assignment_tmp@120) (expression vec4 * (var_ref n) (var_ref vec_ctor@119) ) ) (assign (xy) (var_ref l) (var_ref z) ) (declare (temporary ) vec2 S_retval) (call S (var_ref S_retval) ((expression vec4 / (var_ref assignment_tmp@120) (swiz w (var_ref assignment_tmp@120) )) (expression vec2 + (expression vec2 + (expression vec2 + (expression vec2 * (var_ref o) (var_ref x) ) (var_ref z) ) (expression vec2 * (var_ref vec_ctor) (var_ref A) ) ) (expression vec2 neg (constant vec2 (2.000000 0.000000)) ) ) )) (declare (temporary ) vec4 vec_ctor@121) (assign (w) (var_ref vec_ctor@121) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor@121) (var_ref S_retval) ) (assign (z) (var_ref vec_ctor@121) (var_ref u) ) (assign (xyzw) (var_ref gl_Position) (var_ref vec_ctor@121) ) )) ) ) GLSL IR for linked vertex program 24: ( (declare (uniform ) mat2 o) (declare (uniform ) mat4 n) (declare (in ) vec2 z) (declare (in ) vec3 y) (declare (in ) vec2 x) (declare (in ) vec3 w) (declare (in ) vec2 v) (declare (in ) float u) (declare (in ) float t) (declare (in ) vec2 s) (declare (out ) vec2 l) (declare (out ) vec3 j) (declare (out ) vec2 i) (declare (uniform ) vec2 h) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare () vec2 A) (assign (y) (var_ref A) (swiz y (var_ref s) )) (assign (x) (var_ref A) (expression float + (swiz x (var_ref s) )(constant float (4.000000)) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float floor (expression float * (var_ref t) (constant float (0.500000)) ) ) ) (assign (y) (var_ref vec_ctor) (expression float + (expression float * (expression float fract (expression float * (expression float floor (expression float * (expression float + (var_ref t) (constant float (1.000000)) ) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) (constant float (-4.000000)) ) (constant float (1.000000)) ) ) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 + (expression vec2 * (var_ref vec_ctor) (var_ref A) ) (var_ref v) ) ) (assign (y) (var_ref i) (swiz y (var_ref assignment_tmp) )) (assign (x) (var_ref i) (expression float + (swiz x (var_ref assignment_tmp) )(constant float (-2.000000)) ) ) (assign (xyz) (var_ref j) (var_ref y) ) (declare (temporary ) vec4 flattening_tmp) (assign (xyzw) (var_ref flattening_tmp) (expression vec4 + (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref n) (constant int (0)) ) (swiz x (var_ref w) )) (expression vec4 * (array_ref (var_ref n) (constant int (1)) ) (swiz y (var_ref w) )) ) (expression vec4 * (array_ref (var_ref n) (constant int (2)) ) (swiz z (var_ref w) )) ) (array_ref (var_ref n) (constant int (3)) ) ) ) (assign (xy) (var_ref l) (var_ref z) ) (declare () vec4 A@122) (assign (xyzw) (var_ref A@122) (expression vec4 * (var_ref flattening_tmp) (expression float rcp (swiz w (var_ref flattening_tmp) )) ) ) (declare () vec2 E) (assign (xy) (var_ref E) (expression vec2 * (var_ref h) (constant float (0.500000)) ) ) (declare (temporary ) vec2 assignment_tmp@123) (assign (xy) (var_ref assignment_tmp@123) (expression vec2 fract (expression vec2 * (var_ref h) (constant float (0.500000)) ) ) ) (declare (temporary ) vec2 assignment_tmp@124) (assign (xy) (var_ref assignment_tmp@124) (expression vec2 + (expression vec2 * (expression vec2 * (var_ref E) (swiz xy (var_ref A@122) )) (expression float rcp (swiz w (var_ref A@122) )) ) (expression vec2 * (expression vec2 + (expression vec2 + (expression vec2 + (expression vec2 + (expression vec2 * (array_ref (var_ref o) (constant int (0)) ) (swiz x (var_ref x) )) (expression vec2 * (array_ref (var_ref o) (constant int (1)) ) (swiz y (var_ref x) )) ) (var_ref z) ) (expression vec2 * (var_ref vec_ctor) (var_ref A) ) ) (constant vec2 (-2.000000 -0.000000)) ) (constant vec2 (1.000000 -1.000000)) ) ) ) (declare (temporary ) vec2 assignment_tmp@125) (assign (xy) (var_ref assignment_tmp@125) (expression vec2 + (expression vec2 floor (expression vec2 + (expression vec2 + (var_ref assignment_tmp@124) (constant float (0.500000)) ) (expression vec2 neg (var_ref assignment_tmp@123) ) ) ) (var_ref assignment_tmp@123) ) ) (declare (temporary ) vec4 vec_ctor@126) (assign (w) (var_ref vec_ctor@126) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor@126) (expression vec2 * (expression vec2 * (expression vec2 + (var_ref assignment_tmp@125) (expression vec2 + (var_ref assignment_tmp@124) (expression vec2 neg (var_ref assignment_tmp@125) ) ) ) (swiz w (var_ref A@122) )) (expression vec2 rcp (var_ref E) ) ) ) (assign (z) (var_ref vec_ctor@126) (var_ref u) ) (assign (xyzw) (var_ref gl_Position) (var_ref vec_ctor@126) ) (assign (xy) (var_ref l@127) (var_ref l) ) (assign (xyzw) (var_ref gl_Position@128) (var_ref gl_Position) ) (assign (xy) (var_ref i@129) (var_ref i) ) (assign (xyz) (var_ref j@130) (var_ref j) ) )) ) ) GLSL IR for linked fragment program 24: ( (declare (uniform ) float m) (declare (in ) vec2 l) (declare (in ) vec3 j) (declare (in ) vec2 i) (declare (uniform ) sampler2D p) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 q) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare () vec4 B) (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (expression float + (swiz z (var_ref j) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref g) )) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float fract (var_ref assignment_tmp) ) ) (assign (y) (var_ref vec_ctor) (expression float * (expression float + (expression float floor (var_ref assignment_tmp) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref g) )) ) ) (declare (temporary ) vec4 floor_retval) (assign (xyzw) (var_ref floor_retval) (expression vec4 floor (expression vec4 + (constant float (0.500000)) (expression vec4 * (constant float (255.000000)) (tex vec4 (var_ref f) (var_ref vec_ctor) 0 1 () )) ) ) ) (declare (temporary ) vec2 vec_ctor@131) (assign (x) (var_ref vec_ctor@131) (expression float + (expression float * (expression float + (expression float * (swiz y (var_ref floor_retval) )(constant float (16.000000)) ) (expression float floor (expression float * (swiz w (var_ref floor_retval) )(constant float (0.062500)) ) ) ) (constant float (0.500000)) ) (constant float (-1023.000000)) ) ) (assign (y) (var_ref vec_ctor@131) (expression float + (expression float * (expression float + (expression float * (swiz z (var_ref floor_retval) )(constant float (16.000000)) ) (expression float * (constant float (16.000000)) (expression float fract (expression float * (swiz w (var_ref floor_retval) )(constant float (0.062500)) ) ) ) ) (constant float (0.500000)) ) (constant float (-1023.000000)) ) ) (declare (temporary ) float H_retval) (assign (x) (var_ref H_retval) (expression float * (constant float (1.032258)) (expression float fract (expression float * (swiz x (var_ref floor_retval) )(constant float (0.031250)) ) ) ) ) (declare (temporary ) vec2 assignment_tmp@132) (assign (xy) (var_ref assignment_tmp@132) (expression vec2 + (var_ref l) (expression vec2 neg (var_ref vec_ctor@131) ) ) ) (declare (temporary ) bool or_tmp) (declare (temporary ) bool if_to_cond_assign_then) (assign (x) (var_ref if_to_cond_assign_then) (expression bool all_equal (var_ref H_retval) (constant float (0.000000)) ) ) (assign (var_ref if_to_cond_assign_then) (x) (var_ref or_tmp) (constant bool (1)) ) (assign (expression bool ! (var_ref if_to_cond_assign_then) ) (x) (var_ref or_tmp) (expression bool >= (expression float dot (var_ref assignment_tmp@132) (var_ref assignment_tmp@132) ) (constant float (0.600000)) ) ) (declare (temporary ) bool discard_cond_temp) (assign (x) (var_ref discard_cond_temp) (constant bool (0)) ) (assign (var_ref or_tmp) (x) (var_ref discard_cond_temp) (constant bool (1)) ) (discard (var_ref discard_cond_temp) ) (declare (temporary ) vec4 texture2D_retval) (assign (xyzw) (var_ref texture2D_retval) (tex vec4 (var_ref p) (expression vec2 * (var_ref i) (expression vec2 rcp (var_ref q) ) ) 0 1 () )) (declare (temporary ) bool discard_cond_temp@133) (assign (x) (var_ref discard_cond_temp@133) (constant bool (0)) ) (assign (expression bool all_equal (swiz w (var_ref texture2D_retval) )(constant float (0.000000)) ) (x) (var_ref discard_cond_temp@133) (constant bool (1)) ) (discard (var_ref discard_cond_temp@133) ) (declare (temporary ) float assignment_tmp@134) (assign (x) (var_ref assignment_tmp@134) (expression float * (expression float + (swiz y (var_ref j) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref b) )) ) ) (declare (temporary ) vec2 vec_ctor@135) (assign (x) (var_ref vec_ctor@135) (expression float fract (var_ref assignment_tmp@134) ) ) (assign (y) (var_ref vec_ctor@135) (expression float * (expression float + (expression float + (expression float * (constant float (26.000000)) (expression float floor (var_ref assignment_tmp@134) ) ) (var_ref m) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref b) )) ) ) (declare (temporary ) vec4 texture2D_retval@136) (assign (xyzw) (var_ref texture2D_retval@136) (tex vec4 (var_ref c) (var_ref vec_ctor@135) 0 1 () )) (assign (xyz) (var_ref B) (swiz xyz (var_ref texture2D_retval@136) )) (assign (w) (var_ref B) (expression float * (swiz w (var_ref texture2D_retval@136) )(var_ref H_retval) ) ) (assign (w) (var_ref B) (expression float * (swiz w (var_ref B) )(swiz w (var_ref texture2D_retval) )) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref B) ) (assign (xyzw) (var_ref gl_FragColor@137) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL IN[5] DCL IN[6] DCL IN[7] DCL OUT[0], POSITION DCL OUT[1], GENERIC[12] DCL OUT[2], GENERIC[13] DCL OUT[3], GENERIC[14] DCL CONST[0..6] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL IMM FLT32 { 4.0000, 0.5000, 1.0000, -4.0000} IMM FLT32 { -2.0000, -0.0000, 1.0000, -1.0000} 0: MOV TEMP[0].y, IN[7].yyyy 1: ADD TEMP[0].x, IN[7].xxxx, IMM[0].xxxx 2: MUL TEMP[1].x, IN[6].xxxx, IMM[0].yyyy 3: FLR TEMP[1].x, TEMP[1].xxxx 4: ADD TEMP[2].x, IN[6].xxxx, IMM[0].zzzz 5: MUL TEMP[2].x, TEMP[2].xxxx, IMM[0].yyyy 6: FLR TEMP[2].x, TEMP[2].xxxx 7: MUL TEMP[2].x, TEMP[2].xxxx, IMM[0].yyyy 8: FRC TEMP[2].x, TEMP[2].xxxx 9: MAD TEMP[2].x, TEMP[2].xxxx, IMM[0].wwww, IMM[0].zzzz 10: MOV TEMP[1].y, TEMP[2].xxxx 11: MAD TEMP[2].xy, TEMP[1].xyyy, TEMP[0].xyyy, IN[4].xyyy 12: MOV TEMP[3].y, TEMP[2].yyyy 13: ADD TEMP[3].x, TEMP[2].xxxx, IMM[1].xxxx 14: MUL TEMP[2], CONST[2], IN[3].xxxx 15: MAD TEMP[2], CONST[3], IN[3].yyyy, TEMP[2] 16: MAD TEMP[2], CONST[4], IN[3].zzzz, TEMP[2] 17: ADD TEMP[2], TEMP[2], CONST[5] 18: RCP TEMP[4].x, TEMP[2].wwww 19: MUL TEMP[2].xyw, TEMP[2], TEMP[4].xxxx 20: MUL TEMP[4].xy, CONST[6].xyyy, IMM[0].yyyy 21: MUL TEMP[5].xy, CONST[6].xyyy, IMM[0].yyyy 22: FRC TEMP[5].xy, TEMP[5].xyyy 23: MUL TEMP[6].xy, CONST[0].xyyy, IN[2].xxxx 24: MAD TEMP[6].xy, CONST[1].xyyy, IN[2].yyyy, TEMP[6].xyyy 25: ADD TEMP[6].xy, TEMP[6].xyyy, IN[0].xyyy 26: MAD TEMP[0].xy, TEMP[1].xyyy, TEMP[0].xyyy, TEMP[6].xyyy 27: ADD TEMP[0].xy, TEMP[0].xyyy, IMM[1].xyyy 28: MUL TEMP[1].xy, TEMP[4].xyyy, TEMP[2].xyyy 29: RCP TEMP[6].x, TEMP[2].wwww 30: MUL TEMP[1].xy, TEMP[1].xyyy, TEMP[6].xxxx 31: MAD TEMP[0].xy, TEMP[0].xyyy, IMM[1].zwww, TEMP[1].xyyy 32: ADD TEMP[1].xy, TEMP[0].xyyy, IMM[0].yyyy 33: ADD TEMP[1].xy, TEMP[1].xyyy, -TEMP[5].xyyy 34: FLR TEMP[1].xy, TEMP[1].xyyy 35: ADD TEMP[1].xy, TEMP[1].xyyy, TEMP[5].xyyy 36: MOV TEMP[5].w, IMM[0].zzzz 37: ADD TEMP[0].xy, TEMP[0].xyyy, -TEMP[1].xyyy 38: ADD TEMP[0].xy, TEMP[1].xyyy, TEMP[0].xyyy 39: MUL TEMP[0].xy, TEMP[0].xyyy, TEMP[2].wwww 40: RCP TEMP[1].x, TEMP[4].xxxx 41: RCP TEMP[1].y, TEMP[4].yyyy 42: MUL TEMP[5].xy, TEMP[0].xyyy, TEMP[1].xyyy 43: MOV TEMP[5].z, IN[5].xxxx 44: MOV OUT[1].xy, IN[0].xyxx 45: MOV OUT[0], TEMP[5] 46: MOV OUT[3].xy, TEMP[3].xyxx 47: MOV OUT[2].xyz, IN[1].xyzx 48: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FLR temp[1].x, temp[1].xxxx; 4: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 6: FLR temp[2].x, temp[2].xxxx; 7: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 8: FRC temp[2].x, temp[2].xxxx; 9: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 10: MOV temp[1].y, temp[2].xxxx; 11: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 12: MOV temp[3].y, temp[2].yyyy; 13: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 14: MUL temp[2], const[2], input[3].xxxx; 15: MAD temp[2], const[3], input[3].yyyy, temp[2]; 16: MAD temp[2], const[4], input[3].zzzz, temp[2]; 17: ADD temp[2], temp[2], const[5]; 18: RCP temp[4].x, temp[2].wwww; 19: MUL temp[2].xyw, temp[2], temp[4].xxxx; 20: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 21: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 22: FRC temp[5].xy, temp[5].xyyy; 23: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 24: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 25: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 26: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 27: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 28: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 29: RCP temp[6].x, temp[2].wwww; 30: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 31: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 32: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 33: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 34: FLR temp[1].xy, temp[1].xyyy; 35: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 36: MOV temp[5].w, const[7].zzzz; 37: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 38: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 39: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 40: RCP temp[1].x, temp[4].xxxx; 41: RCP temp[1].y, temp[4].yyyy; 42: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 43: MOV temp[5].z, input[5].xxxx; 44: MOV output[1].xy, input[0].xyxx; 45: MOV temp[7], temp[5]; 46: MOV output[3].xy, temp[3].xyxx; 47: MOV output[2].xyz, input[1].xyzx; 48: MOV output[0], temp[7]; 49: MOV output[4], temp[7]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FLR temp[1].x, temp[1].xxxx; 4: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 6: FLR temp[2].x, temp[2].xxxx; 7: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 8: FRC temp[2].x, temp[2].xxxx; 9: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 10: MOV temp[1].y, temp[2].xxxx; 11: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 12: MOV temp[3].y, temp[2].yyyy; 13: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 14: MUL temp[2], const[2], input[3].xxxx; 15: MAD temp[2], const[3], input[3].yyyy, temp[2]; 16: MAD temp[2], const[4], input[3].zzzz, temp[2]; 17: ADD temp[2], temp[2], const[5]; 18: RCP temp[4].x, temp[2].wwww; 19: MUL temp[2].xyw, temp[2], temp[4].xxxx; 20: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 21: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 22: FRC temp[5].xy, temp[5].xyyy; 23: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 24: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 25: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 26: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 27: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 28: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 29: RCP temp[6].x, temp[2].wwww; 30: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 31: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 32: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 33: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 34: FLR temp[1].xy, temp[1].xyyy; 35: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 36: MOV temp[5].w, const[7].zzzz; 37: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 38: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 39: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 40: RCP temp[1].x, temp[4].xxxx; 41: RCP temp[1].y, temp[4].yyyy; 42: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 43: MOV temp[5].z, input[5].xxxx; 44: MOV output[1].xy, input[0].xyxx; 45: MOV temp[7], temp[5]; 46: MOV output[3].xy, temp[3].xyxx; 47: MOV output[2].xyz, input[1].xyzx; 48: MOV output[0], temp[7]; 49: MOV output[4], temp[7]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FLR temp[1].x, temp[1].xxxx; 4: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 5: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 6: FLR temp[2].x, temp[2].xxxx; 7: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 8: FRC temp[2].x, temp[2].xxxx; 9: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 10: MOV temp[1].y, temp[2].xxxx; 11: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 12: MOV temp[3].y, temp[2].yyyy; 13: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 14: MUL temp[2], const[2], input[3].xxxx; 15: MAD temp[2], const[3], input[3].yyyy, temp[2]; 16: MAD temp[2], const[4], input[3].zzzz, temp[2]; 17: ADD temp[2], temp[2], const[5]; 18: RCP temp[4].x, temp[2].wwww; 19: MUL temp[2].xyw, temp[2], temp[4].xxxx; 20: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 21: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 22: FRC temp[5].xy, temp[5].xyyy; 23: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 24: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 25: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 26: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 27: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 28: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 29: RCP temp[6].x, temp[2].wwww; 30: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 31: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 32: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 33: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 34: FLR temp[1].xy, temp[1].xyyy; 35: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 36: MOV temp[5].w, const[7].zzzz; 37: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 38: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 39: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 40: RCP temp[1].x, temp[4].xxxx; 41: RCP temp[1].y, temp[4].yyyy; 42: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 43: MOV temp[5].z, input[5].xxxx; 44: MOV output[1].xy, input[0].xyxx; 45: MOV temp[7], temp[5]; 46: MOV output[3].xy, temp[3].xyxx; 47: MOV output[2].xyz, input[1].xyzx; 48: MOV output[0], temp[7]; 49: MOV output[4], temp[7]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FRC temp[8].x, temp[1].xxxx; 4: ADD temp[1].x, temp[1].xxxx, -temp[8]; 5: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 6: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 7: FRC temp[9].x, temp[2].xxxx; 8: ADD temp[2].x, temp[2].xxxx, -temp[9]; 9: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 10: FRC temp[2].x, temp[2].xxxx; 11: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 12: MOV temp[1].y, temp[2].xxxx; 13: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 14: MOV temp[3].y, temp[2].yyyy; 15: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 16: MUL temp[2], const[2], input[3].xxxx; 17: MAD temp[2], const[3], input[3].yyyy, temp[2]; 18: MAD temp[2], const[4], input[3].zzzz, temp[2]; 19: ADD temp[2], temp[2], const[5]; 20: RCP temp[4].x, temp[2].wwww; 21: MUL temp[2].xyw, temp[2], temp[4].xxxx; 22: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 23: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 24: FRC temp[5].xy, temp[5].xyyy; 25: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 26: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 27: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 28: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 29: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 30: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 31: RCP temp[6].x, temp[2].wwww; 32: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 33: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 34: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 35: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 36: FRC temp[10].xy, temp[1].xyyy; 37: ADD temp[1].xy, temp[1].xyyy, -temp[10]; 38: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 39: MOV temp[5].w, const[7].zzzz; 40: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 41: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 42: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 43: RCP temp[1].x, temp[4].xxxx; 44: RCP temp[1].y, temp[4].yyyy; 45: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 46: MOV temp[5].z, input[5].xxxx; 47: MOV output[1].xy, input[0].xyxx; 48: MOV temp[7], temp[5]; 49: MOV output[3].xy, temp[3].xyxx; 50: MOV output[2].xyz, input[1].xyzx; 51: MOV output[0], temp[7]; 52: MOV output[4], temp[7]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0].y, input[7].yyyy; 1: ADD temp[0].x, input[7].xxxx, const[7].xxxx; 2: MUL temp[1].x, input[6].xxxx, const[7].yyyy; 3: FRC temp[8].x, temp[1].xxxx; 4: ADD temp[1].x, temp[1].xxxx, -temp[8]; 5: ADD temp[2].x, input[6].xxxx, const[7].zzzz; 6: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 7: FRC temp[9].x, temp[2].xxxx; 8: ADD temp[2].x, temp[2].xxxx, -temp[9]; 9: MUL temp[2].x, temp[2].xxxx, const[7].yyyy; 10: FRC temp[2].x, temp[2].xxxx; 11: MAD temp[2].x, temp[2].xxxx, const[7].wwww, const[7].zzzz; 12: MOV temp[1].y, temp[2].xxxx; 13: MAD temp[2].xy, temp[1].xyyy, temp[0].xyyy, input[4].xyyy; 14: MOV temp[3].y, temp[2].yyyy; 15: ADD temp[3].x, temp[2].xxxx, const[8].xxxx; 16: MUL temp[2], const[2], input[3].xxxx; 17: MAD temp[2], const[3], input[3].yyyy, temp[2]; 18: MAD temp[2], const[4], input[3].zzzz, temp[2]; 19: ADD temp[2], temp[2], const[5]; 20: RCP temp[4].x, temp[2].wwww; 21: MUL temp[2].xyw, temp[2], temp[4].xxxx; 22: MUL temp[4].xy, const[6].xyyy, const[7].yyyy; 23: MUL temp[5].xy, const[6].xyyy, const[7].yyyy; 24: FRC temp[5].xy, temp[5].xyyy; 25: MUL temp[6].xy, const[0].xyyy, input[2].xxxx; 26: MAD temp[6].xy, const[1].xyyy, input[2].yyyy, temp[6].xyyy; 27: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 28: MAD temp[0].xy, temp[1].xyyy, temp[0].xyyy, temp[6].xyyy; 29: ADD temp[0].xy, temp[0].xyyy, const[8].xyyy; 30: MUL temp[1].xy, temp[4].xyyy, temp[2].xyyy; 31: RCP temp[6].x, temp[2].wwww; 32: MUL temp[1].xy, temp[1].xyyy, temp[6].xxxx; 33: MAD temp[0].xy, temp[0].xyyy, const[8].zwww, temp[1].xyyy; 34: ADD temp[1].xy, temp[0].xyyy, const[7].yyyy; 35: ADD temp[1].xy, temp[1].xyyy, -temp[5].xyyy; 36: FRC temp[10].xy, temp[1].xyyy; 37: ADD temp[1].xy, temp[1].xyyy, -temp[10]; 38: ADD temp[1].xy, temp[1].xyyy, temp[5].xyyy; 39: MOV temp[5].w, const[7].zzzz; 40: ADD temp[0].xy, temp[0].xyyy, -temp[1].xyyy; 41: ADD temp[0].xy, temp[1].xyyy, temp[0].xyyy; 42: MUL temp[0].xy, temp[0].xyyy, temp[2].wwww; 43: RCP temp[1].x, temp[4].xxxx; 44: RCP temp[1].y, temp[4].yyyy; 45: MUL temp[5].xy, temp[0].xyyy, temp[1].xyyy; 46: MOV temp[5].z, input[5].xxxx; 47: MOV output[1].xy, input[0].xyxx; 48: MOV temp[7], temp[5]; 49: MOV output[3].xy, temp[3].xyxx; 50: MOV output[2].xyz, input[1].xyzx; 51: MOV output[0], temp[7]; 52: MOV output[4], temp[7]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[8].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[8].x___; 5: ADD temp[2].x, input[6].x___, const[7].z___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[9].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[9].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, const[7].z___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MUL temp[4].xy, const[6].xy__, const[7].yy__; 23: MUL temp[5].xy, const[6].xy__, const[7].yy__; 24: FRC temp[5].xy, temp[5].xy__; 25: MUL temp[6].xy, const[0].xy__, input[2].xx__; 26: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 27: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 28: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 29: ADD temp[0].xy, temp[0].xy__, const[8].xy__; 30: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 31: RCP temp[6].x, temp[2].w___; 32: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 33: MAD temp[0].xy, temp[0].xy__, const[8].zw__, temp[1].xy__; 34: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 35: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 36: FRC temp[10].xy, temp[1].xy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[10].xy__; 38: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 39: MOV temp[5].w, const[7].___z; 40: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 41: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 42: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 43: RCP temp[1].x, temp[4].x___; 44: RCP temp[1].y, temp[4]._y__; 45: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 46: MOV temp[5].z, input[5].__x_; 47: MOV output[1].xy, input[0].xy__; 48: MOV temp[7], temp[5]; 49: MOV output[3].xy, temp[3].xy__; 50: MOV output[2].xyz, input[1].xyz_; 51: MOV output[0], temp[7]; 52: MOV output[4], temp[7]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[8].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[8].x___; 5: ADD temp[2].x, input[6].x___, none.1___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[9].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[9].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, none.1___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MUL temp[4].xy, const[6].xy__, const[7].yy__; 23: MUL temp[5].xy, const[6].xy__, const[7].yy__; 24: FRC temp[5].xy, temp[5].xy__; 25: MUL temp[6].xy, const[0].xy__, input[2].xx__; 26: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 27: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 28: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 29: ADD temp[0].xy, temp[0].xy__, const[8].x0__; 30: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 31: RCP temp[6].x, temp[2].w___; 32: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 33: MAD temp[0].xy, temp[0].xy__, none.1-1__, temp[1].xy__; 34: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 35: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 36: FRC temp[10].xy, temp[1].xy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[10].xy__; 38: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 39: MOV temp[5].w, none.___1; 40: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 41: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 42: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 43: RCP temp[1].x, temp[4].x___; 44: RCP temp[1].y, temp[4]._y__; 45: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 46: MOV temp[5].z, input[5].__x_; 47: MOV output[1].xy, input[0].xy__; 48: MOV output[3].xy, temp[3].xy__; 49: MOV output[2].xyz, input[1].xyz_; 50: MOV output[0], temp[5]; 51: MOV output[4], temp[5]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[8].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[8].x___; 5: ADD temp[2].x, input[6].x___, none.1___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[9].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[9].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, none.1___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MOV temp[7], const[7].yy__; 23: MUL temp[4].xy, const[6].xy__, temp[7]; 24: MOV temp[11], const[7].yy__; 25: MUL temp[5].xy, const[6].xy__, temp[11]; 26: FRC temp[5].xy, temp[5].xy__; 27: MUL temp[6].xy, const[0].xy__, input[2].xx__; 28: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 29: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 30: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 31: ADD temp[0].xy, temp[0].xy__, const[8].x0__; 32: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 33: RCP temp[6].x, temp[2].w___; 34: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 35: MAD temp[0].xy, temp[0].xy__, none.1-1__, temp[1].xy__; 36: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 38: FRC temp[10].xy, temp[1].xy__; 39: ADD temp[1].xy, temp[1].xy__, -temp[10].xy__; 40: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 41: MOV temp[5].w, none.___1; 42: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 43: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 44: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 45: RCP temp[1].x, temp[4].x___; 46: RCP temp[1].y, temp[4]._y__; 47: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 48: MOV temp[5].z, input[5].__x_; 49: MOV output[1].xy, input[0].xy__; 50: MOV output[3].xy, temp[3].xy__; 51: MOV output[2].xyz, input[1].xyz_; 52: MOV output[0], temp[5]; 53: MOV output[4], temp[5]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[2].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[2].x___; 5: ADD temp[2].x, input[6].x___, none.1___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[3].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[3].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, none.1___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MOV temp[5], const[7].yy__; 23: MUL temp[4].xy, const[6].xy__, temp[5]; 24: MOV temp[5], const[7].yy__; 25: MUL temp[5].xy, const[6].xy__, temp[5]; 26: FRC temp[5].xy, temp[5].xy__; 27: MUL temp[6].xy, const[0].xy__, input[2].xx__; 28: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 29: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 30: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 31: ADD temp[0].xy, temp[0].xy__, const[8].x0__; 32: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 33: RCP temp[6].x, temp[2].w___; 34: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 35: MAD temp[0].xy, temp[0].xy__, none.1-1__, temp[1].xy__; 36: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 38: FRC temp[6].xy, temp[1].xy__; 39: ADD temp[1].xy, temp[1].xy__, -temp[6].xy__; 40: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 41: MOV temp[5].w, none.___1; 42: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 43: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 44: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 45: RCP temp[1].x, temp[4].x___; 46: RCP temp[1].y, temp[4]._y__; 47: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 48: MOV temp[5].z, input[5].__x_; 49: MOV output[1].xy, input[0].xy__; 50: MOV output[3].xy, temp[3].xy__; 51: MOV output[2].xyz, input[1].xyz_; 52: MOV output[0], temp[5]; 53: MOV output[4], temp[5]; CONST[7] = { 4.0000 0.5000 1.0000 -4.0000 } CONST[8] = { -2.0000 -0.0000 1.0000 -1.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0].y, input[7]._y__; 1: ADD temp[0].x, input[7].x___, const[7].x___; 2: MUL temp[1].x, input[6].x___, const[7].y___; 3: FRC temp[2].x, temp[1].x___; 4: ADD temp[1].x, temp[1].x___, -temp[2].x___; 5: ADD temp[2].x, input[6].x___, none.1___; 6: MUL temp[2].x, temp[2].x___, const[7].y___; 7: FRC temp[3].x, temp[2].x___; 8: ADD temp[2].x, temp[2].x___, -temp[3].x___; 9: MUL temp[2].x, temp[2].x___, const[7].y___; 10: FRC temp[2].x, temp[2].x___; 11: MAD temp[2].x, temp[2].x___, const[7].w___, none.1___; 12: MOV temp[1].y, temp[2]._x__; 13: MAD temp[2].xy, temp[1].xy__, temp[0].xy__, input[4].xy__; 14: MOV temp[3].y, temp[2]._y__; 15: ADD temp[3].x, temp[2].x___, const[8].x___; 16: MUL temp[2].xyw, const[2].xy_w, input[3].xx_x; 17: MAD temp[2].xyw, const[3].xy_w, input[3].yy_y, temp[2].xy_w; 18: MAD temp[2].xyw, const[4].xy_w, input[3].zz_z, temp[2].xy_w; 19: ADD temp[2].xyw, temp[2].xy_w, const[5].xy_w; 20: RCP temp[4].x, temp[2].w___; 21: MUL temp[2].xyw, temp[2].xy_w, temp[4].xx_x; 22: MOV temp[5], const[7].yy__; 23: MUL temp[4].xy, const[6].xy__, temp[5]; 24: MOV temp[5], const[7].yy__; 25: MUL temp[5].xy, const[6].xy__, temp[5]; 26: FRC temp[5].xy, temp[5].xy__; 27: MUL temp[6].xy, const[0].xy__, input[2].xx__; 28: MAD temp[6].xy, const[1].xy__, input[2].yy__, temp[6].xy__; 29: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 30: MAD temp[0].xy, temp[1].xy__, temp[0].xy__, temp[6].xy__; 31: ADD temp[0].xy, temp[0].xy__, const[8].x0__; 32: MUL temp[1].xy, temp[4].xy__, temp[2].xy__; 33: RCP temp[6].x, temp[2].w___; 34: MUL temp[1].xy, temp[1].xy__, temp[6].xx__; 35: MAD temp[0].xy, temp[0].xy__, none.1-1__, temp[1].xy__; 36: ADD temp[1].xy, temp[0].xy__, const[7].yy__; 37: ADD temp[1].xy, temp[1].xy__, -temp[5].xy__; 38: FRC temp[6].xy, temp[1].xy__; 39: ADD temp[1].xy, temp[1].xy__, -temp[6].xy__; 40: ADD temp[1].xy, temp[1].xy__, temp[5].xy__; 41: MOV temp[5].w, none.___1; 42: ADD temp[0].xy, temp[0].xy__, -temp[1].xy__; 43: ADD temp[0].xy, temp[1].xy__, temp[0].xy__; 44: MUL temp[0].xy, temp[0].xy__, temp[2].ww__; 45: RCP temp[1].x, temp[4].x___; 46: RCP temp[1].y, temp[4]._y__; 47: MUL temp[5].xy, temp[0].xy__, temp[1].xy__; 48: MOV temp[5].z, input[5].__x_; 49: MOV output[1].xy, input[0].xy__; 50: MOV output[3].xy, temp[3].xy__; 51: MOV output[2].xyz, input[1].xyz_; 52: MOV output[0], temp[5]; 53: MOV output[4], temp[5]; Final vertex program code: 0: op: 0x00200003 dst: 0t op: VE_ADD src0: 0x01f9e0e1 reg: 7i swiz: U/ Y/ U/ U src1: 0x012480e1 reg: 7i swiz: 0/ 0/ 0/ 0 src2: 0x012480e1 reg: 7i swiz: 0/ 0/ 0/ 0 1: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x01ff00e1 reg: 7i swiz: X/ U/ U/ U src1: 0x01ff00e2 reg: 7c swiz: X/ U/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 2: op: 0x00102002 dst: 1t op: VE_MULTIPLY src0: 0x01ff00c1 reg: 6i swiz: X/ U/ U/ U src1: 0x01ff20e2 reg: 7c swiz: Y/ U/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 3: op: 0x00104006 dst: 2t op: VE_FRACTION 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: 0x00102003 dst: 1t op: VE_ADD src0: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src1: 0x1fff0040 reg: 2t swiz: -X/-U/-U/-U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 5: op: 0x00104003 dst: 2t op: VE_ADD src0: 0x01ff00c1 reg: 6i swiz: X/ U/ U/ U src1: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 6: op: 0x00104002 dst: 2t op: VE_MULTIPLY src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff20e2 reg: 7c swiz: Y/ U/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 7: op: 0x00106006 dst: 3t op: VE_FRACTION 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 8: op: 0x00104003 dst: 2t op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x1fff0060 reg: 3t swiz: -X/-U/-U/-U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 9: op: 0x00104002 dst: 2t op: VE_MULTIPLY src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff20e2 reg: 7c swiz: Y/ U/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 10: op: 0x00104006 dst: 2t op: VE_FRACTION 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 11: op: 0x00104004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff60e2 reg: 7c swiz: W/ U/ U/ U src2: 0x01ffa040 reg: 2t swiz: 1/ U/ U/ U 12: op: 0x00202003 dst: 1t op: VE_ADD src0: 0x01f8e040 reg: 2t swiz: U/ X/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 13: op: 0x00304004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01f90081 reg: 4i swiz: X/ Y/ U/ U 14: op: 0x00206003 dst: 3t 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 15: op: 0x00106003 dst: 3t op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff0102 reg: 8c swiz: X/ U/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 16: op: 0x00b04002 dst: 2t op: VE_MULTIPLY src0: 0x00f90042 reg: 2c swiz: X/ Y/ U/ W src1: 0x00380061 reg: 3i swiz: X/ X/ U/ X src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 17: op: 0x00b04004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x00f90062 reg: 3c swiz: X/ Y/ U/ W src1: 0x00792061 reg: 3i swiz: Y/ Y/ U/ Y src2: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W 18: op: 0x00b04004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x00f90082 reg: 4c swiz: X/ Y/ U/ W src1: 0x00ba4061 reg: 3i swiz: Z/ Z/ U/ Z src2: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W 19: op: 0x00b04003 dst: 2t op: VE_ADD src0: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W src1: 0x00f900a2 reg: 5c swiz: X/ Y/ U/ W src2: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 20: op: 0x00108046 dst: 4t op: ME_RECIP_DX src0: 0x00db6040 reg: 2t swiz: W/ W/ W/ W src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 21: op: 0x00b04002 dst: 2t op: VE_MULTIPLY src0: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W src1: 0x00380080 reg: 4t swiz: X/ X/ U/ X src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 22: op: 0x00f0a003 dst: 5t op: VE_ADD src0: 0x01f920e2 reg: 7c swiz: Y/ Y/ U/ U src1: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 23: op: 0x00308002 dst: 4t op: VE_MULTIPLY src0: 0x01f900c2 reg: 6c swiz: X/ Y/ U/ U src1: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 24: op: 0x00f0a003 dst: 5t op: VE_ADD src0: 0x01f920e2 reg: 7c swiz: Y/ Y/ U/ U src1: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 25: op: 0x0030a002 dst: 5t op: VE_MULTIPLY src0: 0x01f900c2 reg: 6c swiz: X/ Y/ U/ U src1: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 26: op: 0x0030a006 dst: 5t op: VE_FRACTION src0: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 27: op: 0x0030c002 dst: 6t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80041 reg: 2i swiz: X/ X/ U/ U src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 28: op: 0x0030c004 dst: 6t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92041 reg: 2i swiz: Y/ Y/ U/ U src2: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U 29: op: 0x0030c003 dst: 6t op: VE_ADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 30: op: 0x00300080 dst: 0t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U 31: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01fc0102 reg: 8c swiz: X/ 0/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 32: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90080 reg: 4t swiz: X/ Y/ U/ U src1: 0x01f90040 reg: 2t swiz: X/ Y/ U/ U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 33: op: 0x0010c046 dst: 6t op: ME_RECIP_DX src0: 0x00db6040 reg: 2t swiz: W/ W/ W/ W src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 34: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f800c0 reg: 6t swiz: X/ X/ U/ U src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 35: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x05fda000 reg: 0t swiz: 1/-1/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 36: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f920e2 reg: 7c swiz: Y/ Y/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 37: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x1ff900a0 reg: 5t swiz: -X/-Y/-U/-U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 38: op: 0x0030c006 dst: 6t op: VE_FRACTION src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 39: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x1ff900c0 reg: 6t swiz: -X/-Y/-U/-U src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 40: op: 0x00302003 dst: 1t op: VE_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 41: op: 0x0080a003 dst: 5t op: VE_ADD src0: 0x017fe000 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 42: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x1ff90020 reg: 1t swiz: -X/-Y/-U/-U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 43: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 44: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01fb6040 reg: 2t swiz: W/ W/ U/ U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 45: op: 0x00102046 dst: 1t op: ME_RECIP_DX src0: 0x00000080 reg: 4t swiz: X/ X/ X/ X src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 46: op: 0x00202046 dst: 1t op: ME_RECIP_DX src0: 0x00492080 reg: 4t swiz: Y/ Y/ Y/ Y src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 47: op: 0x0030a002 dst: 5t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 48: op: 0x0040a003 dst: 5t op: VE_ADD src0: 0x01c7e0a1 reg: 5i swiz: U/ U/ X/ U src1: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 src2: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 49: op: 0x00302203 dst: 1o 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 50: op: 0x00306203 dst: 3o op: VE_ADD src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 51: op: 0x00704203 dst: 2o op: VE_ADD src0: 0x01d10021 reg: 1i swiz: X/ Y/ Z/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 52: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 53: op: 0x00f08203 dst: 4o op: VE_ADD src0: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[12], PERSPECTIVE DCL IN[1], GENERIC[13], PERSPECTIVE DCL IN[2], GENERIC[14], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[0] DCL CONST[4..6] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL IMM FLT32 { 0.5000, 255.0000, 16.0000, 0.0625} IMM FLT32 {-1023.0000, 1.0323, 0.0312, 0.0000} IMM FLT32 { 1.0000, 0.6000, 26.0000, 0.0000} 0: ADD TEMP[0].x, IN[1].zzzz, IMM[0].xxxx 1: RCP TEMP[1].x, CONST[5].xxxx 2: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[1].xxxx 3: FRC TEMP[1].x, TEMP[0].xxxx 4: FLR TEMP[0].x, TEMP[0].xxxx 5: ADD TEMP[0].x, TEMP[0].xxxx, IMM[0].xxxx 6: RCP TEMP[2].x, CONST[5].yyyy 7: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[2].xxxx 8: MOV TEMP[1].y, TEMP[0].xxxx 9: TEX TEMP[0], TEMP[1].xyyy, SAMP[1], 2D 10: MAD TEMP[0], IMM[0].yyyy, TEMP[0], IMM[0].xxxx 11: FLR TEMP[0], TEMP[0] 12: MUL TEMP[1].x, TEMP[0].wwww, IMM[0].wwww 13: FLR TEMP[1].x, TEMP[1].xxxx 14: MAD TEMP[1].x, TEMP[0].yyyy, IMM[0].zzzz, TEMP[1].xxxx 15: MAD TEMP[1].x, TEMP[1].xxxx, IMM[0].xxxx, IMM[1].xxxx 16: MUL TEMP[2].x, TEMP[0].wwww, IMM[0].wwww 17: FRC TEMP[2].x, TEMP[2].xxxx 18: MUL TEMP[3].x, TEMP[0].zzzz, IMM[0].zzzz 19: MAD TEMP[2].x, IMM[0].zzzz, TEMP[2].xxxx, TEMP[3].xxxx 20: MAD TEMP[2].x, TEMP[2].xxxx, IMM[0].xxxx, IMM[1].xxxx 21: MOV TEMP[1].y, TEMP[2].xxxx 22: MUL TEMP[0].x, TEMP[0].xxxx, IMM[1].zzzz 23: FRC TEMP[0].x, TEMP[0].xxxx 24: MUL TEMP[0].x, IMM[1].yyyy, TEMP[0].xxxx 25: ADD TEMP[1].xy, IN[0].xyyy, -TEMP[1].xyyy 26: SEQ TEMP[2].x, TEMP[0].xxxx, IMM[1].wwww 27: DP2 TEMP[3].x, TEMP[1].xyyy, TEMP[1].xyyy 28: SGE TEMP[3].x, TEMP[3].xxxx, IMM[2].yyyy 29: ADD TEMP[2].x, -TEMP[2].xxxx, IMM[2].xxxx 30: CMP TEMP[1].x, -TEMP[2].xxxx, TEMP[3].xxxx, IMM[2].xxxx 31: CMP TEMP[1].x, -TEMP[1].xxxx, IMM[2].xxxx, IMM[1].wwww 32: KIL -TEMP[1].xxxx 33: RCP TEMP[1].x, CONST[4].xxxx 34: RCP TEMP[1].y, CONST[4].yyyy 35: MUL TEMP[1].xy, IN[2].xyyy, TEMP[1].xyyy 36: TEX TEMP[1].w, TEMP[1].xyyy, SAMP[0], 2D 37: SEQ TEMP[3].x, TEMP[1].wwww, IMM[1].wwww 38: CMP TEMP[2].x, -TEMP[3].xxxx, IMM[2].xxxx, IMM[1].wwww 39: KIL -TEMP[2].xxxx 40: ADD TEMP[2].x, IN[1].yyyy, IMM[0].xxxx 41: RCP TEMP[3].x, CONST[6].xxxx 42: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 43: FRC TEMP[3].x, TEMP[2].xxxx 44: FLR TEMP[2].x, TEMP[2].xxxx 45: MAD TEMP[2].x, IMM[2].zzzz, TEMP[2].xxxx, CONST[0].xxxx 46: ADD TEMP[2].x, TEMP[2].xxxx, IMM[0].xxxx 47: RCP TEMP[4].x, CONST[6].yyyy 48: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[4].xxxx 49: MOV TEMP[3].y, TEMP[2].xxxx 50: TEX TEMP[2], TEMP[3].xyyy, SAMP[2], 2D 51: MOV TEMP[3].xyz, TEMP[2].xyzx 52: MUL TEMP[0].x, TEMP[2].wwww, TEMP[0].xxxx 53: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[1].wwww 54: MOV TEMP[3].w, TEMP[0].xxxx 55: MOV OUT[0], TEMP[3] 56: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: TEX temp[1].w, temp[1].xyyy, 2D[0]; 37: SEQ temp[3].x, temp[1].wwww, const[8].wwww; 38: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 39: KIL -temp[2].xxxx; 40: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 41: RCP temp[3].x, const[6].xxxx; 42: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 43: FRC temp[3].x, temp[2].xxxx; 44: FLR temp[2].x, temp[2].xxxx; 45: MAD temp[2].x, const[9].zzzz, temp[2].xxxx, const[0].xxxx; 46: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 47: RCP temp[4].x, const[6].yyyy; 48: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 49: MOV temp[3].y, temp[2].xxxx; 50: TEX temp[2], temp[3].xyyy, 2D[2]; 51: MOV temp[3].xyz, temp[2].xyzx; 52: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[1].wwww; 54: MOV temp[3].w, temp[0].xxxx; 55: MOV output[0], temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: TEX temp[1].w, temp[1].xyyy, 2D[0]; 37: SEQ temp[3].x, temp[1].wwww, const[8].wwww; 38: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 39: KIL -temp[2].xxxx; 40: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 41: RCP temp[3].x, const[6].xxxx; 42: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 43: FRC temp[3].x, temp[2].xxxx; 44: FLR temp[2].x, temp[2].xxxx; 45: MAD temp[2].x, const[9].zzzz, temp[2].xxxx, const[0].xxxx; 46: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 47: RCP temp[4].x, const[6].yyyy; 48: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 49: MOV temp[3].y, temp[2].xxxx; 50: TEX temp[2], temp[3].xyyy, 2D[2]; 51: MOV temp[3].xyz, temp[2].xyzx; 52: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[1].wwww; 54: MOV temp[3].w, temp[0].xxxx; 55: MOV output[0], temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: TEX temp[1].w, temp[1].xyyy, 2D[0]; 37: SEQ temp[3].x, temp[1].wwww, const[8].wwww; 38: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 39: KIL -temp[2].xxxx; 40: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 41: RCP temp[3].x, const[6].xxxx; 42: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 43: FRC temp[3].x, temp[2].xxxx; 44: FLR temp[2].x, temp[2].xxxx; 45: MAD temp[2].x, const[9].zzzz, temp[2].xxxx, const[0].xxxx; 46: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 47: RCP temp[4].x, const[6].yyyy; 48: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 49: MOV temp[3].y, temp[2].xxxx; 50: TEX temp[2], temp[3].xyyy, 2D[2]; 51: MOV temp[3].xyz, temp[2].xyzx; 52: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[1].wwww; 54: MOV temp[3].w, temp[0].xxxx; 55: MOV output[0], temp[3]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: TEX temp[1].w, temp[1].xyyy, 2D[0]; 37: SEQ temp[3].x, temp[1].wwww, const[8].wwww; 38: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 39: KIL -temp[2].xxxx; 40: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 41: RCP temp[3].x, const[6].xxxx; 42: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 43: FRC temp[3].x, temp[2].xxxx; 44: FLR temp[2].x, temp[2].xxxx; 45: MAD temp[2].x, const[9].zzzz, temp[2].xxxx, const[0].xxxx; 46: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 47: RCP temp[4].x, const[6].yyyy; 48: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 49: MOV temp[3].y, temp[2].xxxx; 50: TEX temp[2], temp[3].xyyy, 2D[2]; 51: MOV temp[3].xyz, temp[2].xyzx; 52: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[1].wwww; 54: MOV temp[3].w, temp[0].xxxx; 55: MOV output[0], temp[3]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: TEX temp[1].w, temp[1].xyyy, 2D[0]; 37: SEQ temp[3].x, temp[1].wwww, const[8].wwww; 38: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 39: KIL -temp[2].xxxx; 40: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 41: RCP temp[3].x, const[6].xxxx; 42: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 43: FRC temp[3].x, temp[2].xxxx; 44: FLR temp[2].x, temp[2].xxxx; 45: MAD temp[2].x, const[9].zzzz, temp[2].xxxx, const[0].xxxx; 46: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 47: RCP temp[4].x, const[6].yyyy; 48: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 49: MOV temp[3].y, temp[2].xxxx; 50: TEX temp[2], temp[3].xyyy, 2D[2]; 51: MOV temp[3].xyz, temp[2].xyzx; 52: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[1].wwww; 54: MOV temp[3].w, temp[0].xxxx; 55: MOV output[0], temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0], temp[1].xyyy, 2D[1]; 10: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 11: FLR temp[0], temp[0]; 12: MUL temp[1].x, temp[0].wwww, const[7].wwww; 13: FLR temp[1].x, temp[1].xxxx; 14: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 15: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 16: MUL temp[2].x, temp[0].wwww, const[7].wwww; 17: FRC temp[2].x, temp[2].xxxx; 18: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 19: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 20: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 21: MOV temp[1].y, temp[2].xxxx; 22: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 23: FRC temp[0].x, temp[0].xxxx; 24: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 25: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 26: SEQ temp[2].x, temp[0].xxxx, const[8].wwww; 27: DP2 temp[3].x, temp[1].xyyy, temp[1].xyyy; 28: SGE temp[3].x, temp[3].xxxx, const[9].yyyy; 29: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 30: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 31: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 32: KIL -temp[1].xxxx; 33: RCP temp[1].x, const[4].xxxx; 34: RCP temp[1].y, const[4].yyyy; 35: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 36: TEX temp[5], temp[1].xyyy, 2D[0]; 37: MOV temp[1].w, temp[5]; 38: SEQ temp[3].x, temp[1].wwww, const[8].wwww; 39: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 40: KIL -temp[2].xxxx; 41: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 42: RCP temp[3].x, const[6].xxxx; 43: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 44: FRC temp[3].x, temp[2].xxxx; 45: FLR temp[2].x, temp[2].xxxx; 46: MAD temp[2].x, const[9].zzzz, temp[2].xxxx, const[0].xxxx; 47: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 48: RCP temp[4].x, const[6].yyyy; 49: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 50: MOV temp[3].y, temp[2].xxxx; 51: TEX temp[2], temp[3].xyyy, 2D[2]; 52: MOV temp[3].xyz, temp[2].xyzx; 53: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 54: MUL temp[0].x, temp[0].xxxx, temp[1].wwww; 55: MOV temp[3].w, temp[0].xxxx; 56: MOV output[0], temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].x, input[1].zzzz, const[7].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FRC temp[6].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, -temp[6]; 6: ADD temp[0].x, temp[0].xxxx, const[7].xxxx; 7: RCP temp[2].x, const[5].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: TEX temp[0], temp[1].xyyy, 2D[1]; 11: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 12: FRC temp[7], temp[0]; 13: ADD temp[0], temp[0], -temp[7]; 14: MUL temp[1].x, temp[0].wwww, const[7].wwww; 15: FRC temp[8].x, temp[1].xxxx; 16: ADD temp[1].x, temp[1].xxxx, -temp[8]; 17: MAD temp[1].x, temp[0].yyyy, const[7].zzzz, temp[1].xxxx; 18: MAD temp[1].x, temp[1].xxxx, const[7].xxxx, const[8].xxxx; 19: MUL temp[2].x, temp[0].wwww, const[7].wwww; 20: FRC temp[2].x, temp[2].xxxx; 21: MUL temp[3].x, temp[0].zzzz, const[7].zzzz; 22: MAD temp[2].x, const[7].zzzz, temp[2].xxxx, temp[3].xxxx; 23: MAD temp[2].x, temp[2].xxxx, const[7].xxxx, const[8].xxxx; 24: MOV temp[1].y, temp[2].xxxx; 25: MUL temp[0].x, temp[0].xxxx, const[8].zzzz; 26: FRC temp[0].x, temp[0].xxxx; 27: MUL temp[0].x, const[8].yyyy, temp[0].xxxx; 28: ADD temp[1].xy, input[0].xyyy, -temp[1].xyyy; 29: ADD temp[2].x, temp[0].xxxx, -const[8].wwww; 30: CMP temp[2].x, -|temp[2]|, none.0000, none.1111; 31: DP3 temp[3].x, temp[1].xy00, temp[1].xy00; 32: ADD temp[9].x, temp[3].xxxx, -const[9].yyyy; 33: CMP temp[3].x, temp[9], none.0000, none.1111; 34: ADD temp[2].x, -temp[2].xxxx, const[9].xxxx; 35: CMP temp[1].x, -temp[2].xxxx, temp[3].xxxx, const[9].xxxx; 36: CMP temp[1].x, -temp[1].xxxx, const[9].xxxx, const[8].wwww; 37: KIL -temp[1].xxxx; 38: RCP temp[1].x, const[4].xxxx; 39: RCP temp[1].y, const[4].yyyy; 40: MUL temp[1].xy, input[2].xyyy, temp[1].xyyy; 41: TEX temp[5], temp[1].xyyy, 2D[0]; 42: MOV temp[1].w, temp[5]; 43: ADD temp[3].x, temp[1].wwww, -const[8].wwww; 44: CMP temp[3].x, -|temp[3]|, none.0000, none.1111; 45: CMP temp[2].x, -temp[3].xxxx, const[9].xxxx, const[8].wwww; 46: KIL -temp[2].xxxx; 47: ADD temp[2].x, input[1].yyyy, const[7].xxxx; 48: RCP temp[3].x, const[6].xxxx; 49: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 50: FRC temp[3].x, temp[2].xxxx; 51: FRC temp[10].x, temp[2].xxxx; 52: ADD temp[2].x, temp[2].xxxx, -temp[10]; 53: MAD temp[2].x, const[9].zzzz, temp[2].xxxx, const[0].xxxx; 54: ADD temp[2].x, temp[2].xxxx, const[7].xxxx; 55: RCP temp[4].x, const[6].yyyy; 56: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 57: MOV temp[3].y, temp[2].xxxx; 58: TEX temp[2], temp[3].xyyy, 2D[2]; 59: MOV temp[3].xyz, temp[2].xyzx; 60: MUL temp[0].x, temp[2].wwww, temp[0].xxxx; 61: MUL temp[0].x, temp[0].xxxx, temp[1].wwww; 62: MOV temp[3].w, temp[0].xxxx; 63: MOV output[0], temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].x, input[1].z___, const[7].x___; 1: RCP temp[1].x, const[5].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[6].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[6].x___; 6: ADD temp[0].x, temp[0].x___, const[7].x___; 7: RCP temp[2].x, const[5].y___; 8: MUL temp[0].x, temp[0].x___, temp[2].x___; 9: MOV temp[1].y, temp[0]._x__; 10: TEX temp[0], temp[1].xy__, 2D[1]; 11: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 12: FRC temp[7], temp[0]; 13: ADD temp[0], temp[0], -temp[7]; 14: MUL temp[1].x, temp[0].w___, const[7].w___; 15: FRC temp[8].x, temp[1].x___; 16: ADD temp[1].x, temp[1].x___, -temp[8].x___; 17: MAD temp[1].x, temp[0].y___, const[7].z___, temp[1].x___; 18: MAD temp[1].x, temp[1].x___, const[7].x___, const[8].x___; 19: MUL temp[2].x, temp[0].w___, const[7].w___; 20: FRC temp[2].x, temp[2].x___; 21: MUL temp[3].x, temp[0].z___, const[7].z___; 22: MAD temp[2].x, const[7].z___, temp[2].x___, temp[3].x___; 23: MAD temp[2].x, temp[2].x___, const[7].x___, const[8].x___; 24: MOV temp[1].y, temp[2]._x__; 25: MUL temp[0].x, temp[0].x___, const[8].z___; 26: FRC temp[0].x, temp[0].x___; 27: MUL temp[0].x, const[8].y___, temp[0].x___; 28: ADD temp[1].xy, input[0].xy__, -temp[1].xy__; 29: ADD temp[2].x, temp[0].x___, -const[8].w___; 30: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 31: DP3 temp[3].x, temp[1].xy0_, temp[1].xy0_; 32: ADD temp[9].x, temp[3].x___, -const[9].y___; 33: CMP temp[3].x, temp[9].x___, none.0___, none.1___; 34: ADD temp[2].x, -temp[2].x___, const[9].x___; 35: CMP temp[1].x, -temp[2].x___, temp[3].x___, const[9].x___; 36: CMP temp[1].x, -temp[1].x___, const[9].x___, const[8].w___; 37: KIL -temp[1].xxxx; 38: RCP temp[1].x, const[4].x___; 39: RCP temp[1].y, const[4]._y__; 40: MUL temp[1].xy, input[2].xy__, temp[1].xy__; 41: TEX temp[5].w, temp[1].xy__, 2D[0]; 42: MOV temp[1].w, temp[5].___w; 43: ADD temp[3].x, temp[1].w___, -const[8].w___; 44: CMP temp[3].x, -|temp[3].x___|, none.0___, none.1___; 45: CMP temp[2].x, -temp[3].x___, const[9].x___, const[8].w___; 46: KIL -temp[2].xxxx; 47: ADD temp[2].x, input[1].y___, const[7].x___; 48: RCP temp[3].x, const[6].x___; 49: MUL temp[2].x, temp[2].x___, temp[3].x___; 50: FRC temp[3].x, temp[2].x___; 51: FRC temp[10].x, temp[2].x___; 52: ADD temp[2].x, temp[2].x___, -temp[10].x___; 53: MAD temp[2].x, const[9].z___, temp[2].x___, const[0].x___; 54: ADD temp[2].x, temp[2].x___, const[7].x___; 55: RCP temp[4].x, const[6].y___; 56: MUL temp[2].x, temp[2].x___, temp[4].x___; 57: MOV temp[3].y, temp[2]._x__; 58: TEX temp[2], temp[3].xy__, 2D[2]; 59: MOV temp[3].xyz, temp[2].xyz_; 60: MUL temp[0].x, temp[2].w___, temp[0].x___; 61: MUL temp[0].x, temp[0].x___, temp[1].w___; 62: MOV temp[3].w, temp[0].___x; 63: MOV output[0], temp[3]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].x, input[1].z___, const[7].x___; 1: RCP temp[1].x, const[5].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[6].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[6].x___; 6: ADD temp[0].x, temp[0].x___, const[7].x___; 7: RCP temp[2].x, const[5].y___; 8: MUL temp[0].x, temp[0].x___, temp[2].x___; 9: MOV temp[1].y, temp[0]._x__; 10: TEX temp[0], temp[1].xy__, 2D[1]; 11: MAD temp[0], const[7].yyyy, temp[0], const[7].xxxx; 12: FRC temp[7], temp[0]; 13: ADD temp[0], temp[0], -temp[7]; 14: MUL temp[1].x, temp[0].w___, const[7].w___; 15: FRC temp[8].x, temp[1].x___; 16: ADD temp[1].x, temp[1].x___, -temp[8].x___; 17: MAD temp[1].x, temp[0].y___, const[7].z___, temp[1].x___; 18: MAD temp[1].x, temp[1].x___, const[7].x___, const[8].x___; 19: MUL temp[2].x, temp[0].w___, const[7].w___; 20: FRC temp[2].x, temp[2].x___; 21: MUL temp[3].x, temp[0].z___, const[7].z___; 22: MAD temp[2].x, const[7].z___, temp[2].x___, temp[3].x___; 23: MAD temp[2].x, temp[2].x___, const[7].x___, const[8].x___; 24: MOV temp[1].y, temp[2]._x__; 25: MUL temp[0].x, temp[0].x___, const[8].z___; 26: FRC temp[0].x, temp[0].x___; 27: MUL temp[0].x, const[8].y___, temp[0].x___; 28: ADD temp[1].xy, input[0].xy__, -temp[1].xy__; 29: ADD temp[2].x, temp[0].x___, -const[8].w___; 30: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 31: DP3 temp[3].x, temp[1].xy0_, temp[1].xy0_; 32: ADD temp[9].x, temp[3].x___, -const[9].y___; 33: CMP temp[3].x, temp[9].x___, none.0___, none.1___; 34: ADD temp[2].x, -temp[2].x___, const[9].x___; 35: CMP temp[1].x, -temp[2].x___, temp[3].x___, const[9].x___; 36: CMP temp[1].x, -temp[1].x___, const[9].x___, const[8].w___; 37: KIL -temp[1].xxxx; 38: RCP temp[1].x, const[4].x___; 39: RCP temp[1].y, const[4]._y__; 40: MUL temp[1].xy, input[2].xy__, temp[1].xy__; 41: TEX temp[5].w, temp[1].xy__, 2D[0]; 42: MOV temp[1].w, temp[5].___w; 43: ADD temp[3].x, temp[1].w___, -const[8].w___; 44: CMP temp[3].x, -|temp[3].x___|, none.0___, none.1___; 45: CMP temp[2].x, -temp[3].x___, const[9].x___, const[8].w___; 46: KIL -temp[2].xxxx; 47: ADD temp[2].x, input[1].y___, const[7].x___; 48: RCP temp[3].x, const[6].x___; 49: MUL temp[2].x, temp[2].x___, temp[3].x___; 50: FRC temp[3].x, temp[2].x___; 51: FRC temp[10].x, temp[2].x___; 52: ADD temp[2].x, temp[2].x___, -temp[10].x___; 53: MAD temp[2].x, const[9].z___, temp[2].x___, const[0].x___; 54: ADD temp[2].x, temp[2].x___, const[7].x___; 55: RCP temp[4].x, const[6].y___; 56: MUL temp[2].x, temp[2].x___, temp[4].x___; 57: MOV temp[3].y, temp[2]._x__; 58: TEX temp[2], temp[3].xy__, 2D[2]; 59: MOV temp[3].xyz, temp[2].xyz_; 60: MUL temp[0].x, temp[2].w___, temp[0].x___; 61: MUL temp[0].x, temp[0].x___, temp[1].w___; 62: MOV temp[3].w, temp[0].___x; 63: MOV output[0], temp[3]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[11].x, input[1].z___, const[7].x___; 1: RCP temp[12].x, const[5].x___; 2: MUL temp[13].x, temp[11].x___, temp[12].x___; 3: FRC temp[14].x, temp[13].x___; 4: FRC temp[15].x, temp[13].x___; 5: ADD temp[16].x, temp[13].x___, -temp[15].x___; 6: ADD temp[17].x, temp[16].x___, const[7].x___; 7: RCP temp[18].x, const[5].y___; 8: MUL temp[19].x, temp[17].x___, temp[18].x___; 9: MOV temp[14].y, temp[19]._x__; 10: TEX temp[20], temp[14].xy__, 2D[1]; 11: MAD temp[21], const[7].yyyy, temp[20], const[7].xxxx; 12: FRC temp[22], temp[21]; 13: ADD temp[23], temp[21], -temp[22]; 14: MUL temp[24].x, temp[23].w___, const[7].w___; 15: FRC temp[25].x, temp[24].x___; 16: ADD temp[26].x, temp[24].x___, -temp[25].x___; 17: MAD temp[27].x, temp[23].y___, const[7].z___, temp[26].x___; 18: MAD temp[28].x, temp[27].x___, const[7].x___, const[8].x___; 19: MUL temp[29].x, temp[23].w___, const[7].w___; 20: FRC temp[30].x, temp[29].x___; 21: MUL temp[31].x, temp[23].z___, const[7].z___; 22: MAD temp[32].x, const[7].z___, temp[30].x___, temp[31].x___; 23: MAD temp[33].x, temp[32].x___, const[7].x___, const[8].x___; 24: MOV temp[28].y, temp[33]._x__; 25: MUL temp[34].x, temp[23].x___, const[8].z___; 26: FRC temp[35].x, temp[34].x___; 27: MUL temp[36].x, const[8].y___, temp[35].x___; 28: ADD temp[37].xy, input[0].xy__, -temp[28].xy__; 29: ADD temp[38].x, temp[36].x___, -const[8].w___; 30: CMP temp[39].x, -|temp[38].x___|, none.0___, none.1___; 31: DP3 temp[40].x, temp[37].xy0_, temp[37].xy0_; 32: ADD temp[41].x, temp[40].x___, -const[9].y___; 33: CMP temp[42].x, temp[41].x___, none.0___, none.1___; 34: ADD temp[43].x, -temp[39].x___, const[9].x___; 35: CMP temp[44].x, -temp[43].x___, temp[42].x___, const[9].x___; 36: CMP temp[45].x, -temp[44].x___, const[9].x___, const[8].w___; 37: KIL -temp[45].xxxx; 38: RCP temp[46].x, const[4].x___; 39: RCP temp[46].y, const[4]._y__; 40: MUL temp[47].xy, input[2].xy__, temp[46].xy__; 41: TEX temp[48].w, temp[47].xy__, 2D[0]; 42: MOV temp[49].w, temp[48].___w; 43: ADD temp[50].x, temp[49].w___, -const[8].w___; 44: CMP temp[51].x, -|temp[50].x___|, none.0___, none.1___; 45: CMP temp[52].x, -temp[51].x___, const[9].x___, const[8].w___; 46: KIL -temp[52].xxxx; 47: ADD temp[53].x, input[1].y___, const[7].x___; 48: RCP temp[54].x, const[6].x___; 49: MUL temp[55].x, temp[53].x___, temp[54].x___; 50: FRC temp[56].x, temp[55].x___; 51: FRC temp[57].x, temp[55].x___; 52: ADD temp[58].x, temp[55].x___, -temp[57].x___; 53: MAD temp[59].x, const[9].z___, temp[58].x___, const[0].x___; 54: ADD temp[60].x, temp[59].x___, const[7].x___; 55: RCP temp[61].x, const[6].y___; 56: MUL temp[62].x, temp[60].x___, temp[61].x___; 57: MOV temp[56].y, temp[62]._x__; 58: TEX temp[63], temp[56].xy__, 2D[2]; 59: MOV temp[64].xyz, temp[63].xyz_; 60: MUL temp[65].x, temp[63].w___, temp[36].x___; 61: MUL temp[66].x, temp[65].x___, temp[49].w___; 62: MOV temp[64].w, temp[66].___x; 63: MOV output[0], temp[64]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[11].x, input[1].z___, none.H___; 1: RCP temp[12].x, const[5].x___; 2: MUL temp[13].x, temp[11].x___, temp[12].x___; 3: FRC temp[14].x, temp[13].x___; 4: FRC temp[15].x, temp[13].x___; 5: ADD temp[17].x, (temp[13] - temp[15]).x___, none.H___; 6: RCP temp[18].x, const[5].y___; 7: MUL temp[19].x, temp[17].x___, temp[18].x___; 8: MOV temp[14].y, temp[19]._x__; 9: TEX temp[20], temp[14].xy__, 2D[1]; 10: MAD temp[21], const[7].yyyy, temp[20], none.HHHH; 11: FRC temp[22], temp[21]; 12: ADD temp[23], temp[21], -temp[22]; 13: MUL temp[24].x, temp[23].w___, const[7].w___; 14: FRC temp[25].x, temp[24].x___; 15: ADD temp[26].x, temp[24].x___, -temp[25].x___; 16: MAD temp[27].x, temp[23].y___, const[7].z___, temp[26].x___; 17: MAD temp[28].x, temp[27].x___, none.H___, const[8].x___; 18: MUL temp[29].x, temp[23].w___, const[7].w___; 19: FRC temp[30].x, temp[29].x___; 20: MUL temp[31].x, temp[23].z___, const[7].z___; 21: MAD temp[32].x, const[7].z___, temp[30].x___, temp[31].x___; 22: MAD temp[33].x, temp[32].x___, none.H___, const[8].x___; 23: MOV temp[28].y, temp[33]._x__; 24: MUL temp[34].x, temp[23].x___, const[8].z___; 25: FRC temp[35].x, temp[34].x___; 26: MUL temp[36].x, const[8].y___, temp[35].x___; 27: CMP temp[39].x, -|temp[36].x___|, none.0___, none.1___; 28: DP3 temp[40].x, (input[0] - temp[28]).xy0_, (input[0] - temp[28]).xy0_; 29: ADD temp[41].x, temp[40].x___, -const[9].y___; 30: CMP temp[42].x, temp[41].x___, none.0___, none.1___; 31: ADD temp[43].x, -temp[39].x___, none.1___; 32: CMP temp[44].x, -temp[43].x___, temp[42].x___, none.1___; 33: CMP temp[45].x, -temp[44].x___, none.1___, none.0___; 34: KIL -temp[45].xxxx; 35: RCP temp[46].x, const[4].x___; 36: RCP temp[46].y, const[4]._y__; 37: MUL temp[47].xy, input[2].xy__, temp[46].xy__; 38: TEX temp[48].w, temp[47].xy__, 2D[0]; 39: CMP temp[51].x, -|temp[48].w___|, none.0___, none.1___; 40: CMP temp[52].x, -temp[51].x___, none.1___, none.0___; 41: KIL -temp[52].xxxx; 42: ADD temp[53].x, input[1].y___, none.H___; 43: RCP temp[54].x, const[6].x___; 44: MUL temp[55].x, temp[53].x___, temp[54].x___; 45: FRC temp[56].x, temp[55].x___; 46: FRC temp[57].x, temp[55].x___; 47: ADD temp[58].x, temp[55].x___, -temp[57].x___; 48: MAD temp[59].x, const[9].z___, temp[58].x___, const[0].x___; 49: ADD temp[60].x, temp[59].x___, none.H___; 50: RCP temp[61].x, const[6].y___; 51: MUL temp[62].x, temp[60].x___, temp[61].x___; 52: MOV temp[56].y, temp[62]._x__; 53: TEX temp[63], temp[56].xy__, 2D[2]; 54: MOV temp[64].xyz, temp[63].xyz_; 55: MUL temp[65].x, temp[63].w___, temp[36].x___; 56: MUL temp[66].x, temp[65].x___, temp[48].w___; 57: MOV temp[64].w, temp[66].___x; 58: MOV output[0], temp[64]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[11].x, input[1].z___, none.H___; 1: RCP temp[12].x, const[5].x___; 2: MUL temp[13].x, temp[11].x___, temp[12].x___; 3: FRC temp[14].x, temp[13].x___; 4: FRC temp[15].x, temp[13].x___; 5: ADD temp[17].x, (temp[13] - temp[15]).x___, none.H___; 6: RCP temp[18].x, const[5].y___; 7: MUL temp[19].x, temp[17].x___, temp[18].x___; 8: MOV temp[14].y, temp[19]._x__; 9: TEX temp[20], temp[14].xy__, 2D[1]; 10: MAD temp[21], const[7].yyyy, temp[20], none.HHHH; 11: FRC temp[22], temp[21]; 12: ADD temp[23], temp[21], -temp[22]; 13: MUL temp[24].x, temp[23].w___, const[7].w___; 14: FRC temp[25].x, temp[24].x___; 15: ADD temp[26].x, temp[24].x___, -temp[25].x___; 16: MAD temp[27].x, temp[23].y___, const[7].z___, temp[26].x___; 17: MAD temp[28].x, temp[27].x___, none.H___, const[8].x___; 18: MUL temp[29].x, temp[23].w___, const[7].w___; 19: FRC temp[30].x, temp[29].x___; 20: MUL temp[31].x, temp[23].z___, const[7].z___; 21: MAD temp[32].x, const[7].z___, temp[30].x___, temp[31].x___; 22: MAD temp[33].x, temp[32].x___, none.H___, const[8].x___; 23: MOV temp[28].y, temp[33]._x__; 24: MUL temp[34].x, temp[23].x___, const[8].z___; 25: FRC temp[35].x, temp[34].x___; 26: MUL temp[36].x, const[8].y___, temp[35].x___; 27: CMP temp[39].x, -|temp[36].x___|, none.0___, none.1___; 28: MOV temp[0].xy, (input[0] - temp[28]).xy__; 29: MOV temp[0].z, (input[0] - temp[28]).__0_; 30: MOV temp[1].xy, (input[0] - temp[28]).xy__; 31: MOV temp[1].z, (input[0] - temp[28]).__0_; 32: DP3 temp[40].x, temp[0].xyz_, temp[1].xyz_; 33: ADD temp[41].x, temp[40].x___, -const[9].y___; 34: CMP temp[42].x, temp[41].x___, none.0___, none.1___; 35: ADD temp[43].x, -temp[39].x___, none.1___; 36: CMP temp[44].x, -temp[43].x___, temp[42].x___, none.1___; 37: CMP temp[45].x, -temp[44].x___, none.1___, none.0___; 38: MOV temp[2], -temp[45].xxxx; 39: KIL temp[2]; 40: RCP temp[46].x, const[4].x___; 41: RCP temp[46].y, const[4]._y__; 42: MUL temp[47].xy, input[2].xy__, temp[46].xy__; 43: TEX temp[48].w, temp[47].xy__, 2D[0]; 44: CMP temp[51].x, -|temp[48].w___|, none.0___, none.1___; 45: CMP temp[52].x, -temp[51].x___, none.1___, none.0___; 46: MOV temp[3], -temp[52].xxxx; 47: KIL temp[3]; 48: ADD temp[53].x, input[1].y___, none.H___; 49: RCP temp[54].x, const[6].x___; 50: MUL temp[55].x, temp[53].x___, temp[54].x___; 51: FRC temp[56].x, temp[55].x___; 52: FRC temp[57].x, temp[55].x___; 53: ADD temp[58].x, temp[55].x___, -temp[57].x___; 54: MAD temp[59].x, const[9].z___, temp[58].x___, const[0].x___; 55: ADD temp[60].x, temp[59].x___, none.H___; 56: RCP temp[61].x, const[6].y___; 57: MUL temp[62].x, temp[60].x___, temp[61].x___; 58: MOV temp[56].y, temp[62]._x__; 59: TEX temp[63], temp[56].xy__, 2D[2]; 60: MOV temp[64].xyz, temp[63].xyz_; 61: MUL temp[65].x, temp[63].w___, temp[36].x___; 62: MUL temp[66].x, temp[65].x___, temp[48].w___; 63: MOV temp[64].w, temp[66].___x; 64: MOV output[0], temp[64]; CONST[4] = { 0.5000 255.0000 16.0000 0.0625 } CONST[5] = { -1023.0000 1.0323 0.0312 0.0000 } CONST[6] = { 1.0000 0.6000 26.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[11].x, input[1].z___, none.H___; 1: RCP temp[12].x, const[2].x___; 2: MUL temp[13].x, temp[11].x___, temp[12].x___; 3: FRC temp[14].x, temp[13].x___; 4: FRC temp[15].x, temp[13].x___; 5: ADD temp[17].x, (temp[13] - temp[15]).x___, none.H___; 6: RCP temp[18].x, const[2].y___; 7: MUL temp[19].x, temp[17].x___, temp[18].x___; 8: MOV temp[14].y, temp[19]._x__; 9: TEX temp[20], temp[14].xy__, 2D[1]; 10: MAD temp[21], const[4].yyyy, temp[20], none.HHHH; 11: FRC temp[22], temp[21]; 12: ADD temp[23], temp[21], -temp[22]; 13: MUL temp[24].x, temp[23].w___, const[4].w___; 14: FRC temp[25].x, temp[24].x___; 15: ADD temp[26].x, temp[24].x___, -temp[25].x___; 16: MAD temp[27].x, temp[23].y___, const[4].z___, temp[26].x___; 17: MAD temp[28].x, temp[27].x___, none.H___, const[5].x___; 18: MUL temp[29].x, temp[23].w___, const[4].w___; 19: FRC temp[30].x, temp[29].x___; 20: MUL temp[31].x, temp[23].z___, const[4].z___; 21: MAD temp[32].x, const[4].z___, temp[30].x___, temp[31].x___; 22: MAD temp[33].x, temp[32].x___, none.H___, const[5].x___; 23: MOV temp[28].y, temp[33]._x__; 24: MUL temp[34].x, temp[23].x___, const[5].z___; 25: FRC temp[35].x, temp[34].x___; 26: MUL temp[36].x, const[5].y___, temp[35].x___; 27: CMP temp[39].x, -|temp[36].x___|, none.0___, none.1___; 28: MOV temp[0].xy, (input[0] - temp[28]).xy__; 29: MOV temp[0].z, (input[0] - temp[28]).__0_; 30: MOV temp[1].xy, (input[0] - temp[28]).xy__; 31: MOV temp[1].z, (input[0] - temp[28]).__0_; 32: DP3 temp[40].x, temp[0].xyz_, temp[1].xyz_; 33: ADD temp[41].x, temp[40].x___, -const[6].y___; 34: CMP temp[42].x, temp[41].x___, none.0___, none.1___; 35: ADD temp[43].x, -temp[39].x___, none.1___; 36: CMP temp[44].x, -temp[43].x___, temp[42].x___, none.1___; 37: CMP temp[45].x, -temp[44].x___, none.1___, none.0___; 38: MOV temp[2], -temp[45].xxxx; 39: KIL temp[2]; 40: RCP temp[46].x, const[1].x___; 41: RCP temp[46].y, const[1]._y__; 42: MUL temp[47].xy, input[2].xy__, temp[46].xy__; 43: TEX temp[48].w, temp[47].xy__, 2D[0]; 44: CMP temp[51].x, -|temp[48].w___|, none.0___, none.1___; 45: CMP temp[52].x, -temp[51].x___, none.1___, none.0___; 46: MOV temp[3], -temp[52].xxxx; 47: KIL temp[3]; 48: ADD temp[53].x, input[1].y___, none.H___; 49: RCP temp[54].x, const[3].x___; 50: MUL temp[55].x, temp[53].x___, temp[54].x___; 51: FRC temp[56].x, temp[55].x___; 52: FRC temp[57].x, temp[55].x___; 53: ADD temp[58].x, temp[55].x___, -temp[57].x___; 54: MAD temp[59].x, const[6].z___, temp[58].x___, const[0].x___; 55: ADD temp[60].x, temp[59].x___, none.H___; 56: RCP temp[61].x, const[3].y___; 57: MUL temp[62].x, temp[60].x___, temp[61].x___; 58: MOV temp[56].y, temp[62]._x__; 59: TEX temp[63], temp[56].xy__, 2D[2]; 60: MOV temp[64].xyz, temp[63].xyz_; 61: MUL temp[65].x, temp[63].w___, temp[36].x___; 62: MUL temp[66].x, temp[65].x___, temp[48].w___; 63: MOV temp[64].w, temp[66].___x; 64: MOV output[0], temp[64]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1] MAD temp[11].x, src0.z__, src0.111, src0.H__ 1: src0.xyz = const[2] REPL_ALPHA temp[12].x RCP, src0.x 2: src0.xyz = temp[11], src1.xyz = temp[12] MAD temp[13].x, src0.x__, src1.x__, src0.000 3: src0.xyz = temp[13] FRC temp[14].x, src0.x__ 4: src0.xyz = temp[13] FRC temp[15].x, src0.x__ 5: src0.xyz = temp[15], src1.xyz = temp[13], srcp.xyz = (src1 - src0) MAD temp[17].x, srcp.x__, src0.111, src0.H__ 6: src0.xyz = const[2] REPL_ALPHA temp[18].x RCP, src0.y 7: src0.xyz = temp[17], src1.xyz = temp[18] MAD temp[19].x, src0.x__, src1.x__, src0.000 8: src0.xyz = temp[19] MAD temp[14].y, src0._x_, src0.111, src0.000 9: TEX temp[20], temp[14].xy__, 2D[1]; 10: src0.xyz = const[4], src0.w = temp[20], src1.xyz = temp[20] MAD temp[21].xyz, src0.yyy, src1.xyz, src0.HHH MAD temp[21].w, src0.y, src0.w, src0.H 11: src0.xyz = temp[21], src0.w = temp[21] FRC temp[22].xyz, src0.xyz FRC temp[22].w, src0.w 12: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[22], src1.w = temp[22] MAD temp[23].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[23].w, src0.w, src0.1, -src1.w 13: src0.w = temp[23], src1.w = const[4] MAD temp[24].x, src0.w__, src1.w__, src0.000 14: src0.xyz = temp[24] FRC temp[25].x, src0.x__ 15: src0.xyz = temp[24], src1.xyz = temp[25] MAD temp[26].x, src0.x__, src0.111, -src1.x__ 16: src0.xyz = temp[23], src1.xyz = const[4], src2.xyz = temp[26] MAD temp[27].x, src0.y__, src1.z__, src2.x__ 17: src0.xyz = temp[27], src1.xyz = const[5] MAD temp[28].x, src0.x__, src0.H__, src1.x__ 18: src0.w = temp[23], src1.w = const[4] MAD temp[29].x, src0.w__, src1.w__, src0.000 19: src0.xyz = temp[29] FRC temp[30].x, src0.x__ 20: src0.xyz = temp[23], src1.xyz = const[4] MAD temp[31].x, src0.z__, src1.z__, src0.000 21: src0.xyz = const[4], src1.xyz = temp[30], src2.xyz = temp[31] MAD temp[32].x, src0.z__, src1.x__, src2.x__ 22: src0.xyz = temp[32], src1.xyz = const[5] MAD temp[33].x, src0.x__, src0.H__, src1.x__ 23: src0.xyz = temp[33] MAD temp[28].y, src0._x_, src0.111, src0.000 24: src0.xyz = temp[23], src1.xyz = const[5] MAD temp[34].x, src0.x__, src1.z__, src0.000 25: src0.xyz = temp[34] FRC temp[35].x, src0.x__ 26: src0.xyz = const[5], src1.xyz = temp[35] MAD temp[36].x, src0.y__, src1.x__, src0.000 27: src0.xyz = temp[36] CMP temp[39].x, src0.1__, src0.0__, -|src0.x__| 28: src0.xyz = temp[28], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[0].xy, srcp.xy_, src0.111, src0.000 29: MAD temp[0].z, src0.__0, src0.111, src0.000 30: src0.xyz = temp[28], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[1].xy, srcp.xy_, src0.111, src0.000 31: MAD temp[1].z, src0.__0, src0.111, src0.000 32: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[40].x, src0.xyz, src1.xyz 33: src0.xyz = temp[40], src1.xyz = const[6] MAD temp[41].x, src0.x__, src0.111, -src1.y__ 34: src0.xyz = temp[41] CMP temp[42].x, src0.1__, src0.0__, src0.x__ 35: src0.xyz = temp[39] MAD temp[43].x, -src0.x__, src0.111, src0.1__ 36: src0.xyz = temp[42], src1.xyz = temp[43] CMP temp[44].x, src0.1__, src0.x__, -src1.x__ 37: src0.xyz = temp[44] CMP temp[45].x, src0.0__, src0.1__, -src0.x__ 38: src0.xyz = temp[45] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 39: KIL temp[2]; 40: src0.xyz = const[1] REPL_ALPHA temp[46].x RCP, src0.x 41: src0.xyz = const[1] REPL_ALPHA temp[46].y RCP, src0.y 42: src0.xyz = input[2], src1.xyz = temp[46] MAD temp[47].xy, src0.xy_, src1.xy_, src0.000 43: TEX temp[48].w, temp[47].xy__, 2D[0]; 44: src0.w = temp[48] CMP temp[51].x, src0.1__, src0.0__, -|src0.w__| 45: src0.xyz = temp[51] CMP temp[52].x, src0.0__, src0.1__, -src0.x__ 46: src0.xyz = temp[52] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 47: KIL temp[3]; 48: src0.xyz = input[1] MAD temp[53].x, src0.y__, src0.111, src0.H__ 49: src0.xyz = const[3] REPL_ALPHA temp[54].x RCP, src0.x 50: src0.xyz = temp[53], src1.xyz = temp[54] MAD temp[55].x, src0.x__, src1.x__, src0.000 51: src0.xyz = temp[55] FRC temp[56].x, src0.x__ 52: src0.xyz = temp[55] FRC temp[57].x, src0.x__ 53: src0.xyz = temp[55], src1.xyz = temp[57] MAD temp[58].x, src0.x__, src0.111, -src1.x__ 54: src0.xyz = const[6], src1.xyz = temp[58], src2.xyz = const[0] MAD temp[59].x, src0.z__, src1.x__, src2.x__ 55: src0.xyz = temp[59] MAD temp[60].x, src0.x__, src0.111, src0.H__ 56: src0.xyz = const[3] REPL_ALPHA temp[61].x RCP, src0.y 57: src0.xyz = temp[60], src1.xyz = temp[61] MAD temp[62].x, src0.x__, src1.x__, src0.000 58: src0.xyz = temp[62] MAD temp[56].y, src0._x_, src0.111, src0.000 59: TEX temp[63], temp[56].xy__, 2D[2]; 60: src0.xyz = temp[63] MAD temp[64].xyz, src0.xyz, src0.111, src0.000 61: src0.xyz = temp[36], src0.w = temp[63] MAD temp[65].x, src0.w__, src0.x__, src0.000 62: src0.xyz = temp[65], src0.w = temp[48] MAD temp[66].x, src0.x__, src0.w__, src0.000 63: src0.xyz = temp[66] MAD temp[64].w, src0.x, src0.1, src0.0 64: src0.xyz = temp[64], src0.w = temp[64] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[3] MAD temp[53].x, src0.y__, src0.111, src0.H__ RCP temp[61].w, src1.y 1: src0.xyz = const[3] MAD temp[1].z, src0.__0, src0.111, src0.000 RCP temp[54].w, src0.x 2: src0.xyz = const[2] MAD temp[0].z, src0.__0, src0.111, src0.000 RCP temp[18].w, src0.y 3: src0.xyz = input[1], src1.xyz = const[2] MAD temp[11].x, src0.z__, src0.111, src0.H__ RCP temp[12].w, src1.x 4: src0.xyz = temp[11], src0.w = temp[12], src1.xyz = temp[12], src1.w = temp[54], src2.xyz = temp[53] MAD temp[13].x, src0.x__, src0.w__, src0.000 MAD temp[55].w, src2.x, src1.w, src0.0 5: src0.xyz = temp[13], src0.w = temp[55] FRC temp[15].x, src0.x__ FRC temp[57].w, src0.w 6: src0.xyz = temp[55], src0.w = temp[55], src1.w = temp[57] FRC temp[56].x, src0.w__ MAD temp[58].w, src0.w, src0.1, -src1.w 7: src0.xyz = temp[15], src1.xyz = temp[13], srcp.xyz = (src1 - src0) FRC temp[14].x, src1.x__ MAD temp[17].w, srcp.x, src0.1, src0.H 8: src0.xyz = const[1] REPL_ALPHA temp[46].x RCP, src0.x 9: src0.xyz = const[6], src0.w = temp[58], src1.xyz = temp[58], src2.xyz = const[0] MAD temp[59].w, src0.z, src0.w, src2.x 10: src0.xyz = temp[59], src0.w = temp[59], src1.w = temp[17], src2.w = temp[18] MAD temp[60].x, src0.w__, src0.111, src0.H__ MAD temp[19].w, src1.w, src2.w, src0.0 11: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[60], src1.w = temp[61] MAD temp[14].y, src0._w_, src0.111, src0.000 MAD temp[62].w, src1.x, src1.w, src0.0 12: src0.xyz = const[1] REPL_ALPHA temp[46].y RCP, src0.y 13: src0.xyz = temp[62], src0.w = temp[62] MAD temp[56].y, src0._w_, src0.111, src0.000 14: src0.xyz = input[2], src1.xyz = temp[46] MAD temp[47].xy, src0.xy_, src1.xy_, src0.000 15: BEGIN_TEX; 16: TEX temp[20], temp[14].xy__, 2D[1]; 17: TEX temp[63], temp[56].xy__, 2D[2]; 18: TEX temp[48].w, temp[47].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 19: src0.xyz = temp[63], src0.w = temp[48] SEM_WAIT MAD temp[64].xyz, src0.xyz, src0.111, src0.000 CMP temp[51].w, src0.1, src0.0, -|src0.w| 20: src0.xyz = const[4], src0.w = temp[20], src1.xyz = temp[20] MAD temp[21].xyz, src0.yyy, src1.xyz, src0.HHH MAD temp[21].w, src0.y, src0.w, src0.H 21: src0.xyz = temp[51], src0.w = temp[51] CMP temp[52].x, src0.0__, src0.1__, -src0.w__ 22: src0.xyz = temp[21], src0.w = temp[21] FRC temp[22].xyz, src0.xyz FRC temp[22].w, src0.w 23: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[22], src1.w = temp[22] MAD temp[23].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[23].w, src0.w, src0.1, -src1.w 24: src0.w = temp[23], src1.w = const[4] MAD temp[24].x, src0.w__, src1.w__, src0.000 MAD temp[29].w, src0.w, src1.w, src0.0 25: src0.xyz = temp[29], src0.w = temp[29], src1.xyz = temp[24] FRC temp[30].x, src0.w__ FRC temp[25].w, src1.x 26: src0.xyz = temp[23], src1.xyz = const[4], src2.xyz = const[5] MAD temp[31].x, src0.z__, src1.z__, src0.000 MAD temp[34].w, src0.x, src2.z, src0.0 27: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[24], src1.w = temp[25] FRC temp[35].x, src0.w__ MAD temp[26].w, src1.x, src0.1, -src1.w 28: src0.xyz = temp[52] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 29: BEGIN_TEX; 30: KIL temp[3]; 31: src0.xyz = const[4], src1.xyz = temp[30], src2.xyz = temp[31] MAD temp[32].w, src0.z, src1.x, src2.x 32: src0.xyz = temp[32], src0.w = temp[32], src1.xyz = const[5], src2.xyz = temp[35] MAD temp[33].x, src0.w__, src0.H__, src1.x__ MAD temp[36].w, src1.y, src2.x, src0.0 33: src0.xyz = temp[36], src0.w = temp[36], src1.w = temp[63] CMP temp[39].x, src0.1__, src0.0__, -|src0.w__| MAD temp[65].w, src1.w, src0.w, src0.0 34: src0.xyz = temp[65], src0.w = temp[48], src1.xyz = temp[39], src1.w = temp[65] MAD temp[66].x, src1.w__, src0.w__, src0.000 MAD temp[43].w, -src1.x, src0.1, src0.1 35: src0.xyz = temp[33], src0.w = temp[26], src1.xyz = temp[23], src2.xyz = const[4] MAD temp[28].y, src0._x_, src0.111, src0.000 MAD temp[27].w, src1.y, src2.z, src0.w 36: src0.xyz = temp[27], src0.w = temp[27], src1.xyz = const[5], src2.xyz = temp[66] MAD temp[28].x, src0.w__, src0.H__, src1.x__ MAD temp[64].w, src2.x, src0.1, src0.0 37: src0.xyz = temp[28], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[1].xy, srcp.xy_, src0.111, src0.000 38: src0.xyz = temp[28], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[0].xy, srcp.xy_, src0.111, src0.000 39: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[40].x, src0.xyz, src1.xyz 40: src0.xyz = temp[40], src1.xyz = const[6] MAD temp[41].x, src0.x__, src0.111, -src1.y__ 41: src0.xyz = temp[41] CMP temp[42].x, src0.1__, src0.0__, src0.x__ 42: src0.xyz = temp[42], src0.w = temp[43], src1.xyz = temp[43] CMP temp[44].x, src0.1__, src0.x__, -src0.w__ 43: src0.xyz = temp[44] CMP temp[45].x, src0.0__, src0.1__, -src0.x__ 44: src0.xyz = temp[45] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 45: BEGIN_TEX; 46: KIL temp[2]; 47: src0.xyz = temp[64], src0.w = temp[64] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[3] MAD temp[53].x, src0.y__, src0.111, src0.H__ RCP temp[61].w, src1.y 1: src0.xyz = const[3] MAD temp[1].z, src0.__0, src0.111, src0.000 RCP temp[54].w, src0.x 2: src0.xyz = const[2] MAD temp[0].z, src0.__0, src0.111, src0.000 RCP temp[18].w, src0.y 3: src0.xyz = input[1], src1.xyz = const[2] MAD temp[11].x, src0.z__, src0.111, src0.H__ RCP temp[12].w, src1.x 4: src0.xyz = temp[11], src0.w = temp[12], src1.w = temp[54], src2.xyz = temp[53] MAD temp[13].x, src0.x__, src0.w__, src0.000 MAD temp[55].w, src2.x, src1.w, src0.0 5: src0.xyz = temp[13], src0.w = temp[55] FRC temp[15].x, src0.x__ FRC temp[57].w, src0.w 6: src0.w = temp[55], src1.w = temp[57] FRC temp[56].x, src0.w__ MAD temp[58].w, src0.w, src0.1, -src1.w 7: src0.xyz = temp[15], src1.xyz = temp[13], srcp.xyz = (src1 - src0) FRC temp[14].x, src1.x__ MAD temp[17].w, srcp.x, src0.1, src0.H 8: src0.xyz = const[1] REPL_ALPHA temp[46].x RCP, src0.x 9: src0.xyz = const[6], src0.w = temp[58], src2.xyz = const[0] MAD temp[59].w, src0.z, src0.w, src2.x 10: src0.w = temp[59], src1.w = temp[17], src2.w = temp[18] MAD temp[60].x, src0.w__, src0.111, src0.H__ MAD temp[19].w, src1.w, src2.w, src0.0 11: src0.w = temp[19], src1.xyz = temp[60], src1.w = temp[61] MAD temp[14].y, src0._w_, src0.111, src0.000 MAD temp[62].w, src1.x, src1.w, src0.0 12: src0.xyz = const[1] REPL_ALPHA temp[46].y RCP, src0.y 13: src0.w = temp[62] MAD temp[56].y, src0._w_, src0.111, src0.000 14: src0.xyz = input[2], src1.xyz = temp[46] MAD temp[47].xy, src0.xy_, src1.xy_, src0.000 15: BEGIN_TEX; 16: TEX temp[20], temp[14].xy__, 2D[1]; 17: TEX temp[63], temp[56].xy__, 2D[2]; 18: TEX temp[48].w, temp[47].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 19: src0.xyz = temp[63], src0.w = temp[48] SEM_WAIT MAD temp[64].xyz, src0.xyz, src0.111, src0.000 CMP temp[51].w, src0.1, src0.0, -|src0.w| 20: src0.xyz = const[4], src0.w = temp[20], src1.xyz = temp[20] MAD temp[21].xyz, src0.yyy, src1.xyz, src0.HHH MAD temp[21].w, src0.y, src0.w, src0.H 21: src0.w = temp[51] CMP temp[52].x, src0.0__, src0.1__, -src0.w__ 22: src0.xyz = temp[21], src0.w = temp[21] FRC temp[22].xyz, src0.xyz FRC temp[22].w, src0.w 23: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[22], src1.w = temp[22] MAD temp[23].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[23].w, src0.w, src0.1, -src1.w 24: src0.w = temp[23], src1.w = const[4] MAD temp[24].x, src0.w__, src1.w__, src0.000 MAD temp[29].w, src0.w, src1.w, src0.0 25: src0.w = temp[29], src1.xyz = temp[24] FRC temp[30].x, src0.w__ FRC temp[25].w, src1.x 26: src0.xyz = temp[23], src1.xyz = const[4], src2.xyz = const[5] MAD temp[31].x, src0.z__, src1.z__, src0.000 MAD temp[34].w, src0.x, src2.z, src0.0 27: src0.w = temp[34], src1.xyz = temp[24], src1.w = temp[25] FRC temp[35].x, src0.w__ MAD temp[26].w, src1.x, src0.1, -src1.w 28: src0.xyz = temp[52] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 29: BEGIN_TEX; 30: KIL temp[3]; 31: src0.xyz = const[4], src1.xyz = temp[30], src2.xyz = temp[31] MAD temp[32].w, src0.z, src1.x, src2.x 32: src0.w = temp[32], src1.xyz = const[5], src2.xyz = temp[35] MAD temp[33].x, src0.w__, src0.H__, src1.x__ MAD temp[36].w, src1.y, src2.x, src0.0 33: src0.w = temp[36], src1.w = temp[63] CMP temp[39].x, src0.1__, src0.0__, -|src0.w__| MAD temp[65].w, src1.w, src0.w, src0.0 34: src0.w = temp[48], src1.xyz = temp[39], src1.w = temp[65] MAD temp[66].x, src1.w__, src0.w__, src0.000 MAD temp[43].w, -src1.x, src0.1, src0.1 35: src0.xyz = temp[33], src0.w = temp[26], src1.xyz = temp[23], src2.xyz = const[4] MAD temp[28].y, src0._x_, src0.111, src0.000 MAD temp[27].w, src1.y, src2.z, src0.w 36: src0.w = temp[27], src1.xyz = const[5], src2.xyz = temp[66] MAD temp[28].x, src0.w__, src0.H__, src1.x__ MAD temp[64].w, src2.x, src0.1, src0.0 37: src0.xyz = temp[28], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[1].xy, srcp.xy_, src0.111, src0.000 38: src0.xyz = temp[28], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[0].xy, srcp.xy_, src0.111, src0.000 39: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[40].x, src0.xyz, src1.xyz 40: src0.xyz = temp[40], src1.xyz = const[6] MAD temp[41].x, src0.x__, src0.111, -src1.y__ 41: src0.xyz = temp[41] CMP temp[42].x, src0.1__, src0.0__, src0.x__ 42: src0.xyz = temp[42], src0.w = temp[43] CMP temp[44].x, src0.1__, src0.x__, -src0.w__ 43: src0.xyz = temp[44] CMP temp[45].x, src0.0__, src0.1__, -src0.x__ 44: src0.xyz = temp[45] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 45: BEGIN_TEX; 46: KIL temp[2]; 47: src0.xyz = temp[64], src0.w = temp[64] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[1], src1.xyz = const[3] MAD temp[0].z, src0.__y, src0.__1, src0.__H RCP temp[0].w, src1.y 1: src0.xyz = const[3] MAD temp[3].z, src0.__0, src0.111, src0.000 RCP temp[1].w, src0.x 2: src0.xyz = const[2] MAD temp[4].z, src0.__0, src0.111, src0.000 RCP temp[2].w, src0.y 3: src0.xyz = input[1], src1.xyz = const[2] MAD temp[1].x, src0.z__, src0.1__, src0.H__ RCP temp[3].w, src1.x 4: src0.xyz = temp[1], src0.w = temp[3], src1.w = temp[1], src2.xyz = temp[0] MAD temp[1].x, src0.x__, src0.w__, src0.0__ MAD temp[1].w, src2.z, src1.w, src0.0 5: src0.xyz = temp[1], src0.w = temp[1] FRC temp[5].x, src0.x__ FRC temp[3].w, src0.w 6: src0.w = temp[1], src1.w = temp[3] FRC temp[6].x, src0.w__ MAD temp[1].w, src0.w, src0.1, -src1.w 7: src0.xyz = temp[5], src1.xyz = temp[1], srcp.xyz = (src1 - src0) FRC temp[1].x, src1.x__ MAD temp[3].w, srcp.x, src0.1, src0.H 8: src0.xyz = const[1] REPL_ALPHA temp[5].x RCP, src0.x 9: src0.xyz = const[6], src0.w = temp[1], src2.xyz = const[0] MAD temp[1].w, src0.z, src0.w, src2.x 10: src0.w = temp[1], src1.w = temp[3], src2.w = temp[2] MAD temp[0].z, src0.__w, src0.__1, src0.__H MAD temp[1].w, src1.w, src2.w, src0.0 11: src0.w = temp[1], src1.xyz = temp[0], src1.w = temp[0] MAD temp[1].y, src0._w_, src0.11_, src0.00_ MAD temp[0].w, src1.z, src1.w, src0.0 12: src0.xyz = const[1] REPL_ALPHA temp[5].y RCP, src0.y 13: src0.w = temp[0] MAD temp[6].y, src0._w_, src0.11_, src0.00_ 14: src0.xyz = input[2], src1.xyz = temp[5] MAD temp[2].xy, src0.xy_, src1.xy_, src0.00_ 15: BEGIN_TEX; 16: TEX temp[1], temp[1].xy__, 2D[1]; 17: TEX temp[5], temp[6].xy__, 2D[2]; 18: TEX temp[2].w, temp[2].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 19: src0.xyz = temp[5], src0.w = temp[2] SEM_WAIT MAD temp[6].xyz, src0.xyz, src0.111, src0.000 CMP temp[0].w, src0.1, src0.0, -|src0.w| 20: src0.xyz = const[4], src0.w = temp[1], src1.xyz = temp[1] MAD temp[1].xyz, src0.yyy, src1.xyz, src0.HHH MAD temp[1].w, src0.y, src0.w, src0.H 21: src0.w = temp[0] CMP temp[0].z, src0.__0, src0.__1, -src0.__w 22: src0.xyz = temp[1], src0.w = temp[1] FRC temp[7].xyz, src0.xyz FRC temp[0].w, src0.w 23: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[7], src1.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD temp[0].w, src0.w, src0.1, -src1.w 24: src0.w = temp[0], src1.w = const[4] MAD temp[7].x, src0.w__, src1.w__, src0.0__ MAD temp[0].w, src0.w, src1.w, src0.0 25: src0.w = temp[0], src1.xyz = temp[7] FRC temp[7].y, src0._w_ FRC temp[0].w, src1.x 26: src0.xyz = temp[1], src1.xyz = const[4], src2.xyz = const[5] MAD temp[7].z, src0.__z, src1.__z, src0.__0 MAD temp[1].w, src0.x, src2.z, src0.0 27: src0.w = temp[1], src1.xyz = temp[7], src1.w = temp[0] FRC temp[7].x, src0.w__ MAD temp[0].w, src1.x, src0.1, -src1.w 28: src0.xyz = temp[0] MAD temp[8].xyz, -src0.zzz, src0.111, src0.000 MAD temp[8].w, -src0.z, src0.1, src0.0 29: BEGIN_TEX; 30: KIL temp[8]; 31: src0.xyz = const[4], src1.xyz = temp[7], src2.xyz = temp[7] MAD temp[1].w, src0.z, src1.y, src2.z 32: src0.w = temp[1], src1.xyz = const[5], src2.xyz = temp[7] MAD temp[0].z, src0.__w, src0.__H, src1.__x MAD temp[1].w, src1.y, src2.x, src0.0 33: src0.w = temp[1], src1.w = temp[5] CMP temp[5].x, src0.1__, src0.0__, -|src0.w__| MAD temp[1].w, src1.w, src0.w, src0.0 34: src0.w = temp[2], src1.xyz = temp[5], src1.w = temp[1] MAD temp[2].x, src1.w__, src0.w__, src0.0__ MAD temp[1].w, -src1.x, src0.1, src0.1 35: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src2.xyz = const[4] MAD temp[1].y, src0._z_, src0.11_, src0.00_ MAD temp[0].w, src1.y, src2.z, src0.w 36: src0.w = temp[0], src1.xyz = const[5], src2.xyz = temp[2] MAD temp[1].x, src0.w__, src0.H__, src1.x__ MAD temp[0].w, src2.x, src0.1, src0.0 37: src0.xyz = temp[1], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[3].xy, srcp.xy_, src0.111, src0.000 38: src0.xyz = temp[1], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[4].xy, srcp.xy_, src0.111, src0.000 39: src0.xyz = temp[4], src1.xyz = temp[3] DP3 temp[0].x, src0.xyz, src1.xyz 40: src0.xyz = temp[0], src1.xyz = const[6] MAD temp[0].x, src0.x__, src0.1__, -src1.y__ 41: src0.xyz = temp[0] CMP temp[0].x, src0.1__, src0.0__, src0.x__ 42: src0.xyz = temp[0], src0.w = temp[1] CMP temp[0].x, src0.1__, src0.x__, -src0.w__ 43: src0.xyz = temp[0] CMP temp[0].x, src0.0__, src0.1__, -src0.x__ 44: src0.xyz = temp[0] MAD temp[1].xyz, -src0.xxx, src0.111, src0.000 MAD temp[1].w, -src0.x, src0.1, src0.0 45: BEGIN_TEX; 46: KIL temp[1]; 47: src0.xyz = temp[6], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=15************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 14, tex_end: 0 (code_addr: 00000380) 0: xyz: t1 c3 t0 bias-> t0.z (020008c1) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t1.yyy 1.0 0.5 op: 00058a82 w: c3.y t1.x t1.x op: 05000004 1: xyz: c3 t0 t0 bias-> t3.z (020c0023) w: t0 t0 t0 bias-> t1.w (00840000) xyz: 0.0 1.0 0.0 op: 00050a94 w: c3.x c3.x c3.x op: 05000000 2: xyz: c2 t0 t0 bias-> t4.z (02100022) w: t0 t0 t0 bias-> t2.w (00880000) xyz: 0.0 1.0 0.0 op: 00050a94 w: c2.y c2.x c2.x op: 05000001 3: xyz: t1 c2 t0 bias-> t1.x (00840881) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t1.zzz 1.0 0.5 op: 00058a83 w: c2.x t1.x t1.x op: 05000003 4: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t3 t1 t0 bias-> t1.w (00840043) xyz: t1.xyz t3.www 0.0 op: 00050600 w: t0.z t1.w 0.0 op: 00040508 5: xyz: t1 t0 t0 bias-> t5.x (00940001) w: t1 t0 t0 bias-> t3.w (008c0001) xyz: t1.xyz t1.xxx t1.xxx op: 04804080 w: t1.w t1.x t1.x op: 03800009 6: xyz: t32 t0 t0 bias-> t6.x (00980000) w: t1 t3 t0 bias-> t1.w (008400c1) xyz: t1.www t32.xxx t32.xxx op: 0480408c w: t1.w 1.0 -t3.w op: 000a8889 7: xyz: t5 t1 t0 sub-> t1.x (00840045) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t1.xyz t5.xxx t5.xxx op: 04a04084 w: srcp.x 1.0 0.5 op: 0004888c 8: xyz: c1 t0 t0 bias-> t5.x (00940021) w: t0 t0 t0 bias-> (00000000) xyz: c1.xxx c1.xxx c1.xxx op: 05004081 w: c1.x c1.x c1.x op: 05000000 9: xyz: c6 t32 c0 bias-> (00020026) w: t1 t0 t0 bias-> t1.w (00840001) xyz: c6.xxx c6.xxx c6.xxx op: 00004081 w: c6.z t1.w c0.x op: 00018482 10: xyz: t32 t0 t0 bias-> t0.z (02000000) w: t1 t3 t2 bias-> t1.w (008420c1) xyz: t1.www 1.0 0.5 op: 00058a8c w: t3.w t2.w 0.0 op: 0004058a 11: xyz: t0 t0 t0 bias-> t1.y (01040000) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.www 1.0 0.0 op: 00050a8c w: t0.z t0.w 0.0 op: 00040505 12: xyz: c1 t0 t0 bias-> t5.y (01140021) w: t0 t0 t0 bias-> (00000000) xyz: c1.xxx c1.xxx c1.xxx op: 05004081 w: c1.y c1.x c1.x op: 05000001 13: xyz: t32 t0 t0 bias-> t6.y (01180000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www 1.0 0.0 op: 00050a8c w: t32.x t32.x t32.x op: 00000000 14: xyz: t2 t5 t0 bias-> t2.xy (01880142) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t5.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 NODE 1: alu_offset: 15, tex_offset: 0, alu_end: 9, tex_end: 2 (code_addr: 0004024f) TEX: TEX t1, t1, texture[1] (00008841) TEX t5, t6, texture[2] (00009146) TEX t2, t2, texture[0] (00008082) 15: xyz: t5 t0 t0 bias-> t6.xyz (03980005) w: t2 t0 t0 bias-> t0.w (00800002) xyz: t5.xyz 1.0 0.0 op: 00050a80 w: 1.0 0.0 -|t2.w| op: 031a4811 16: xyz: c4 t1 t0 bias-> t1.xyz (03840064) w: t1 t0 t0 bias-> t1.w (00840001) xyz: c4.yyy t1.xyz 0.5 op: 00058202 w: c4.y t1.w 0.5 op: 00048481 17: xyz: t32 t0 t0 bias-> t0.z (02000000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 -t0.www op: 040b0a94 w: t32.x t32.x t32.x op: 00000000 18: xyz: t1 t0 t0 bias-> t7.xyz (039c0001) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.xyz t1.xxx t1.xxx op: 04804080 w: t1.w t1.x t1.x op: 03800009 19: xyz: t1 t7 t0 bias-> t1.xyz (038401c1) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.xyz 1.0 -t7.xyz op: 00090a80 w: t1.w 1.0 -t0.w op: 000a8889 20: xyz: t0 t0 t0 bias-> t7.x (009c0000) w: t0 c4 t0 bias-> t0.w (00800900) xyz: t0.www c4.www 0.0 op: 0005068c w: t0.w c4.w 0.0 op: 00040509 21: xyz: t0 t7 t0 bias-> t7.y (011c01c0) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.www t0.xxx t0.xxx op: 0480408c w: t7.x t0.x t0.x op: 03800003 22: xyz: t1 c4 c5 bias-> t7.z (021e5901) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xyz c4.xyz 0.0 op: 00050200 w: t1.x c5.z 0.0 op: 00040400 23: xyz: t32 t7 t0 bias-> t7.x (009c01c0) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.www t32.xxx t32.xxx op: 0480408c w: t7.x 1.0 -t0.w op: 000a8883 24: xyz: t0 t0 t0 bias-> t8.xyz (03a00000) w: t0 t0 t0 bias-> t8.w (00a00000) xyz: -t0.zzz 1.0 0.0 op: 00050aa3 w: -t0.z 1.0 0.0 op: 000408a2 NODE 2: alu_offset: 25, tex_offset: 3, alu_end: 13, tex_end: 0 (code_addr: 00003359) TEX: KIL t0, t8, texture[0] (00010008) 25: xyz: c4 t7 t7 bias-> (000071e4) w: t0 t0 t0 bias-> t1.w (00840000) xyz: c4.xxx c4.xxx c4.xxx op: 00004081 w: c4.z t7.y t7.z op: 00020202 26: xyz: t32 c5 t7 bias-> t0.z (02007940) w: t1 t0 t0 bias-> t1.w (00840001) xyz: t1.www 0.5 c5.xxx op: 00014b0c w: c5.y t7.x 0.0 op: 00040304 27: xyz: t32 t0 t0 bias-> t5.x (00940000) w: t1 t5 t0 bias-> t1.w (00840141) xyz: 1.0 0.0 -|t1.www| op: 041b0a15 w: t5.w t1.w 0.0 op: 0004048a 28: xyz: t32 t5 t0 bias-> t2.x (00880140) w: t2 t1 t0 bias-> t1.w (00840042) xyz: t1.www t2.www 0.0 op: 0005060d w: -t5.x 1.0 1.0 op: 000448a3 29: xyz: t0 t1 c4 bias-> t1.y (01064040) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.zzz 1.0 0.0 op: 00050a83 w: t1.y c4.z t0.w op: 00024404 30: xyz: t0 c5 t2 bias-> t1.x (00842940) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.www 0.5 c5.xyz op: 80010b0c NOP w: t2.x 1.0 0.0 op: 00040886 31: xyz: t1 t0 t0 sub-> t3.xy (018c0001) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t1.x t1.x t1.x op: 00000000 32: xyz: t1 t0 t0 sub-> t4.xy (01900001) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t1.x t1.x t1.x op: 00000000 33: xyz: t4 t3 t0 bias-> t0.x (008000c4) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t3.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 34: xyz: t0 c6 t0 bias-> t0.x (00800980) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 -c6.yyy op: 00098a80 w: t0.x t0.x t0.x op: 00000000 35: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 0.0 t0.xyz op: 04000a15 w: t0.x t0.x t0.x op: 00000000 36: xyz: t0 t32 t0 bias-> t0.x (00800000) w: t1 t0 t0 bias-> (00000001) xyz: 1.0 t0.xyz -t1.www op: 040b0015 w: t0.x t0.x t0.x op: 00000000 37: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 -t0.xyz op: 04080a94 w: t0.x t0.x t0.x op: 00000000 38: xyz: t0 t0 t0 bias-> t1.xyz (03840000) w: t0 t0 t0 bias-> t1.w (00840000) xyz: -t0.xxx 1.0 0.0 op: 00050aa1 w: -t0.x 1.0 0.0 op: 000408a0 NODE 3: alu_offset: 39, tex_offset: 4, alu_end: 0, tex_end: 0 (code_addr: 00404027) TEX: KIL t0, t1, texture[0] (00010001) 39: xyz: t6 t0 t0 bias-> o0.xyz (1c000006) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t6.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 GLSL source for fragment shader 25: vec4 C(in vec4 t, in float u){ return t; } uniform vec2 b, g, s; uniform sampler2D c, f, r; vec2 D(in float t, in float u){ (t = ((t + 0.5) / b[0])); return vec2(fract(t), ((((26.0 * floor(t)) + u) + 0.5) / b[1])); } float E(in vec2 t){ return t[1]; } vec4 F(in float t){ (t = ((t + 0.5) / g[0])); return floor((0.5 + (255.0 * texture2D(f, vec2(fract(t), ((floor(t) + 0.5) / g[1])))))); } float G(in vec4 t){ return (mod(t[0], 32.0) / 31.0); } float H(in vec4 t){ float u = ((t[1] * 16.0) + floor((t[3] / 16.0))); return ((u / 2.0) + -1023.0); } float I(in vec4 t){ float u = ((t[2] * 16.0) + mod(t[3], 16.0)); return ((u / 2.0) + -1023.0); } vec2 J(in vec4 t){ return vec2(H(t), I(t)); } varying vec2 i; varying vec3 j; varying vec2 l, m, n; void main(){ float t = 1.0; vec2 u = i; vec2 v, y, z; (v = texture2D(c, D(E(j.xy), 25.0)).xy); float w = ((v[0] * 255.0) / 128.0); (u = (i + (l / w))); (t = (((max(abs(m[0]), abs(m[1])) < w)) ? (v[1]) : (0.0))); vec4 x = F(j[2]); (y = J(x)); (z = (n - y)); if ((dot(z, z) >= 0.0099999998)) discard; (t *= G(x)); vec4 A = texture2D(r, (u / s)); (A *= t); if ((A[3] == 0.0)) discard; (gl_FragColor = C(A, j[0])); } GLSL IR for shader 25: ( (declare (in ) vec2 n) (declare (in ) vec2 m) (declare (in ) vec2 l) (declare (in ) vec3 j) (declare (in ) vec2 i) (declare (uniform ) sampler2D r) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 s) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function C (signature vec4 (parameters (declare (in ) vec4 t) (declare (in ) float u) ) ( (return (var_ref t) ) )) ) (function D (signature vec2 (parameters (declare (in ) float t) (declare (in ) float u) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref t) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref t) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref t) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref u) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) (signature vec4 (parameters (declare (in ) vec4 arg0) ) ( )) ) (function E (signature float (parameters (declare (in ) vec2 t) ) ( (return (swiz y (var_ref t) )) )) ) (function F (signature vec4 (parameters (declare (in ) float t) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref t) (constant float (0.500000)) ) (swiz x (var_ref g) )) ) (assign (x) (var_ref t) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref t) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (var_ref floor_retval) (constant float (0.500000)) ) (swiz y (var_ref g) )) ) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref f) (var_ref vec_ctor) )) (declare (temporary ) vec4 floor_retval@138) (call floor (var_ref floor_retval@138) ((expression vec4 + (constant float (0.500000)) (expression vec4 * (constant float (255.000000)) (var_ref texture2D_retval) ) ) )) (return (var_ref floor_retval@138) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) (function G (signature float (parameters (declare (in ) vec4 t) ) ( (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((swiz x (var_ref t) )(constant float (32.000000)) )) (return (expression float / (var_ref mod_retval) (constant float (31.000000)) ) ) )) ) (function mod (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function H (signature float (parameters (declare (in ) vec4 t) ) ( (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((expression float / (swiz w (var_ref t) )(constant float (16.000000)) ) )) (return (expression float + (expression float / (expression float + (expression float * (swiz y (var_ref t) )(constant float (16.000000)) ) (var_ref floor_retval) ) (constant float (2.000000)) ) (constant float (-1023.000000)) ) ) )) ) (function I (signature float (parameters (declare (in ) vec4 t) ) ( (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((swiz w (var_ref t) )(constant float (16.000000)) )) (return (expression float + (expression float / (expression float + (expression float * (swiz z (var_ref t) )(constant float (16.000000)) ) (var_ref mod_retval) ) (constant float (2.000000)) ) (constant float (-1023.000000)) ) ) )) ) (function J (signature vec2 (parameters (declare (in ) vec4 t) ) ( (declare (temporary ) float H_retval) (call H (var_ref H_retval) ((var_ref t) )) (declare (temporary ) float I_retval) (call I (var_ref I_retval) ((var_ref t) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref H_retval) ) (assign (y) (var_ref vec_ctor) (var_ref I_retval) ) (return (var_ref vec_ctor) ) )) ) (function main (signature void (parameters ) ( (declare () vec4 x) (declare () float w) (declare () vec2 v) (declare () vec2 u) (declare () float t) (assign (x) (var_ref t) (constant float (1.000000)) ) (assign (xy) (var_ref u) (var_ref i) ) (declare (temporary ) float E_retval) (call E (var_ref E_retval) ((swiz xy (var_ref j) ))) (declare (temporary ) vec2 D_retval) (call D (var_ref D_retval) ((var_ref E_retval) (constant float (25.000000)) )) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref c) (var_ref D_retval) )) (assign (xy) (var_ref v) (swiz xy (var_ref texture2D_retval) )) (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float * (swiz x (var_ref texture2D_retval) )(constant float (255.000000)) ) (constant float (128.000000)) ) ) (assign (x) (var_ref w) (var_ref assignment_tmp) ) (assign (xy) (var_ref u) (expression vec2 + (var_ref i) (expression vec2 / (var_ref l) (var_ref assignment_tmp) ) ) ) (declare (temporary ) float abs_retval) (call abs (var_ref abs_retval) ((swiz x (var_ref m) ))) (declare (temporary ) float abs_retval@139) (call abs (var_ref abs_retval@139) ((swiz y (var_ref m) ))) (declare (temporary ) float max_retval) (call max (var_ref max_retval) ((var_ref abs_retval) (var_ref abs_retval@139) )) (declare (temporary ) float conditional_tmp) (if (expression bool < (var_ref max_retval) (var_ref w) ) ( (assign (x) (var_ref conditional_tmp) (swiz y (var_ref v) )) ) ( (assign (x) (var_ref conditional_tmp) (constant float (0.000000)) ) )) (assign (x) (var_ref t) (var_ref conditional_tmp) ) (declare (temporary ) vec4 F_retval) (call F (var_ref F_retval) ((swiz z (var_ref j) ))) (assign (xyzw) (var_ref x) (var_ref F_retval) ) (declare (temporary ) vec2 J_retval) (call J (var_ref J_retval) ((var_ref F_retval) )) (declare (temporary ) vec2 assignment_tmp@140) (assign (xy) (var_ref assignment_tmp@140) (expression vec2 + (var_ref n) (expression vec2 neg (var_ref J_retval) ) ) ) (declare (temporary ) float dot_retval) (call dot (var_ref dot_retval) ((var_ref assignment_tmp@140) (var_ref assignment_tmp@140) )) (if (expression bool >= (var_ref dot_retval) (constant float (0.010000)) ) ( (discard ) ) ()) (declare (temporary ) float G_retval) (call G (var_ref G_retval) ((var_ref x) )) (assign (x) (var_ref t) (expression float * (var_ref t) (var_ref G_retval) ) ) (declare (temporary ) vec4 texture2D_retval@141) (call texture2D (var_ref texture2D_retval@141) ((var_ref r) (expression vec2 / (var_ref u) (var_ref s) ) )) (declare (temporary ) vec4 assignment_tmp@142) (assign (xyzw) (var_ref assignment_tmp@142) (expression vec4 * (var_ref texture2D_retval@141) (var_ref t) ) ) (if (expression bool all_equal (swiz w (var_ref assignment_tmp@142) )(constant float (0.000000)) ) ( (discard ) ) ()) (declare (temporary ) vec4 C_retval) (call C (var_ref C_retval) ((var_ref assignment_tmp@142) (swiz x (var_ref j) ))) (assign (xyzw) (var_ref gl_FragColor) (var_ref C_retval) ) )) ) (function abs (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function max (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function dot (signature float (parameters (declare (in ) vec2 arg0) (declare (in ) vec2 arg1) ) ( )) ) ) GLSL source for vertex shader 26: uniform vec2 b, g, h; uniform sampler2D c, f; vec2 L(in float C, in float D){ (C = ((C + 0.5) / b[0])); return vec2(fract(C), ((((26.0 * floor(C)) + D) + 0.5) / b[1])); } float N(in vec2 C){ return C[1]; } vec2 T(in vec4 C, in vec2 D, in vec2 E, in bool F){ vec2 G, H, I, J, K; (G = (h / 2.0)); (H = (mod(h, 2.0) / 2.0)); (I = ((G * C.xy) / C[3])); (J = (I + (D * vec2(1.0, -1.0)))); (K = (floor(((J + 0.5) - H)) + H)); (K += ((1.0 - float(F)) * (J - K))); (K += (E * vec2(1.0, -1.0))); return ((K * C[3]) / G); } varying vec2 i; varying vec3 j; varying vec2 l, m, n; attribute vec3 u; attribute vec2 v; attribute vec2 w; attribute vec4 x; attribute vec3 y; attribute float z; attribute vec2 A; attribute vec2 B; uniform mat4 o; uniform bool p; uniform mat2 q; void main(){ (gl_Position = (o * vec4(u, 1.0))); (gl_Position /= gl_Position[3]); (gl_Position[2] = z); (gl_Position[3] = 1.0); vec2 C, E; (C = (q * v)); float D = 1.0; (E = (C + w)); (i = (x.xy / 2.0)); (l = (x.zw / 2.0)); (m = A); (E += B); (n = B); (gl_Position.xy = T(gl_Position, E, (E * (D - 1.0)), p)); (j = y); } GLSL IR for shader 26: ( (declare (uniform ) mat2 q) (declare (uniform ) bool p) (declare (uniform ) mat4 o) (declare (in ) vec2 B) (declare (in ) vec2 A) (declare (in ) float z) (declare (in ) vec3 y) (declare (in ) vec4 x) (declare (in ) vec2 w) (declare (in ) vec2 v) (declare (in ) vec3 u) (declare (out ) vec2 n) (declare (out ) vec2 m) (declare (out ) vec2 l) (declare (out ) vec3 j) (declare (out ) vec2 i) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 h) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function L (signature vec2 (parameters (declare (in ) float C) (declare (in ) float D) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref C) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref C) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref C) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref D) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) (signature vec2 (parameters (declare (in ) vec2 arg0) ) ( )) ) (function N (signature float (parameters (declare (in ) vec2 C) ) ( (return (swiz y (var_ref C) )) )) ) (function T (signature vec2 (parameters (declare (in ) vec4 C) (declare (in ) vec2 D) (declare (in ) vec2 E) (declare (in ) bool F) ) ( (declare () vec2 J) (declare () vec2 H) (declare () vec2 G) (assign (xy) (var_ref G) (expression vec2 / (var_ref h) (constant float (2.000000)) ) ) (declare (temporary ) vec2 mod_retval) (call mod (var_ref mod_retval) ((var_ref h) (constant float (2.000000)) )) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 / (var_ref mod_retval) (constant float (2.000000)) ) ) (assign (xy) (var_ref H) (var_ref assignment_tmp) ) (declare (temporary ) vec2 assignment_tmp@143) (assign (xy) (var_ref assignment_tmp@143) (expression vec2 + (expression vec2 / (expression vec2 * (var_ref G) (swiz xy (var_ref C) )) (swiz w (var_ref C) )) (expression vec2 * (var_ref D) (constant vec2 (1.000000 -1.000000)) ) ) ) (assign (xy) (var_ref J) (var_ref assignment_tmp@143) ) (declare (temporary ) vec2 floor_retval) (call floor (var_ref floor_retval) ((expression vec2 + (expression vec2 + (var_ref assignment_tmp@143) (constant float (0.500000)) ) (expression vec2 neg (var_ref assignment_tmp) ) ) )) (declare (temporary ) vec2 assignment_tmp@144) (assign (xy) (var_ref assignment_tmp@144) (expression vec2 + (var_ref floor_retval) (var_ref H) ) ) (return (expression vec2 / (expression vec2 * (expression vec2 + (expression vec2 + (var_ref assignment_tmp@144) (expression vec2 * (expression float + (constant float (1.000000)) (expression float neg (expression float b2f (var_ref F) ) ) ) (expression vec2 + (var_ref J) (expression vec2 neg (var_ref assignment_tmp@144) ) ) ) ) (expression vec2 * (var_ref E) (constant vec2 (1.000000 -1.000000)) ) ) (swiz w (var_ref C) )) (var_ref G) ) ) )) ) (function mod (signature vec2 (parameters (declare (in ) vec2 arg0) (declare (in ) float arg1) ) ( )) ) (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor) (assign (w) (var_ref vec_ctor) (constant float (1.000000)) ) (assign (xyz) (var_ref vec_ctor) (var_ref u) ) (declare (temporary ) vec4 assignment_tmp) (assign (xyzw) (var_ref assignment_tmp) (expression vec4 * (var_ref o) (var_ref vec_ctor) ) ) (assign (xy) (var_ref gl_Position) (swiz xy (expression vec4 / (var_ref assignment_tmp) (swiz w (var_ref assignment_tmp) )) )) (assign (z) (var_ref gl_Position) (var_ref z) ) (assign (w) (var_ref gl_Position) (constant float (1.000000)) ) (assign (xy) (var_ref i) (expression vec2 / (swiz xy (var_ref x) )(constant float (2.000000)) ) ) (assign (xy) (var_ref l) (expression vec2 / (swiz zw (var_ref x) )(constant float (2.000000)) ) ) (assign (xy) (var_ref m) (var_ref A) ) (assign (xy) (var_ref n) (var_ref B) ) (declare (temporary ) vec2 T_retval) (call T (var_ref T_retval) ((var_ref gl_Position) (expression vec2 + (expression vec2 + (expression vec2 * (var_ref q) (var_ref v) ) (var_ref w) ) (var_ref B) ) (constant vec2 (0.000000 0.000000)) (var_ref p) )) (assign (xy) (var_ref gl_Position) (var_ref T_retval) ) (assign (xyz) (var_ref j) (var_ref y) ) )) ) ) GLSL IR for linked vertex program 27: ( (declare (uniform ) mat2 q) (declare (uniform ) bool p) (declare (uniform ) mat4 o) (declare (in ) vec2 B) (declare (in ) vec2 A) (declare (in ) float z) (declare (in ) vec3 y) (declare (in ) vec4 x) (declare (in ) vec2 w) (declare (in ) vec2 v) (declare (in ) vec3 u) (declare (out ) vec2 n) (declare (out ) vec2 m) (declare (out ) vec2 l) (declare (out ) vec3 j) (declare (out ) vec2 i) (declare (uniform ) vec2 h) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare (temporary ) vec4 flattening_tmp) (assign (xyzw) (var_ref flattening_tmp) (expression vec4 + (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref o) (constant int (0)) ) (swiz x (var_ref u) )) (expression vec4 * (array_ref (var_ref o) (constant int (1)) ) (swiz y (var_ref u) )) ) (expression vec4 * (array_ref (var_ref o) (constant int (2)) ) (swiz z (var_ref u) )) ) (array_ref (var_ref o) (constant int (3)) ) ) ) (assign (xy) (var_ref gl_Position) (swiz xy (expression vec4 * (var_ref flattening_tmp) (expression float rcp (swiz w (var_ref flattening_tmp) )) ) )) (assign (z) (var_ref gl_Position) (var_ref z) ) (assign (w) (var_ref gl_Position) (constant float (1.000000)) ) (assign (xy) (var_ref i) (expression vec2 * (swiz xy (var_ref x) )(constant float (0.500000)) ) ) (assign (xy) (var_ref l) (expression vec2 * (swiz zw (var_ref x) )(constant float (0.500000)) ) ) (assign (xy) (var_ref m) (var_ref A) ) (assign (xy) (var_ref n) (var_ref B) ) (declare () vec2 G) (assign (xy) (var_ref G) (expression vec2 * (var_ref h) (constant float (0.500000)) ) ) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 fract (expression vec2 * (var_ref h) (constant float (0.500000)) ) ) ) (declare (temporary ) vec2 assignment_tmp@145) (assign (xy) (var_ref assignment_tmp@145) (expression vec2 + (expression vec2 * (var_ref G) (swiz xy (var_ref gl_Position) )) (expression vec2 * (expression vec2 + (expression vec2 + (expression vec2 + (expression vec2 * (array_ref (var_ref q) (constant int (0)) ) (swiz x (var_ref v) )) (expression vec2 * (array_ref (var_ref q) (constant int (1)) ) (swiz y (var_ref v) )) ) (var_ref w) ) (var_ref B) ) (constant vec2 (1.000000 -1.000000)) ) ) ) (declare (temporary ) vec2 assignment_tmp@146) (assign (xy) (var_ref assignment_tmp@146) (expression vec2 + (expression vec2 floor (expression vec2 + (expression vec2 + (var_ref assignment_tmp@145) (constant float (0.500000)) ) (expression vec2 neg (var_ref assignment_tmp) ) ) ) (var_ref assignment_tmp) ) ) (assign (xy) (var_ref gl_Position) (expression vec2 * (expression vec2 + (var_ref assignment_tmp@146) (expression vec2 * (expression float + (constant float (1.000000)) (expression float neg (expression float b2f (var_ref p) ) ) ) (expression vec2 + (var_ref assignment_tmp@145) (expression vec2 neg (var_ref assignment_tmp@146) ) ) ) ) (expression vec2 rcp (var_ref G) ) ) ) (assign (xyz) (var_ref j) (var_ref y) ) (assign (xy) (var_ref l@147) (var_ref l) ) (assign (xy) (var_ref m@148) (var_ref m) ) (assign (xy) (var_ref n@149) (var_ref n) ) (assign (xyzw) (var_ref gl_Position@150) (var_ref gl_Position) ) (assign (xy) (var_ref i@151) (var_ref i) ) (assign (xyz) (var_ref j@152) (var_ref j) ) )) ) ) GLSL IR for linked fragment program 27: ( (declare (in ) vec2 n) (declare (in ) vec2 m) (declare (in ) vec2 l) (declare (in ) vec3 j) (declare (in ) vec2 i) (declare (uniform ) sampler2D r) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 s) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (expression float + (swiz y (var_ref j) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref b) )) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float fract (var_ref assignment_tmp) ) ) (assign (y) (var_ref vec_ctor) (expression float * (expression float + (constant float (25.500000)) (expression float * (constant float (26.000000)) (expression float floor (var_ref assignment_tmp) ) ) ) (expression float rcp (swiz y (var_ref b) )) ) ) (declare (temporary ) vec4 texture2D_retval) (assign (xyzw) (var_ref texture2D_retval) (tex vec4 (var_ref c) (var_ref vec_ctor) 0 1 () )) (declare (temporary ) float assignment_tmp@153) (assign (x) (var_ref assignment_tmp@153) (expression float * (constant float (1.992188)) (swiz x (var_ref texture2D_retval) )) ) (declare (temporary ) float conditional_tmp) (declare (temporary ) bool if_to_cond_assign_then) (assign (x) (var_ref if_to_cond_assign_then) (expression bool < (expression float max (expression float abs (swiz x (var_ref m) )) (expression float abs (swiz y (var_ref m) )) ) (var_ref assignment_tmp@153) ) ) (assign (var_ref if_to_cond_assign_then) (x) (var_ref conditional_tmp) (swiz y (var_ref texture2D_retval) )) (assign (expression bool ! (var_ref if_to_cond_assign_then) ) (x) (var_ref conditional_tmp) (constant float (0.000000)) ) (declare (temporary ) float assignment_tmp@154) (assign (x) (var_ref assignment_tmp@154) (expression float * (expression float + (swiz z (var_ref j) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref g) )) ) ) (declare (temporary ) vec2 vec_ctor@155) (assign (x) (var_ref vec_ctor@155) (expression float fract (var_ref assignment_tmp@154) ) ) (assign (y) (var_ref vec_ctor@155) (expression float * (expression float + (expression float floor (var_ref assignment_tmp@154) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref g) )) ) ) (declare (temporary ) vec4 floor_retval) (assign (xyzw) (var_ref floor_retval) (expression vec4 floor (expression vec4 + (constant float (0.500000)) (expression vec4 * (constant float (255.000000)) (tex vec4 (var_ref f) (var_ref vec_ctor@155) 0 1 () )) ) ) ) (declare (temporary ) vec2 vec_ctor@156) (assign (x) (var_ref vec_ctor@156) (expression float + (expression float * (expression float + (expression float * (swiz y (var_ref floor_retval) )(constant float (16.000000)) ) (expression float floor (expression float * (swiz w (var_ref floor_retval) )(constant float (0.062500)) ) ) ) (constant float (0.500000)) ) (constant float (-1023.000000)) ) ) (assign (y) (var_ref vec_ctor@156) (expression float + (expression float * (expression float + (expression float * (swiz z (var_ref floor_retval) )(constant float (16.000000)) ) (expression float * (constant float (16.000000)) (expression float fract (expression float * (swiz w (var_ref floor_retval) )(constant float (0.062500)) ) ) ) ) (constant float (0.500000)) ) (constant float (-1023.000000)) ) ) (declare (temporary ) vec2 assignment_tmp@157) (assign (xy) (var_ref assignment_tmp@157) (expression vec2 + (var_ref n) (expression vec2 neg (var_ref vec_ctor@156) ) ) ) (declare (temporary ) bool discard_cond_temp) (assign (x) (var_ref discard_cond_temp) (constant bool (0)) ) (assign (expression bool >= (expression float dot (var_ref assignment_tmp@157) (var_ref assignment_tmp@157) ) (constant float (0.010000)) ) (x) (var_ref discard_cond_temp) (constant bool (1)) ) (discard (var_ref discard_cond_temp) ) (declare (temporary ) vec4 assignment_tmp@158) (assign (xyzw) (var_ref assignment_tmp@158) (expression vec4 * (tex vec4 (var_ref r) (expression vec2 * (expression vec2 + (var_ref i) (expression vec2 * (var_ref l) (expression float rcp (var_ref assignment_tmp@153) ) ) ) (expression vec2 rcp (var_ref s) ) ) 0 1 () )(expression float * (var_ref conditional_tmp) (expression float * (constant float (1.032258)) (expression float fract (expression float * (swiz x (var_ref floor_retval) )(constant float (0.031250)) ) ) ) ) ) ) (declare (temporary ) bool discard_cond_temp@159) (assign (x) (var_ref discard_cond_temp@159) (constant bool (0)) ) (assign (expression bool all_equal (swiz w (var_ref assignment_tmp@158) )(constant float (0.000000)) ) (x) (var_ref discard_cond_temp@159) (constant bool (1)) ) (discard (var_ref discard_cond_temp@159) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref assignment_tmp@158) ) (assign (xyzw) (var_ref gl_FragColor@160) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL IN[5] DCL IN[6] DCL IN[7] DCL OUT[0], POSITION DCL OUT[1], GENERIC[12] DCL OUT[2], GENERIC[13] DCL OUT[3], GENERIC[14] DCL OUT[4], GENERIC[15] DCL OUT[5], GENERIC[16] DCL CONST[0..7] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL IMM FLT32 { 1.0000, 0.5000, -1.0000, 0.0000} 0: MUL TEMP[0], CONST[3], IN[7].xxxx 1: MAD TEMP[0], CONST[4], IN[7].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[5], IN[7].zzzz, TEMP[0] 3: ADD TEMP[0], TEMP[0], CONST[6] 4: RCP TEMP[1].x, TEMP[0].wwww 5: MUL TEMP[0].xy, TEMP[0], TEMP[1].xxxx 6: MOV TEMP[1].z, IN[2].xxxx 7: MOV TEMP[1].w, IMM[0].xxxx 8: MUL TEMP[2].xy, IN[4].xyyy, IMM[0].yyyy 9: MUL TEMP[3].xy, IN[4].zwww, IMM[0].yyyy 10: MUL TEMP[4].xy, CONST[7].xyyy, IMM[0].yyyy 11: MUL TEMP[5].xy, CONST[7].xyyy, IMM[0].yyyy 12: FRC TEMP[5].xy, TEMP[5].xyyy 13: MUL TEMP[6].xy, CONST[0].xyyy, IN[6].xxxx 14: MAD TEMP[6].xy, CONST[1].xyyy, IN[6].yyyy, TEMP[6].xyyy 15: ADD TEMP[6].xy, TEMP[6].xyyy, IN[5].xyyy 16: ADD TEMP[6].xy, TEMP[6].xyyy, IN[0].xyyy 17: MUL TEMP[0].xy, TEMP[4].xyyy, TEMP[0].xyyy 18: MAD TEMP[0].xy, TEMP[6].xyyy, IMM[0].xzzz, TEMP[0].xyyy 19: ADD TEMP[6].xy, TEMP[0].xyyy, IMM[0].yyyy 20: ADD TEMP[6].xy, TEMP[6].xyyy, -TEMP[5].xyyy 21: FLR TEMP[6].xy, TEMP[6].xyyy 22: ADD TEMP[5].xy, TEMP[6].xyyy, TEMP[5].xyyy 23: ADD TEMP[6].x, IMM[0].xxxx, -CONST[2].xxxx 24: ADD TEMP[0].xy, TEMP[0].xyyy, -TEMP[5].xyyy 25: MAD TEMP[0].xy, TEMP[6].xxxx, TEMP[0].xyyy, TEMP[5].xyyy 26: RCP TEMP[5].x, TEMP[4].xxxx 27: RCP TEMP[5].y, TEMP[4].yyyy 28: MUL TEMP[1].xy, TEMP[0].xyyy, TEMP[5].xyyy 29: MOV OUT[3].xy, TEMP[3].xyxx 30: MOV OUT[2].xy, IN[1].xyxx 31: MOV OUT[1].xy, IN[0].xyxx 32: MOV OUT[0], TEMP[1] 33: MOV OUT[5].xy, TEMP[2].xyxx 34: MOV OUT[4].xyz, IN[3].xyzx 35: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[3], input[7].xxxx; 1: MAD temp[0], const[4], input[7].yyyy, temp[0]; 2: MAD temp[0], const[5], input[7].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[6]; 4: RCP temp[1].x, temp[0].wwww; 5: MUL temp[0].xy, temp[0], temp[1].xxxx; 6: MOV temp[1].z, input[2].xxxx; 7: MOV temp[1].w, const[8].xxxx; 8: MUL temp[2].xy, input[4].xyyy, const[8].yyyy; 9: MUL temp[3].xy, input[4].zwww, const[8].yyyy; 10: MUL temp[4].xy, const[7].xyyy, const[8].yyyy; 11: MUL temp[5].xy, const[7].xyyy, const[8].yyyy; 12: FRC temp[5].xy, temp[5].xyyy; 13: MUL temp[6].xy, const[0].xyyy, input[6].xxxx; 14: MAD temp[6].xy, const[1].xyyy, input[6].yyyy, temp[6].xyyy; 15: ADD temp[6].xy, temp[6].xyyy, input[5].xyyy; 16: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 17: MUL temp[0].xy, temp[4].xyyy, temp[0].xyyy; 18: MAD temp[0].xy, temp[6].xyyy, const[8].xzzz, temp[0].xyyy; 19: ADD temp[6].xy, temp[0].xyyy, const[8].yyyy; 20: ADD temp[6].xy, temp[6].xyyy, -temp[5].xyyy; 21: FLR temp[6].xy, temp[6].xyyy; 22: ADD temp[5].xy, temp[6].xyyy, temp[5].xyyy; 23: ADD temp[6].x, const[8].xxxx, -const[2].xxxx; 24: ADD temp[0].xy, temp[0].xyyy, -temp[5].xyyy; 25: MAD temp[0].xy, temp[6].xxxx, temp[0].xyyy, temp[5].xyyy; 26: RCP temp[5].x, temp[4].xxxx; 27: RCP temp[5].y, temp[4].yyyy; 28: MUL temp[1].xy, temp[0].xyyy, temp[5].xyyy; 29: MOV output[3].xy, temp[3].xyxx; 30: MOV output[2].xy, input[1].xyxx; 31: MOV output[1].xy, input[0].xyxx; 32: MOV temp[7], temp[1]; 33: MOV output[5].xy, temp[2].xyxx; 34: MOV output[4].xyz, input[3].xyzx; 35: MOV output[0], temp[7]; 36: MOV output[6], temp[7]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[3], input[7].xxxx; 1: MAD temp[0], const[4], input[7].yyyy, temp[0]; 2: MAD temp[0], const[5], input[7].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[6]; 4: RCP temp[1].x, temp[0].wwww; 5: MUL temp[0].xy, temp[0], temp[1].xxxx; 6: MOV temp[1].z, input[2].xxxx; 7: MOV temp[1].w, const[8].xxxx; 8: MUL temp[2].xy, input[4].xyyy, const[8].yyyy; 9: MUL temp[3].xy, input[4].zwww, const[8].yyyy; 10: MUL temp[4].xy, const[7].xyyy, const[8].yyyy; 11: MUL temp[5].xy, const[7].xyyy, const[8].yyyy; 12: FRC temp[5].xy, temp[5].xyyy; 13: MUL temp[6].xy, const[0].xyyy, input[6].xxxx; 14: MAD temp[6].xy, const[1].xyyy, input[6].yyyy, temp[6].xyyy; 15: ADD temp[6].xy, temp[6].xyyy, input[5].xyyy; 16: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 17: MUL temp[0].xy, temp[4].xyyy, temp[0].xyyy; 18: MAD temp[0].xy, temp[6].xyyy, const[8].xzzz, temp[0].xyyy; 19: ADD temp[6].xy, temp[0].xyyy, const[8].yyyy; 20: ADD temp[6].xy, temp[6].xyyy, -temp[5].xyyy; 21: FLR temp[6].xy, temp[6].xyyy; 22: ADD temp[5].xy, temp[6].xyyy, temp[5].xyyy; 23: ADD temp[6].x, const[8].xxxx, -const[2].xxxx; 24: ADD temp[0].xy, temp[0].xyyy, -temp[5].xyyy; 25: MAD temp[0].xy, temp[6].xxxx, temp[0].xyyy, temp[5].xyyy; 26: RCP temp[5].x, temp[4].xxxx; 27: RCP temp[5].y, temp[4].yyyy; 28: MUL temp[1].xy, temp[0].xyyy, temp[5].xyyy; 29: MOV output[3].xy, temp[3].xyxx; 30: MOV output[2].xy, input[1].xyxx; 31: MOV output[1].xy, input[0].xyxx; 32: MOV temp[7], temp[1]; 33: MOV output[5].xy, temp[2].xyxx; 34: MOV output[4].xyz, input[3].xyzx; 35: MOV output[0], temp[7]; 36: MOV output[6], temp[7]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[3], input[7].xxxx; 1: MAD temp[0], const[4], input[7].yyyy, temp[0]; 2: MAD temp[0], const[5], input[7].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[6]; 4: RCP temp[1].x, temp[0].wwww; 5: MUL temp[0].xy, temp[0], temp[1].xxxx; 6: MOV temp[1].z, input[2].xxxx; 7: MOV temp[1].w, const[8].xxxx; 8: MUL temp[2].xy, input[4].xyyy, const[8].yyyy; 9: MUL temp[3].xy, input[4].zwww, const[8].yyyy; 10: MUL temp[4].xy, const[7].xyyy, const[8].yyyy; 11: MUL temp[5].xy, const[7].xyyy, const[8].yyyy; 12: FRC temp[5].xy, temp[5].xyyy; 13: MUL temp[6].xy, const[0].xyyy, input[6].xxxx; 14: MAD temp[6].xy, const[1].xyyy, input[6].yyyy, temp[6].xyyy; 15: ADD temp[6].xy, temp[6].xyyy, input[5].xyyy; 16: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 17: MUL temp[0].xy, temp[4].xyyy, temp[0].xyyy; 18: MAD temp[0].xy, temp[6].xyyy, const[8].xzzz, temp[0].xyyy; 19: ADD temp[6].xy, temp[0].xyyy, const[8].yyyy; 20: ADD temp[6].xy, temp[6].xyyy, -temp[5].xyyy; 21: FLR temp[6].xy, temp[6].xyyy; 22: ADD temp[5].xy, temp[6].xyyy, temp[5].xyyy; 23: ADD temp[6].x, const[8].xxxx, -const[2].xxxx; 24: ADD temp[0].xy, temp[0].xyyy, -temp[5].xyyy; 25: MAD temp[0].xy, temp[6].xxxx, temp[0].xyyy, temp[5].xyyy; 26: RCP temp[5].x, temp[4].xxxx; 27: RCP temp[5].y, temp[4].yyyy; 28: MUL temp[1].xy, temp[0].xyyy, temp[5].xyyy; 29: MOV output[3].xy, temp[3].xyxx; 30: MOV output[2].xy, input[1].xyxx; 31: MOV output[1].xy, input[0].xyxx; 32: MOV temp[7], temp[1]; 33: MOV output[5].xy, temp[2].xyxx; 34: MOV output[4].xyz, input[3].xyzx; 35: MOV output[0], temp[7]; 36: MOV output[6], temp[7]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[3], input[7].xxxx; 1: MAD temp[0], const[4], input[7].yyyy, temp[0]; 2: MAD temp[0], const[5], input[7].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[6]; 4: RCP temp[1].x, temp[0].wwww; 5: MUL temp[0].xy, temp[0], temp[1].xxxx; 6: MOV temp[1].z, input[2].xxxx; 7: MOV temp[1].w, const[8].xxxx; 8: MUL temp[2].xy, input[4].xyyy, const[8].yyyy; 9: MUL temp[3].xy, input[4].zwww, const[8].yyyy; 10: MUL temp[4].xy, const[7].xyyy, const[8].yyyy; 11: MUL temp[5].xy, const[7].xyyy, const[8].yyyy; 12: FRC temp[5].xy, temp[5].xyyy; 13: MUL temp[6].xy, const[0].xyyy, input[6].xxxx; 14: MAD temp[6].xy, const[1].xyyy, input[6].yyyy, temp[6].xyyy; 15: ADD temp[6].xy, temp[6].xyyy, input[5].xyyy; 16: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 17: MUL temp[0].xy, temp[4].xyyy, temp[0].xyyy; 18: MAD temp[0].xy, temp[6].xyyy, const[8].xzzz, temp[0].xyyy; 19: ADD temp[6].xy, temp[0].xyyy, const[8].yyyy; 20: ADD temp[6].xy, temp[6].xyyy, -temp[5].xyyy; 21: FRC temp[8].xy, temp[6].xyyy; 22: ADD temp[6].xy, temp[6].xyyy, -temp[8]; 23: ADD temp[5].xy, temp[6].xyyy, temp[5].xyyy; 24: ADD temp[6].x, const[8].xxxx, -const[2].xxxx; 25: ADD temp[0].xy, temp[0].xyyy, -temp[5].xyyy; 26: MAD temp[0].xy, temp[6].xxxx, temp[0].xyyy, temp[5].xyyy; 27: RCP temp[5].x, temp[4].xxxx; 28: RCP temp[5].y, temp[4].yyyy; 29: MUL temp[1].xy, temp[0].xyyy, temp[5].xyyy; 30: MOV output[3].xy, temp[3].xyxx; 31: MOV output[2].xy, input[1].xyxx; 32: MOV output[1].xy, input[0].xyxx; 33: MOV temp[7], temp[1]; 34: MOV output[5].xy, temp[2].xyxx; 35: MOV output[4].xyz, input[3].xyzx; 36: MOV output[0], temp[7]; 37: MOV output[6], temp[7]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[3], input[7].xxxx; 1: MAD temp[0], const[4], input[7].yyyy, temp[0]; 2: MAD temp[0], const[5], input[7].zzzz, temp[0]; 3: ADD temp[0], temp[0], const[6]; 4: RCP temp[1].x, temp[0].wwww; 5: MUL temp[0].xy, temp[0], temp[1].xxxx; 6: MOV temp[1].z, input[2].xxxx; 7: MOV temp[1].w, const[8].xxxx; 8: MUL temp[2].xy, input[4].xyyy, const[8].yyyy; 9: MUL temp[3].xy, input[4].zwww, const[8].yyyy; 10: MUL temp[4].xy, const[7].xyyy, const[8].yyyy; 11: MUL temp[5].xy, const[7].xyyy, const[8].yyyy; 12: FRC temp[5].xy, temp[5].xyyy; 13: MUL temp[6].xy, const[0].xyyy, input[6].xxxx; 14: MAD temp[6].xy, const[1].xyyy, input[6].yyyy, temp[6].xyyy; 15: ADD temp[6].xy, temp[6].xyyy, input[5].xyyy; 16: ADD temp[6].xy, temp[6].xyyy, input[0].xyyy; 17: MUL temp[0].xy, temp[4].xyyy, temp[0].xyyy; 18: MAD temp[0].xy, temp[6].xyyy, const[8].xzzz, temp[0].xyyy; 19: ADD temp[6].xy, temp[0].xyyy, const[8].yyyy; 20: ADD temp[6].xy, temp[6].xyyy, -temp[5].xyyy; 21: FRC temp[8].xy, temp[6].xyyy; 22: ADD temp[6].xy, temp[6].xyyy, -temp[8]; 23: ADD temp[5].xy, temp[6].xyyy, temp[5].xyyy; 24: ADD temp[6].x, const[8].xxxx, -const[2].xxxx; 25: ADD temp[0].xy, temp[0].xyyy, -temp[5].xyyy; 26: MAD temp[0].xy, temp[6].xxxx, temp[0].xyyy, temp[5].xyyy; 27: RCP temp[5].x, temp[4].xxxx; 28: RCP temp[5].y, temp[4].yyyy; 29: MUL temp[1].xy, temp[0].xyyy, temp[5].xyyy; 30: MOV output[3].xy, temp[3].xyxx; 31: MOV output[2].xy, input[1].xyxx; 32: MOV output[1].xy, input[0].xyxx; 33: MOV temp[7], temp[1]; 34: MOV output[5].xy, temp[2].xyxx; 35: MOV output[4].xyz, input[3].xyzx; 36: MOV output[0], temp[7]; 37: MOV output[6], temp[7]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xyw, const[3].xy_w, input[7].xx_x; 1: MAD temp[0].xyw, const[4].xy_w, input[7].yy_y, temp[0].xy_w; 2: MAD temp[0].xyw, const[5].xy_w, input[7].zz_z, temp[0].xy_w; 3: ADD temp[0].xyw, temp[0].xy_w, const[6].xy_w; 4: RCP temp[1].x, temp[0].w___; 5: MUL temp[0].xy, temp[0].xy__, temp[1].xx__; 6: MOV temp[1].z, input[2].__x_; 7: MOV temp[1].w, const[8].___x; 8: MUL temp[2].xy, input[4].xy__, const[8].yy__; 9: MUL temp[3].xy, input[4].zw__, const[8].yy__; 10: MUL temp[4].xy, const[7].xy__, const[8].yy__; 11: MUL temp[5].xy, const[7].xy__, const[8].yy__; 12: FRC temp[5].xy, temp[5].xy__; 13: MUL temp[6].xy, const[0].xy__, input[6].xx__; 14: MAD temp[6].xy, const[1].xy__, input[6].yy__, temp[6].xy__; 15: ADD temp[6].xy, temp[6].xy__, input[5].xy__; 16: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 17: MUL temp[0].xy, temp[4].xy__, temp[0].xy__; 18: MAD temp[0].xy, temp[6].xy__, const[8].xz__, temp[0].xy__; 19: ADD temp[6].xy, temp[0].xy__, const[8].yy__; 20: ADD temp[6].xy, temp[6].xy__, -temp[5].xy__; 21: FRC temp[8].xy, temp[6].xy__; 22: ADD temp[6].xy, temp[6].xy__, -temp[8].xy__; 23: ADD temp[5].xy, temp[6].xy__, temp[5].xy__; 24: ADD temp[6].x, const[8].x___, -const[2].x___; 25: ADD temp[0].xy, temp[0].xy__, -temp[5].xy__; 26: MAD temp[0].xy, temp[6].xx__, temp[0].xy__, temp[5].xy__; 27: RCP temp[5].x, temp[4].x___; 28: RCP temp[5].y, temp[4]._y__; 29: MUL temp[1].xy, temp[0].xy__, temp[5].xy__; 30: MOV output[3].xy, temp[3].xy__; 31: MOV output[2].xy, input[1].xy__; 32: MOV output[1].xy, input[0].xy__; 33: MOV temp[7], temp[1]; 34: MOV output[5].xy, temp[2].xy__; 35: MOV output[4].xyz, input[3].xyz_; 36: MOV output[0], temp[7]; 37: MOV output[6], temp[7]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xyw, const[3].xy_w, input[7].xx_x; 1: MAD temp[0].xyw, const[4].xy_w, input[7].yy_y, temp[0].xy_w; 2: MAD temp[0].xyw, const[5].xy_w, input[7].zz_z, temp[0].xy_w; 3: ADD temp[0].xyw, temp[0].xy_w, const[6].xy_w; 4: RCP temp[1].x, temp[0].w___; 5: MUL temp[0].xy, temp[0].xy__, temp[1].xx__; 6: MOV temp[1].z, input[2].__x_; 7: MOV temp[1].w, none.___1; 8: MUL temp[2].xy, input[4].xy__, const[8].yy__; 9: MUL temp[3].xy, input[4].zw__, const[8].yy__; 10: MUL temp[4].xy, const[7].xy__, const[8].yy__; 11: MUL temp[5].xy, const[7].xy__, const[8].yy__; 12: FRC temp[5].xy, temp[5].xy__; 13: MUL temp[6].xy, const[0].xy__, input[6].xx__; 14: MAD temp[6].xy, const[1].xy__, input[6].yy__, temp[6].xy__; 15: ADD temp[6].xy, temp[6].xy__, input[5].xy__; 16: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 17: MUL temp[0].xy, temp[4].xy__, temp[0].xy__; 18: MAD temp[0].xy, temp[6].xy__, none.1-1__, temp[0].xy__; 19: ADD temp[6].xy, temp[0].xy__, const[8].yy__; 20: ADD temp[6].xy, temp[6].xy__, -temp[5].xy__; 21: FRC temp[8].xy, temp[6].xy__; 22: ADD temp[6].xy, temp[6].xy__, -temp[8].xy__; 23: ADD temp[5].xy, temp[6].xy__, temp[5].xy__; 24: ADD temp[6].x, none.1___, -const[2].x___; 25: ADD temp[0].xy, temp[0].xy__, -temp[5].xy__; 26: MAD temp[0].xy, temp[6].xx__, temp[0].xy__, temp[5].xy__; 27: RCP temp[5].x, temp[4].x___; 28: RCP temp[5].y, temp[4]._y__; 29: MUL temp[1].xy, temp[0].xy__, temp[5].xy__; 30: MOV output[3].xy, temp[3].xy__; 31: MOV output[2].xy, input[1].xy__; 32: MOV output[1].xy, input[0].xy__; 33: MOV output[5].xy, temp[2].xy__; 34: MOV output[4].xyz, input[3].xyz_; 35: MOV output[0], temp[1]; 36: MOV output[6], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0].xyw, const[3].xy_w, input[7].xx_x; 1: MAD temp[0].xyw, const[4].xy_w, input[7].yy_y, temp[0].xy_w; 2: MAD temp[0].xyw, const[5].xy_w, input[7].zz_z, temp[0].xy_w; 3: ADD temp[0].xyw, temp[0].xy_w, const[6].xy_w; 4: RCP temp[1].x, temp[0].w___; 5: MUL temp[0].xy, temp[0].xy__, temp[1].xx__; 6: MOV temp[1].z, input[2].__x_; 7: MOV temp[1].w, none.___1; 8: MUL temp[2].xy, input[4].xy__, const[8].yy__; 9: MUL temp[3].xy, input[4].zw__, const[8].yy__; 10: MOV temp[7], const[8].yy__; 11: MUL temp[4].xy, const[7].xy__, temp[7]; 12: MOV temp[9], const[8].yy__; 13: MUL temp[5].xy, const[7].xy__, temp[9]; 14: FRC temp[5].xy, temp[5].xy__; 15: MUL temp[6].xy, const[0].xy__, input[6].xx__; 16: MAD temp[6].xy, const[1].xy__, input[6].yy__, temp[6].xy__; 17: ADD temp[6].xy, temp[6].xy__, input[5].xy__; 18: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 19: MUL temp[0].xy, temp[4].xy__, temp[0].xy__; 20: MAD temp[0].xy, temp[6].xy__, none.1-1__, temp[0].xy__; 21: ADD temp[6].xy, temp[0].xy__, const[8].yy__; 22: ADD temp[6].xy, temp[6].xy__, -temp[5].xy__; 23: FRC temp[8].xy, temp[6].xy__; 24: ADD temp[6].xy, temp[6].xy__, -temp[8].xy__; 25: ADD temp[5].xy, temp[6].xy__, temp[5].xy__; 26: ADD temp[6].x, none.1___, -const[2].x___; 27: ADD temp[0].xy, temp[0].xy__, -temp[5].xy__; 28: MAD temp[0].xy, temp[6].xx__, temp[0].xy__, temp[5].xy__; 29: RCP temp[5].x, temp[4].x___; 30: RCP temp[5].y, temp[4]._y__; 31: MUL temp[1].xy, temp[0].xy__, temp[5].xy__; 32: MOV output[3].xy, temp[3].xy__; 33: MOV output[2].xy, input[1].xy__; 34: MOV output[1].xy, input[0].xy__; 35: MOV output[5].xy, temp[2].xy__; 36: MOV output[4].xyz, input[3].xyz_; 37: MOV output[0], temp[1]; 38: MOV output[6], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0].xyw, const[3].xy_w, input[7].xx_x; 1: MAD temp[0].xyw, const[4].xy_w, input[7].yy_y, temp[0].xy_w; 2: MAD temp[0].xyw, const[5].xy_w, input[7].zz_z, temp[0].xy_w; 3: ADD temp[0].xyw, temp[0].xy_w, const[6].xy_w; 4: RCP temp[1].x, temp[0].w___; 5: MUL temp[0].xy, temp[0].xy__, temp[1].xx__; 6: MOV temp[1].z, input[2].__x_; 7: MOV temp[1].w, none.___1; 8: MUL temp[2].xy, input[4].xy__, const[8].yy__; 9: MUL temp[3].xy, input[4].zw__, const[8].yy__; 10: MOV temp[4], const[8].yy__; 11: MUL temp[4].xy, const[7].xy__, temp[4]; 12: MOV temp[5], const[8].yy__; 13: MUL temp[5].xy, const[7].xy__, temp[5]; 14: FRC temp[5].xy, temp[5].xy__; 15: MUL temp[6].xy, const[0].xy__, input[6].xx__; 16: MAD temp[6].xy, const[1].xy__, input[6].yy__, temp[6].xy__; 17: ADD temp[6].xy, temp[6].xy__, input[5].xy__; 18: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 19: MUL temp[0].xy, temp[4].xy__, temp[0].xy__; 20: MAD temp[0].xy, temp[6].xy__, none.1-1__, temp[0].xy__; 21: ADD temp[6].xy, temp[0].xy__, const[8].yy__; 22: ADD temp[6].xy, temp[6].xy__, -temp[5].xy__; 23: FRC temp[7].xy, temp[6].xy__; 24: ADD temp[6].xy, temp[6].xy__, -temp[7].xy__; 25: ADD temp[5].xy, temp[6].xy__, temp[5].xy__; 26: ADD temp[6].x, none.1___, -const[2].x___; 27: ADD temp[0].xy, temp[0].xy__, -temp[5].xy__; 28: MAD temp[0].xy, temp[6].xx__, temp[0].xy__, temp[5].xy__; 29: RCP temp[5].x, temp[4].x___; 30: RCP temp[5].y, temp[4]._y__; 31: MUL temp[1].xy, temp[0].xy__, temp[5].xy__; 32: MOV output[3].xy, temp[3].xy__; 33: MOV output[2].xy, input[1].xy__; 34: MOV output[1].xy, input[0].xy__; 35: MOV output[5].xy, temp[2].xy__; 36: MOV output[4].xyz, input[3].xyz_; 37: MOV output[0], temp[1]; 38: MOV output[6], temp[1]; CONST[8] = { 1.0000 0.5000 -1.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xyw, const[3].xy_w, input[7].xx_x; 1: MAD temp[0].xyw, const[4].xy_w, input[7].yy_y, temp[0].xy_w; 2: MAD temp[0].xyw, const[5].xy_w, input[7].zz_z, temp[0].xy_w; 3: ADD temp[0].xyw, temp[0].xy_w, const[6].xy_w; 4: RCP temp[1].x, temp[0].w___; 5: MUL temp[0].xy, temp[0].xy__, temp[1].xx__; 6: MOV temp[1].z, input[2].__x_; 7: MOV temp[1].w, none.___1; 8: MUL temp[2].xy, input[4].xy__, const[8].yy__; 9: MUL temp[3].xy, input[4].zw__, const[8].yy__; 10: MOV temp[4], const[8].yy__; 11: MUL temp[4].xy, const[7].xy__, temp[4]; 12: MOV temp[5], const[8].yy__; 13: MUL temp[5].xy, const[7].xy__, temp[5]; 14: FRC temp[5].xy, temp[5].xy__; 15: MUL temp[6].xy, const[0].xy__, input[6].xx__; 16: MAD temp[6].xy, const[1].xy__, input[6].yy__, temp[6].xy__; 17: ADD temp[6].xy, temp[6].xy__, input[5].xy__; 18: ADD temp[6].xy, temp[6].xy__, input[0].xy__; 19: MUL temp[0].xy, temp[4].xy__, temp[0].xy__; 20: MAD temp[0].xy, temp[6].xy__, none.1-1__, temp[0].xy__; 21: ADD temp[6].xy, temp[0].xy__, const[8].yy__; 22: ADD temp[6].xy, temp[6].xy__, -temp[5].xy__; 23: FRC temp[7].xy, temp[6].xy__; 24: ADD temp[6].xy, temp[6].xy__, -temp[7].xy__; 25: ADD temp[5].xy, temp[6].xy__, temp[5].xy__; 26: ADD temp[6].x, none.1___, -const[2].x___; 27: ADD temp[0].xy, temp[0].xy__, -temp[5].xy__; 28: MAD temp[0].xy, temp[6].xx__, temp[0].xy__, temp[5].xy__; 29: RCP temp[5].x, temp[4].x___; 30: RCP temp[5].y, temp[4]._y__; 31: MUL temp[1].xy, temp[0].xy__, temp[5].xy__; 32: MOV output[3].xy, temp[3].xy__; 33: MOV output[2].xy, input[1].xy__; 34: MOV output[1].xy, input[0].xy__; 35: MOV output[5].xy, temp[2].xy__; 36: MOV output[4].xyz, input[3].xyz_; 37: MOV output[0], temp[1]; 38: MOV output[6], temp[1]; Final vertex program code: 0: op: 0x00b00002 dst: 0t op: VE_MULTIPLY src0: 0x00f90062 reg: 3c swiz: X/ Y/ U/ W src1: 0x003800e1 reg: 7i swiz: X/ X/ U/ X src2: 0x012480e1 reg: 7i swiz: 0/ 0/ 0/ 0 1: op: 0x00b00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00f90082 reg: 4c swiz: X/ Y/ U/ W src1: 0x007920e1 reg: 7i swiz: Y/ Y/ U/ Y src2: 0x00f90000 reg: 0t swiz: X/ Y/ U/ W 2: op: 0x00b00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00f900a2 reg: 5c swiz: X/ Y/ U/ W src1: 0x00ba40e1 reg: 7i swiz: Z/ Z/ U/ Z src2: 0x00f90000 reg: 0t swiz: X/ Y/ U/ W 3: op: 0x00b00003 dst: 0t op: VE_ADD src0: 0x00f90000 reg: 0t swiz: X/ Y/ U/ W src1: 0x00f900c2 reg: 6c swiz: X/ Y/ U/ W src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 4: op: 0x00102046 dst: 1t op: ME_RECIP_DX src0: 0x00db6000 reg: 0t swiz: W/ W/ W/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80020 reg: 1t swiz: X/ X/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 6: op: 0x00402003 dst: 1t op: VE_ADD src0: 0x01c7e041 reg: 2i swiz: U/ U/ X/ U src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 7: op: 0x00802003 dst: 1t op: VE_ADD src0: 0x017fe000 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 8: op: 0x00304002 dst: 2t op: VE_MULTIPLY src0: 0x01f90081 reg: 4i swiz: X/ Y/ U/ U src1: 0x01f92102 reg: 8c swiz: Y/ Y/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 9: op: 0x00306002 dst: 3t op: VE_MULTIPLY src0: 0x01fb4081 reg: 4i swiz: Z/ W/ U/ U src1: 0x01f92102 reg: 8c swiz: Y/ Y/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 10: op: 0x00f08003 dst: 4t op: VE_ADD src0: 0x01f92102 reg: 8c swiz: Y/ Y/ U/ U src1: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 11: op: 0x00308002 dst: 4t op: VE_MULTIPLY src0: 0x01f900e2 reg: 7c swiz: X/ Y/ U/ U src1: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 12: op: 0x00f0a003 dst: 5t op: VE_ADD src0: 0x01f92102 reg: 8c swiz: Y/ Y/ U/ U src1: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 13: op: 0x0030a002 dst: 5t op: VE_MULTIPLY src0: 0x01f900e2 reg: 7c swiz: X/ Y/ U/ U src1: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 14: op: 0x0030a006 dst: 5t op: VE_FRACTION src0: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 15: op: 0x0030c002 dst: 6t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f800c1 reg: 6i swiz: X/ X/ U/ U src2: 0x012480c1 reg: 6i swiz: 0/ 0/ 0/ 0 16: op: 0x0030c004 dst: 6t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f920c1 reg: 6i swiz: Y/ Y/ U/ U src2: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U 17: op: 0x0030c003 dst: 6t op: VE_ADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x01f900a1 reg: 5i swiz: X/ Y/ U/ U src2: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 18: op: 0x0030c003 dst: 6t op: VE_ADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x01f90001 reg: 0i swiz: X/ Y/ U/ U src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 19: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90080 reg: 4t swiz: X/ Y/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 20: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x05fda0c0 reg: 6t swiz: 1/-1/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 21: op: 0x0030c003 dst: 6t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f92102 reg: 8c swiz: Y/ Y/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 22: op: 0x0030c003 dst: 6t op: VE_ADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x1ff900a0 reg: 5t swiz: -X/-Y/-U/-U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 23: op: 0x0030e006 dst: 7t op: VE_FRACTION src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 24: op: 0x0030c003 dst: 6t op: VE_ADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x1ff900e0 reg: 7t swiz: -X/-Y/-U/-U src2: 0x012480e0 reg: 7t swiz: 0/ 0/ 0/ 0 25: op: 0x0030a003 dst: 5t op: VE_ADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 26: op: 0x0010c003 dst: 6t op: VE_ADD src0: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src1: 0x1fff0042 reg: 2c swiz: -X/-U/-U/-U src2: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 27: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x1ff900a0 reg: 5t swiz: -X/-Y/-U/-U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 28: op: 0x00300080 dst: 0t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01f800c0 reg: 6t swiz: X/ X/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U 29: op: 0x0010a046 dst: 5t op: ME_RECIP_DX src0: 0x00000080 reg: 4t swiz: X/ X/ X/ X src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 30: op: 0x0020a046 dst: 5t op: ME_RECIP_DX src0: 0x00492080 reg: 4t swiz: Y/ Y/ Y/ Y src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 31: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 32: op: 0x00306203 dst: 3o op: VE_ADD src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 33: op: 0x00304203 dst: 2o op: VE_ADD src0: 0x01f90021 reg: 1i swiz: X/ Y/ U/ U src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 34: op: 0x00302203 dst: 1o 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 35: op: 0x0030a203 dst: 5o op: VE_ADD src0: 0x01f90040 reg: 2t swiz: X/ Y/ U/ U src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 36: op: 0x00708203 dst: 4o op: VE_ADD src0: 0x01d10061 reg: 3i swiz: X/ Y/ Z/ U src1: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 37: 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 38: op: 0x00f0c203 dst: 6o 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 fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[12], PERSPECTIVE DCL IN[1], GENERIC[13], PERSPECTIVE DCL IN[2], GENERIC[14], PERSPECTIVE DCL IN[3], GENERIC[15], PERSPECTIVE DCL IN[4], GENERIC[16], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[3..5] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL IMM FLT32 { 0.5000, 26.0000, 25.5000, 1.9922} IMM FLT32 { 0.0000, 1.0000, 255.0000, 16.0000} IMM FLT32 { 0.0625, -1023.0000, 0.0100, 1.0323} IMM FLT32 { 0.0312, 0.0000, 0.0000, 0.0000} 0: ADD TEMP[0].x, IN[3].yyyy, IMM[0].xxxx 1: RCP TEMP[1].x, CONST[5].xxxx 2: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[1].xxxx 3: FRC TEMP[1].x, TEMP[0].xxxx 4: FLR TEMP[0].x, TEMP[0].xxxx 5: MAD TEMP[0].x, IMM[0].yyyy, TEMP[0].xxxx, IMM[0].zzzz 6: RCP TEMP[2].x, CONST[5].yyyy 7: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[2].xxxx 8: MOV TEMP[1].y, TEMP[0].xxxx 9: TEX TEMP[0].xy, TEMP[1].xyyy, SAMP[2], 2D 10: MUL TEMP[1].x, IMM[0].wwww, TEMP[0].xxxx 11: ABS TEMP[2].x, IN[1].xxxx 12: ABS TEMP[3].x, IN[1].yyyy 13: MAX TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 14: SLT TEMP[2].x, TEMP[2].xxxx, TEMP[1].xxxx 15: ADD TEMP[2].x, -TEMP[2].xxxx, IMM[1].yyyy 16: CMP TEMP[0].x, -TEMP[2].xxxx, IMM[1].xxxx, TEMP[0].yyyy 17: ADD TEMP[2].x, IN[3].zzzz, IMM[0].xxxx 18: RCP TEMP[3].x, CONST[4].xxxx 19: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 20: FRC TEMP[3].x, TEMP[2].xxxx 21: FLR TEMP[2].x, TEMP[2].xxxx 22: ADD TEMP[2].x, TEMP[2].xxxx, IMM[0].xxxx 23: RCP TEMP[4].x, CONST[4].yyyy 24: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[4].xxxx 25: MOV TEMP[3].y, TEMP[2].xxxx 26: TEX TEMP[2], TEMP[3].xyyy, SAMP[1], 2D 27: MAD TEMP[2], IMM[1].zzzz, TEMP[2], IMM[0].xxxx 28: FLR TEMP[2], TEMP[2] 29: MUL TEMP[3].x, TEMP[2].wwww, IMM[2].xxxx 30: FLR TEMP[3].x, TEMP[3].xxxx 31: MAD TEMP[3].x, TEMP[2].yyyy, IMM[1].wwww, TEMP[3].xxxx 32: MAD TEMP[3].x, TEMP[3].xxxx, IMM[0].xxxx, IMM[2].yyyy 33: MUL TEMP[4].x, TEMP[2].wwww, IMM[2].xxxx 34: FRC TEMP[4].x, TEMP[4].xxxx 35: MUL TEMP[5].x, TEMP[2].zzzz, IMM[1].wwww 36: MAD TEMP[4].x, IMM[1].wwww, TEMP[4].xxxx, TEMP[5].xxxx 37: MAD TEMP[4].x, TEMP[4].xxxx, IMM[0].xxxx, IMM[2].yyyy 38: MOV TEMP[3].y, TEMP[4].xxxx 39: ADD TEMP[3].xy, IN[0].xyyy, -TEMP[3].xyyy 40: DP2 TEMP[4].x, TEMP[3].xyyy, TEMP[3].xyyy 41: SGE TEMP[4].x, TEMP[4].xxxx, IMM[2].zzzz 42: CMP TEMP[3].x, -TEMP[4].xxxx, IMM[1].yyyy, IMM[1].xxxx 43: KIL -TEMP[3].xxxx 44: RCP TEMP[1].x, TEMP[1].xxxx 45: MAD TEMP[1].xy, IN[2].xyyy, TEMP[1].xxxx, IN[4].xyyy 46: RCP TEMP[3].x, CONST[3].xxxx 47: RCP TEMP[3].y, CONST[3].yyyy 48: MUL TEMP[1].xy, TEMP[1].xyyy, TEMP[3].xyyy 49: TEX TEMP[1], TEMP[1].xyyy, SAMP[0], 2D 50: MUL TEMP[2].x, TEMP[2].xxxx, IMM[3].xxxx 51: FRC TEMP[2].x, TEMP[2].xxxx 52: MUL TEMP[2].x, IMM[2].wwww, TEMP[2].xxxx 53: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[2].xxxx 54: MUL TEMP[0], TEMP[1], TEMP[0].xxxx 55: SEQ TEMP[2].x, TEMP[0].wwww, IMM[1].xxxx 56: CMP TEMP[1].x, -TEMP[2].xxxx, IMM[1].yyyy, IMM[1].xxxx 57: KIL -TEMP[1].xxxx 58: MOV OUT[0], TEMP[0] 59: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].x, input[3].yyyy, const[6].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[6].yyyy, temp[0].xxxx, const[6].zzzz; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0].xy, temp[1].xyyy, 2D[2]; 10: MUL temp[1].x, const[6].wwww, temp[0].xxxx; 11: ABS temp[2].x, input[1].xxxx; 12: ABS temp[3].x, input[1].yyyy; 13: MAX temp[2].x, temp[2].xxxx, temp[3].xxxx; 14: SLT temp[2].x, temp[2].xxxx, temp[1].xxxx; 15: ADD temp[2].x, -temp[2].xxxx, const[7].yyyy; 16: CMP temp[0].x, -temp[2].xxxx, const[7].xxxx, temp[0].yyyy; 17: ADD temp[2].x, input[3].zzzz, const[6].xxxx; 18: RCP temp[3].x, const[4].xxxx; 19: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 20: FRC temp[3].x, temp[2].xxxx; 21: FLR temp[2].x, temp[2].xxxx; 22: ADD temp[2].x, temp[2].xxxx, const[6].xxxx; 23: RCP temp[4].x, const[4].yyyy; 24: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 25: MOV temp[3].y, temp[2].xxxx; 26: TEX temp[2], temp[3].xyyy, 2D[1]; 27: MAD temp[2], const[7].zzzz, temp[2], const[6].xxxx; 28: FLR temp[2], temp[2]; 29: MUL temp[3].x, temp[2].wwww, const[8].xxxx; 30: FLR temp[3].x, temp[3].xxxx; 31: MAD temp[3].x, temp[2].yyyy, const[7].wwww, temp[3].xxxx; 32: MAD temp[3].x, temp[3].xxxx, const[6].xxxx, const[8].yyyy; 33: MUL temp[4].x, temp[2].wwww, const[8].xxxx; 34: FRC temp[4].x, temp[4].xxxx; 35: MUL temp[5].x, temp[2].zzzz, const[7].wwww; 36: MAD temp[4].x, const[7].wwww, temp[4].xxxx, temp[5].xxxx; 37: MAD temp[4].x, temp[4].xxxx, const[6].xxxx, const[8].yyyy; 38: MOV temp[3].y, temp[4].xxxx; 39: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 40: DP2 temp[4].x, temp[3].xyyy, temp[3].xyyy; 41: SGE temp[4].x, temp[4].xxxx, const[8].zzzz; 42: CMP temp[3].x, -temp[4].xxxx, const[7].yyyy, const[7].xxxx; 43: KIL -temp[3].xxxx; 44: RCP temp[1].x, temp[1].xxxx; 45: MAD temp[1].xy, input[2].xyyy, temp[1].xxxx, input[4].xyyy; 46: RCP temp[3].x, const[3].xxxx; 47: RCP temp[3].y, const[3].yyyy; 48: MUL temp[1].xy, temp[1].xyyy, temp[3].xyyy; 49: TEX temp[1], temp[1].xyyy, 2D[0]; 50: MUL temp[2].x, temp[2].xxxx, const[9].xxxx; 51: FRC temp[2].x, temp[2].xxxx; 52: MUL temp[2].x, const[8].wwww, temp[2].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 54: MUL temp[0], temp[1], temp[0].xxxx; 55: SEQ temp[2].x, temp[0].wwww, const[7].xxxx; 56: CMP temp[1].x, -temp[2].xxxx, const[7].yyyy, const[7].xxxx; 57: KIL -temp[1].xxxx; 58: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].x, input[3].yyyy, const[6].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[6].yyyy, temp[0].xxxx, const[6].zzzz; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0].xy, temp[1].xyyy, 2D[2]; 10: MUL temp[1].x, const[6].wwww, temp[0].xxxx; 11: ABS temp[2].x, input[1].xxxx; 12: ABS temp[3].x, input[1].yyyy; 13: MAX temp[2].x, temp[2].xxxx, temp[3].xxxx; 14: SLT temp[2].x, temp[2].xxxx, temp[1].xxxx; 15: ADD temp[2].x, -temp[2].xxxx, const[7].yyyy; 16: CMP temp[0].x, -temp[2].xxxx, const[7].xxxx, temp[0].yyyy; 17: ADD temp[2].x, input[3].zzzz, const[6].xxxx; 18: RCP temp[3].x, const[4].xxxx; 19: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 20: FRC temp[3].x, temp[2].xxxx; 21: FLR temp[2].x, temp[2].xxxx; 22: ADD temp[2].x, temp[2].xxxx, const[6].xxxx; 23: RCP temp[4].x, const[4].yyyy; 24: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 25: MOV temp[3].y, temp[2].xxxx; 26: TEX temp[2], temp[3].xyyy, 2D[1]; 27: MAD temp[2], const[7].zzzz, temp[2], const[6].xxxx; 28: FLR temp[2], temp[2]; 29: MUL temp[3].x, temp[2].wwww, const[8].xxxx; 30: FLR temp[3].x, temp[3].xxxx; 31: MAD temp[3].x, temp[2].yyyy, const[7].wwww, temp[3].xxxx; 32: MAD temp[3].x, temp[3].xxxx, const[6].xxxx, const[8].yyyy; 33: MUL temp[4].x, temp[2].wwww, const[8].xxxx; 34: FRC temp[4].x, temp[4].xxxx; 35: MUL temp[5].x, temp[2].zzzz, const[7].wwww; 36: MAD temp[4].x, const[7].wwww, temp[4].xxxx, temp[5].xxxx; 37: MAD temp[4].x, temp[4].xxxx, const[6].xxxx, const[8].yyyy; 38: MOV temp[3].y, temp[4].xxxx; 39: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 40: DP2 temp[4].x, temp[3].xyyy, temp[3].xyyy; 41: SGE temp[4].x, temp[4].xxxx, const[8].zzzz; 42: CMP temp[3].x, -temp[4].xxxx, const[7].yyyy, const[7].xxxx; 43: KIL -temp[3].xxxx; 44: RCP temp[1].x, temp[1].xxxx; 45: MAD temp[1].xy, input[2].xyyy, temp[1].xxxx, input[4].xyyy; 46: RCP temp[3].x, const[3].xxxx; 47: RCP temp[3].y, const[3].yyyy; 48: MUL temp[1].xy, temp[1].xyyy, temp[3].xyyy; 49: TEX temp[1], temp[1].xyyy, 2D[0]; 50: MUL temp[2].x, temp[2].xxxx, const[9].xxxx; 51: FRC temp[2].x, temp[2].xxxx; 52: MUL temp[2].x, const[8].wwww, temp[2].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 54: MUL temp[0], temp[1], temp[0].xxxx; 55: SEQ temp[2].x, temp[0].wwww, const[7].xxxx; 56: CMP temp[1].x, -temp[2].xxxx, const[7].yyyy, const[7].xxxx; 57: KIL -temp[1].xxxx; 58: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].x, input[3].yyyy, const[6].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[6].yyyy, temp[0].xxxx, const[6].zzzz; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0].xy, temp[1].xyyy, 2D[2]; 10: MUL temp[1].x, const[6].wwww, temp[0].xxxx; 11: ABS temp[2].x, input[1].xxxx; 12: ABS temp[3].x, input[1].yyyy; 13: MAX temp[2].x, temp[2].xxxx, temp[3].xxxx; 14: SLT temp[2].x, temp[2].xxxx, temp[1].xxxx; 15: ADD temp[2].x, -temp[2].xxxx, const[7].yyyy; 16: CMP temp[0].x, -temp[2].xxxx, const[7].xxxx, temp[0].yyyy; 17: ADD temp[2].x, input[3].zzzz, const[6].xxxx; 18: RCP temp[3].x, const[4].xxxx; 19: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 20: FRC temp[3].x, temp[2].xxxx; 21: FLR temp[2].x, temp[2].xxxx; 22: ADD temp[2].x, temp[2].xxxx, const[6].xxxx; 23: RCP temp[4].x, const[4].yyyy; 24: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 25: MOV temp[3].y, temp[2].xxxx; 26: TEX temp[2], temp[3].xyyy, 2D[1]; 27: MAD temp[2], const[7].zzzz, temp[2], const[6].xxxx; 28: FLR temp[2], temp[2]; 29: MUL temp[3].x, temp[2].wwww, const[8].xxxx; 30: FLR temp[3].x, temp[3].xxxx; 31: MAD temp[3].x, temp[2].yyyy, const[7].wwww, temp[3].xxxx; 32: MAD temp[3].x, temp[3].xxxx, const[6].xxxx, const[8].yyyy; 33: MUL temp[4].x, temp[2].wwww, const[8].xxxx; 34: FRC temp[4].x, temp[4].xxxx; 35: MUL temp[5].x, temp[2].zzzz, const[7].wwww; 36: MAD temp[4].x, const[7].wwww, temp[4].xxxx, temp[5].xxxx; 37: MAD temp[4].x, temp[4].xxxx, const[6].xxxx, const[8].yyyy; 38: MOV temp[3].y, temp[4].xxxx; 39: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 40: DP2 temp[4].x, temp[3].xyyy, temp[3].xyyy; 41: SGE temp[4].x, temp[4].xxxx, const[8].zzzz; 42: CMP temp[3].x, -temp[4].xxxx, const[7].yyyy, const[7].xxxx; 43: KIL -temp[3].xxxx; 44: RCP temp[1].x, temp[1].xxxx; 45: MAD temp[1].xy, input[2].xyyy, temp[1].xxxx, input[4].xyyy; 46: RCP temp[3].x, const[3].xxxx; 47: RCP temp[3].y, const[3].yyyy; 48: MUL temp[1].xy, temp[1].xyyy, temp[3].xyyy; 49: TEX temp[1], temp[1].xyyy, 2D[0]; 50: MUL temp[2].x, temp[2].xxxx, const[9].xxxx; 51: FRC temp[2].x, temp[2].xxxx; 52: MUL temp[2].x, const[8].wwww, temp[2].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 54: MUL temp[0], temp[1], temp[0].xxxx; 55: SEQ temp[2].x, temp[0].wwww, const[7].xxxx; 56: CMP temp[1].x, -temp[2].xxxx, const[7].yyyy, const[7].xxxx; 57: KIL -temp[1].xxxx; 58: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].x, input[3].yyyy, const[6].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[6].yyyy, temp[0].xxxx, const[6].zzzz; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0].xy, temp[1].xyyy, 2D[2]; 10: MUL temp[1].x, const[6].wwww, temp[0].xxxx; 11: ABS temp[2].x, input[1].xxxx; 12: ABS temp[3].x, input[1].yyyy; 13: MAX temp[2].x, temp[2].xxxx, temp[3].xxxx; 14: SLT temp[2].x, temp[2].xxxx, temp[1].xxxx; 15: ADD temp[2].x, -temp[2].xxxx, const[7].yyyy; 16: CMP temp[0].x, -temp[2].xxxx, const[7].xxxx, temp[0].yyyy; 17: ADD temp[2].x, input[3].zzzz, const[6].xxxx; 18: RCP temp[3].x, const[4].xxxx; 19: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 20: FRC temp[3].x, temp[2].xxxx; 21: FLR temp[2].x, temp[2].xxxx; 22: ADD temp[2].x, temp[2].xxxx, const[6].xxxx; 23: RCP temp[4].x, const[4].yyyy; 24: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 25: MOV temp[3].y, temp[2].xxxx; 26: TEX temp[2], temp[3].xyyy, 2D[1]; 27: MAD temp[2], const[7].zzzz, temp[2], const[6].xxxx; 28: FLR temp[2], temp[2]; 29: MUL temp[3].x, temp[2].wwww, const[8].xxxx; 30: FLR temp[3].x, temp[3].xxxx; 31: MAD temp[3].x, temp[2].yyyy, const[7].wwww, temp[3].xxxx; 32: MAD temp[3].x, temp[3].xxxx, const[6].xxxx, const[8].yyyy; 33: MUL temp[4].x, temp[2].wwww, const[8].xxxx; 34: FRC temp[4].x, temp[4].xxxx; 35: MUL temp[5].x, temp[2].zzzz, const[7].wwww; 36: MAD temp[4].x, const[7].wwww, temp[4].xxxx, temp[5].xxxx; 37: MAD temp[4].x, temp[4].xxxx, const[6].xxxx, const[8].yyyy; 38: MOV temp[3].y, temp[4].xxxx; 39: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 40: DP2 temp[4].x, temp[3].xyyy, temp[3].xyyy; 41: SGE temp[4].x, temp[4].xxxx, const[8].zzzz; 42: CMP temp[3].x, -temp[4].xxxx, const[7].yyyy, const[7].xxxx; 43: KIL -temp[3].xxxx; 44: RCP temp[1].x, temp[1].xxxx; 45: MAD temp[1].xy, input[2].xyyy, temp[1].xxxx, input[4].xyyy; 46: RCP temp[3].x, const[3].xxxx; 47: RCP temp[3].y, const[3].yyyy; 48: MUL temp[1].xy, temp[1].xyyy, temp[3].xyyy; 49: TEX temp[1], temp[1].xyyy, 2D[0]; 50: MUL temp[2].x, temp[2].xxxx, const[9].xxxx; 51: FRC temp[2].x, temp[2].xxxx; 52: MUL temp[2].x, const[8].wwww, temp[2].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 54: MUL temp[0], temp[1], temp[0].xxxx; 55: SEQ temp[2].x, temp[0].wwww, const[7].xxxx; 56: CMP temp[1].x, -temp[2].xxxx, const[7].yyyy, const[7].xxxx; 57: KIL -temp[1].xxxx; 58: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].x, input[3].yyyy, const[6].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[6].yyyy, temp[0].xxxx, const[6].zzzz; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[0].xy, temp[1].xyyy, 2D[2]; 10: MUL temp[1].x, const[6].wwww, temp[0].xxxx; 11: ABS temp[2].x, input[1].xxxx; 12: ABS temp[3].x, input[1].yyyy; 13: MAX temp[2].x, temp[2].xxxx, temp[3].xxxx; 14: SLT temp[2].x, temp[2].xxxx, temp[1].xxxx; 15: ADD temp[2].x, -temp[2].xxxx, const[7].yyyy; 16: CMP temp[0].x, -temp[2].xxxx, const[7].xxxx, temp[0].yyyy; 17: ADD temp[2].x, input[3].zzzz, const[6].xxxx; 18: RCP temp[3].x, const[4].xxxx; 19: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 20: FRC temp[3].x, temp[2].xxxx; 21: FLR temp[2].x, temp[2].xxxx; 22: ADD temp[2].x, temp[2].xxxx, const[6].xxxx; 23: RCP temp[4].x, const[4].yyyy; 24: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 25: MOV temp[3].y, temp[2].xxxx; 26: TEX temp[2], temp[3].xyyy, 2D[1]; 27: MAD temp[2], const[7].zzzz, temp[2], const[6].xxxx; 28: FLR temp[2], temp[2]; 29: MUL temp[3].x, temp[2].wwww, const[8].xxxx; 30: FLR temp[3].x, temp[3].xxxx; 31: MAD temp[3].x, temp[2].yyyy, const[7].wwww, temp[3].xxxx; 32: MAD temp[3].x, temp[3].xxxx, const[6].xxxx, const[8].yyyy; 33: MUL temp[4].x, temp[2].wwww, const[8].xxxx; 34: FRC temp[4].x, temp[4].xxxx; 35: MUL temp[5].x, temp[2].zzzz, const[7].wwww; 36: MAD temp[4].x, const[7].wwww, temp[4].xxxx, temp[5].xxxx; 37: MAD temp[4].x, temp[4].xxxx, const[6].xxxx, const[8].yyyy; 38: MOV temp[3].y, temp[4].xxxx; 39: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 40: DP2 temp[4].x, temp[3].xyyy, temp[3].xyyy; 41: SGE temp[4].x, temp[4].xxxx, const[8].zzzz; 42: CMP temp[3].x, -temp[4].xxxx, const[7].yyyy, const[7].xxxx; 43: KIL -temp[3].xxxx; 44: RCP temp[1].x, temp[1].xxxx; 45: MAD temp[1].xy, input[2].xyyy, temp[1].xxxx, input[4].xyyy; 46: RCP temp[3].x, const[3].xxxx; 47: RCP temp[3].y, const[3].yyyy; 48: MUL temp[1].xy, temp[1].xyyy, temp[3].xyyy; 49: TEX temp[1], temp[1].xyyy, 2D[0]; 50: MUL temp[2].x, temp[2].xxxx, const[9].xxxx; 51: FRC temp[2].x, temp[2].xxxx; 52: MUL temp[2].x, const[8].wwww, temp[2].xxxx; 53: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 54: MUL temp[0], temp[1], temp[0].xxxx; 55: SEQ temp[2].x, temp[0].wwww, const[7].xxxx; 56: CMP temp[1].x, -temp[2].xxxx, const[7].yyyy, const[7].xxxx; 57: KIL -temp[1].xxxx; 58: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].x, input[3].yyyy, const[6].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[6].yyyy, temp[0].xxxx, const[6].zzzz; 6: RCP temp[2].x, const[5].yyyy; 7: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 8: MOV temp[1].y, temp[0].xxxx; 9: TEX temp[6], temp[1].xyyy, 2D[2]; 10: MOV temp[0].xy, temp[6]; 11: MUL temp[1].x, const[6].wwww, temp[0].xxxx; 12: ABS temp[2].x, input[1].xxxx; 13: ABS temp[3].x, input[1].yyyy; 14: MAX temp[2].x, temp[2].xxxx, temp[3].xxxx; 15: SLT temp[2].x, temp[2].xxxx, temp[1].xxxx; 16: ADD temp[2].x, -temp[2].xxxx, const[7].yyyy; 17: CMP temp[0].x, -temp[2].xxxx, const[7].xxxx, temp[0].yyyy; 18: ADD temp[2].x, input[3].zzzz, const[6].xxxx; 19: RCP temp[3].x, const[4].xxxx; 20: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 21: FRC temp[3].x, temp[2].xxxx; 22: FLR temp[2].x, temp[2].xxxx; 23: ADD temp[2].x, temp[2].xxxx, const[6].xxxx; 24: RCP temp[4].x, const[4].yyyy; 25: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 26: MOV temp[3].y, temp[2].xxxx; 27: TEX temp[2], temp[3].xyyy, 2D[1]; 28: MAD temp[2], const[7].zzzz, temp[2], const[6].xxxx; 29: FLR temp[2], temp[2]; 30: MUL temp[3].x, temp[2].wwww, const[8].xxxx; 31: FLR temp[3].x, temp[3].xxxx; 32: MAD temp[3].x, temp[2].yyyy, const[7].wwww, temp[3].xxxx; 33: MAD temp[3].x, temp[3].xxxx, const[6].xxxx, const[8].yyyy; 34: MUL temp[4].x, temp[2].wwww, const[8].xxxx; 35: FRC temp[4].x, temp[4].xxxx; 36: MUL temp[5].x, temp[2].zzzz, const[7].wwww; 37: MAD temp[4].x, const[7].wwww, temp[4].xxxx, temp[5].xxxx; 38: MAD temp[4].x, temp[4].xxxx, const[6].xxxx, const[8].yyyy; 39: MOV temp[3].y, temp[4].xxxx; 40: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 41: DP2 temp[4].x, temp[3].xyyy, temp[3].xyyy; 42: SGE temp[4].x, temp[4].xxxx, const[8].zzzz; 43: CMP temp[3].x, -temp[4].xxxx, const[7].yyyy, const[7].xxxx; 44: KIL -temp[3].xxxx; 45: RCP temp[1].x, temp[1].xxxx; 46: MAD temp[1].xy, input[2].xyyy, temp[1].xxxx, input[4].xyyy; 47: RCP temp[3].x, const[3].xxxx; 48: RCP temp[3].y, const[3].yyyy; 49: MUL temp[1].xy, temp[1].xyyy, temp[3].xyyy; 50: TEX temp[1], temp[1].xyyy, 2D[0]; 51: MUL temp[2].x, temp[2].xxxx, const[9].xxxx; 52: FRC temp[2].x, temp[2].xxxx; 53: MUL temp[2].x, const[8].wwww, temp[2].xxxx; 54: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 55: MUL temp[0], temp[1], temp[0].xxxx; 56: SEQ temp[2].x, temp[0].wwww, const[7].xxxx; 57: CMP temp[1].x, -temp[2].xxxx, const[7].yyyy, const[7].xxxx; 58: KIL -temp[1].xxxx; 59: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].x, input[3].yyyy, const[6].xxxx; 1: RCP temp[1].x, const[5].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FRC temp[7].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, -temp[7]; 6: MAD temp[0].x, const[6].yyyy, temp[0].xxxx, const[6].zzzz; 7: RCP temp[2].x, const[5].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: TEX temp[6], temp[1].xyyy, 2D[2]; 11: MOV temp[0].xy, temp[6]; 12: MUL temp[1].x, const[6].wwww, temp[0].xxxx; 13: MOV temp[2].x, |input[1].xxxx|; 14: MOV temp[3].x, |input[1].yyyy|; 15: MAX temp[2].x, temp[2].xxxx, temp[3].xxxx; 16: ADD temp[8].x, temp[2].xxxx, -temp[1].xxxx; 17: CMP temp[2].x, temp[8], none.1111, none.0000; 18: ADD temp[2].x, -temp[2].xxxx, const[7].yyyy; 19: CMP temp[0].x, -temp[2].xxxx, const[7].xxxx, temp[0].yyyy; 20: ADD temp[2].x, input[3].zzzz, const[6].xxxx; 21: RCP temp[3].x, const[4].xxxx; 22: MUL temp[2].x, temp[2].xxxx, temp[3].xxxx; 23: FRC temp[3].x, temp[2].xxxx; 24: FRC temp[9].x, temp[2].xxxx; 25: ADD temp[2].x, temp[2].xxxx, -temp[9]; 26: ADD temp[2].x, temp[2].xxxx, const[6].xxxx; 27: RCP temp[4].x, const[4].yyyy; 28: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 29: MOV temp[3].y, temp[2].xxxx; 30: TEX temp[2], temp[3].xyyy, 2D[1]; 31: MAD temp[2], const[7].zzzz, temp[2], const[6].xxxx; 32: FRC temp[10], temp[2]; 33: ADD temp[2], temp[2], -temp[10]; 34: MUL temp[3].x, temp[2].wwww, const[8].xxxx; 35: FRC temp[11].x, temp[3].xxxx; 36: ADD temp[3].x, temp[3].xxxx, -temp[11]; 37: MAD temp[3].x, temp[2].yyyy, const[7].wwww, temp[3].xxxx; 38: MAD temp[3].x, temp[3].xxxx, const[6].xxxx, const[8].yyyy; 39: MUL temp[4].x, temp[2].wwww, const[8].xxxx; 40: FRC temp[4].x, temp[4].xxxx; 41: MUL temp[5].x, temp[2].zzzz, const[7].wwww; 42: MAD temp[4].x, const[7].wwww, temp[4].xxxx, temp[5].xxxx; 43: MAD temp[4].x, temp[4].xxxx, const[6].xxxx, const[8].yyyy; 44: MOV temp[3].y, temp[4].xxxx; 45: ADD temp[3].xy, input[0].xyyy, -temp[3].xyyy; 46: DP3 temp[4].x, temp[3].xy00, temp[3].xy00; 47: ADD temp[12].x, temp[4].xxxx, -const[8].zzzz; 48: CMP temp[4].x, temp[12], none.0000, none.1111; 49: CMP temp[3].x, -temp[4].xxxx, const[7].yyyy, const[7].xxxx; 50: KIL -temp[3].xxxx; 51: RCP temp[1].x, temp[1].xxxx; 52: MAD temp[1].xy, input[2].xyyy, temp[1].xxxx, input[4].xyyy; 53: RCP temp[3].x, const[3].xxxx; 54: RCP temp[3].y, const[3].yyyy; 55: MUL temp[1].xy, temp[1].xyyy, temp[3].xyyy; 56: TEX temp[1], temp[1].xyyy, 2D[0]; 57: MUL temp[2].x, temp[2].xxxx, const[9].xxxx; 58: FRC temp[2].x, temp[2].xxxx; 59: MUL temp[2].x, const[8].wwww, temp[2].xxxx; 60: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 61: MUL temp[0], temp[1], temp[0].xxxx; 62: ADD temp[2].x, temp[0].wwww, -const[7].xxxx; 63: CMP temp[2].x, -|temp[2]|, none.0000, none.1111; 64: CMP temp[1].x, -temp[2].xxxx, const[7].yyyy, const[7].xxxx; 65: KIL -temp[1].xxxx; 66: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].x, input[3].y___, const[6].x___; 1: RCP temp[1].x, const[5].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[7].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[7].x___; 6: MAD temp[0].x, const[6].y___, temp[0].x___, const[6].z___; 7: RCP temp[2].x, const[5].y___; 8: MUL temp[0].x, temp[0].x___, temp[2].x___; 9: MOV temp[1].y, temp[0]._x__; 10: TEX temp[6].xy, temp[1].xy__, 2D[2]; 11: MOV temp[0].xy, temp[6].xy__; 12: MUL temp[1].x, const[6].w___, temp[0].x___; 13: MOV temp[2].x, |input[1].x___|; 14: MOV temp[3].x, |input[1].y___|; 15: MAX temp[2].x, temp[2].x___, temp[3].x___; 16: ADD temp[8].x, temp[2].x___, -temp[1].x___; 17: CMP temp[2].x, temp[8].x___, none.1___, none.0___; 18: ADD temp[2].x, -temp[2].x___, const[7].y___; 19: CMP temp[0].x, -temp[2].x___, const[7].x___, temp[0].y___; 20: ADD temp[2].x, input[3].z___, const[6].x___; 21: RCP temp[3].x, const[4].x___; 22: MUL temp[2].x, temp[2].x___, temp[3].x___; 23: FRC temp[3].x, temp[2].x___; 24: FRC temp[9].x, temp[2].x___; 25: ADD temp[2].x, temp[2].x___, -temp[9].x___; 26: ADD temp[2].x, temp[2].x___, const[6].x___; 27: RCP temp[4].x, const[4].y___; 28: MUL temp[2].x, temp[2].x___, temp[4].x___; 29: MOV temp[3].y, temp[2]._x__; 30: TEX temp[2], temp[3].xy__, 2D[1]; 31: MAD temp[2], const[7].zzzz, temp[2], const[6].xxxx; 32: FRC temp[10], temp[2]; 33: ADD temp[2], temp[2], -temp[10]; 34: MUL temp[3].x, temp[2].w___, const[8].x___; 35: FRC temp[11].x, temp[3].x___; 36: ADD temp[3].x, temp[3].x___, -temp[11].x___; 37: MAD temp[3].x, temp[2].y___, const[7].w___, temp[3].x___; 38: MAD temp[3].x, temp[3].x___, const[6].x___, const[8].y___; 39: MUL temp[4].x, temp[2].w___, const[8].x___; 40: FRC temp[4].x, temp[4].x___; 41: MUL temp[5].x, temp[2].z___, const[7].w___; 42: MAD temp[4].x, const[7].w___, temp[4].x___, temp[5].x___; 43: MAD temp[4].x, temp[4].x___, const[6].x___, const[8].y___; 44: MOV temp[3].y, temp[4]._x__; 45: ADD temp[3].xy, input[0].xy__, -temp[3].xy__; 46: DP3 temp[4].x, temp[3].xy0_, temp[3].xy0_; 47: ADD temp[12].x, temp[4].x___, -const[8].z___; 48: CMP temp[4].x, temp[12].x___, none.0___, none.1___; 49: CMP temp[3].x, -temp[4].x___, const[7].y___, const[7].x___; 50: KIL -temp[3].xxxx; 51: RCP temp[1].x, temp[1].x___; 52: MAD temp[1].xy, input[2].xy__, temp[1].xx__, input[4].xy__; 53: RCP temp[3].x, const[3].x___; 54: RCP temp[3].y, const[3]._y__; 55: MUL temp[1].xy, temp[1].xy__, temp[3].xy__; 56: TEX temp[1], temp[1].xy__, 2D[0]; 57: MUL temp[2].x, temp[2].x___, const[9].x___; 58: FRC temp[2].x, temp[2].x___; 59: MUL temp[2].x, const[8].w___, temp[2].x___; 60: MUL temp[0].x, temp[0].x___, temp[2].x___; 61: MUL temp[0], temp[1], temp[0].xxxx; 62: ADD temp[2].x, temp[0].w___, -const[7].x___; 63: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 64: CMP temp[1].x, -temp[2].x___, const[7].y___, const[7].x___; 65: KIL -temp[1].xxxx; 66: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].x, input[3].y___, const[6].x___; 1: RCP temp[1].x, const[5].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[7].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[7].x___; 6: MAD temp[0].x, const[6].y___, temp[0].x___, const[6].z___; 7: RCP temp[2].x, const[5].y___; 8: MUL temp[0].x, temp[0].x___, temp[2].x___; 9: MOV temp[1].y, temp[0]._x__; 10: TEX temp[6].xy, temp[1].xy__, 2D[2]; 11: MOV temp[0].xy, temp[6].xy__; 12: MUL temp[1].x, const[6].w___, temp[0].x___; 13: MOV temp[2].x, |input[1].x___|; 14: MOV temp[3].x, |input[1].y___|; 15: MAX temp[2].x, temp[2].x___, temp[3].x___; 16: ADD temp[8].x, temp[2].x___, -temp[1].x___; 17: CMP temp[2].x, temp[8].x___, none.1___, none.0___; 18: ADD temp[2].x, -temp[2].x___, const[7].y___; 19: CMP temp[0].x, -temp[2].x___, const[7].x___, temp[0].y___; 20: ADD temp[2].x, input[3].z___, const[6].x___; 21: RCP temp[3].x, const[4].x___; 22: MUL temp[2].x, temp[2].x___, temp[3].x___; 23: FRC temp[3].x, temp[2].x___; 24: FRC temp[9].x, temp[2].x___; 25: ADD temp[2].x, temp[2].x___, -temp[9].x___; 26: ADD temp[2].x, temp[2].x___, const[6].x___; 27: RCP temp[4].x, const[4].y___; 28: MUL temp[2].x, temp[2].x___, temp[4].x___; 29: MOV temp[3].y, temp[2]._x__; 30: TEX temp[2], temp[3].xy__, 2D[1]; 31: MAD temp[2], const[7].zzzz, temp[2], const[6].xxxx; 32: FRC temp[10], temp[2]; 33: ADD temp[2], temp[2], -temp[10]; 34: MUL temp[3].x, temp[2].w___, const[8].x___; 35: FRC temp[11].x, temp[3].x___; 36: ADD temp[3].x, temp[3].x___, -temp[11].x___; 37: MAD temp[3].x, temp[2].y___, const[7].w___, temp[3].x___; 38: MAD temp[3].x, temp[3].x___, const[6].x___, const[8].y___; 39: MUL temp[4].x, temp[2].w___, const[8].x___; 40: FRC temp[4].x, temp[4].x___; 41: MUL temp[5].x, temp[2].z___, const[7].w___; 42: MAD temp[4].x, const[7].w___, temp[4].x___, temp[5].x___; 43: MAD temp[4].x, temp[4].x___, const[6].x___, const[8].y___; 44: MOV temp[3].y, temp[4]._x__; 45: ADD temp[3].xy, input[0].xy__, -temp[3].xy__; 46: DP3 temp[4].x, temp[3].xy0_, temp[3].xy0_; 47: ADD temp[12].x, temp[4].x___, -const[8].z___; 48: CMP temp[4].x, temp[12].x___, none.0___, none.1___; 49: CMP temp[3].x, -temp[4].x___, const[7].y___, const[7].x___; 50: KIL -temp[3].xxxx; 51: RCP temp[1].x, temp[1].x___; 52: MAD temp[1].xy, input[2].xy__, temp[1].xx__, input[4].xy__; 53: RCP temp[3].x, const[3].x___; 54: RCP temp[3].y, const[3]._y__; 55: MUL temp[1].xy, temp[1].xy__, temp[3].xy__; 56: TEX temp[1], temp[1].xy__, 2D[0]; 57: MUL temp[2].x, temp[2].x___, const[9].x___; 58: FRC temp[2].x, temp[2].x___; 59: MUL temp[2].x, const[8].w___, temp[2].x___; 60: MUL temp[0].x, temp[0].x___, temp[2].x___; 61: MUL temp[0], temp[1], temp[0].xxxx; 62: ADD temp[2].x, temp[0].w___, -const[7].x___; 63: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 64: CMP temp[1].x, -temp[2].x___, const[7].y___, const[7].x___; 65: KIL -temp[1].xxxx; 66: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[13].x, input[3].y___, const[6].x___; 1: RCP temp[14].x, const[5].x___; 2: MUL temp[15].x, temp[13].x___, temp[14].x___; 3: FRC temp[16].x, temp[15].x___; 4: FRC temp[17].x, temp[15].x___; 5: ADD temp[18].x, temp[15].x___, -temp[17].x___; 6: MAD temp[19].x, const[6].y___, temp[18].x___, const[6].z___; 7: RCP temp[20].x, const[5].y___; 8: MUL temp[21].x, temp[19].x___, temp[20].x___; 9: MOV temp[16].y, temp[21]._x__; 10: TEX temp[22].xy, temp[16].xy__, 2D[2]; 11: MOV temp[23].xy, temp[22].xy__; 12: MUL temp[24].x, const[6].w___, temp[23].x___; 13: MOV temp[25].x, |input[1].x___|; 14: MOV temp[26].x, |input[1].y___|; 15: MAX temp[27].x, temp[25].x___, temp[26].x___; 16: ADD temp[28].x, temp[27].x___, -temp[24].x___; 17: CMP temp[29].x, temp[28].x___, none.1___, none.0___; 18: ADD temp[30].x, -temp[29].x___, const[7].y___; 19: CMP temp[31].x, -temp[30].x___, const[7].x___, temp[23].y___; 20: ADD temp[32].x, input[3].z___, const[6].x___; 21: RCP temp[33].x, const[4].x___; 22: MUL temp[34].x, temp[32].x___, temp[33].x___; 23: FRC temp[35].x, temp[34].x___; 24: FRC temp[36].x, temp[34].x___; 25: ADD temp[37].x, temp[34].x___, -temp[36].x___; 26: ADD temp[38].x, temp[37].x___, const[6].x___; 27: RCP temp[39].x, const[4].y___; 28: MUL temp[40].x, temp[38].x___, temp[39].x___; 29: MOV temp[35].y, temp[40]._x__; 30: TEX temp[41], temp[35].xy__, 2D[1]; 31: MAD temp[42], const[7].zzzz, temp[41], const[6].xxxx; 32: FRC temp[43], temp[42]; 33: ADD temp[44], temp[42], -temp[43]; 34: MUL temp[45].x, temp[44].w___, const[8].x___; 35: FRC temp[46].x, temp[45].x___; 36: ADD temp[47].x, temp[45].x___, -temp[46].x___; 37: MAD temp[48].x, temp[44].y___, const[7].w___, temp[47].x___; 38: MAD temp[49].x, temp[48].x___, const[6].x___, const[8].y___; 39: MUL temp[50].x, temp[44].w___, const[8].x___; 40: FRC temp[51].x, temp[50].x___; 41: MUL temp[52].x, temp[44].z___, const[7].w___; 42: MAD temp[53].x, const[7].w___, temp[51].x___, temp[52].x___; 43: MAD temp[54].x, temp[53].x___, const[6].x___, const[8].y___; 44: MOV temp[49].y, temp[54]._x__; 45: ADD temp[55].xy, input[0].xy__, -temp[49].xy__; 46: DP3 temp[56].x, temp[55].xy0_, temp[55].xy0_; 47: ADD temp[57].x, temp[56].x___, -const[8].z___; 48: CMP temp[58].x, temp[57].x___, none.0___, none.1___; 49: CMP temp[59].x, -temp[58].x___, const[7].y___, const[7].x___; 50: KIL -temp[59].xxxx; 51: RCP temp[60].x, temp[24].x___; 52: MAD temp[61].xy, input[2].xy__, temp[60].xx__, input[4].xy__; 53: RCP temp[62].x, const[3].x___; 54: RCP temp[62].y, const[3]._y__; 55: MUL temp[63].xy, temp[61].xy__, temp[62].xy__; 56: TEX temp[64], temp[63].xy__, 2D[0]; 57: MUL temp[65].x, temp[44].x___, const[9].x___; 58: FRC temp[66].x, temp[65].x___; 59: MUL temp[67].x, const[8].w___, temp[66].x___; 60: MUL temp[68].x, temp[31].x___, temp[67].x___; 61: MUL temp[69], temp[64], temp[68].xxxx; 62: ADD temp[70].x, temp[69].w___, -const[7].x___; 63: CMP temp[71].x, -|temp[70].x___|, none.0___, none.1___; 64: CMP temp[72].x, -temp[71].x___, const[7].y___, const[7].x___; 65: KIL -temp[72].xxxx; 66: MOV output[0], temp[69]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[13].x, input[3].y___, none.H___; 1: RCP temp[14].x, const[5].x___; 2: MUL temp[15].x, temp[13].x___, temp[14].x___; 3: FRC temp[16].x, temp[15].x___; 4: FRC temp[17].x, temp[15].x___; 5: MAD temp[19].x, const[6].y___, (temp[15] - temp[17]).x___, const[6].z___; 6: RCP temp[20].x, const[5].y___; 7: MUL temp[21].x, temp[19].x___, temp[20].x___; 8: MOV temp[16].y, temp[21]._x__; 9: TEX temp[22].xy, temp[16].xy__, 2D[2]; 10: MUL temp[24].x, const[6].w___, temp[22].x___; 11: MAX temp[27].x, |input[1].x___|, |input[1].y___|; 12: CMP temp[29].x, (temp[27] - temp[24]).x___, none.1___, none.0___; 13: ADD temp[30].x, -temp[29].x___, none.1___; 14: CMP temp[31].x, -temp[30].x___, none.0___, temp[22].y___; 15: ADD temp[32].x, input[3].z___, none.H___; 16: RCP temp[33].x, const[4].x___; 17: MUL temp[34].x, temp[32].x___, temp[33].x___; 18: FRC temp[35].x, temp[34].x___; 19: FRC temp[36].x, temp[34].x___; 20: ADD temp[38].x, (temp[34] - temp[36]).x___, none.H___; 21: RCP temp[39].x, const[4].y___; 22: MUL temp[40].x, temp[38].x___, temp[39].x___; 23: MOV temp[35].y, temp[40]._x__; 24: TEX temp[41], temp[35].xy__, 2D[1]; 25: MAD temp[42], const[7].zzzz, temp[41], none.HHHH; 26: FRC temp[43], temp[42]; 27: MUL temp[45].x, (temp[42] - temp[43]).w___, const[8].x___; 28: FRC temp[46].x, temp[45].x___; 29: ADD temp[47].x, temp[45].x___, -temp[46].x___; 30: MAD temp[48].x, (temp[42] - temp[43]).y___, const[7].w___, temp[47].x___; 31: MAD temp[49].x, temp[48].x___, none.H___, const[8].y___; 32: MUL temp[50].x, (temp[42] - temp[43]).w___, const[8].x___; 33: FRC temp[51].x, temp[50].x___; 34: MUL temp[52].x, (temp[42] - temp[43]).z___, const[7].w___; 35: MAD temp[53].x, const[7].w___, temp[51].x___, temp[52].x___; 36: MAD temp[54].x, temp[53].x___, none.H___, const[8].y___; 37: MOV temp[49].y, temp[54]._x__; 38: DP3 temp[56].x, (input[0] - temp[49]).xy0_, (input[0] - temp[49]).xy0_; 39: ADD temp[57].x, temp[56].x___, -const[8].z___; 40: CMP temp[58].x, temp[57].x___, none.0___, none.1___; 41: CMP temp[59].x, -temp[58].x___, none.1___, none.0___; 42: KIL -temp[59].xxxx; 43: RCP temp[60].x, temp[24].x___; 44: MAD temp[61].xy, input[2].xy__, temp[60].xx__, input[4].xy__; 45: RCP temp[62].x, const[3].x___; 46: RCP temp[62].y, const[3]._y__; 47: MUL temp[63].xy, temp[61].xy__, temp[62].xy__; 48: TEX temp[64], temp[63].xy__, 2D[0]; 49: MUL temp[65].x, (temp[42] - temp[43]).x___, const[9].x___; 50: FRC temp[66].x, temp[65].x___; 51: MUL temp[67].x, const[8].w___, temp[66].x___; 52: MUL temp[68].x, temp[31].x___, temp[67].x___; 53: MUL temp[69], temp[64], temp[68].xxxx; 54: CMP temp[71].x, -|temp[69].w___|, none.0___, none.1___; 55: CMP temp[72].x, -temp[71].x___, none.1___, none.0___; 56: KIL -temp[72].xxxx; 57: MOV output[0], temp[69]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[13].x, input[3].y___, none.H___; 1: RCP temp[14].x, const[5].x___; 2: MUL temp[15].x, temp[13].x___, temp[14].x___; 3: FRC temp[16].x, temp[15].x___; 4: FRC temp[17].x, temp[15].x___; 5: MAD temp[19].x, const[6].y___, (temp[15] - temp[17]).x___, const[6].z___; 6: RCP temp[20].x, const[5].y___; 7: MUL temp[21].x, temp[19].x___, temp[20].x___; 8: MOV temp[16].y, temp[21]._x__; 9: TEX temp[22].xy, temp[16].xy__, 2D[2]; 10: MUL temp[24].x, const[6].w___, temp[22].x___; 11: MAX temp[27].x, |input[1].x___|, |input[1].y___|; 12: CMP temp[29].x, (temp[27] - temp[24]).x___, none.1___, none.0___; 13: ADD temp[30].x, -temp[29].x___, none.1___; 14: CMP temp[31].x, -temp[30].x___, none.0___, temp[22].y___; 15: ADD temp[32].x, input[3].z___, none.H___; 16: RCP temp[33].x, const[4].x___; 17: MUL temp[34].x, temp[32].x___, temp[33].x___; 18: FRC temp[35].x, temp[34].x___; 19: FRC temp[36].x, temp[34].x___; 20: ADD temp[38].x, (temp[34] - temp[36]).x___, none.H___; 21: RCP temp[39].x, const[4].y___; 22: MUL temp[40].x, temp[38].x___, temp[39].x___; 23: MOV temp[35].y, temp[40]._x__; 24: TEX temp[41], temp[35].xy__, 2D[1]; 25: MAD temp[42], const[7].zzzz, temp[41], none.HHHH; 26: FRC temp[43], temp[42]; 27: MUL temp[45].x, (temp[42] - temp[43]).w___, const[8].x___; 28: FRC temp[46].x, temp[45].x___; 29: ADD temp[47].x, temp[45].x___, -temp[46].x___; 30: MAD temp[48].x, (temp[42] - temp[43]).y___, const[7].w___, temp[47].x___; 31: MAD temp[49].x, temp[48].x___, none.H___, const[8].y___; 32: MUL temp[50].x, (temp[42] - temp[43]).w___, const[8].x___; 33: FRC temp[51].x, temp[50].x___; 34: MUL temp[52].x, (temp[42] - temp[43]).z___, const[7].w___; 35: MAD temp[53].x, const[7].w___, temp[51].x___, temp[52].x___; 36: MAD temp[54].x, temp[53].x___, none.H___, const[8].y___; 37: MOV temp[49].y, temp[54]._x__; 38: MOV temp[0].xy, (input[0] - temp[49]).xy__; 39: MOV temp[0].z, (input[0] - temp[49]).__0_; 40: MOV temp[1].xy, (input[0] - temp[49]).xy__; 41: MOV temp[1].z, (input[0] - temp[49]).__0_; 42: DP3 temp[56].x, temp[0].xyz_, temp[1].xyz_; 43: ADD temp[57].x, temp[56].x___, -const[8].z___; 44: CMP temp[58].x, temp[57].x___, none.0___, none.1___; 45: CMP temp[59].x, -temp[58].x___, none.1___, none.0___; 46: MOV temp[2], -temp[59].xxxx; 47: KIL temp[2]; 48: RCP temp[60].x, temp[24].x___; 49: MAD temp[61].xy, input[2].xy__, temp[60].xx__, input[4].xy__; 50: RCP temp[62].x, const[3].x___; 51: RCP temp[62].y, const[3]._y__; 52: MUL temp[63].xy, temp[61].xy__, temp[62].xy__; 53: TEX temp[64], temp[63].xy__, 2D[0]; 54: MUL temp[65].x, (temp[42] - temp[43]).x___, const[9].x___; 55: FRC temp[66].x, temp[65].x___; 56: MUL temp[67].x, const[8].w___, temp[66].x___; 57: MUL temp[68].x, temp[31].x___, temp[67].x___; 58: MUL temp[69], temp[64], temp[68].xxxx; 59: CMP temp[71].x, -|temp[69].w___|, none.0___, none.1___; 60: CMP temp[72].x, -temp[71].x___, none.1___, none.0___; 61: MOV temp[3], -temp[72].xxxx; 62: KIL temp[3]; 63: MOV output[0], temp[69]; CONST[3] = { 0.5000 26.0000 25.5000 1.9922 } CONST[4] = { 0.0000 1.0000 255.0000 16.0000 } CONST[5] = { 0.0625 -1023.0000 0.0100 1.0323 } CONST[6] = { 0.0312 0.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[13].x, input[3].y___, none.H___; 1: RCP temp[14].x, const[2].x___; 2: MUL temp[15].x, temp[13].x___, temp[14].x___; 3: FRC temp[16].x, temp[15].x___; 4: FRC temp[17].x, temp[15].x___; 5: MAD temp[19].x, const[3].y___, (temp[15] - temp[17]).x___, const[3].z___; 6: RCP temp[20].x, const[2].y___; 7: MUL temp[21].x, temp[19].x___, temp[20].x___; 8: MOV temp[16].y, temp[21]._x__; 9: TEX temp[22].xy, temp[16].xy__, 2D[2]; 10: MUL temp[24].x, const[3].w___, temp[22].x___; 11: MAX temp[27].x, |input[1].x___|, |input[1].y___|; 12: CMP temp[29].x, (temp[27] - temp[24]).x___, none.1___, none.0___; 13: ADD temp[30].x, -temp[29].x___, none.1___; 14: CMP temp[31].x, -temp[30].x___, none.0___, temp[22].y___; 15: ADD temp[32].x, input[3].z___, none.H___; 16: RCP temp[33].x, const[1].x___; 17: MUL temp[34].x, temp[32].x___, temp[33].x___; 18: FRC temp[35].x, temp[34].x___; 19: FRC temp[36].x, temp[34].x___; 20: ADD temp[38].x, (temp[34] - temp[36]).x___, none.H___; 21: RCP temp[39].x, const[1].y___; 22: MUL temp[40].x, temp[38].x___, temp[39].x___; 23: MOV temp[35].y, temp[40]._x__; 24: TEX temp[41], temp[35].xy__, 2D[1]; 25: MAD temp[42], const[4].zzzz, temp[41], none.HHHH; 26: FRC temp[43], temp[42]; 27: MUL temp[45].x, (temp[42] - temp[43]).w___, const[5].x___; 28: FRC temp[46].x, temp[45].x___; 29: ADD temp[47].x, temp[45].x___, -temp[46].x___; 30: MAD temp[48].x, (temp[42] - temp[43]).y___, const[4].w___, temp[47].x___; 31: MAD temp[49].x, temp[48].x___, none.H___, const[5].y___; 32: MUL temp[50].x, (temp[42] - temp[43]).w___, const[5].x___; 33: FRC temp[51].x, temp[50].x___; 34: MUL temp[52].x, (temp[42] - temp[43]).z___, const[4].w___; 35: MAD temp[53].x, const[4].w___, temp[51].x___, temp[52].x___; 36: MAD temp[54].x, temp[53].x___, none.H___, const[5].y___; 37: MOV temp[49].y, temp[54]._x__; 38: MOV temp[0].xy, (input[0] - temp[49]).xy__; 39: MOV temp[0].z, (input[0] - temp[49]).__0_; 40: MOV temp[1].xy, (input[0] - temp[49]).xy__; 41: MOV temp[1].z, (input[0] - temp[49]).__0_; 42: DP3 temp[56].x, temp[0].xyz_, temp[1].xyz_; 43: ADD temp[57].x, temp[56].x___, -const[5].z___; 44: CMP temp[58].x, temp[57].x___, none.0___, none.1___; 45: CMP temp[59].x, -temp[58].x___, none.1___, none.0___; 46: MOV temp[2], -temp[59].xxxx; 47: KIL temp[2]; 48: RCP temp[60].x, temp[24].x___; 49: MAD temp[61].xy, input[2].xy__, temp[60].xx__, input[4].xy__; 50: RCP temp[62].x, const[0].x___; 51: RCP temp[62].y, const[0]._y__; 52: MUL temp[63].xy, temp[61].xy__, temp[62].xy__; 53: TEX temp[64], temp[63].xy__, 2D[0]; 54: MUL temp[65].x, (temp[42] - temp[43]).x___, const[6].x___; 55: FRC temp[66].x, temp[65].x___; 56: MUL temp[67].x, const[5].w___, temp[66].x___; 57: MUL temp[68].x, temp[31].x___, temp[67].x___; 58: MUL temp[69], temp[64], temp[68].xxxx; 59: CMP temp[71].x, -|temp[69].w___|, none.0___, none.1___; 60: CMP temp[72].x, -temp[71].x___, none.1___, none.0___; 61: MOV temp[3], -temp[72].xxxx; 62: KIL temp[3]; 63: MOV output[0], temp[69]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[3] MAD temp[13].x, src0.y__, src0.111, src0.H__ 1: src0.xyz = const[2] REPL_ALPHA temp[14].x RCP, src0.x 2: src0.xyz = temp[13], src1.xyz = temp[14] MAD temp[15].x, src0.x__, src1.x__, src0.000 3: src0.xyz = temp[15] FRC temp[16].x, src0.x__ 4: src0.xyz = temp[15] FRC temp[17].x, src0.x__ 5: src0.xyz = temp[17], src1.xyz = temp[15], src2.xyz = const[3], srcp.xyz = (src1 - src0) MAD temp[19].x, src2.y__, srcp.x__, src2.z__ 6: src0.xyz = const[2] REPL_ALPHA temp[20].x RCP, src0.y 7: src0.xyz = temp[19], src1.xyz = temp[20] MAD temp[21].x, src0.x__, src1.x__, src0.000 8: src0.xyz = temp[21] MAD temp[16].y, src0._x_, src0.111, src0.000 9: TEX temp[22].xy, temp[16].xy__, 2D[2]; 10: src0.xyz = temp[22], src0.w = const[3] MAD temp[24].x, src0.w__, src0.x__, src0.000 11: src0.xyz = input[1] MAX temp[27].x, |src0.x__|, |src0.y__| 12: src0.xyz = temp[24], src1.xyz = temp[27], srcp.xyz = (src1 - src0) CMP temp[29].x, src0.0__, src0.1__, srcp.x__ 13: src0.xyz = temp[29] MAD temp[30].x, -src0.x__, src0.111, src0.1__ 14: src0.xyz = temp[22], src1.xyz = temp[30] CMP temp[31].x, src0.y__, src0.0__, -src1.x__ 15: src0.xyz = input[3] MAD temp[32].x, src0.z__, src0.111, src0.H__ 16: src0.xyz = const[1] REPL_ALPHA temp[33].x RCP, src0.x 17: src0.xyz = temp[32], src1.xyz = temp[33] MAD temp[34].x, src0.x__, src1.x__, src0.000 18: src0.xyz = temp[34] FRC temp[35].x, src0.x__ 19: src0.xyz = temp[34] FRC temp[36].x, src0.x__ 20: src0.xyz = temp[36], src1.xyz = temp[34], srcp.xyz = (src1 - src0) MAD temp[38].x, srcp.x__, src0.111, src0.H__ 21: src0.xyz = const[1] REPL_ALPHA temp[39].x RCP, src0.y 22: src0.xyz = temp[38], src1.xyz = temp[39] MAD temp[40].x, src0.x__, src1.x__, src0.000 23: src0.xyz = temp[40] MAD temp[35].y, src0._x_, src0.111, src0.000 24: TEX temp[41], temp[35].xy__, 2D[1]; 25: src0.xyz = const[4], src0.w = temp[41], src1.xyz = temp[41] MAD temp[42].xyz, src0.zzz, src1.xyz, src0.HHH MAD temp[42].w, src0.z, src0.w, src0.H 26: src0.xyz = temp[42], src0.w = temp[42] FRC temp[43].xyz, src0.xyz FRC temp[43].w, src0.w 27: src0.xyz = const[5], src0.w = temp[43], src1.w = temp[42], srcp.w = (src1 - src0) MAD temp[45].x, srcp.w__, src0.x__, src0.000 28: src0.xyz = temp[45] FRC temp[46].x, src0.x__ 29: src0.xyz = temp[45], src1.xyz = temp[46] MAD temp[47].x, src0.x__, src0.111, -src1.x__ 30: src0.xyz = temp[43], src0.w = const[4], src1.xyz = temp[42], src2.xyz = temp[47], srcp.xyz = (src1 - src0) MAD temp[48].x, srcp.y__, src0.w__, src2.x__ 31: src0.xyz = temp[48], src1.xyz = const[5] MAD temp[49].x, src0.x__, src0.H__, src1.y__ 32: src0.xyz = const[5], src0.w = temp[43], src1.w = temp[42], srcp.w = (src1 - src0) MAD temp[50].x, srcp.w__, src0.x__, src0.000 33: src0.xyz = temp[50] FRC temp[51].x, src0.x__ 34: src0.xyz = temp[43], src0.w = const[4], src1.xyz = temp[42], srcp.xyz = (src1 - src0) MAD temp[52].x, srcp.z__, src0.w__, src0.000 35: src0.xyz = temp[51], src0.w = const[4], src1.xyz = temp[52] MAD temp[53].x, src0.w__, src0.x__, src1.x__ 36: src0.xyz = temp[53], src1.xyz = const[5] MAD temp[54].x, src0.x__, src0.H__, src1.y__ 37: src0.xyz = temp[54] MAD temp[49].y, src0._x_, src0.111, src0.000 38: src0.xyz = temp[49], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[0].xy, srcp.xy_, src0.111, src0.000 39: MAD temp[0].z, src0.__0, src0.111, src0.000 40: src0.xyz = temp[49], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[1].xy, srcp.xy_, src0.111, src0.000 41: MAD temp[1].z, src0.__0, src0.111, src0.000 42: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[56].x, src0.xyz, src1.xyz 43: src0.xyz = temp[56], src1.xyz = const[5] MAD temp[57].x, src0.x__, src0.111, -src1.z__ 44: src0.xyz = temp[57] CMP temp[58].x, src0.1__, src0.0__, src0.x__ 45: src0.xyz = temp[58] CMP temp[59].x, src0.0__, src0.1__, -src0.x__ 46: src0.xyz = temp[59] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 47: KIL temp[2]; 48: src0.xyz = temp[24] REPL_ALPHA temp[60].x RCP, src0.x 49: src0.xyz = input[2], src1.xyz = temp[60], src2.xyz = input[4] MAD temp[61].xy, src0.xy_, src1.xx_, src2.xy_ 50: src0.xyz = const[0] REPL_ALPHA temp[62].x RCP, src0.x 51: src0.xyz = const[0] REPL_ALPHA temp[62].y RCP, src0.y 52: src0.xyz = temp[61], src1.xyz = temp[62] MAD temp[63].xy, src0.xy_, src1.xy_, src0.000 53: TEX temp[64], temp[63].xy__, 2D[0]; 54: src0.xyz = temp[43], src1.xyz = temp[42], src2.xyz = const[6], srcp.xyz = (src1 - src0) MAD temp[65].x, srcp.x__, src2.x__, src0.000 55: src0.xyz = temp[65] FRC temp[66].x, src0.x__ 56: src0.xyz = temp[66], src0.w = const[5] MAD temp[67].x, src0.w__, src0.x__, src0.000 57: src0.xyz = temp[31], src1.xyz = temp[67] MAD temp[68].x, src0.x__, src1.x__, src0.000 58: src0.xyz = temp[64], src0.w = temp[64], src1.xyz = temp[68] MAD temp[69].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[69].w, src0.w, src1.x, src0.0 59: src0.w = temp[69] CMP temp[71].x, src0.1__, src0.0__, -|src0.w__| 60: src0.xyz = temp[71] CMP temp[72].x, src0.0__, src0.1__, -src0.x__ 61: src0.xyz = temp[72] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 62: KIL temp[3]; 63: src0.xyz = temp[69], src0.w = temp[69] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[1] MAD temp[0].z, src0.__0, src0.111, src0.000 RCP temp[39].w, src0.y 1: src0.xyz = input[3], src1.xyz = const[1] MAD temp[32].x, src0.z__, src0.111, src0.H__ RCP temp[33].w, src1.x 2: src0.xyz = input[1], src1.xyz = const[2] MAX temp[27].x, |src0.x__|, |src0.y__| RCP temp[20].w, src1.y 3: src0.xyz = input[3], src1.xyz = const[2] MAD temp[13].x, src0.y__, src0.111, src0.H__ RCP temp[14].w, src1.x 4: src0.xyz = temp[32], src0.w = temp[33], src1.xyz = temp[33] MAD temp[34].x, src0.x__, src0.w__, src0.000 5: src0.xyz = const[0] REPL_ALPHA temp[62].x RCP, src0.x 6: src0.xyz = temp[13], src0.w = temp[14], src1.xyz = temp[14] MAD temp[15].x, src0.x__, src0.w__, src0.000 7: src0.xyz = const[0] REPL_ALPHA temp[62].y RCP, src0.y 8: src0.xyz = temp[34] FRC temp[36].x, src0.x__ 9: src0.xyz = temp[36], src1.xyz = temp[34], srcp.xyz = (src1 - src0) MAD temp[1].z, src0.__0, src0.111, src0.000 MAD temp[38].w, srcp.x, src0.1, src0.H 10: src0.xyz = temp[34], src0.w = temp[38], src1.w = temp[39] FRC temp[35].x, src0.x__ MAD temp[40].w, src0.w, src1.w, src0.0 11: src0.xyz = temp[15] FRC temp[17].x, src0.x__ 12: src0.xyz = temp[17], src1.xyz = temp[15], src2.xyz = const[3], srcp.xyz = (src1 - src0) FRC temp[16].x, src1.x__ MAD temp[19].w, src2.y, srcp.x, src2.z 13: src0.xyz = temp[40], src0.w = temp[40], src1.w = temp[19], src2.w = temp[20] MAD temp[35].y, src0._w_, src0.111, src0.000 MAD temp[21].w, src1.w, src2.w, src0.0 14: src0.xyz = temp[21], src0.w = temp[21] MAD temp[16].y, src0._w_, src0.111, src0.000 15: BEGIN_TEX; 16: TEX temp[41], temp[35].xy__, 2D[1]; 17: TEX temp[22].xy, temp[16].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 18: src0.xyz = const[4], src0.w = temp[41], src1.xyz = temp[41] SEM_WAIT MAD temp[42].xyz, src0.zzz, src1.xyz, src0.HHH MAD temp[42].w, src0.z, src0.w, src0.H 19: src0.xyz = temp[22], src0.w = const[3] MAD temp[24].x, src0.w__, src0.x__, src0.000 20: src0.xyz = temp[24], src1.xyz = temp[27], srcp.xyz = (src1 - src0) CMP temp[29].x, src0.0__, src0.1__, srcp.x__ RCP temp[60].w, src0.x 21: src0.xyz = temp[42], src0.w = temp[42] FRC temp[43].xyz, src0.xyz FRC temp[43].w, src0.w 22: src0.xyz = temp[43], src0.w = const[4], src1.xyz = temp[42], src2.xyz = temp[29], srcp.xyz = (src1 - src0) MAD temp[52].x, srcp.z__, src0.w__, src0.000 MAD temp[30].w, -src2.x, src0.1, src0.1 23: src0.xyz = temp[22], src0.w = temp[43], src1.xyz = temp[30], src1.w = temp[42], src2.xyz = const[5], src2.w = temp[30], srcp.w = (src1 - src0) CMP temp[31].x, src0.y__, src0.0__, -src2.w__ MAD temp[50].w, srcp.w, src2.x, src0.0 24: src0.xyz = temp[50], src0.w = temp[43], src1.xyz = const[5], src1.w = temp[42], src2.w = temp[50], srcp.w = (src1 - src0) FRC temp[51].x, src2.w__ MAD temp[45].w, srcp.w, src1.x, src0.0 25: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[51], src1.w = const[4], src2.xyz = temp[52] FRC temp[46].x, src0.w__ MAD temp[53].w, src1.w, src1.x, src2.x 26: src0.xyz = temp[53], src0.w = temp[53], src1.xyz = const[5], src1.w = temp[45], src2.xyz = temp[46] MAD temp[54].x, src0.w__, src0.H__, src1.y__ MAD temp[47].w, src1.w, src0.1, -src2.x 27: src0.xyz = temp[43], src0.w = const[4], src1.xyz = temp[42], src1.w = temp[47], src2.xyz = temp[54], srcp.xyz = (src1 - src0) MAD temp[49].y, src2._x_, src0.111, src0.000 MAD temp[48].w, srcp.y, src0.w, src1.w 28: src0.xyz = input[2], src0.w = temp[60], src1.xyz = temp[60], src2.xyz = input[4] MAD temp[61].xy, src0.xy_, src0.ww_, src2.xy_ 29: src0.xyz = temp[43], src1.xyz = temp[42], src2.xyz = const[6], srcp.xyz = (src1 - src0) MAD temp[65].w, srcp.x, src2.x, src0.0 30: src0.xyz = temp[48], src0.w = temp[48], src1.xyz = const[5], src1.w = temp[65] MAD temp[49].x, src0.w__, src0.H__, src1.y__ FRC temp[66].w, src1.w 31: src0.xyz = temp[61], src0.w = const[5], src1.xyz = temp[62], src1.w = temp[66] MAD temp[63].xy, src0.xy_, src1.xy_, src0.000 MAD temp[67].w, src0.w, src1.w, src0.0 32: src0.xyz = temp[49], src0.w = temp[67], src1.xyz = input[0], src2.xyz = temp[31], srcp.xyz = (src1 - src0) MAD temp[1].xy, srcp.xy_, src0.111, src0.000 MAD temp[68].w, src2.x, src0.w, src0.0 33: src0.xyz = temp[49], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[0].xy, srcp.xy_, src0.111, src0.000 34: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[56].x, src0.xyz, src1.xyz 35: src0.xyz = temp[56], src1.xyz = const[5] MAD temp[57].x, src0.x__, src0.111, -src1.z__ 36: src0.xyz = temp[57] CMP temp[58].x, src0.1__, src0.0__, src0.x__ 37: src0.xyz = temp[58] CMP temp[59].x, src0.0__, src0.1__, -src0.x__ 38: src0.xyz = temp[59] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 39: BEGIN_TEX; 40: TEX temp[64], temp[63].xy__, 2D[0]; 41: KIL temp[2]; 42: src0.xyz = temp[64], src0.w = temp[64], src1.xyz = temp[68], src1.w = temp[68] SEM_WAIT MAD temp[69].xyz, src0.xyz, src1.www, src0.000 MAD temp[69].w, src0.w, src1.w, src0.0 43: src0.w = temp[69] CMP temp[71].x, src0.1__, src0.0__, -|src0.w__| 44: src0.xyz = temp[71] CMP temp[72].x, src0.0__, src0.1__, -src0.x__ 45: src0.xyz = temp[72] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 46: BEGIN_TEX; 47: KIL temp[3]; 48: src0.xyz = temp[69], src0.w = temp[69] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[1] MAD temp[0].z, src0.__0, src0.111, src0.000 RCP temp[39].w, src0.y 1: src0.xyz = input[3], src1.xyz = const[1] MAD temp[32].x, src0.z__, src0.111, src0.H__ RCP temp[33].w, src1.x 2: src0.xyz = input[1], src1.xyz = const[2] MAX temp[27].x, |src0.x__|, |src0.y__| RCP temp[20].w, src1.y 3: src0.xyz = input[3], src1.xyz = const[2] MAD temp[13].x, src0.y__, src0.111, src0.H__ RCP temp[14].w, src1.x 4: src0.xyz = temp[32], src0.w = temp[33] MAD temp[34].x, src0.x__, src0.w__, src0.000 5: src0.xyz = const[0] REPL_ALPHA temp[62].x RCP, src0.x 6: src0.xyz = temp[13], src0.w = temp[14] MAD temp[15].x, src0.x__, src0.w__, src0.000 7: src0.xyz = const[0] REPL_ALPHA temp[62].y RCP, src0.y 8: src0.xyz = temp[34] FRC temp[36].x, src0.x__ 9: src0.xyz = temp[36], src1.xyz = temp[34], srcp.xyz = (src1 - src0) MAD temp[1].z, src0.__0, src0.111, src0.000 MAD temp[38].w, srcp.x, src0.1, src0.H 10: src0.xyz = temp[34], src0.w = temp[38], src1.w = temp[39] FRC temp[35].x, src0.x__ MAD temp[40].w, src0.w, src1.w, src0.0 11: src0.xyz = temp[15] FRC temp[17].x, src0.x__ 12: src0.xyz = temp[17], src1.xyz = temp[15], src2.xyz = const[3], srcp.xyz = (src1 - src0) FRC temp[16].x, src1.x__ MAD temp[19].w, src2.y, srcp.x, src2.z 13: src0.w = temp[40], src1.w = temp[19], src2.w = temp[20] MAD temp[35].y, src0._w_, src0.111, src0.000 MAD temp[21].w, src1.w, src2.w, src0.0 14: src0.w = temp[21] MAD temp[16].y, src0._w_, src0.111, src0.000 15: BEGIN_TEX; 16: TEX temp[41], temp[35].xy__, 2D[1]; 17: TEX temp[22].xy, temp[16].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 18: src0.xyz = const[4], src0.w = temp[41], src1.xyz = temp[41] SEM_WAIT MAD temp[42].xyz, src0.zzz, src1.xyz, src0.HHH MAD temp[42].w, src0.z, src0.w, src0.H 19: src0.xyz = temp[22], src0.w = const[3] MAD temp[24].x, src0.w__, src0.x__, src0.000 20: src0.xyz = temp[24], src1.xyz = temp[27], srcp.xyz = (src1 - src0) CMP temp[29].x, src0.0__, src0.1__, srcp.x__ RCP temp[60].w, src0.x 21: src0.xyz = temp[42], src0.w = temp[42] FRC temp[43].xyz, src0.xyz FRC temp[43].w, src0.w 22: src0.xyz = temp[43], src0.w = const[4], src1.xyz = temp[42], src2.xyz = temp[29], srcp.xyz = (src1 - src0) MAD temp[52].x, srcp.z__, src0.w__, src0.000 MAD temp[30].w, -src2.x, src0.1, src0.1 23: src0.xyz = temp[22], src0.w = temp[43], src1.w = temp[42], src2.xyz = const[5], src2.w = temp[30], srcp.w = (src1 - src0) CMP temp[31].x, src0.y__, src0.0__, -src2.w__ MAD temp[50].w, srcp.w, src2.x, src0.0 24: src0.w = temp[43], src1.xyz = const[5], src1.w = temp[42], src2.w = temp[50], srcp.w = (src1 - src0) FRC temp[51].x, src2.w__ MAD temp[45].w, srcp.w, src1.x, src0.0 25: src0.w = temp[45], src1.xyz = temp[51], src1.w = const[4], src2.xyz = temp[52] FRC temp[46].x, src0.w__ MAD temp[53].w, src1.w, src1.x, src2.x 26: src0.w = temp[53], src1.xyz = const[5], src1.w = temp[45], src2.xyz = temp[46] MAD temp[54].x, src0.w__, src0.H__, src1.y__ MAD temp[47].w, src1.w, src0.1, -src2.x 27: src0.xyz = temp[43], src0.w = const[4], src1.xyz = temp[42], src1.w = temp[47], src2.xyz = temp[54], srcp.xyz = (src1 - src0) MAD temp[49].y, src2._x_, src0.111, src0.000 MAD temp[48].w, srcp.y, src0.w, src1.w 28: src0.xyz = input[2], src0.w = temp[60], src2.xyz = input[4] MAD temp[61].xy, src0.xy_, src0.ww_, src2.xy_ 29: src0.xyz = temp[43], src1.xyz = temp[42], src2.xyz = const[6], srcp.xyz = (src1 - src0) MAD temp[65].w, srcp.x, src2.x, src0.0 30: src0.w = temp[48], src1.xyz = const[5], src1.w = temp[65] MAD temp[49].x, src0.w__, src0.H__, src1.y__ FRC temp[66].w, src1.w 31: src0.xyz = temp[61], src0.w = const[5], src1.xyz = temp[62], src1.w = temp[66] MAD temp[63].xy, src0.xy_, src1.xy_, src0.000 MAD temp[67].w, src0.w, src1.w, src0.0 32: src0.xyz = temp[49], src0.w = temp[67], src1.xyz = input[0], src2.xyz = temp[31], srcp.xyz = (src1 - src0) MAD temp[1].xy, srcp.xy_, src0.111, src0.000 MAD temp[68].w, src2.x, src0.w, src0.0 33: src0.xyz = temp[49], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[0].xy, srcp.xy_, src0.111, src0.000 34: src0.xyz = temp[0], src1.xyz = temp[1] DP3 temp[56].x, src0.xyz, src1.xyz 35: src0.xyz = temp[56], src1.xyz = const[5] MAD temp[57].x, src0.x__, src0.111, -src1.z__ 36: src0.xyz = temp[57] CMP temp[58].x, src0.1__, src0.0__, src0.x__ 37: src0.xyz = temp[58] CMP temp[59].x, src0.0__, src0.1__, -src0.x__ 38: src0.xyz = temp[59] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 39: BEGIN_TEX; 40: TEX temp[64], temp[63].xy__, 2D[0]; 41: KIL temp[2]; 42: src0.xyz = temp[64], src0.w = temp[64], src1.w = temp[68] SEM_WAIT MAD temp[69].xyz, src0.xyz, src1.www, src0.000 MAD temp[69].w, src0.w, src1.w, src0.0 43: src0.w = temp[69] CMP temp[71].x, src0.1__, src0.0__, -|src0.w__| 44: src0.xyz = temp[71] CMP temp[72].x, src0.0__, src0.1__, -src0.x__ 45: src0.xyz = temp[72] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 46: BEGIN_TEX; 47: KIL temp[3]; 48: src0.xyz = temp[69], src0.w = temp[69] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[1] MAD temp[5].z, src0.__0, src0.111, src0.000 RCP temp[0].w, src0.y 1: src0.xyz = input[3], src1.xyz = const[1] MAD temp[0].z, src0.__z, src0.__1, src0.__H RCP temp[1].w, src1.x 2: src0.xyz = input[1], src1.xyz = const[2] MAX temp[1].x, |src0.x__|, |src0.y__| RCP temp[2].w, src1.y 3: src0.xyz = input[3], src1.xyz = const[2] MAD temp[1].y, src0._y_, src0._1_, src0._H_ RCP temp[3].w, src1.x 4: src0.xyz = temp[0], src0.w = temp[1] MAD temp[3].x, src0.z__, src0.w__, src0.0__ 5: src0.xyz = const[0] REPL_ALPHA temp[6].x RCP, src0.x 6: src0.xyz = temp[1], src0.w = temp[3] MAD temp[7].x, src0.y__, src0.w__, src0.0__ 7: src0.xyz = const[0] REPL_ALPHA temp[6].y RCP, src0.y 8: src0.xyz = temp[3] FRC temp[8].x, src0.x__ 9: src0.xyz = temp[8], src1.xyz = temp[3], srcp.xyz = (src1 - src0) MAD temp[8].z, src0.__0, src0.111, src0.000 MAD temp[1].w, srcp.x, src0.1, src0.H 10: src0.xyz = temp[3], src0.w = temp[1], src1.w = temp[0] FRC temp[3].x, src0.x__ MAD temp[0].w, src0.w, src1.w, src0.0 11: src0.xyz = temp[7] FRC temp[9].x, src0.x__ 12: src0.xyz = temp[9], src1.xyz = temp[7], src2.xyz = const[3], srcp.xyz = (src1 - src0) FRC temp[7].x, src1.x__ MAD temp[1].w, src2.y, srcp.x, src2.z 13: src0.w = temp[0], src1.w = temp[1], src2.w = temp[2] MAD temp[3].y, src0._w_, src0.11_, src0.00_ MAD temp[0].w, src1.w, src2.w, src0.0 14: src0.w = temp[0] MAD temp[7].y, src0._w_, src0.11_, src0.00_ 15: BEGIN_TEX; 16: TEX temp[3], temp[3].xy__, 2D[1]; 17: TEX temp[7].xy, temp[7].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 18: src0.xyz = const[4], src0.w = temp[3], src1.xyz = temp[3] SEM_WAIT MAD temp[3].xyz, src0.zzz, src1.xyz, src0.HHH MAD temp[0].w, src0.z, src0.w, src0.H 19: src0.xyz = temp[7], src0.w = const[3] MAD temp[9].x, src0.w__, src0.x__, src0.0__ 20: src0.xyz = temp[9], src1.xyz = temp[1], srcp.xyz = (src1 - src0) CMP temp[0].z, src0.__0, src0.__1, srcp.__x RCP temp[1].w, src0.x 21: src0.xyz = temp[3], src0.w = temp[0] FRC temp[1].xyz, src0.xyz FRC temp[2].w, src0.w 22: src0.xyz = temp[1], src0.w = const[4], src1.xyz = temp[3], src2.xyz = temp[0], srcp.xyz = (src1 - src0) MAD temp[0].z, srcp.__z, src0.__w, src0.__0 MAD temp[3].w, -src2.z, src0.1, src0.1 23: src0.xyz = temp[7], src0.w = temp[2], src1.w = temp[0], src2.xyz = const[5], src2.w = temp[3], srcp.w = (src1 - src0) CMP temp[2].z, src0.__y, src0.__0, -src2.__w MAD temp[3].w, srcp.w, src2.x, src0.0 24: src0.w = temp[2], src1.xyz = const[5], src1.w = temp[0], src2.w = temp[3], srcp.w = (src1 - src0) FRC temp[4].z, src2.__w MAD temp[0].w, srcp.w, src1.x, src0.0 25: src0.w = temp[0], src1.xyz = temp[4], src1.w = const[4], src2.xyz = temp[0] FRC temp[0].z, src0.__w MAD temp[2].w, src1.w, src1.z, src2.z 26: src0.w = temp[2], src1.xyz = const[5], src1.w = temp[0], src2.xyz = temp[0] MAD temp[0].z, src0.__w, src0.__H, src1.__y MAD temp[0].w, src1.w, src0.1, -src2.z 27: src0.xyz = temp[1], src0.w = const[4], src1.xyz = temp[3], src1.w = temp[0], src2.xyz = temp[0], srcp.xyz = (src1 - src0) MAD temp[7].y, src2._z_, src0.11_, src0.00_ MAD temp[0].w, srcp.y, src0.w, src1.w 28: src0.xyz = input[2], src0.w = temp[1], src2.xyz = input[4] MAD temp[2].xy, src0.xy_, src0.ww_, src2.xy_ 29: src0.xyz = temp[1], src1.xyz = temp[3], src2.xyz = const[6], srcp.xyz = (src1 - src0) MAD temp[1].w, srcp.x, src2.x, src0.0 30: src0.w = temp[0], src1.xyz = const[5], src1.w = temp[1] MAD temp[7].x, src0.w__, src0.H__, src1.y__ FRC temp[0].w, src1.w 31: src0.xyz = temp[2], src0.w = const[5], src1.xyz = temp[6], src1.w = temp[0] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ MAD temp[0].w, src0.w, src1.w, src0.0 32: src0.xyz = temp[7], src0.w = temp[0], src1.xyz = input[0], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[8].xy, srcp.xy_, src0.111, src0.000 MAD temp[0].w, src2.z, src0.w, src0.0 33: src0.xyz = temp[7], src1.xyz = input[0], srcp.xyz = (src1 - src0) MAD temp[5].xy, srcp.xy_, src0.111, src0.000 34: src0.xyz = temp[5], src1.xyz = temp[8] DP3 temp[0].x, src0.xyz, src1.xyz 35: src0.xyz = temp[0], src1.xyz = const[5] MAD temp[0].x, src0.x__, src0.1__, -src1.z__ 36: src0.xyz = temp[0] CMP temp[0].x, src0.1__, src0.0__, src0.x__ 37: src0.xyz = temp[0] CMP temp[0].x, src0.0__, src0.1__, -src0.x__ 38: src0.xyz = temp[0] MAD temp[2].xyz, -src0.xxx, src0.111, src0.000 MAD temp[2].w, -src0.x, src0.1, src0.0 39: BEGIN_TEX; 40: TEX temp[1], temp[1].xy__, 2D[0]; 41: KIL temp[2]; 42: src0.xyz = temp[1], src0.w = temp[1], src1.w = temp[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src1.www, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 43: src0.w = temp[0] CMP temp[1].x, src0.1__, src0.0__, -|src0.w__| 44: src0.xyz = temp[1] CMP temp[1].x, src0.0__, src0.1__, -src0.x__ 45: src0.xyz = temp[1] MAD temp[1].xyz, -src0.xxx, src0.111, src0.000 MAD temp[1].w, -src0.x, src0.1, src0.0 46: BEGIN_TEX; 47: KIL temp[1]; 48: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=16************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 14, tex_end: 0 (code_addr: 00000380) 0: xyz: c1 t0 t0 bias-> t5.z (02140021) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 0.0 1.0 0.0 op: 00050a94 w: c1.y c1.x c1.x op: 05000001 1: xyz: t3 c1 t0 bias-> t0.z (02000843) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t3.xyz 1.0 0.5 op: 00058a80 w: c1.x t3.x t3.x op: 05000003 2: xyz: t1 c2 t0 bias-> t1.x (00840881) w: t0 t0 t0 bias-> t2.w (00880000) xyz: |t1.xyz| |t1.yyy| t1.xxx op: 02806140 w: c2.y t1.x t1.x op: 05000004 3: xyz: t3 c2 t0 bias-> t1.y (01040883) w: t0 t0 t0 bias-> t3.w (008c0000) xyz: t3.xyz 1.0 0.5 op: 00058a80 w: c2.x t3.x t3.x op: 05000003 4: xyz: t0 t32 t0 bias-> t3.x (008c0000) w: t1 t0 t0 bias-> (00000001) xyz: t0.zzz t1.www 0.0 op: 00050603 w: t0.x t0.x t0.x op: 00000000 5: xyz: c0 t0 t0 bias-> t6.x (00980020) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx c0.xxx c0.xxx op: 05004081 w: c0.x c0.x c0.x op: 05000000 6: xyz: t1 t0 t0 bias-> t7.x (009c0001) w: t3 t0 t0 bias-> (00000003) xyz: t1.yyy t3.www 0.0 op: 00050602 w: t1.x t1.x t1.x op: 00000000 7: xyz: c0 t0 t0 bias-> t6.y (01180020) w: t0 t0 t0 bias-> (00000000) xyz: c0.xxx c0.xxx c0.xxx op: 05004081 w: c0.y c0.x c0.x op: 05000001 8: xyz: t3 t0 t0 bias-> t8.x (00a00003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xxx t3.xxx op: 84804080 NOP w: t3.x t3.x t3.x op: 00000000 9: xyz: t8 t3 t0 sub-> t8.z (022000c8) w: t0 t0 t0 bias-> t1.w (00840000) xyz: 0.0 1.0 0.0 op: 00250a94 w: srcp.x 1.0 0.5 op: 0004888c 10: xyz: t3 t0 t0 bias-> t3.x (008c0003) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t3.xyz t3.xxx t3.xxx op: 04804080 w: t1.w t0.w 0.0 op: 00040509 11: xyz: t7 t0 t0 bias-> t9.x (00a40007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t7.xxx t7.xxx op: 84804080 NOP w: t7.x t7.x t7.x op: 00000000 12: xyz: t9 t7 c3 sub-> t7.x (009e31c9) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t7.xyz t9.xxx t9.xxx op: 04a04084 w: c3.y srcp.x c3.z op: 00020607 13: xyz: t32 t0 t0 bias-> t3.y (010c0000) w: t0 t1 t2 bias-> t0.w (00802040) xyz: t0.www 1.0 0.0 op: 00050a8c w: t1.w t2.w 0.0 op: 0004058a 14: xyz: t0 t0 t0 bias-> t7.y (011c0000) w: t0 t0 t0 bias-> (00000000) xyz: t0.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 15, tex_offset: 0, alu_end: 20, tex_end: 1 (code_addr: 0002050f) TEX: TEX t3, t3, texture[1] (000088c3) TEX t7, t7, texture[2] (000091c7) 15: xyz: c4 t3 t0 bias-> t3.xyz (038c00e4) w: t3 t0 t0 bias-> t0.w (00800003) xyz: c4.zzz t3.xyz 0.5 op: 00058203 w: c4.z t3.w 0.5 op: 00048482 16: xyz: t7 t0 t0 bias-> t9.x (00a40007) w: c3 t0 t0 bias-> (00000023) xyz: c3.www t7.xyz 0.0 op: 8005000c NOP w: t7.x t7.x t7.x op: 00000000 17: xyz: t9 t1 t0 sub-> t0.z (02000049) w: t0 t0 t0 bias-> t1.w (00840000) xyz: 0.0 1.0 srcp.xxx op: 04240a94 w: t9.x t9.x t9.x op: 05000000 18: xyz: t3 t0 t0 bias-> t1.xyz (03840003) w: t0 t0 t0 bias-> t2.w (00880000) xyz: t3.xyz t3.xxx t3.xxx op: 84804080 NOP w: t0.w t3.x t3.x op: 03800009 19: xyz: t1 t3 t0 sub-> t0.z (020000c1) w: c4 t0 t0 bias-> t3.w (008c0024) xyz: srcp.xyz c4.www 0.0 op: 0025060f w: -t0.z 1.0 1.0 op: 000448a8 20: xyz: t7 t0 c5 bias-> t2.z (020a5007) w: t2 t0 t3 sub-> t3.w (008c3002) xyz: t7.yyy 0.0 -t3.www op: 040b8a02 w: srcp.w c5.x 0.0 op: 0024030f 21: xyz: t32 c5 t0 bias-> t4.z (02100940) w: t2 t0 t3 sub-> t0.w (00803002) xyz: t3.www t32.xxx t32.xxx op: 0480408e w: srcp.w c5.x 0.0 op: 0024018f 22: xyz: t32 t4 t0 bias-> t0.z (02000100) w: t0 c4 t0 bias-> t2.w (00880900) xyz: t0.www t32.xxx t32.xxx op: 0480408c w: c4.w t4.z t0.z op: 0002028a 23: xyz: t32 c5 t0 bias-> t0.z (02000940) w: t2 t0 t0 bias-> t0.w (00800002) xyz: t2.www 0.5 c5.yyy op: 00018b0c w: t0.w 1.0 -t0.z op: 000a088a 24: xyz: t1 t3 t0 sub-> t7.y (011c00c1) w: c4 t0 t0 bias-> t0.w (00800024) xyz: t0.zzz 1.0 0.0 op: 00250a8b w: srcp.y c4.w t0.w op: 0002848d 25: xyz: t2 t32 t4 bias-> t2.xy (01884002) w: t1 t0 t0 bias-> (00000001) xyz: t2.xyz t1.www t4.xyz op: 00020600 w: t2.x t2.x t2.x op: 00000000 26: xyz: t1 t3 c6 sub-> (000260c1) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t1.xxx t1.xxx t1.xxx op: 00204081 w: srcp.x c6.x 0.0 op: 0004030c 27: xyz: t32 c5 t0 bias-> t7.x (009c0940) w: t0 t1 t0 bias-> t0.w (00800040) xyz: t0.www 0.5 c5.yyy op: 00018b0c w: t1.w t32.x t32.x op: 0380000a 28: xyz: t2 t6 t0 bias-> t1.xy (01840182) w: c5 t0 t0 bias-> t0.w (00800025) xyz: t2.xyz t6.xyz 0.0 op: 00050200 w: c5.w t0.w 0.0 op: 00040509 29: xyz: t7 t0 t2 sub-> t8.xy (01a02007) w: t0 t0 t0 bias-> t0.w (00800000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t2.z t0.w 0.0 op: 00040488 30: xyz: t7 t0 t0 sub-> t5.xy (01940007) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz 1.0 0.0 op: 00250a8f w: t7.x t7.x t7.x op: 00000000 31: xyz: t5 t8 t0 bias-> t0.x (00800205) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t8.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 32: xyz: t0 c5 t0 bias-> t0.x (00800940) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 -c5.zzz op: 0009ca80 w: t0.x t0.x t0.x op: 00000000 33: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 0.0 t0.xyz op: 04000a15 w: t0.x t0.x t0.x op: 00000000 34: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 -t0.xyz op: 04080a94 w: t0.x t0.x t0.x op: 00000000 35: xyz: t0 t0 t0 bias-> t2.xyz (03880000) w: t0 t0 t0 bias-> t2.w (00880000) xyz: -t0.xxx 1.0 0.0 op: 00050aa1 w: -t0.x 1.0 0.0 op: 000408a0 NODE 2: alu_offset: 36, tex_offset: 2, alu_end: 3, tex_end: 1 (code_addr: 000220e4) TEX: TEX t1, t1, texture[0] (00008041) KIL t0, t2, texture[0] (00010002) 36: xyz: t1 t32 t0 bias-> t0.xyz (03800001) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.xyz t0.www 0.0 op: 00050680 w: t1.w t0.w 0.0 op: 00040509 37: xyz: t0 t0 t0 bias-> t1.x (00840000) w: t0 t0 t0 bias-> (00000000) xyz: 1.0 0.0 -|t0.www| op: 041b0a15 w: t0.x t0.x t0.x op: 00000000 38: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 -t1.xyz op: 04080a94 w: t1.x t1.x t1.x op: 00000000 39: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> t1.w (00840000) xyz: -t1.xxx 1.0 0.0 op: 00050aa1 w: -t1.x 1.0 0.0 op: 000408a0 NODE 3: alu_offset: 40, tex_offset: 4, alu_end: 0, tex_end: 0 (code_addr: 00404028) TEX: KIL t0, t1, texture[0] (00010001) 40: 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 GLSL source for fragment shader 28: uniform sampler2D a; uniform vec2 b; uniform float c; void main(){ vec4 d = texture2D(a, (gl_FragCoord.xy / b)); (d[3] /= c); (gl_FragColor = d); } GLSL IR for shader 28: ( (declare (uniform ) float c) (declare (uniform ) vec2 b) (declare (uniform ) sampler2D a) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function main (signature void (parameters ) ( (declare () vec4 d) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref a) (expression vec2 / (swiz xy (var_ref gl_FragCoord) )(var_ref b) ) )) (assign (xyz) (var_ref d) (swiz xyz (var_ref texture2D_retval) )) (assign (w) (var_ref d) (expression float / (swiz w (var_ref texture2D_retval) )(var_ref c) ) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref d) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) ) GLSL source for vertex shader 29: attribute float a; void main(){ (gl_Position = ((2.0 * vec4(mod(a, 2.0), floor((a / 2.0)), 0.5, 1.0)) - 1.0)); } GLSL IR for shader 29: ( (declare (in ) float a) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function main (signature void (parameters ) ( (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((var_ref a) (constant float (2.000000)) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((expression float / (var_ref a) (constant float (2.000000)) ) )) (declare (temporary ) vec4 vec_ctor) (assign (zw) (var_ref vec_ctor) (constant vec2 (0.500000 1.000000)) ) (assign (x) (var_ref vec_ctor) (var_ref mod_retval) ) (assign (y) (var_ref vec_ctor) (var_ref floor_retval) ) (assign (xyzw) (var_ref gl_Position) (expression vec4 + (expression vec4 * (constant float (2.000000)) (var_ref vec_ctor) ) (constant float (-1.000000)) ) ) )) ) (function mod (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) ) ) GLSL IR for linked vertex program 30: ( (declare (in ) float a) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor) (assign (zw) (var_ref vec_ctor) (constant vec2 (0.500000 1.000000)) ) (assign (x) (var_ref vec_ctor) (expression float * (constant float (2.000000)) (expression float fract (expression float * (var_ref a) (constant float (0.500000)) ) ) ) ) (assign (y) (var_ref vec_ctor) (expression float floor (expression float * (var_ref a) (constant float (0.500000)) ) ) ) (assign (xyzw) (var_ref gl_Position) (expression vec4 + (expression vec4 * (constant float (2.000000)) (var_ref vec_ctor) ) (constant float (-1.000000)) ) ) (assign (xyzw) (var_ref gl_Position@161) (var_ref gl_Position) ) )) ) ) GLSL IR for linked fragment program 30: ( (declare (uniform ) float c) (declare (uniform ) vec2 b) (declare (uniform ) sampler2D a) (declare (in ) vec4 gl_FragCoord) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare () vec4 d) (declare (temporary ) vec4 texture2D_retval) (assign (xyzw) (var_ref texture2D_retval) (tex vec4 (var_ref a) (expression vec2 * (swiz xy (var_ref gl_FragCoord) )(expression vec2 rcp (var_ref b) ) ) 0 1 () )) (assign (xyz) (var_ref d) (swiz xyz (var_ref texture2D_retval) )) (assign (w) (var_ref d) (expression float * (swiz w (var_ref texture2D_retval) )(expression float rcp (var_ref c) ) ) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref d) ) (assign (xyzw) (var_ref gl_FragColor@162) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL OUT[0], POSITION DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL IMM FLT32 { 0.5000, 1.0000, 2.0000, -1.0000} 0: MOV TEMP[0].zw, IMM[0].yyxy 1: MUL TEMP[1].x, IN[0].xxxx, IMM[0].xxxx 2: FRC TEMP[1].x, TEMP[1].xxxx 3: MUL TEMP[0].x, IMM[0].zzzz, TEMP[1].xxxx 4: MUL TEMP[1].x, IN[0].xxxx, IMM[0].xxxx 5: FLR TEMP[1].x, TEMP[1].xxxx 6: MOV TEMP[0].y, TEMP[1].xxxx 7: MAD TEMP[0], IMM[0].zzzz, TEMP[0], IMM[0].wwww 8: MOV OUT[0], TEMP[0] 9: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0].zw, const[0].yyxy; 1: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 2: FRC temp[1].x, temp[1].xxxx; 3: MUL temp[0].x, const[0].zzzz, temp[1].xxxx; 4: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 5: FLR temp[1].x, temp[1].xxxx; 6: MOV temp[0].y, temp[1].xxxx; 7: MAD temp[0], const[0].zzzz, temp[0], const[0].wwww; 8: MOV temp[2], temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[1], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].zw, const[0].yyxy; 1: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 2: FRC temp[1].x, temp[1].xxxx; 3: MUL temp[0].x, const[0].zzzz, temp[1].xxxx; 4: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 5: FLR temp[1].x, temp[1].xxxx; 6: MOV temp[0].y, temp[1].xxxx; 7: MAD temp[0], const[0].zzzz, temp[0], const[0].wwww; 8: MOV temp[2], temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[1], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0].zw, const[0].yyxy; 1: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 2: FRC temp[1].x, temp[1].xxxx; 3: MUL temp[0].x, const[0].zzzz, temp[1].xxxx; 4: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 5: FLR temp[1].x, temp[1].xxxx; 6: MOV temp[0].y, temp[1].xxxx; 7: MAD temp[0], const[0].zzzz, temp[0], const[0].wwww; 8: MOV temp[2], temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[1], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].zw, const[0].yyxy; 1: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 2: FRC temp[1].x, temp[1].xxxx; 3: MUL temp[0].x, const[0].zzzz, temp[1].xxxx; 4: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 5: FRC temp[3].x, temp[1].xxxx; 6: ADD temp[1].x, temp[1].xxxx, -temp[3]; 7: MOV temp[0].y, temp[1].xxxx; 8: MAD temp[0], const[0].zzzz, temp[0], const[0].wwww; 9: MOV temp[2], temp[0]; 10: MOV output[0], temp[2]; 11: MOV output[1], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0].zw, const[0].yyxy; 1: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 2: FRC temp[1].x, temp[1].xxxx; 3: MUL temp[0].x, const[0].zzzz, temp[1].xxxx; 4: MUL temp[1].x, input[0].xxxx, const[0].xxxx; 5: FRC temp[3].x, temp[1].xxxx; 6: ADD temp[1].x, temp[1].xxxx, -temp[3]; 7: MOV temp[0].y, temp[1].xxxx; 8: MAD temp[0], const[0].zzzz, temp[0], const[0].wwww; 9: MOV temp[2], temp[0]; 10: MOV output[0], temp[2]; 11: MOV output[1], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0].zw, const[0].__xy; 1: MUL temp[1].x, input[0].x___, const[0].x___; 2: FRC temp[1].x, temp[1].x___; 3: MUL temp[0].x, const[0].z___, temp[1].x___; 4: MUL temp[1].x, input[0].x___, const[0].x___; 5: FRC temp[3].x, temp[1].x___; 6: ADD temp[1].x, temp[1].x___, -temp[3].x___; 7: MOV temp[0].y, temp[1]._x__; 8: MAD temp[0], const[0].zzzz, temp[0], const[0].wwww; 9: MOV temp[2], temp[0]; 10: MOV output[0], temp[2]; 11: MOV output[1], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV temp[0].zw, const[0].__x1; 1: MUL temp[1].x, input[0].x___, const[0].x___; 2: FRC temp[1].x, temp[1].x___; 3: MUL temp[0].x, const[0].z___, temp[1].x___; 4: MUL temp[1].x, input[0].x___, const[0].x___; 5: FRC temp[3].x, temp[1].x___; 6: ADD temp[1].x, temp[1].x___, -temp[3].x___; 7: MOV temp[0].y, temp[1]._x__; 8: MAD temp[0], const[0].zzzz, temp[0], -none.1111; 9: MOV output[0], temp[0]; 10: MOV output[1], temp[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[0].zw, const[0].__x1; 1: MUL temp[1].x, input[0].x___, const[0].x___; 2: FRC temp[1].x, temp[1].x___; 3: MUL temp[0].x, const[0].z___, temp[1].x___; 4: MUL temp[1].x, input[0].x___, const[0].x___; 5: FRC temp[3].x, temp[1].x___; 6: ADD temp[1].x, temp[1].x___, -temp[3].x___; 7: MOV temp[0].y, temp[1]._x__; 8: MAD temp[0], const[0].zzzz, temp[0], -none.1111; 9: MOV output[0], temp[0]; 10: MOV output[1], temp[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0].zw, const[0].__x1; 1: MUL temp[1].x, input[0].x___, const[0].x___; 2: FRC temp[1].x, temp[1].x___; 3: MUL temp[0].x, const[0].z___, temp[1].x___; 4: MUL temp[1].x, input[0].x___, const[0].x___; 5: FRC temp[2].x, temp[1].x___; 6: ADD temp[1].x, temp[1].x___, -temp[2].x___; 7: MOV temp[0].y, temp[1]._x__; 8: MAD temp[0], const[0].zzzz, temp[0], -none.1111; 9: MOV output[0], temp[0]; 10: MOV output[1], temp[0]; CONST[0] = { 0.5000 1.0000 2.0000 -1.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0].zw, const[0].__x1; 1: MUL temp[1].x, input[0].x___, const[0].x___; 2: FRC temp[1].x, temp[1].x___; 3: MUL temp[0].x, const[0].z___, temp[1].x___; 4: MUL temp[1].x, input[0].x___, const[0].x___; 5: FRC temp[2].x, temp[1].x___; 6: ADD temp[1].x, temp[1].x___, -temp[2].x___; 7: MOV temp[0].y, temp[1]._x__; 8: MAD temp[0], const[0].zzzz, temp[0], -none.1111; 9: MOV output[0], temp[0]; 10: MOV output[1], temp[0]; Final vertex program code: 0: op: 0x00c00003 dst: 0t op: VE_ADD src0: 0x0147e002 reg: 0c swiz: U/ U/ X/ 1 src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 1: op: 0x00102002 dst: 1t op: VE_MULTIPLY src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 2: op: 0x00102006 dst: 1t op: VE_FRACTION 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 3: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff4002 reg: 0c swiz: Z/ U/ U/ U src1: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 4: op: 0x00102002 dst: 1t op: VE_MULTIPLY src0: 0x01ff0001 reg: 0i swiz: X/ U/ U/ U src1: 0x01ff0002 reg: 0c swiz: X/ U/ U/ U src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00104006 dst: 2t op: VE_FRACTION 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 6: op: 0x00102003 dst: 1t op: VE_ADD src0: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src1: 0x1fff0040 reg: 2t swiz: -X/-U/-U/-U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 7: op: 0x00200003 dst: 0t op: VE_ADD src0: 0x01f8e020 reg: 1t swiz: U/ X/ U/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 8: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src1: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src2: 0x1f6da000 reg: 0t swiz: -1/-1/-1/-1 9: 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 10: op: 0x00f02203 dst: 1o 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 fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], POSITION, LINEAR DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[3] DCL CONST[0..1] DCL TEMP[0] DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL 0: MOV TEMP[0], IN[0] 1: MAD TEMP[0].y, IN[0], CONST[3].xxxx, CONST[3].yyyy 2: RCP TEMP[1].x, CONST[1].xxxx 3: RCP TEMP[1].y, CONST[1].yyyy 4: MUL TEMP[1].xy, TEMP[0].xyyy, TEMP[1].xyyy 5: TEX TEMP[1], TEMP[1].xyyy, SAMP[0], 2D 6: MOV TEMP[2].xyz, TEMP[1].xyzx 7: RCP TEMP[3].x, CONST[0].xxxx 8: MUL TEMP[1].x, TEMP[1].wwww, TEMP[3].xxxx 9: MOV TEMP[2].w, TEMP[1].xxxx 10: MOV OUT[0], TEMP[2] 11: END Fragment Program: before compilation # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[4].xyz0, const[5].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[3].xxxx, const[3].yyyy; 5: RCP temp[1].x, const[1].xxxx; 6: RCP temp[1].y, const[1].yyyy; 7: MUL temp[1].xy, temp[0].xyyy, temp[1].xyyy; 8: TEX temp[1], temp[1].xyyy, 2D[0]; 9: MOV temp[2].xyz, temp[1].xyzx; 10: RCP temp[3].x, const[0].xxxx; 11: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 12: MOV temp[2].w, temp[1].xxxx; 13: MOV output[0], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[4].xyz0, const[5].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[3].xxxx, const[3].yyyy; 5: RCP temp[1].x, const[1].xxxx; 6: RCP temp[1].y, const[1].yyyy; 7: MUL temp[1].xy, temp[0].xyyy, temp[1].xyyy; 8: TEX temp[1], temp[1].xyyy, 2D[0]; 9: MOV temp[2].xyz, temp[1].xyzx; 10: RCP temp[3].x, const[0].xxxx; 11: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 12: MOV temp[2].w, temp[1].xxxx; 13: MOV output[0], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[4].xyz0, const[5].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[3].xxxx, const[3].yyyy; 5: RCP temp[1].x, const[1].xxxx; 6: RCP temp[1].y, const[1].yyyy; 7: MUL temp[1].xy, temp[0].xyyy, temp[1].xyyy; 8: TEX temp[1], temp[1].xyyy, 2D[0]; 9: MOV temp[2].xyz, temp[1].xyzx; 10: RCP temp[3].x, const[0].xxxx; 11: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 12: MOV temp[2].w, temp[1].xxxx; 13: MOV output[0], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[4].xyz0, const[5].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[3].xxxx, const[3].yyyy; 5: RCP temp[1].x, const[1].xxxx; 6: RCP temp[1].y, const[1].yyyy; 7: MUL temp[1].xy, temp[0].xyyy, temp[1].xyyy; 8: TEX temp[1], temp[1].xyyy, 2D[0]; 9: MOV temp[2].xyz, temp[1].xyzx; 10: RCP temp[3].x, const[0].xxxx; 11: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 12: MOV temp[2].w, temp[1].xxxx; 13: MOV output[0], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[4].xyz0, const[5].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[3].xxxx, const[3].yyyy; 5: RCP temp[1].x, const[1].xxxx; 6: RCP temp[1].y, const[1].yyyy; 7: MUL temp[1].xy, temp[0].xyyy, temp[1].xyyy; 8: TEX temp[1], temp[1].xyyy, 2D[0]; 9: MOV temp[2].xyz, temp[1].xyzx; 10: RCP temp[3].x, const[0].xxxx; 11: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 12: MOV temp[2].w, temp[1].xxxx; 13: MOV output[0], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[4].xyz0, const[5].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[3].xxxx, const[3].yyyy; 5: RCP temp[1].x, const[1].xxxx; 6: RCP temp[1].y, const[1].yyyy; 7: MUL temp[1].xy, temp[0].xyyy, temp[1].xyyy; 8: TEX temp[1], temp[1].xyyy, 2D[0]; 9: MOV temp[2].xyz, temp[1].xyzx; 10: RCP temp[3].x, const[0].xxxx; 11: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 12: MOV temp[2].w, temp[1].xxxx; 13: MOV output[0], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: RCP temp[4].w, input[0].wwww; 1: MUL temp[4].xyz, input[0], temp[4].wwww; 2: MAD temp[4].xyz, temp[4].xyz0, const[4].xyz0, const[5].xyz0; 3: MOV temp[0], temp[4]; 4: MAD temp[0].y, temp[4], const[3].xxxx, const[3].yyyy; 5: RCP temp[1].x, const[1].xxxx; 6: RCP temp[1].y, const[1].yyyy; 7: MUL temp[1].xy, temp[0].xyyy, temp[1].xyyy; 8: TEX temp[1], temp[1].xyyy, 2D[0]; 9: MOV temp[2].xyz, temp[1].xyzx; 10: RCP temp[3].x, const[0].xxxx; 11: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 12: MOV temp[2].w, temp[1].xxxx; 13: MOV output[0], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: RCP temp[4].w, input[0].___w; 1: MUL temp[4].xy, input[0].xy__, temp[4].ww__; 2: MAD temp[4].xy, temp[4].xy__, const[4].xy__, const[5].xy__; 3: MOV temp[0].x, temp[4].x___; 4: MAD temp[0].y, temp[4]._y__, const[3]._x__, const[3]._y__; 5: RCP temp[1].x, const[1].x___; 6: RCP temp[1].y, const[1]._y__; 7: MUL temp[1].xy, temp[0].xy__, temp[1].xy__; 8: TEX temp[1], temp[1].xy__, 2D[0]; 9: MOV temp[2].xyz, temp[1].xyz_; 10: RCP temp[3].x, const[0].x___; 11: MUL temp[1].x, temp[1].w___, temp[3].x___; 12: MOV temp[2].w, temp[1].___x; 13: MOV output[0], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: RCP temp[4].w, input[0].___w; 1: MUL temp[4].xy, input[0].xy__, temp[4].ww__; 2: MAD temp[4].xy, temp[4].xy__, const[4].xy__, const[5].xy__; 3: MOV temp[0].x, temp[4].x___; 4: MAD temp[0].y, temp[4]._y__, const[3]._x__, const[3]._y__; 5: RCP temp[1].x, const[1].x___; 6: RCP temp[1].y, const[1]._y__; 7: MUL temp[1].xy, temp[0].xy__, temp[1].xy__; 8: TEX temp[1], temp[1].xy__, 2D[0]; 9: MOV temp[2].xyz, temp[1].xyz_; 10: RCP temp[3].x, const[0].x___; 11: MUL temp[1].x, temp[1].w___, temp[3].x___; 12: MOV temp[2].w, temp[1].___x; 13: MOV output[0], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[7].xy, temp[6].xy__, const[4].xy__, const[5].xy__; 3: MOV temp[8].x, temp[7].x___; 4: MAD temp[8].y, temp[7]._y__, const[3]._x__, const[3]._y__; 5: RCP temp[9].x, const[1].x___; 6: RCP temp[9].y, const[1]._y__; 7: MUL temp[10].xy, temp[8].xy__, temp[9].xy__; 8: TEX temp[11], temp[10].xy__, 2D[0]; 9: MOV temp[12].xyz, temp[11].xyz_; 10: RCP temp[13].x, const[0].x___; 11: MUL temp[14].x, temp[11].w___, temp[13].x___; 12: MOV temp[12].w, temp[14].___x; 13: MOV output[0], temp[12]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[7].xy, temp[6].xy__, const[4].xy__, const[5].xy__; 3: MOV temp[8].x, temp[7].x___; 4: MAD temp[8].y, temp[7]._y__, const[3]._x__, const[3]._y__; 5: RCP temp[9].x, const[1].x___; 6: RCP temp[9].y, const[1]._y__; 7: MUL temp[10].xy, temp[8].xy__, temp[9].xy__; 8: TEX temp[11], temp[10].xy__, 2D[0]; 9: MOV temp[12].xyz, temp[11].xyz_; 10: RCP temp[13].x, const[0].x___; 11: MUL temp[14].x, temp[11].w___, temp[13].x___; 12: MOV temp[12].w, temp[14].___x; 13: MOV output[0], temp[12]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[7].xy, temp[6].xy__, const[4].xy__, const[5].xy__; 3: MOV temp[8].x, temp[7].x___; 4: MAD temp[8].y, temp[7]._y__, const[3]._x__, const[3]._y__; 5: RCP temp[9].x, const[1].x___; 6: RCP temp[9].y, const[1]._y__; 7: MUL temp[10].xy, temp[8].xy__, temp[9].xy__; 8: TEX temp[11], temp[10].xy__, 2D[0]; 9: MOV temp[12].xyz, temp[11].xyz_; 10: RCP temp[13].x, const[0].x___; 11: MUL temp[14].x, temp[11].w___, temp[13].x___; 12: MOV temp[12].w, temp[14].___x; 13: MOV output[0], temp[12]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: RCP temp[5].w, input[0].___w; 1: MUL temp[6].xy, input[0].xy__, temp[5].ww__; 2: MAD temp[7].xy, temp[6].xy__, const[3].xy__, const[4].xy__; 3: MOV temp[8].x, temp[7].x___; 4: MAD temp[8].y, temp[7]._y__, const[2]._x__, const[2]._y__; 5: RCP temp[9].x, const[1].x___; 6: RCP temp[9].y, const[1]._y__; 7: MUL temp[10].xy, temp[8].xy__, temp[9].xy__; 8: TEX temp[11], temp[10].xy__, 2D[0]; 9: MOV temp[12].xyz, temp[11].xyz_; 10: RCP temp[13].x, const[0].x___; 11: MUL temp[14].x, temp[11].w___, temp[13].x___; 12: MOV temp[12].w, temp[14].___x; 13: MOV output[0], temp[12]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.w = input[0] RCP temp[5].w, src0.w 1: src0.xyz = input[0], src0.w = temp[5] MAD temp[6].xy, src0.xy_, src0.ww_, src0.000 2: src0.xyz = temp[6], src1.xyz = const[3], src2.xyz = const[4] MAD temp[7].xy, src0.xy_, src1.xy_, src2.xy_ 3: src0.xyz = temp[7] MAD temp[8].x, src0.x__, src0.111, src0.000 4: src0.xyz = temp[7], src1.xyz = const[2] MAD temp[8].y, src0._y_, src1._x_, src1._y_ 5: src0.xyz = const[1] REPL_ALPHA temp[9].x RCP, src0.x 6: src0.xyz = const[1] REPL_ALPHA temp[9].y RCP, src0.y 7: src0.xyz = temp[8], src1.xyz = temp[9] MAD temp[10].xy, src0.xy_, src1.xy_, src0.000 8: TEX temp[11], temp[10].xy__, 2D[0]; 9: src0.xyz = temp[11] MAD temp[12].xyz, src0.xyz, src0.111, src0.000 10: src0.xyz = const[0] REPL_ALPHA temp[13].x RCP, src0.x 11: src0.xyz = temp[13], src0.w = temp[11] MAD temp[14].x, src0.w__, src0.x__, src0.000 12: src0.xyz = temp[14] MAD temp[12].w, src0.x, src0.1, src0.0 13: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[1] REPL_ALPHA temp[9].x RCP, src0.x 1: src0.xyz = const[1] REPL_ALPHA temp[9].y RCP, src0.y 2: src0.w = input[0] RCP temp[5].w, src0.w 3: src0.xyz = input[0], src0.w = temp[5], src1.xyz = const[0] MAD temp[6].xy, src0.xy_, src0.ww_, src0.000 RCP temp[13].w, src1.x 4: src0.xyz = temp[6], src1.xyz = const[3], src2.xyz = const[4] MAD temp[7].xy, src0.xy_, src1.xy_, src2.xy_ 5: src0.xyz = temp[7], src1.xyz = const[2] MAD temp[8].y, src0._y_, src1._x_, src1._y_ 6: src0.xyz = temp[7] MAD temp[8].x, src0.x__, src0.111, src0.000 7: src0.xyz = temp[8], src1.xyz = temp[9] MAD temp[10].xy, src0.xy_, src1.xy_, src0.000 8: BEGIN_TEX; 9: TEX temp[11], temp[10].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 10: src0.xyz = temp[11], src0.w = temp[11], src1.w = temp[13] SEM_WAIT MAD temp[12].xyz, src0.xyz, src0.111, src0.000 MAD temp[14].w, src0.w, src1.w, src0.0 11: src0.xyz = temp[14], src0.w = temp[14] MAD temp[12].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[1] REPL_ALPHA temp[9].x RCP, src0.x 1: src0.xyz = const[1] REPL_ALPHA temp[9].y RCP, src0.y 2: src0.w = input[0] RCP temp[5].w, src0.w 3: src0.xyz = input[0], src0.w = temp[5], src1.xyz = const[0] MAD temp[6].xy, src0.xy_, src0.ww_, src0.000 RCP temp[13].w, src1.x 4: src0.xyz = temp[6], src1.xyz = const[3], src2.xyz = const[4] MAD temp[7].xy, src0.xy_, src1.xy_, src2.xy_ 5: src0.xyz = temp[7], src1.xyz = const[2] MAD temp[8].y, src0._y_, src1._x_, src1._y_ 6: src0.xyz = temp[7] MAD temp[8].x, src0.x__, src0.111, src0.000 7: src0.xyz = temp[8], src1.xyz = temp[9] MAD temp[10].xy, src0.xy_, src1.xy_, src0.000 8: BEGIN_TEX; 9: TEX temp[11], temp[10].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 10: src0.xyz = temp[11], src0.w = temp[11], src1.w = temp[13] SEM_WAIT MAD temp[12].xyz, src0.xyz, src0.111, src0.000 MAD temp[14].w, src0.w, src1.w, src0.0 11: src0.w = temp[14] MAD temp[12].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[12], src0.w = temp[12] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[1] REPL_ALPHA temp[1].x RCP, src0.x 1: src0.xyz = const[1] REPL_ALPHA temp[1].y RCP, src0.y 2: src0.w = input[0] RCP temp[1].w, src0.w 3: src0.xyz = input[0], src0.w = temp[1], src1.xyz = const[0] MAD temp[0].xy, src0.xy_, src0.ww_, src0.00_ RCP temp[0].w, src1.x 4: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = const[4] MAD temp[0].xy, src0.xy_, src1.xy_, src2.xy_ 5: src0.xyz = temp[0], src1.xyz = const[2] MAD temp[2].y, src0._y_, src1._x_, src1._y_ 6: src0.xyz = temp[0] MAD temp[2].x, src0.x__, src0.11_, src0.00_ 7: src0.xyz = temp[2], src1.xyz = temp[1] MAD temp[0].xy, src0.xy_, src1.xy_, src0.00_ 8: BEGIN_TEX; 9: TEX temp[1], temp[0].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 10: src0.xyz = temp[1], src0.w = temp[1], src1.w = temp[0] SEM_WAIT MAD temp[0].xyz, src0.xyz, src0.111, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 11: src0.w = temp[0] MAD temp[0].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=17************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 7, tex_end: 0 (code_addr: 000001c0) 0: xyz: c1 t0 t0 bias-> t1.x (00840021) w: t0 t0 t0 bias-> (00000000) xyz: c1.xxx c1.xxx c1.xxx op: 05004081 w: c1.x c1.x c1.x op: 05000000 1: xyz: c1 t0 t0 bias-> t1.y (01040021) w: t0 t0 t0 bias-> (00000000) xyz: c1.xxx c1.xxx c1.xxx op: 05004081 w: c1.y c1.x c1.x op: 05000001 2: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.w t0.x t0.x op: 05000009 3: xyz: t0 c0 t0 bias-> t0.xy (01800800) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t0.xyz t1.www 0.0 op: 00050600 w: c0.x t0.x t0.x op: 05000003 4: xyz: t0 c3 c4 bias-> t0.xy (018248c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c3.xyz c4.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 c2 t0 bias-> t2.y (01080880) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c2.xxx c2.xyz op: 00010280 w: t0.x t0.x t0.x op: 00000000 6: 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 7: xyz: t2 t1 t0 bias-> t0.xy (01800042) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t1.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 NODE 1: alu_offset: 8, tex_offset: 0, alu_end: 2, tex_end: 0 (code_addr: 00400088) TEX: TEX t1, t0, texture[0] (00008040) 8: xyz: t1 t0 t0 bias-> t0.xyz (03800001) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.w t0.w 0.0 op: 00040509 9: xyz: t0 t0 t0 bias-> (00000000) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xxx t0.xxx t0.xxx op: 00004081 w: t0.w 1.0 0.0 op: 00040889 10: 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 GLSL source for fragment shader 31: vec4 N(in vec4 B, in float C){ return B; } uniform vec2 c, e, f; uniform sampler2D d; vec2 O(in float B, in float C){ (B = ((B + 0.5) / c[0])); return vec2(fract(B), ((((26.0 * floor(B)) + C) + 0.5) / c[1])); } uniform float g, r, s; float P(in vec2 B){ return B[1]; } varying vec2 p; void main(){ float B = 0.0; vec4 F; vec2 G = O(P(p), r); (F = N(texture2D(d, G), p[0])); if ((((F[3] == 0.0) || ((F[3] < 1.0) != (s > 0.0))) && (B == 0.0))) discard; (gl_FragColor = F); } GLSL IR for shader 31: ( (declare (in ) vec2 p) (declare (uniform ) float s) (declare (uniform ) float r) (declare (uniform ) float g) (declare (uniform ) sampler2D d) (declare (uniform ) vec2 f) (declare (uniform ) vec2 e) (declare (uniform ) vec2 c) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function N (signature vec4 (parameters (declare (in ) vec4 B) (declare (in ) float C) ) ( (return (var_ref B) ) )) ) (function O (signature vec2 (parameters (declare (in ) float B) (declare (in ) float C) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref B) (constant float (0.500000)) ) (swiz x (var_ref c) )) ) (assign (x) (var_ref B) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref B) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref C) ) (constant float (0.500000)) ) (swiz y (var_ref c) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function P (signature float (parameters (declare (in ) vec2 B) ) ( (return (swiz y (var_ref B) )) )) ) (function main (signature void (parameters ) ( (declare (temporary ) float P_retval) (call P (var_ref P_retval) ((var_ref p) )) (declare (temporary ) vec2 O_retval) (call O (var_ref O_retval) ((var_ref P_retval) (var_ref r) )) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref d) (var_ref O_retval) )) (declare (temporary ) vec4 N_retval) (call N (var_ref N_retval) ((var_ref texture2D_retval) (swiz x (var_ref p) ))) (if (expression bool || (expression bool all_equal (swiz w (var_ref N_retval) )(constant float (0.000000)) ) (expression bool any_nequal (expression bool < (swiz w (var_ref N_retval) )(constant float (1.000000)) ) (expression bool > (var_ref s) (constant float (0.000000)) ) ) ) ( (discard ) ) ()) (assign (xyzw) (var_ref gl_FragColor) (var_ref N_retval) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) ) GLSL source for vertex shader 32: vec4 P(in vec4 D, in float E){ return D; } uniform vec2 c, j, v; uniform sampler2D d; vec2 Q(in float D, in float E){ (D = ((D + 0.5) / c[0])); return vec2(fract(D), ((((26.0 * floor(D)) + E) + 0.5) / c[1])); } float S(in vec2 D){ return D[1]; } varying vec2 p; uniform float r, s, t; attribute vec2 B; attribute vec3 C; uniform mat4 u; void main(){ float D, F; (D = C[0]); vec2 E = C.xy; (F = C[2]); (gl_Position = (u * vec4(B, 0.0, 1.0))); (gl_Position.xy += (v * gl_Position[3])); (gl_Position[2] = (gl_Position[3] * ((F / 65535.0) - t))); (p = E); } GLSL IR for shader 32: ( (declare (uniform ) mat4 u) (declare (in ) vec3 C) (declare (in ) vec2 B) (declare (uniform ) float t) (declare (uniform ) float s) (declare (uniform ) float r) (declare (out ) vec2 p) (declare (uniform ) sampler2D d) (declare (uniform ) vec2 v) (declare (uniform ) vec2 j) (declare (uniform ) vec2 c) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function P (signature vec4 (parameters (declare (in ) vec4 D) (declare (in ) float E) ) ( (return (var_ref D) ) )) ) (function Q (signature vec2 (parameters (declare (in ) float D) (declare (in ) float E) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref D) (constant float (0.500000)) ) (swiz x (var_ref c) )) ) (assign (x) (var_ref D) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref D) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref E) ) (constant float (0.500000)) ) (swiz y (var_ref c) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function S (signature float (parameters (declare (in ) vec2 D) ) ( (return (swiz y (var_ref D) )) )) ) (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor) (assign (zw) (var_ref vec_ctor) (constant vec2 (0.000000 1.000000)) ) (assign (xy) (var_ref vec_ctor) (var_ref B) ) (declare (temporary ) vec4 assignment_tmp) (assign (xyzw) (var_ref assignment_tmp) (expression vec4 * (var_ref u) (var_ref vec_ctor) ) ) (assign (w) (var_ref gl_Position) (swiz w (var_ref assignment_tmp) )) (assign (xy) (var_ref gl_Position) (expression vec2 + (swiz xy (var_ref assignment_tmp) )(expression vec2 * (var_ref v) (swiz w (var_ref assignment_tmp) )) ) ) (assign (z) (var_ref gl_Position) (expression float * (swiz w (var_ref assignment_tmp) )(expression float + (expression float / (swiz z (var_ref C) )(constant float (65535.000000)) ) (expression float neg (var_ref t) ) ) ) ) (assign (xy) (var_ref p) (swiz xy (var_ref C) )) )) ) ) GLSL IR for linked vertex program 33: ( (declare (uniform ) mat4 u) (declare (in ) vec3 C) (declare (in ) vec2 B) (declare (uniform ) float t) (declare (out ) vec2 p) (declare (uniform ) vec2 v) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare (temporary ) vec4 flattening_tmp) (assign (xyzw) (var_ref flattening_tmp) (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref u) (constant int (0)) ) (swiz x (var_ref B) )) (expression vec4 * (array_ref (var_ref u) (constant int (1)) ) (swiz y (var_ref B) )) ) (array_ref (var_ref u) (constant int (3)) ) ) ) (assign (w) (var_ref gl_Position) (swiz w (var_ref flattening_tmp) )) (assign (xy) (var_ref gl_Position) (expression vec2 + (swiz xy (var_ref flattening_tmp) )(expression vec2 * (var_ref v) (swiz w (var_ref flattening_tmp) )) ) ) (assign (z) (var_ref gl_Position) (expression float * (swiz w (var_ref flattening_tmp) )(expression float + (expression float * (swiz z (var_ref C) )(constant float (0.000015)) ) (expression float neg (var_ref t) ) ) ) ) (assign (xy) (var_ref p) (swiz xy (var_ref C) )) (assign (xy) (var_ref p@163) (var_ref p) ) (assign (xyzw) (var_ref gl_Position@164) (var_ref gl_Position) ) )) ) ) GLSL IR for linked fragment program 33: ( (declare (in ) vec2 p) (declare (uniform ) float s) (declare (uniform ) float r) (declare (uniform ) sampler2D d) (declare (uniform ) vec2 c) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (expression float + (swiz y (var_ref p) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref c) )) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float fract (var_ref assignment_tmp) ) ) (assign (y) (var_ref vec_ctor) (expression float * (expression float + (expression float + (expression float * (constant float (26.000000)) (expression float floor (var_ref assignment_tmp) ) ) (var_ref r) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref c) )) ) ) (declare (temporary ) vec4 texture2D_retval) (assign (xyzw) (var_ref texture2D_retval) (tex vec4 (var_ref d) (var_ref vec_ctor) 0 1 () )) (declare (temporary ) bool discard_cond_temp) (assign (x) (var_ref discard_cond_temp) (constant bool (0)) ) (assign (expression bool || (expression bool all_equal (swiz w (var_ref texture2D_retval) )(constant float (0.000000)) ) (expression bool any_nequal (expression bool < (swiz w (var_ref texture2D_retval) )(constant float (1.000000)) ) (expression bool > (var_ref s) (constant float (0.000000)) ) ) ) (x) (var_ref discard_cond_temp) (constant bool (1)) ) (discard (var_ref discard_cond_temp) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref texture2D_retval) ) (assign (xyzw) (var_ref gl_FragColor@165) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[12] DCL CONST[0..5] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL IMM FLT32 { 0.0000, 0.0000, 0.0000, 0.0000} 0: MUL TEMP[0], CONST[0], IN[1].xxxx 1: MAD TEMP[0], CONST[1], IN[1].yyyy, TEMP[0] 2: ADD TEMP[0].xyw, TEMP[0], CONST[3] 3: MOV TEMP[1].w, TEMP[0].wwww 4: MAD TEMP[1].xy, CONST[5].xyyy, TEMP[0].wwww, TEMP[0].xyyy 5: MAD TEMP[2].x, IN[0].zzzz, IMM[0].xxxx, -CONST[4].xxxx 6: MUL TEMP[0].x, TEMP[0].wwww, TEMP[2].xxxx 7: MOV TEMP[1].z, TEMP[0].xxxx 8: MOV OUT[1].xy, IN[0].xyxx 9: MOV OUT[0], TEMP[1] 10: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[0], const[1], input[1].yyyy, temp[0]; 2: ADD temp[0].xyw, temp[0], const[3]; 3: MOV temp[1].w, temp[0].wwww; 4: MAD temp[1].xy, const[5].xyyy, temp[0].wwww, temp[0].xyyy; 5: MAD temp[2].x, input[0].zzzz, const[6].xxxx, -const[4].xxxx; 6: MUL temp[0].x, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV output[1].xy, input[0].xyxx; 9: MOV temp[3], temp[1]; 10: MOV output[0], temp[3]; 11: MOV output[2], temp[3]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[0], const[1], input[1].yyyy, temp[0]; 2: ADD temp[0].xyw, temp[0], const[3]; 3: MOV temp[1].w, temp[0].wwww; 4: MAD temp[1].xy, const[5].xyyy, temp[0].wwww, temp[0].xyyy; 5: MAD temp[2].x, input[0].zzzz, const[6].xxxx, -const[4].xxxx; 6: MUL temp[0].x, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV output[1].xy, input[0].xyxx; 9: MOV temp[3], temp[1]; 10: MOV output[0], temp[3]; 11: MOV output[2], temp[3]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[0], const[1], input[1].yyyy, temp[0]; 2: ADD temp[0].xyw, temp[0], const[3]; 3: MOV temp[1].w, temp[0].wwww; 4: MAD temp[1].xy, const[5].xyyy, temp[0].wwww, temp[0].xyyy; 5: MAD temp[2].x, input[0].zzzz, const[6].xxxx, -const[4].xxxx; 6: MUL temp[0].x, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV output[1].xy, input[0].xyxx; 9: MOV temp[3], temp[1]; 10: MOV output[0], temp[3]; 11: MOV output[2], temp[3]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[0], const[1], input[1].yyyy, temp[0]; 2: ADD temp[0].xyw, temp[0], const[3]; 3: MOV temp[1].w, temp[0].wwww; 4: MAD temp[1].xy, const[5].xyyy, temp[0].wwww, temp[0].xyyy; 5: MAD temp[2].x, input[0].zzzz, const[6].xxxx, -const[4].xxxx; 6: MUL temp[0].x, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV output[1].xy, input[0].xyxx; 9: MOV temp[3], temp[1]; 10: MOV output[0], temp[3]; 11: MOV output[2], temp[3]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[0], const[1], input[1].yyyy, temp[0]; 2: ADD temp[0].xyw, temp[0], const[3]; 3: MOV temp[1].w, temp[0].wwww; 4: MAD temp[1].xy, const[5].xyyy, temp[0].wwww, temp[0].xyyy; 5: MAD temp[2].x, input[0].zzzz, const[6].xxxx, -const[4].xxxx; 6: MUL temp[0].x, temp[0].wwww, temp[2].xxxx; 7: MOV temp[1].z, temp[0].xxxx; 8: MOV output[1].xy, input[0].xyxx; 9: MOV temp[3], temp[1]; 10: MOV output[0], temp[3]; 11: MOV output[2], temp[3]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xyw, const[0].xy_w, input[1].xx_x; 1: MAD temp[0].xyw, const[1].xy_w, input[1].yy_y, temp[0].xy_w; 2: ADD temp[0].xyw, temp[0].xy_w, const[3].xy_w; 3: MOV temp[1].w, temp[0].___w; 4: MAD temp[1].xy, const[5].xy__, temp[0].ww__, temp[0].xy__; 5: MAD temp[2].x, input[0].z___, const[6].x___, -const[4].x___; 6: MUL temp[0].x, temp[0].w___, temp[2].x___; 7: MOV temp[1].z, temp[0].__x_; 8: MOV output[1].xy, input[0].xy__; 9: MOV temp[3], temp[1]; 10: MOV output[0], temp[3]; 11: MOV output[2], temp[3]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xyw, const[0].xy_w, input[1].xx_x; 1: MAD temp[0].xyw, const[1].xy_w, input[1].yy_y, temp[0].xy_w; 2: ADD temp[0].xyw, temp[0].xy_w, const[3].xy_w; 3: MOV temp[1].w, temp[0].___w; 4: MAD temp[1].xy, const[5].xy__, temp[0].ww__, temp[0].xy__; 5: MAD temp[2].x, input[0].z___, const[6].x___, -const[4].x___; 6: MUL temp[0].x, temp[0].w___, temp[2].x___; 7: MOV temp[1].z, temp[0].__x_; 8: MOV output[1].xy, input[0].xy__; 9: MOV output[0], temp[1]; 10: MOV output[2], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0].xyw, const[0].xy_w, input[1].xx_x; 1: MAD temp[0].xyw, const[1].xy_w, input[1].yy_y, temp[0].xy_w; 2: ADD temp[0].xyw, temp[0].xy_w, const[3].xy_w; 3: MOV temp[1].w, temp[0].___w; 4: MAD temp[1].xy, const[5].xy__, temp[0].ww__, temp[0].xy__; 5: MOV temp[3], -const[4].x___; 6: MAD temp[2].x, input[0].z___, const[6].x___, temp[3]; 7: MUL temp[0].x, temp[0].w___, temp[2].x___; 8: MOV temp[1].z, temp[0].__x_; 9: MOV output[1].xy, input[0].xy__; 10: MOV output[0], temp[1]; 11: MOV output[2], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0].xyw, const[0].xy_w, input[1].xx_x; 1: MAD temp[0].xyw, const[1].xy_w, input[1].yy_y, temp[0].xy_w; 2: ADD temp[0].xyw, temp[0].xy_w, const[3].xy_w; 3: MOV temp[1].w, temp[0].___w; 4: MAD temp[1].xy, const[5].xy__, temp[0].ww__, temp[0].xy__; 5: MOV temp[2], -const[4].x___; 6: MAD temp[2].x, input[0].z___, const[6].x___, temp[2]; 7: MUL temp[0].x, temp[0].w___, temp[2].x___; 8: MOV temp[1].z, temp[0].__x_; 9: MOV output[1].xy, input[0].xy__; 10: MOV output[0], temp[1]; 11: MOV output[2], temp[1]; CONST[6] = { 0.0000 0.0000 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xyw, const[0].xy_w, input[1].xx_x; 1: MAD temp[0].xyw, const[1].xy_w, input[1].yy_y, temp[0].xy_w; 2: ADD temp[0].xyw, temp[0].xy_w, const[3].xy_w; 3: MOV temp[1].w, temp[0].___w; 4: MAD temp[1].xy, const[5].xy__, temp[0].ww__, temp[0].xy__; 5: MOV temp[2], -const[4].x___; 6: MAD temp[2].x, input[0].z___, const[6].x___, temp[2]; 7: MUL temp[0].x, temp[0].w___, temp[2].x___; 8: MOV temp[1].z, temp[0].__x_; 9: MOV output[1].xy, input[0].xy__; 10: MOV output[0], temp[1]; 11: MOV output[2], temp[1]; Final vertex program code: 0: op: 0x00b00002 dst: 0t op: VE_MULTIPLY src0: 0x00f90002 reg: 0c swiz: X/ Y/ U/ W src1: 0x00380021 reg: 1i swiz: X/ X/ U/ X src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00b00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00f90022 reg: 1c swiz: X/ Y/ U/ W src1: 0x00792021 reg: 1i swiz: Y/ Y/ U/ Y src2: 0x00f90000 reg: 0t swiz: X/ Y/ U/ W 2: op: 0x00b00003 dst: 0t op: VE_ADD src0: 0x00f90000 reg: 0t swiz: X/ Y/ U/ W src1: 0x00f90062 reg: 3c swiz: X/ Y/ U/ W src2: 0x01248062 reg: 3c swiz: 0/ 0/ 0/ 0 3: op: 0x00802003 dst: 1t op: VE_ADD 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 4: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f900a2 reg: 5c swiz: X/ Y/ U/ U src1: 0x01fb6000 reg: 0t swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 5: op: 0x00f04003 dst: 2t op: VE_ADD src0: 0x1fff0082 reg: 4c swiz: -X/-U/-U/-U src1: 0x01248082 reg: 4c swiz: 0/ 0/ 0/ 0 src2: 0x01248082 reg: 4c swiz: 0/ 0/ 0/ 0 6: op: 0x00104004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x01ff4001 reg: 0i swiz: Z/ U/ U/ U src1: 0x01ff00c2 reg: 6c swiz: X/ U/ U/ U src2: 0x00d10040 reg: 2t swiz: X/ Y/ Z/ W 7: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x01ff6000 reg: 0t swiz: W/ U/ U/ U src1: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 8: op: 0x00402003 dst: 1t op: VE_ADD src0: 0x01c7e000 reg: 0t swiz: U/ U/ X/ U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 9: op: 0x00302203 dst: 1o 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 10: 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 11: op: 0x00f04203 dst: 2o 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 fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[12], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..1] DCL CONST[3] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL IMM FLT32 { 0.5000, 26.0000, 0.0000, 1.0000} 0: ADD TEMP[0].x, IN[0].yyyy, IMM[0].xxxx 1: RCP TEMP[1].x, CONST[3].xxxx 2: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[1].xxxx 3: FRC TEMP[1].x, TEMP[0].xxxx 4: FLR TEMP[0].x, TEMP[0].xxxx 5: MAD TEMP[0].x, IMM[0].yyyy, TEMP[0].xxxx, CONST[1].xxxx 6: ADD TEMP[0].x, TEMP[0].xxxx, IMM[0].xxxx 7: RCP TEMP[2].x, CONST[3].yyyy 8: MUL TEMP[0].x, TEMP[0].xxxx, TEMP[2].xxxx 9: MOV TEMP[1].y, TEMP[0].xxxx 10: TEX TEMP[0], TEMP[1].xyyy, SAMP[0], 2D 11: SEQ TEMP[2].x, TEMP[0].wwww, IMM[0].zzzz 12: SLT TEMP[3].x, TEMP[0].wwww, IMM[0].wwww 13: SLT TEMP[4].x, IMM[0].zzzz, CONST[0].xxxx 14: SNE TEMP[3].x, TEMP[3].xxxx, TEMP[4].xxxx 15: ADD_SAT TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 16: CMP TEMP[1].x, -TEMP[2].xxxx, IMM[0].wwww, IMM[0].zzzz 17: KIL -TEMP[1].xxxx 18: MOV OUT[0], TEMP[0] 19: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[4].xxxx; 1: RCP temp[1].x, const[3].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[4].yyyy, temp[0].xxxx, const[1].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[4].xxxx; 7: RCP temp[2].x, const[3].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: TEX temp[0], temp[1].xyyy, 2D[0]; 11: SEQ temp[2].x, temp[0].wwww, const[4].zzzz; 12: SLT temp[3].x, temp[0].wwww, const[4].wwww; 13: SLT temp[4].x, const[4].zzzz, const[0].xxxx; 14: SNE temp[3].x, temp[3].xxxx, temp[4].xxxx; 15: ADD_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 16: CMP temp[1].x, -temp[2].xxxx, const[4].wwww, const[4].zzzz; 17: KIL -temp[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[4].xxxx; 1: RCP temp[1].x, const[3].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[4].yyyy, temp[0].xxxx, const[1].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[4].xxxx; 7: RCP temp[2].x, const[3].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: TEX temp[0], temp[1].xyyy, 2D[0]; 11: SEQ temp[2].x, temp[0].wwww, const[4].zzzz; 12: SLT temp[3].x, temp[0].wwww, const[4].wwww; 13: SLT temp[4].x, const[4].zzzz, const[0].xxxx; 14: SNE temp[3].x, temp[3].xxxx, temp[4].xxxx; 15: ADD_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 16: CMP temp[1].x, -temp[2].xxxx, const[4].wwww, const[4].zzzz; 17: KIL -temp[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[4].xxxx; 1: RCP temp[1].x, const[3].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[4].yyyy, temp[0].xxxx, const[1].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[4].xxxx; 7: RCP temp[2].x, const[3].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: TEX temp[0], temp[1].xyyy, 2D[0]; 11: SEQ temp[2].x, temp[0].wwww, const[4].zzzz; 12: SLT temp[3].x, temp[0].wwww, const[4].wwww; 13: SLT temp[4].x, const[4].zzzz, const[0].xxxx; 14: SNE temp[3].x, temp[3].xxxx, temp[4].xxxx; 15: ADD_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 16: CMP temp[1].x, -temp[2].xxxx, const[4].wwww, const[4].zzzz; 17: KIL -temp[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[4].xxxx; 1: RCP temp[1].x, const[3].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[4].yyyy, temp[0].xxxx, const[1].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[4].xxxx; 7: RCP temp[2].x, const[3].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: TEX temp[0], temp[1].xyyy, 2D[0]; 11: SEQ temp[2].x, temp[0].wwww, const[4].zzzz; 12: SLT temp[3].x, temp[0].wwww, const[4].wwww; 13: SLT temp[4].x, const[4].zzzz, const[0].xxxx; 14: SNE temp[3].x, temp[3].xxxx, temp[4].xxxx; 15: ADD_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 16: CMP temp[1].x, -temp[2].xxxx, const[4].wwww, const[4].zzzz; 17: KIL -temp[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[4].xxxx; 1: RCP temp[1].x, const[3].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[4].yyyy, temp[0].xxxx, const[1].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[4].xxxx; 7: RCP temp[2].x, const[3].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: TEX temp[0], temp[1].xyyy, 2D[0]; 11: SEQ temp[2].x, temp[0].wwww, const[4].zzzz; 12: SLT temp[3].x, temp[0].wwww, const[4].wwww; 13: SLT temp[4].x, const[4].zzzz, const[0].xxxx; 14: SNE temp[3].x, temp[3].xxxx, temp[4].xxxx; 15: ADD_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 16: CMP temp[1].x, -temp[2].xxxx, const[4].wwww, const[4].zzzz; 17: KIL -temp[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[4].xxxx; 1: RCP temp[1].x, const[3].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FLR temp[0].x, temp[0].xxxx; 5: MAD temp[0].x, const[4].yyyy, temp[0].xxxx, const[1].xxxx; 6: ADD temp[0].x, temp[0].xxxx, const[4].xxxx; 7: RCP temp[2].x, const[3].yyyy; 8: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 9: MOV temp[1].y, temp[0].xxxx; 10: TEX temp[0], temp[1].xyyy, 2D[0]; 11: SEQ temp[2].x, temp[0].wwww, const[4].zzzz; 12: SLT temp[3].x, temp[0].wwww, const[4].wwww; 13: SLT temp[4].x, const[4].zzzz, const[0].xxxx; 14: SNE temp[3].x, temp[3].xxxx, temp[4].xxxx; 15: ADD_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 16: CMP temp[1].x, -temp[2].xxxx, const[4].wwww, const[4].zzzz; 17: KIL -temp[1].xxxx; 18: MOV output[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].x, input[0].yyyy, const[4].xxxx; 1: RCP temp[1].x, const[3].xxxx; 2: MUL temp[0].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[1].x, temp[0].xxxx; 4: FRC temp[5].x, temp[0].xxxx; 5: ADD temp[0].x, temp[0].xxxx, -temp[5]; 6: MAD temp[0].x, const[4].yyyy, temp[0].xxxx, const[1].xxxx; 7: ADD temp[0].x, temp[0].xxxx, const[4].xxxx; 8: RCP temp[2].x, const[3].yyyy; 9: MUL temp[0].x, temp[0].xxxx, temp[2].xxxx; 10: MOV temp[1].y, temp[0].xxxx; 11: TEX temp[0], temp[1].xyyy, 2D[0]; 12: ADD temp[2].x, temp[0].wwww, -const[4].zzzz; 13: CMP temp[2].x, -|temp[2]|, none.0000, none.1111; 14: ADD temp[3].x, temp[0].wwww, -const[4].wwww; 15: CMP temp[3].x, temp[3], none.1111, none.0000; 16: ADD temp[4].x, const[4].zzzz, -const[0].xxxx; 17: CMP temp[4].x, temp[4], none.1111, none.0000; 18: ADD temp[6].x, temp[3].xxxx, -temp[4].xxxx; 19: CMP temp[3].x, -|temp[6]|, none.1111, none.0000; 20: ADD_SAT temp[2].x, temp[2].xxxx, temp[3].xxxx; 21: CMP temp[1].x, -temp[2].xxxx, const[4].wwww, const[4].zzzz; 22: KIL -temp[1].xxxx; 23: MOV output[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].x, input[0].y___, const[4].x___; 1: RCP temp[1].x, const[3].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[5].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[5].x___; 6: MAD temp[0].x, const[4].y___, temp[0].x___, const[1].x___; 7: ADD temp[0].x, temp[0].x___, const[4].x___; 8: RCP temp[2].x, const[3].y___; 9: MUL temp[0].x, temp[0].x___, temp[2].x___; 10: MOV temp[1].y, temp[0]._x__; 11: TEX temp[0], temp[1].xy__, 2D[0]; 12: ADD temp[2].x, temp[0].w___, -const[4].z___; 13: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 14: ADD temp[3].x, temp[0].w___, -const[4].w___; 15: CMP temp[3].x, temp[3].x___, none.1___, none.0___; 16: ADD temp[4].x, const[4].z___, -const[0].x___; 17: CMP temp[4].x, temp[4].x___, none.1___, none.0___; 18: ADD temp[6].x, temp[3].x___, -temp[4].x___; 19: CMP temp[3].x, -|temp[6].x___|, none.1___, none.0___; 20: ADD_SAT temp[2].x, temp[2].x___, temp[3].x___; 21: CMP temp[1].x, -temp[2].x___, const[4].w___, const[4].z___; 22: KIL -temp[1].xxxx; 23: MOV output[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].x, input[0].y___, const[4].x___; 1: RCP temp[1].x, const[3].x___; 2: MUL temp[0].x, temp[0].x___, temp[1].x___; 3: FRC temp[1].x, temp[0].x___; 4: FRC temp[5].x, temp[0].x___; 5: ADD temp[0].x, temp[0].x___, -temp[5].x___; 6: MAD temp[0].x, const[4].y___, temp[0].x___, const[1].x___; 7: ADD temp[0].x, temp[0].x___, const[4].x___; 8: RCP temp[2].x, const[3].y___; 9: MUL temp[0].x, temp[0].x___, temp[2].x___; 10: MOV temp[1].y, temp[0]._x__; 11: TEX temp[0], temp[1].xy__, 2D[0]; 12: ADD temp[2].x, temp[0].w___, -const[4].z___; 13: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 14: ADD temp[3].x, temp[0].w___, -const[4].w___; 15: CMP temp[3].x, temp[3].x___, none.1___, none.0___; 16: ADD temp[4].x, const[4].z___, -const[0].x___; 17: CMP temp[4].x, temp[4].x___, none.1___, none.0___; 18: ADD temp[6].x, temp[3].x___, -temp[4].x___; 19: CMP temp[3].x, -|temp[6].x___|, none.1___, none.0___; 20: ADD_SAT temp[2].x, temp[2].x___, temp[3].x___; 21: CMP temp[1].x, -temp[2].x___, const[4].w___, const[4].z___; 22: KIL -temp[1].xxxx; 23: MOV output[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[7].x, input[0].y___, const[4].x___; 1: RCP temp[8].x, const[3].x___; 2: MUL temp[9].x, temp[7].x___, temp[8].x___; 3: FRC temp[10].x, temp[9].x___; 4: FRC temp[11].x, temp[9].x___; 5: ADD temp[12].x, temp[9].x___, -temp[11].x___; 6: MAD temp[13].x, const[4].y___, temp[12].x___, const[1].x___; 7: ADD temp[14].x, temp[13].x___, const[4].x___; 8: RCP temp[15].x, const[3].y___; 9: MUL temp[16].x, temp[14].x___, temp[15].x___; 10: MOV temp[10].y, temp[16]._x__; 11: TEX temp[17], temp[10].xy__, 2D[0]; 12: ADD temp[18].x, temp[17].w___, -const[4].z___; 13: CMP temp[19].x, -|temp[18].x___|, none.0___, none.1___; 14: ADD temp[20].x, temp[17].w___, -const[4].w___; 15: CMP temp[21].x, temp[20].x___, none.1___, none.0___; 16: ADD temp[22].x, const[4].z___, -const[0].x___; 17: CMP temp[23].x, temp[22].x___, none.1___, none.0___; 18: ADD temp[24].x, temp[21].x___, -temp[23].x___; 19: CMP temp[25].x, -|temp[24].x___|, none.1___, none.0___; 20: ADD_SAT temp[26].x, temp[19].x___, temp[25].x___; 21: CMP temp[27].x, -temp[26].x___, const[4].w___, const[4].z___; 22: KIL -temp[27].xxxx; 23: MOV output[0], temp[17]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[7].x, input[0].y___, none.H___; 1: RCP temp[8].x, const[3].x___; 2: MUL temp[9].x, temp[7].x___, temp[8].x___; 3: FRC temp[10].x, temp[9].x___; 4: FRC temp[11].x, temp[9].x___; 5: ADD temp[12].x, temp[9].x___, -temp[11].x___; 6: MAD temp[13].x, const[4].y___, temp[12].x___, const[1].x___; 7: ADD temp[14].x, temp[13].x___, none.H___; 8: RCP temp[15].x, const[3].y___; 9: MUL temp[16].x, temp[14].x___, temp[15].x___; 10: MOV temp[10].y, temp[16]._x__; 11: TEX temp[17], temp[10].xy__, 2D[0]; 12: CMP temp[19].x, -|temp[17].w___|, none.0___, none.1___; 13: ADD temp[20].x, temp[17].w___, -none.1___; 14: CMP temp[21].x, temp[20].x___, none.1___, none.0___; 15: CMP temp[23].x, const[0].-x___, none.1___, none.0___; 16: CMP temp[25].x, -|(temp[21] - temp[23]).x___|, none.1___, none.0___; 17: ADD_SAT temp[26].x, temp[19].x___, temp[25].x___; 18: CMP temp[27].x, -temp[26].x___, none.1___, none.0___; 19: KIL -temp[27].xxxx; 20: MOV output[0], temp[17]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[7].x, input[0].y___, none.H___; 1: RCP temp[8].x, const[3].x___; 2: MUL temp[9].x, temp[7].x___, temp[8].x___; 3: FRC temp[10].x, temp[9].x___; 4: FRC temp[11].x, temp[9].x___; 5: ADD temp[12].x, temp[9].x___, -temp[11].x___; 6: MAD temp[13].x, const[4].y___, temp[12].x___, const[1].x___; 7: ADD temp[14].x, temp[13].x___, none.H___; 8: RCP temp[15].x, const[3].y___; 9: MUL temp[16].x, temp[14].x___, temp[15].x___; 10: MOV temp[10].y, temp[16]._x__; 11: TEX temp[17], temp[10].xy__, 2D[0]; 12: CMP temp[19].x, -|temp[17].w___|, none.0___, none.1___; 13: ADD temp[20].x, temp[17].w___, -none.1___; 14: CMP temp[21].x, temp[20].x___, none.1___, none.0___; 15: CMP temp[23].x, const[0].-x___, none.1___, none.0___; 16: CMP temp[25].x, -|(temp[21] - temp[23]).x___|, none.1___, none.0___; 17: ADD_SAT temp[26].x, temp[19].x___, temp[25].x___; 18: CMP temp[27].x, -temp[26].x___, none.1___, none.0___; 19: MOV temp[0], -temp[27].xxxx; 20: KIL temp[0]; 21: MOV output[0], temp[17]; CONST[3] = { 0.5000 26.0000 0.0000 1.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[7].x, input[0].y___, none.H___; 1: RCP temp[8].x, const[2].x___; 2: MUL temp[9].x, temp[7].x___, temp[8].x___; 3: FRC temp[10].x, temp[9].x___; 4: FRC temp[11].x, temp[9].x___; 5: ADD temp[12].x, temp[9].x___, -temp[11].x___; 6: MAD temp[13].x, const[3].y___, temp[12].x___, const[1].x___; 7: ADD temp[14].x, temp[13].x___, none.H___; 8: RCP temp[15].x, const[2].y___; 9: MUL temp[16].x, temp[14].x___, temp[15].x___; 10: MOV temp[10].y, temp[16]._x__; 11: TEX temp[17], temp[10].xy__, 2D[0]; 12: CMP temp[19].x, -|temp[17].w___|, none.0___, none.1___; 13: ADD temp[20].x, temp[17].w___, -none.1___; 14: CMP temp[21].x, temp[20].x___, none.1___, none.0___; 15: CMP temp[23].x, const[0].-x___, none.1___, none.0___; 16: CMP temp[25].x, -|(temp[21] - temp[23]).x___|, none.1___, none.0___; 17: ADD_SAT temp[26].x, temp[19].x___, temp[25].x___; 18: CMP temp[27].x, -temp[26].x___, none.1___, none.0___; 19: MOV temp[0], -temp[27].xxxx; 20: KIL temp[0]; 21: MOV output[0], temp[17]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[7].x, src0.y__, src0.111, src0.H__ 1: src0.xyz = const[2] REPL_ALPHA temp[8].x RCP, src0.x 2: src0.xyz = temp[7], src1.xyz = temp[8] MAD temp[9].x, src0.x__, src1.x__, src0.000 3: src0.xyz = temp[9] FRC temp[10].x, src0.x__ 4: src0.xyz = temp[9] FRC temp[11].x, src0.x__ 5: src0.xyz = temp[9], src1.xyz = temp[11] MAD temp[12].x, src0.x__, src0.111, -src1.x__ 6: src0.xyz = const[3], src1.xyz = temp[12], src2.xyz = const[1] MAD temp[13].x, src0.y__, src1.x__, src2.x__ 7: src0.xyz = temp[13] MAD temp[14].x, src0.x__, src0.111, src0.H__ 8: src0.xyz = const[2] REPL_ALPHA temp[15].x RCP, src0.y 9: src0.xyz = temp[14], src1.xyz = temp[15] MAD temp[16].x, src0.x__, src1.x__, src0.000 10: src0.xyz = temp[16] MAD temp[10].y, src0._x_, src0.111, src0.000 11: TEX temp[17], temp[10].xy__, 2D[0]; 12: src0.w = temp[17] CMP temp[19].x, src0.1__, src0.0__, -|src0.w__| 13: src0.w = temp[17] MAD temp[20].x, src0.w__, src0.111, -src0.1__ 14: src0.xyz = temp[20] CMP temp[21].x, src0.0__, src0.1__, src0.x__ 15: src0.xyz = const[0] CMP temp[23].x, src0.0__, src0.1__, -src0.x__ 16: src0.xyz = temp[23], src1.xyz = temp[21], srcp.xyz = (src1 - src0) CMP temp[25].x, src0.0__, src0.1__, -|srcp.x__| 17: src0.xyz = temp[19], src1.xyz = temp[25] MAD_SAT temp[26].x, src0.x__, src0.111, src1.x__ 18: src0.xyz = temp[26] CMP temp[27].x, src0.0__, src0.1__, -src0.x__ 19: src0.xyz = temp[27] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 20: KIL temp[0]; 21: src0.xyz = temp[17], src0.w = temp[17] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[0], src1.xyz = const[2] CMP temp[23].x, src0.0__, src0.1__, -src0.x__ RCP temp[15].w, src1.y 1: src0.xyz = input[0], src1.xyz = const[2] MAD temp[7].x, src0.y__, src0.111, src0.H__ RCP temp[8].w, src1.x 2: src0.xyz = temp[7], src0.w = temp[8], src1.xyz = temp[8] MAD temp[9].x, src0.x__, src0.w__, src0.000 3: src0.xyz = temp[9] FRC temp[10].x, src0.x__ FRC temp[11].w, src0.x 4: src0.xyz = temp[9], src0.w = temp[11], src1.xyz = temp[11] MAD temp[12].x, src0.x__, src0.111, -src0.w__ 5: src0.xyz = const[3], src1.xyz = temp[12], src2.xyz = const[1] MAD temp[13].x, src0.y__, src1.x__, src2.x__ 6: src0.xyz = temp[13] MAD temp[14].x, src0.x__, src0.111, src0.H__ 7: src0.xyz = temp[14], src0.w = temp[15], src1.xyz = temp[15] MAD temp[16].x, src0.x__, src0.w__, src0.000 8: src0.xyz = temp[16] MAD temp[10].y, src0._x_, src0.111, src0.000 9: BEGIN_TEX; 10: TEX temp[17], temp[10].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 11: src0.w = temp[17] SEM_WAIT CMP temp[19].x, src0.1__, src0.0__, -|src0.w__| MAD temp[20].w, src0.w, src0.1, -src0.1 12: src0.xyz = temp[20], src0.w = temp[20] CMP temp[21].x, src0.0__, src0.1__, src0.w__ 13: src0.xyz = temp[23], src1.xyz = temp[21], srcp.xyz = (src1 - src0) CMP temp[25].x, src0.0__, src0.1__, -|srcp.x__| 14: src0.xyz = temp[19], src1.xyz = temp[25] MAD_SAT temp[26].x, src0.x__, src0.111, src1.x__ 15: src0.xyz = temp[26] CMP temp[27].x, src0.0__, src0.1__, -src0.x__ 16: src0.xyz = temp[27] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 17: BEGIN_TEX; 18: KIL temp[0]; 19: src0.xyz = temp[17], src0.w = temp[17] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = const[0], src1.xyz = const[2] CMP temp[23].x, src0.0__, src0.1__, -src0.x__ RCP temp[15].w, src1.y 1: src0.xyz = input[0], src1.xyz = const[2] MAD temp[7].x, src0.y__, src0.111, src0.H__ RCP temp[8].w, src1.x 2: src0.xyz = temp[7], src0.w = temp[8] MAD temp[9].x, src0.x__, src0.w__, src0.000 3: src0.xyz = temp[9] FRC temp[10].x, src0.x__ FRC temp[11].w, src0.x 4: src0.xyz = temp[9], src0.w = temp[11] MAD temp[12].x, src0.x__, src0.111, -src0.w__ 5: src0.xyz = const[3], src1.xyz = temp[12], src2.xyz = const[1] MAD temp[13].x, src0.y__, src1.x__, src2.x__ 6: src0.xyz = temp[13] MAD temp[14].x, src0.x__, src0.111, src0.H__ 7: src0.xyz = temp[14], src0.w = temp[15] MAD temp[16].x, src0.x__, src0.w__, src0.000 8: src0.xyz = temp[16] MAD temp[10].y, src0._x_, src0.111, src0.000 9: BEGIN_TEX; 10: TEX temp[17], temp[10].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 11: src0.w = temp[17] SEM_WAIT CMP temp[19].x, src0.1__, src0.0__, -|src0.w__| MAD temp[20].w, src0.w, src0.1, -src0.1 12: src0.w = temp[20] CMP temp[21].x, src0.0__, src0.1__, src0.w__ 13: src0.xyz = temp[23], src1.xyz = temp[21], srcp.xyz = (src1 - src0) CMP temp[25].x, src0.0__, src0.1__, -|srcp.x__| 14: src0.xyz = temp[19], src1.xyz = temp[25] MAD_SAT temp[26].x, src0.x__, src0.111, src1.x__ 15: src0.xyz = temp[26] CMP temp[27].x, src0.0__, src0.1__, -src0.x__ 16: src0.xyz = temp[27] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 17: BEGIN_TEX; 18: KIL temp[0]; 19: src0.xyz = temp[17], src0.w = temp[17] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[0], src1.xyz = const[2] CMP temp[1].x, src0.0__, src0.1__, -src0.x__ RCP temp[0].w, src1.y 1: src0.xyz = input[0], src1.xyz = const[2] MAD temp[0].x, src0.y__, src0.1__, src0.H__ RCP temp[1].w, src1.x 2: src0.xyz = temp[0], src0.w = temp[1] MAD temp[0].x, src0.x__, src0.w__, src0.0__ 3: src0.xyz = temp[0] FRC temp[2].x, src0.x__ FRC temp[1].w, src0.x 4: src0.xyz = temp[0], src0.w = temp[1] MAD temp[0].x, src0.x__, src0.1__, -src0.w__ 5: src0.xyz = const[3], src1.xyz = temp[0], src2.xyz = const[1] MAD temp[0].x, src0.y__, src1.x__, src2.x__ 6: src0.xyz = temp[0] MAD temp[0].x, src0.x__, src0.1__, src0.H__ 7: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].x, src0.x__, src0.w__, src0.0__ 8: src0.xyz = temp[0] MAD temp[2].y, src0._x_, src0.11_, src0.00_ 9: BEGIN_TEX; 10: TEX temp[0], temp[2].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 11: src0.w = temp[0] SEM_WAIT CMP temp[1].y, src0._1_, src0._0_, -|src0._w_| MAD temp[1].w, src0.w, src0.1, -src0.1 12: src0.w = temp[1] CMP temp[2].x, src0.0__, src0.1__, src0.w__ 13: src0.xyz = temp[1], src1.xyz = temp[2], srcp.xyz = (src1 - src0) CMP temp[1].x, src0.0__, src0.1__, -|srcp.x__| 14: src0.xyz = temp[1], src1.xyz = temp[1] MAD_SAT temp[1].x, src0.y__, src0.1__, src1.x__ 15: src0.xyz = temp[1] CMP temp[1].x, src0.0__, src0.1__, -src0.x__ 16: src0.xyz = temp[1] MAD temp[1].xyz, -src0.xxx, src0.111, src0.000 MAD temp[1].w, -src0.x, src0.1, src0.0 17: BEGIN_TEX; 18: KIL temp[1]; 19: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=18************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 8, tex_end: 0 (code_addr: 00000200) 0: xyz: c0 c2 t0 bias-> t1.x (008408a0) w: t0 t0 t0 bias-> t0.w (00800000) xyz: 0.0 1.0 -c0.xyz op: 04080a94 w: c2.y c0.x c0.x op: 05000004 1: xyz: t0 c2 t0 bias-> t0.x (00800880) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t0.yyy 1.0 0.5 op: 00058a82 w: c2.x t0.x t0.x op: 05000003 2: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xyz t1.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t0 t0 t0 bias-> t1.w (00840000) xyz: t0.xyz t0.xxx t0.xxx op: 04804080 w: t0.x t0.x t0.x op: 03800000 4: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t1 t0 t0 bias-> (00000001) xyz: t0.xyz 1.0 -t1.www op: 000b0a80 w: t0.x t0.x t0.x op: 00000000 5: xyz: c3 t0 c1 bias-> t0.x (00821023) w: t0 t0 t0 bias-> (00000000) xyz: c3.yyy t0.xyz c1.xyz op: 00020202 w: c3.x c3.x c3.x op: 00000000 6: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.5 op: 00058a80 w: t0.x t0.x t0.x op: 00000000 7: xyz: t0 t0 t0 bias-> t0.x (00800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.www 0.0 op: 00050600 w: t0.x t0.x t0.x op: 00000000 8: xyz: t0 t0 t0 bias-> t2.y (01080000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx 1.0 0.0 op: 00050a81 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 9, tex_offset: 0, alu_end: 5, tex_end: 0 (code_addr: 00000149) TEX: TEX t0, t2, texture[0] (00008002) 9: xyz: t0 t0 t0 bias-> t1.y (01040000) w: t0 t0 t0 bias-> t1.w (00840000) xyz: 1.0 0.0 -|t0.www| op: 041b0a15 w: t0.w 1.0 -1.0 op: 000c4889 10: xyz: t0 t0 t0 bias-> t2.x (00880000) w: t1 t0 t0 bias-> (00000001) xyz: 0.0 1.0 t1.www op: 84030a94 NOP w: t0.x t0.x t0.x op: 00000000 11: xyz: t1 t2 t0 sub-> t1.x (00840081) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 -|srcp.xyz| op: 043bca94 w: t1.x t1.x t1.x op: 00000000 12: xyz: t1 t1 t0 bias-> t1.x (00840041) w: t0 t0 t0 bias-> (00000000) xyz: t1.yyy 1.0 t1.xyz op: 40010a82 w: t1.x t1.x t1.x op: 00000000 13: xyz: t1 t0 t0 bias-> t1.x (00840001) w: t0 t0 t0 bias-> (00000000) xyz: 0.0 1.0 -t1.xyz op: 04080a94 w: t1.x t1.x t1.x op: 00000000 14: xyz: t1 t0 t0 bias-> t1.xyz (03840001) w: t0 t0 t0 bias-> t1.w (00840000) xyz: -t1.xxx 1.0 0.0 op: 00050aa1 w: -t1.x 1.0 0.0 op: 000408a0 NODE 2: alu_offset: 15, tex_offset: 1, alu_end: 0, tex_end: 0 (code_addr: 0040100f) TEX: KIL t0, t1, texture[0] (00010001) 15: 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 GLSL source for fragment shader 34: vec4 S(in vec4 x, in float y){ return x; } uniform vec2 b, g, t, v; uniform sampler2D c, f, s, u; vec2 T(in float x, in float y){ (x = ((x + 0.5) / b[0])); return vec2(fract(x), ((((26.0 * floor(x)) + y) + 0.5) / b[1])); } float U(in vec2 x){ return x[1]; } vec4 V(in float x){ (x = ((x + 0.5) / g[0])); return floor((0.5 + (255.0 * texture2D(f, vec2(fract(x), ((floor(x) + 0.5) / g[1])))))); } float W(in vec4 x){ return (mod(x[0], 32.0) / 31.0); } varying vec2 h; varying vec3 i, k; varying float j; varying vec4 l; uniform float m, w; varying float o; void main(){ vec2 y, z, E, F, G, H, I, J, K, L, M; (y = h); (z = i.xy); bool A; vec4 B = V(k[2]); float C = W(B); if ((C == 0.0)) discard; (A = (clamp(floor((B[0] / 64.0)), 0.0, 1.0) > 0.5)); if ((A && (abs(y[1]) > (o * 0.5)))) discard; if ((mod((B[0] / 32.0), 2.0) >= 1.0)) { (y = (vec2(i[2], 0.0) - y)); (z = (i.zz - z.yx)); } float D, N, O, P; (D = floor(y[0])); (E = texture2D(s, ((vec2(D, j) + 0.5) / t)).xy); (F = (128.0 - (255.0 * E))); (G = (D + F)); (H = ((step(z.xx, G) * step(G, z.yy)) * ceil(E))); if (((H[0] + H[1]) == 0.0)) discard; (I = ((1020.0 * texture2D(s, ((vec2((G[0] + ((A) ? (1.0) : (0.0))), j) + 0.5) / t)).zw) + 1.0)); (J = ((A) ? (vec2((-y[1]), (-F[0]))) : (vec2((-F[0]), y[1])))); (K = (I + J)); (I = ((1020.0 * texture2D(s, ((vec2((G[1] + ((A) ? (1.0) : (0.0))), j) + 0.5) / t)).zw) + 1.0)); (J = ((A) ? (vec2((-y[1]), (-F[1]))) : (vec2((-F[1]), y[1])))); (L = (I + J)); (M = vec2(texture2D(u, (K / v))[3], texture2D(u, (L / v))[3])); (M *= H); (N = max(M[0], M[1])); (O = ((((N - 0.5) * 255.0) / 12.0) / 2.0)); (P = clamp(((O + 0.5) + w), 0.0, 1.0)); if ((P == 0.0)) discard; vec4 Q; (Q = texture2D(c, T(U(k.xy), m))); (Q[3] *= C); (Q[3] *= P); (gl_FragColor = S(Q, k[0])); } GLSL IR for shader 34: ( (declare (in ) float o) (declare (uniform ) float w) (declare (uniform ) float m) (declare (in ) vec4 l) (declare (in ) float j) (declare (in ) vec3 k) (declare (in ) vec3 i) (declare (in ) vec2 h) (declare (uniform ) sampler2D u) (declare (uniform ) sampler2D s) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 v) (declare (uniform ) vec2 t) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (in ) vec4 gl_FragCoord) (declare (in ) bool gl_FrontFacing) (declare (out ) vec4 gl_FragColor) (declare (out ) float gl_FragDepth) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (in ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (declare (out ) (array vec4 4) gl_FragData) (function S (signature vec4 (parameters (declare (in ) vec4 x) (declare (in ) float y) ) ( (return (var_ref x) ) )) ) (function T (signature vec2 (parameters (declare (in ) float x) (declare (in ) float y) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref x) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref x) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref x) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref y) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) (signature vec4 (parameters (declare (in ) vec4 arg0) ) ( )) ) (function U (signature float (parameters (declare (in ) vec2 x) ) ( (return (swiz y (var_ref x) )) )) ) (function V (signature vec4 (parameters (declare (in ) float x) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref x) (constant float (0.500000)) ) (swiz x (var_ref g) )) ) (assign (x) (var_ref x) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref x) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (var_ref floor_retval) (constant float (0.500000)) ) (swiz y (var_ref g) )) ) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref f) (var_ref vec_ctor) )) (declare (temporary ) vec4 floor_retval@166) (call floor (var_ref floor_retval@166) ((expression vec4 + (constant float (0.500000)) (expression vec4 * (constant float (255.000000)) (var_ref texture2D_retval) ) ) )) (return (var_ref floor_retval@166) ) )) ) (function texture2D (signature vec4 (parameters (declare (in ) sampler2D sampler) (declare (in ) vec2 P) ) ( )) ) (function W (signature float (parameters (declare (in ) vec4 x) ) ( (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((swiz x (var_ref x) )(constant float (32.000000)) )) (return (expression float / (var_ref mod_retval) (constant float (31.000000)) ) ) )) ) (function mod (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function main (signature void (parameters ) ( (declare () vec4 Q) (declare () float P) (declare () float D) (declare () float C) (declare () vec4 B) (declare () bool A) (declare () vec2 L) (declare () vec2 K) (declare () vec2 H) (declare () vec2 G) (declare () vec2 F) (declare () vec2 E) (declare () vec2 z) (declare () vec2 y) (assign (xy) (var_ref y) (var_ref h) ) (assign (xy) (var_ref z) (swiz xy (var_ref i) )) (declare (temporary ) vec4 V_retval) (call V (var_ref V_retval) ((swiz z (var_ref k) ))) (assign (xyzw) (var_ref B) (var_ref V_retval) ) (declare (temporary ) float W_retval) (call W (var_ref W_retval) ((var_ref V_retval) )) (assign (x) (var_ref C) (var_ref W_retval) ) (if (expression bool all_equal (var_ref W_retval) (constant float (0.000000)) ) ( (discard ) ) ()) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((expression float / (swiz x (var_ref B) )(constant float (64.000000)) ) )) (declare (temporary ) float clamp_retval) (call clamp (var_ref clamp_retval) ((var_ref floor_retval) (constant float (0.000000)) (constant float (1.000000)) )) (declare (temporary ) bool assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression bool > (var_ref clamp_retval) (constant float (0.500000)) ) ) (assign (x) (var_ref A) (var_ref assignment_tmp) ) (declare (temporary ) bool and_tmp) (if (var_ref assignment_tmp) ( (declare (temporary ) float abs_retval) (call abs (var_ref abs_retval) ((swiz y (var_ref y) ))) (assign (x) (var_ref and_tmp) (expression bool > (var_ref abs_retval) (expression float * (var_ref o) (constant float (0.500000)) ) ) ) ) ( (assign (x) (var_ref and_tmp) (constant bool (0)) ) )) (if (var_ref and_tmp) ( (discard ) ) ()) (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((expression float / (swiz x (var_ref B) )(constant float (32.000000)) ) (constant float (2.000000)) )) (if (expression bool >= (var_ref mod_retval) (constant float (1.000000)) ) ( (declare (temporary ) vec2 vec_ctor) (assign (y) (var_ref vec_ctor) (constant float (0.000000)) ) (assign (x) (var_ref vec_ctor) (swiz z (var_ref i) )) (assign (xy) (var_ref y) (expression vec2 + (var_ref vec_ctor) (expression vec2 neg (var_ref y) ) ) ) (assign (xy) (var_ref z) (expression vec2 + (swiz zz (var_ref i) )(expression vec2 neg (swiz yx (var_ref z) )) ) ) ) ()) (declare (temporary ) float floor_retval@167) (call floor (var_ref floor_retval@167) ((swiz x (var_ref y) ))) (assign (x) (var_ref D) (var_ref floor_retval@167) ) (declare (temporary ) vec2 vec_ctor@168) (assign (x) (var_ref vec_ctor@168) (var_ref floor_retval@167) ) (assign (y) (var_ref vec_ctor@168) (var_ref j) ) (declare (temporary ) vec4 texture2D_retval) (call texture2D (var_ref texture2D_retval) ((var_ref s) (expression vec2 / (expression vec2 + (var_ref vec_ctor@168) (constant float (0.500000)) ) (var_ref t) ) )) (assign (xy) (var_ref E) (swiz xy (var_ref texture2D_retval) )) (declare (temporary ) vec2 assignment_tmp@169) (assign (xy) (var_ref assignment_tmp@169) (expression vec2 + (constant float (128.000000)) (expression vec2 neg (expression vec2 * (constant float (255.000000)) (swiz xy (var_ref texture2D_retval) )) ) ) ) (assign (xy) (var_ref F) (var_ref assignment_tmp@169) ) (declare (temporary ) vec2 assignment_tmp@170) (assign (xy) (var_ref assignment_tmp@170) (expression vec2 + (var_ref D) (var_ref assignment_tmp@169) ) ) (assign (xy) (var_ref G) (var_ref assignment_tmp@170) ) (declare (temporary ) vec2 step_retval) (call step (var_ref step_retval) ((swiz xx (var_ref z) )(var_ref assignment_tmp@170) )) (declare (temporary ) vec2 step_retval@171) (call step (var_ref step_retval@171) ((var_ref G) (swiz yy (var_ref z) ))) (declare (temporary ) vec2 ceil_retval) (call ceil (var_ref ceil_retval) ((var_ref E) )) (declare (temporary ) vec2 assignment_tmp@172) (assign (xy) (var_ref assignment_tmp@172) (expression vec2 * (expression vec2 * (var_ref step_retval) (var_ref step_retval@171) ) (var_ref ceil_retval) ) ) (assign (xy) (var_ref H) (var_ref assignment_tmp@172) ) (if (expression bool all_equal (expression float + (swiz x (var_ref assignment_tmp@172) )(swiz y (var_ref assignment_tmp@172) )) (constant float (0.000000)) ) ( (discard ) ) ()) (declare (temporary ) float conditional_tmp) (if (var_ref A) ( (assign (x) (var_ref conditional_tmp) (constant float (1.000000)) ) ) ( (assign (x) (var_ref conditional_tmp) (constant float (0.000000)) ) )) (declare (temporary ) vec2 vec_ctor@173) (assign (x) (var_ref vec_ctor@173) (expression float + (swiz x (var_ref G) )(var_ref conditional_tmp) ) ) (assign (y) (var_ref vec_ctor@173) (var_ref j) ) (declare (temporary ) vec4 texture2D_retval@174) (call texture2D (var_ref texture2D_retval@174) ((var_ref s) (expression vec2 / (expression vec2 + (var_ref vec_ctor@173) (constant float (0.500000)) ) (var_ref t) ) )) (declare (temporary ) vec2 assignment_tmp@175) (assign (xy) (var_ref assignment_tmp@175) (expression vec2 + (expression vec2 * (constant float (1020.000000)) (swiz zw (var_ref texture2D_retval@174) )) (constant float (1.000000)) ) ) (declare (temporary ) vec2 conditional_tmp@176) (if (var_ref A) ( (declare (temporary ) vec2 vec_ctor@177) (assign (x) (var_ref vec_ctor@177) (expression float neg (swiz y (var_ref y) )) ) (assign (y) (var_ref vec_ctor@177) (expression float neg (swiz x (var_ref F) )) ) (assign (xy) (var_ref conditional_tmp@176) (var_ref vec_ctor@177) ) ) ( (declare (temporary ) vec2 vec_ctor@178) (assign (x) (var_ref vec_ctor@178) (expression float neg (swiz x (var_ref F) )) ) (assign (y) (var_ref vec_ctor@178) (swiz y (var_ref y) )) (assign (xy) (var_ref conditional_tmp@176) (var_ref vec_ctor@178) ) )) (assign (xy) (var_ref K) (expression vec2 + (var_ref assignment_tmp@175) (var_ref conditional_tmp@176) ) ) (declare (temporary ) float conditional_tmp@179) (if (var_ref A) ( (assign (x) (var_ref conditional_tmp@179) (constant float (1.000000)) ) ) ( (assign (x) (var_ref conditional_tmp@179) (constant float (0.000000)) ) )) (declare (temporary ) vec2 vec_ctor@180) (assign (x) (var_ref vec_ctor@180) (expression float + (swiz y (var_ref G) )(var_ref conditional_tmp@179) ) ) (assign (y) (var_ref vec_ctor@180) (var_ref j) ) (declare (temporary ) vec4 texture2D_retval@181) (call texture2D (var_ref texture2D_retval@181) ((var_ref s) (expression vec2 / (expression vec2 + (var_ref vec_ctor@180) (constant float (0.500000)) ) (var_ref t) ) )) (declare (temporary ) vec2 assignment_tmp@182) (assign (xy) (var_ref assignment_tmp@182) (expression vec2 + (expression vec2 * (constant float (1020.000000)) (swiz zw (var_ref texture2D_retval@181) )) (constant float (1.000000)) ) ) (declare (temporary ) vec2 conditional_tmp@183) (if (var_ref A) ( (declare (temporary ) vec2 vec_ctor@184) (assign (x) (var_ref vec_ctor@184) (expression float neg (swiz y (var_ref y) )) ) (assign (y) (var_ref vec_ctor@184) (expression float neg (swiz y (var_ref F) )) ) (assign (xy) (var_ref conditional_tmp@183) (var_ref vec_ctor@184) ) ) ( (declare (temporary ) vec2 vec_ctor@185) (assign (x) (var_ref vec_ctor@185) (expression float neg (swiz y (var_ref F) )) ) (assign (y) (var_ref vec_ctor@185) (swiz y (var_ref y) )) (assign (xy) (var_ref conditional_tmp@183) (var_ref vec_ctor@185) ) )) (assign (xy) (var_ref L) (expression vec2 + (var_ref assignment_tmp@182) (var_ref conditional_tmp@183) ) ) (declare (temporary ) vec4 texture2D_retval@186) (call texture2D (var_ref texture2D_retval@186) ((var_ref u) (expression vec2 / (var_ref K) (var_ref v) ) )) (declare (temporary ) vec4 texture2D_retval@187) (call texture2D (var_ref texture2D_retval@187) ((var_ref u) (expression vec2 / (var_ref L) (var_ref v) ) )) (declare (temporary ) vec2 vec_ctor@188) (assign (x) (var_ref vec_ctor@188) (swiz w (var_ref texture2D_retval@186) )) (assign (y) (var_ref vec_ctor@188) (swiz w (var_ref texture2D_retval@187) )) (declare (temporary ) vec2 assignment_tmp@189) (assign (xy) (var_ref assignment_tmp@189) (expression vec2 * (var_ref vec_ctor@188) (var_ref H) ) ) (declare (temporary ) float max_retval) (call max (var_ref max_retval) ((swiz x (var_ref assignment_tmp@189) )(swiz y (var_ref assignment_tmp@189) ))) (declare (temporary ) float clamp_retval@190) (call clamp (var_ref clamp_retval@190) ((expression float + (expression float + (expression float / (expression float / (expression float * (expression float + (var_ref max_retval) (expression float neg (constant float (0.500000)) ) ) (constant float (255.000000)) ) (constant float (12.000000)) ) (constant float (2.000000)) ) (constant float (0.500000)) ) (var_ref w) ) (constant float (0.000000)) (constant float (1.000000)) )) (assign (x) (var_ref P) (var_ref clamp_retval@190) ) (if (expression bool all_equal (var_ref clamp_retval@190) (constant float (0.000000)) ) ( (discard ) ) ()) (declare (temporary ) float U_retval) (call U (var_ref U_retval) ((swiz xy (var_ref k) ))) (declare (temporary ) vec2 T_retval) (call T (var_ref T_retval) ((var_ref U_retval) (var_ref m) )) (declare (temporary ) vec4 texture2D_retval@191) (call texture2D (var_ref texture2D_retval@191) ((var_ref c) (var_ref T_retval) )) (assign (xyz) (var_ref Q) (swiz xyz (var_ref texture2D_retval@191) )) (assign (w) (var_ref Q) (expression float * (swiz w (var_ref texture2D_retval@191) )(var_ref C) ) ) (assign (w) (var_ref Q) (expression float * (swiz w (var_ref Q) )(var_ref P) ) ) (declare (temporary ) vec4 S_retval) (call S (var_ref S_retval) ((var_ref Q) (swiz x (var_ref k) ))) (assign (xyzw) (var_ref gl_FragColor) (var_ref S_retval) ) )) ) (function clamp (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) (declare (in ) float arg2) ) ( )) ) (function abs (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function step (signature vec2 (parameters (declare (in ) vec2 edge) (declare (in ) vec2 x) ) ( )) ) (function ceil (signature vec2 (parameters (declare (in ) vec2 arg0) ) ( )) ) (function max (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) ) GLSL source for vertex shader 35: uniform vec2 b, g, p; uniform sampler2D c, f; vec2 ja(in float B, in float C){ (B = ((B + 0.5) / b[0])); return vec2(fract(B), ((((26.0 * floor(B)) + C) + 0.5) / b[1])); } float la(in vec2 B){ return B[1]; } varying vec2 h; varying vec3 i, k; varying float j; varying vec4 l; uniform float m, q; varying float o; attribute vec3 v; attribute vec4 w; attribute vec4 x; attribute vec4 y; attribute vec3 z; attribute float A; uniform mat4 r; void main(){ vec2 C, D, J, L, N, Z, aa; (C = (p / 2.0)); (D = (vec2(2.0, -2.0) / p)); float E, F, G, H, M, Q, R, S, T, U, W, X, Y, ba, ca, da, ea; (E = abs(v[2])); (F = y[3]); (G = y[0]); (H = z[2]); vec4 I, K; (I = (r * vec4(x.xy, H, 1.0))); (I[1] = (-I[1])); (J = ((C * I.xy) / I[3])); (K = (r * vec4(x.zw, H, 1.0))); (K[1] = (-K[1])); (L = ((C * K.xy) / K[3])); (M = distance(J, L)); (N = vec2(0.0, M)); (N -= ((M - E) / 2.0)); bool O, P, fa; (O = (abs(r[2][1]) > 0.001)); (P = ((I[3] < 9.9999997e-05) || (K[3] < 9.9999997e-05))); (Q = q); (i = v); (i[2] = E); (i.xy *= Q); (R = (Q * E)); (i.xy -= ((R - E) / 2.0)); (i.xy = mix(i.xy, N, float(O))); (i *= 2.0); (j = w[3]); (S = ((2.0 * floor((G / 2.0))) - 1.0)); (T = ((-2.0 * mod(floor(((G + 1.0) / 2.0)), 2.0)) + 1.0)); (U = (w[1] / 4.0)); (o = U); (W = w[0]); (X = mix((i[1] + (2.0 * W)), (i[0] - (2.0 * W)), float((S < 0.0)))); (Y = (T * U)); (h = vec2((X + w[2]), Y)); (k = y.yzw); (Z = normalize((L - J))); (aa = vec2((-Z[1]), Z[0])); (ba = (S * (-z[0]))); (ca = step(v[2], 0.0)); (da = sign(((S * Z[0]) + 9.9999997e-05))); (ba *= mix(1.0, da, ca)); (ea = (S * (-z[1]))); (J -= (W * Z)); (J -= ((((U / 2.0) * aa) * T) * S)); (J += ((aa * ba) + (Z * ea))); (gl_Position = vec4((J * D), A, 1.0)); (fa = (P || (O && (M < E)))); (gl_Position.xy *= float((!fa))); } GLSL IR for shader 35: ( (declare (uniform ) mat4 r) (declare (in ) float A) (declare (in ) vec3 z) (declare (in ) vec4 y) (declare (in ) vec4 x) (declare (in ) vec4 w) (declare (in ) vec3 v) (declare (out ) float o) (declare (uniform ) float q) (declare (uniform ) float m) (declare (out ) vec4 l) (declare (out ) float j) (declare (out ) vec3 k) (declare (out ) vec3 i) (declare (out ) vec2 h) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 p) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_Position) (declare (out ) float gl_PointSize) (declare (in ) vec4 gl_Vertex) (declare (in ) vec3 gl_Normal) (declare (in ) vec4 gl_Color) (declare (in ) vec4 gl_SecondaryColor) (declare (in ) vec4 gl_MultiTexCoord0) (declare (in ) vec4 gl_MultiTexCoord1) (declare (in ) vec4 gl_MultiTexCoord2) (declare (in ) vec4 gl_MultiTexCoord3) (declare (in ) vec4 gl_MultiTexCoord4) (declare (in ) vec4 gl_MultiTexCoord5) (declare (in ) vec4 gl_MultiTexCoord6) (declare (in ) vec4 gl_MultiTexCoord7) (declare (in ) float gl_FogCoord) (declare (out ) vec4 gl_ClipVertex) (declare (out ) vec4 gl_FrontColor) (declare (out ) vec4 gl_BackColor) (declare (out ) vec4 gl_FrontSecondaryColor) (declare (out ) vec4 gl_BackSecondaryColor) (declare (out ) float gl_FogFragCoord) (declare (uniform ) mat4 gl_ModelViewMatrix) (declare (uniform ) mat4 gl_ProjectionMatrix) (declare (uniform ) mat4 gl_ModelViewProjectionMatrix) (declare (uniform ) mat3 gl_NormalMatrix) (declare (uniform ) mat4 gl_ModelViewMatrixInverse) (declare (uniform ) mat4 gl_ProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverse) (declare (uniform ) mat4 gl_ModelViewMatrixTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixTranspose) (declare (uniform ) mat4 gl_ModelViewMatrixInverseTranspose) (declare (uniform ) mat4 gl_ProjectionMatrixInverseTranspose) (declare (uniform ) mat4 gl_ModelViewProjectionMatrixInverseTranspose) (declare (uniform ) float gl_NormalScale) (declare (uniform ) gl_LightModelParameters gl_LightModel) (declare (uniform ) vec2 gl_BumpRotMatrix0MESA) (declare (uniform ) vec2 gl_BumpRotMatrix1MESA) (declare (uniform ) vec4 gl_FogParamsOptimizedMESA) (declare () int gl_MaxLights) (declare () int gl_MaxClipPlanes) (declare () int gl_MaxTextureUnits) (declare () int gl_MaxTextureCoords) (declare () int gl_MaxVertexAttribs) (declare () int gl_MaxVertexUniformComponents) (declare () int gl_MaxVaryingFloats) (declare () int gl_MaxVertexTextureImageUnits) (declare () int gl_MaxCombinedTextureImageUnits) (declare () int gl_MaxTextureImageUnits) (declare () int gl_MaxFragmentUniformComponents) (declare (uniform ) (array mat4 8) gl_TextureMatrix) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverse) (declare (uniform ) (array mat4 8) gl_TextureMatrixTranspose) (declare (uniform ) (array mat4 8) gl_TextureMatrixInverseTranspose) (declare (uniform ) gl_DepthRangeParameters gl_DepthRange) (declare (uniform ) (array vec4 6) gl_ClipPlane) (declare (uniform ) gl_PointParameters gl_Point) (declare (uniform ) gl_MaterialParameters gl_FrontMaterial) (declare (uniform ) gl_MaterialParameters gl_BackMaterial) (declare (uniform ) (array gl_LightSourceParameters 8) gl_LightSource) (declare (uniform ) gl_LightModelProducts gl_FrontLightModelProduct) (declare (uniform ) gl_LightModelProducts gl_BackLightModelProduct) (declare (uniform ) (array gl_LightProducts 8) gl_FrontLightProduct) (declare (uniform ) (array gl_LightProducts 8) gl_BackLightProduct) (declare (uniform ) (array vec4 8) gl_TextureEnvColor) (declare (uniform ) (array vec4 8) gl_EyePlaneS) (declare (uniform ) (array vec4 8) gl_EyePlaneT) (declare (uniform ) (array vec4 8) gl_EyePlaneR) (declare (uniform ) (array vec4 8) gl_EyePlaneQ) (declare (uniform ) (array vec4 8) gl_ObjectPlaneS) (declare (uniform ) (array vec4 8) gl_ObjectPlaneT) (declare (uniform ) (array vec4 8) gl_ObjectPlaneR) (declare (uniform ) (array vec4 8) gl_ObjectPlaneQ) (declare (uniform ) gl_FogParameters gl_Fog) (declare (uniform ) (array vec4 33) gl_CurrentAttribVertMESA) (declare (uniform ) (array vec4 32) gl_CurrentAttribFragMESA) (declare (out ) (array vec4 0) gl_TexCoord) (declare () int gl_MaxDrawBuffers) (function ja (signature vec2 (parameters (declare (in ) float B) (declare (in ) float C) ) ( (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float / (expression float + (var_ref B) (constant float (0.500000)) ) (swiz x (var_ref b) )) ) (assign (x) (var_ref B) (var_ref assignment_tmp) ) (declare (temporary ) float fract_retval) (call fract (var_ref fract_retval) ((var_ref assignment_tmp) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((var_ref B) )) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (var_ref fract_retval) ) (assign (y) (var_ref vec_ctor) (expression float / (expression float + (expression float + (expression float * (constant float (26.000000)) (var_ref floor_retval) ) (var_ref C) ) (constant float (0.500000)) ) (swiz y (var_ref b) )) ) (return (var_ref vec_ctor) ) )) ) (function fract (signature float (parameters (declare (in ) float x) ) ( )) ) (function floor (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function la (signature float (parameters (declare (in ) vec2 B) ) ( (return (swiz y (var_ref B) )) )) ) (function main (signature void (parameters ) ( (declare () bool P) (declare () bool O) (declare () vec4 K) (declare () vec4 I) (declare () float ca) (declare () float ba) (declare () float W) (declare () float U) (declare () float T) (declare () float S) (declare () float M) (declare () float G) (declare () float E) (declare () vec2 aa) (declare () vec2 Z) (declare () vec2 N) (declare () vec2 L) (declare () vec2 J) (declare () vec2 D) (declare () vec2 C) (assign (xy) (var_ref C) (expression vec2 / (var_ref p) (constant float (2.000000)) ) ) (assign (xy) (var_ref D) (expression vec2 / (constant vec2 (2.000000 -2.000000)) (var_ref p) ) ) (declare (temporary ) float abs_retval) (call abs (var_ref abs_retval) ((swiz z (var_ref v) ))) (assign (x) (var_ref E) (var_ref abs_retval) ) (assign (x) (var_ref G) (swiz x (var_ref y) )) (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (swiz z (var_ref z) )) (declare (temporary ) vec4 vec_ctor) (assign (w) (var_ref vec_ctor) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor) (swiz xy (var_ref x) )) (assign (z) (var_ref vec_ctor) (var_ref assignment_tmp) ) (declare (temporary ) vec4 assignment_tmp@192) (assign (xyzw) (var_ref assignment_tmp@192) (expression vec4 * (var_ref r) (var_ref vec_ctor) ) ) (assign (xzw) (var_ref I) (swiz xzw (var_ref assignment_tmp@192) )) (assign (y) (var_ref I) (expression float neg (swiz y (var_ref assignment_tmp@192) )) ) (declare (temporary ) vec2 assignment_tmp@193) (assign (xy) (var_ref assignment_tmp@193) (expression vec2 / (expression vec2 * (var_ref C) (swiz xy (var_ref I) )) (swiz w (var_ref assignment_tmp@192) )) ) (assign (xy) (var_ref J) (var_ref assignment_tmp@193) ) (declare (temporary ) vec4 vec_ctor@194) (assign (w) (var_ref vec_ctor@194) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor@194) (swiz zw (var_ref x) )) (assign (z) (var_ref vec_ctor@194) (var_ref assignment_tmp) ) (declare (temporary ) vec4 assignment_tmp@195) (assign (xyzw) (var_ref assignment_tmp@195) (expression vec4 * (var_ref r) (var_ref vec_ctor@194) ) ) (assign (xzw) (var_ref K) (swiz xzw (var_ref assignment_tmp@195) )) (assign (y) (var_ref K) (expression float neg (swiz y (var_ref assignment_tmp@195) )) ) (declare (temporary ) vec2 assignment_tmp@196) (assign (xy) (var_ref assignment_tmp@196) (expression vec2 / (expression vec2 * (var_ref C) (swiz xy (var_ref K) )) (swiz w (var_ref assignment_tmp@195) )) ) (assign (xy) (var_ref L) (var_ref assignment_tmp@196) ) (declare (temporary ) float distance_retval) (call distance (var_ref distance_retval) ((var_ref assignment_tmp@193) (var_ref assignment_tmp@196) )) (assign (x) (var_ref M) (var_ref distance_retval) ) (declare (temporary ) vec2 vec_ctor@197) (assign (x) (var_ref vec_ctor@197) (constant float (0.000000)) ) (assign (y) (var_ref vec_ctor@197) (var_ref distance_retval) ) (assign (xy) (var_ref N) (expression vec2 + (var_ref vec_ctor@197) (expression float neg (expression float / (expression float + (var_ref distance_retval) (expression float neg (var_ref E) ) ) (constant float (2.000000)) ) ) ) ) (declare (temporary ) float abs_retval@198) (call abs (var_ref abs_retval@198) ((swiz y (array_ref (var_ref r) (constant int (2)) ) ))) (declare (temporary ) bool assignment_tmp@199) (assign (x) (var_ref assignment_tmp@199) (expression bool > (var_ref abs_retval@198) (constant float (0.001000)) ) ) (assign (x) (var_ref O) (var_ref assignment_tmp@199) ) (assign (x) (var_ref P) (expression bool || (expression bool < (swiz w (var_ref I) )(constant float (0.000100)) ) (expression bool < (swiz w (var_ref K) )(constant float (0.000100)) ) ) ) (assign (z) (var_ref i) (var_ref E) ) (assign (xy) (var_ref i) (expression vec2 * (swiz xy (var_ref v) )(var_ref q) ) ) (assign (xy) (var_ref i) (expression vec2 + (swiz xy (var_ref i) )(expression float neg (expression float / (expression float + (expression float * (var_ref q) (var_ref E) ) (expression float neg (var_ref E) ) ) (constant float (2.000000)) ) ) ) ) (declare (temporary ) vec2 mix_retval) (call mix (var_ref mix_retval) ((swiz xy (var_ref i) )(var_ref N) (expression float b2f (var_ref assignment_tmp@199) ) )) (assign (xy) (var_ref i) (var_ref mix_retval) ) (assign (xyz) (var_ref i) (expression vec3 * (var_ref i) (constant float (2.000000)) ) ) (assign (x) (var_ref j) (swiz w (var_ref w) )) (declare (temporary ) float floor_retval) (call floor (var_ref floor_retval) ((expression float / (var_ref G) (constant float (2.000000)) ) )) (assign (x) (var_ref S) (expression float + (expression float * (constant float (2.000000)) (var_ref floor_retval) ) (constant float (-1.000000)) ) ) (declare (temporary ) float floor_retval@200) (call floor (var_ref floor_retval@200) ((expression float / (expression float + (var_ref G) (constant float (1.000000)) ) (constant float (2.000000)) ) )) (declare (temporary ) float mod_retval) (call mod (var_ref mod_retval) ((var_ref floor_retval@200) (constant float (2.000000)) )) (assign (x) (var_ref T) (expression float + (expression float * (constant float (-2.000000)) (var_ref mod_retval) ) (constant float (1.000000)) ) ) (declare (temporary ) float assignment_tmp@201) (assign (x) (var_ref assignment_tmp@201) (expression float / (swiz y (var_ref w) )(constant float (4.000000)) ) ) (assign (x) (var_ref U) (var_ref assignment_tmp@201) ) (assign (x) (var_ref o) (var_ref assignment_tmp@201) ) (assign (x) (var_ref W) (swiz x (var_ref w) )) (declare (temporary ) float mix_retval@202) (call mix (var_ref mix_retval@202) ((expression float + (swiz y (var_ref i) )(expression float * (constant float (2.000000)) (swiz x (var_ref w) )) ) (expression float + (swiz x (var_ref i) )(expression float neg (expression float * (constant float (2.000000)) (swiz x (var_ref w) )) ) ) (expression float b2f (expression bool < (var_ref S) (constant float (0.000000)) ) ) )) (declare (temporary ) vec2 vec_ctor@203) (assign (x) (var_ref vec_ctor@203) (expression float + (var_ref mix_retval@202) (swiz z (var_ref w) )) ) (assign (y) (var_ref vec_ctor@203) (expression float * (var_ref T) (var_ref U) ) ) (assign (xy) (var_ref h) (var_ref vec_ctor@203) ) (assign (xyz) (var_ref k) (swiz yzw (var_ref y) )) (declare (temporary ) vec2 normalize_retval) (call normalize (var_ref normalize_retval) ((expression vec2 + (var_ref L) (expression vec2 neg (var_ref J) ) ) )) (assign (xy) (var_ref Z) (var_ref normalize_retval) ) (declare (temporary ) vec2 vec_ctor@204) (assign (x) (var_ref vec_ctor@204) (expression float neg (swiz y (var_ref normalize_retval) )) ) (assign (y) (var_ref vec_ctor@204) (swiz x (var_ref normalize_retval) )) (assign (xy) (var_ref aa) (var_ref vec_ctor@204) ) (assign (x) (var_ref ba) (expression float * (var_ref S) (expression float neg (swiz x (var_ref z) )) ) ) (declare (temporary ) float step_retval) (call step (var_ref step_retval) ((swiz z (var_ref v) )(constant float (0.000000)) )) (assign (x) (var_ref ca) (var_ref step_retval) ) (declare (temporary ) float sign_retval) (call sign (var_ref sign_retval) ((expression float + (expression float * (var_ref S) (swiz x (var_ref Z) )) (constant float (0.000100)) ) )) (declare (temporary ) float mix_retval@205) (call mix (var_ref mix_retval@205) ((constant float (1.000000)) (var_ref sign_retval) (var_ref ca) )) (declare (temporary ) float assignment_tmp@206) (assign (x) (var_ref assignment_tmp@206) (expression float * (var_ref ba) (var_ref mix_retval@205) ) ) (assign (x) (var_ref ba) (var_ref assignment_tmp@206) ) (declare (temporary ) vec2 assignment_tmp@207) (assign (xy) (var_ref assignment_tmp@207) (expression vec2 + (expression vec2 + (expression vec2 + (var_ref J) (expression vec2 neg (expression vec2 * (var_ref W) (var_ref Z) ) ) ) (expression vec2 neg (expression vec2 * (expression vec2 * (expression vec2 * (expression float / (var_ref U) (constant float (2.000000)) ) (var_ref aa) ) (var_ref T) ) (var_ref S) ) ) ) (expression vec2 + (expression vec2 * (var_ref aa) (var_ref assignment_tmp@206) ) (expression vec2 * (var_ref Z) (expression float * (var_ref S) (expression float neg (swiz y (var_ref z) )) ) ) ) ) ) (assign (xy) (var_ref J) (var_ref assignment_tmp@207) ) (declare (temporary ) vec4 vec_ctor@208) (assign (w) (var_ref vec_ctor@208) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor@208) (expression vec2 * (var_ref assignment_tmp@207) (var_ref D) ) ) (assign (z) (var_ref vec_ctor@208) (var_ref A) ) (assign (zw) (var_ref gl_Position) (swiz zw (var_ref vec_ctor@208) )) (assign (xy) (var_ref gl_Position) (expression vec2 * (swiz xy (var_ref vec_ctor@208) )(expression float b2f (expression bool ! (expression bool || (var_ref P) (expression bool && (var_ref O) (expression bool < (var_ref M) (var_ref E) ) ) ) ) ) ) ) )) ) (function abs (signature float (parameters (declare (in ) float arg0) ) ( )) ) (function distance (signature float (parameters (declare (in ) vec2 p0) (declare (in ) vec2 p1) ) ( )) ) (function mix (signature vec2 (parameters (declare (in ) vec2 arg0) (declare (in ) vec2 arg1) (declare (in ) float arg2) ) ( )) (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) (declare (in ) float arg2) ) ( )) ) (function mod (signature float (parameters (declare (in ) float arg0) (declare (in ) float arg1) ) ( )) ) (function normalize (signature vec2 (parameters (declare (in ) vec2 arg0) ) ( )) ) (function step (signature float (parameters (declare (in ) float edge) (declare (in ) float x) ) ( )) ) (function sign (signature float (parameters (declare (in ) float x) ) ( )) ) ) GLSL IR for linked vertex program 36: ( (declare (uniform ) mat4 r) (declare (in ) float A) (declare (in ) vec3 z) (declare (in ) vec4 y) (declare (in ) vec4 x) (declare (in ) vec4 w) (declare (in ) vec3 v) (declare (out ) float o) (declare (uniform ) float q) (declare (out ) float j) (declare (out ) vec3 k) (declare (out ) vec3 i) (declare (out ) vec2 h) (declare (uniform ) vec2 p) (declare (out ) vec4 gl_Position) (function main (signature void (parameters ) ( (declare () vec4 K) (declare () vec4 I) (declare () float ba) (declare () float T) (declare () float S) (declare () vec2 C) (assign (xy) (var_ref C) (expression vec2 * (var_ref p) (constant float (0.500000)) ) ) (declare (temporary ) float abs_retval) (assign (x) (var_ref abs_retval) (expression float abs (swiz z (var_ref v) )) ) (declare (temporary ) vec4 flattening_tmp) (assign (xyzw) (var_ref flattening_tmp) (expression vec4 + (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref r) (constant int (0)) ) (swiz x (var_ref x) )) (expression vec4 * (array_ref (var_ref r) (constant int (1)) ) (swiz y (var_ref x) )) ) (expression vec4 * (array_ref (var_ref r) (constant int (2)) ) (swiz z (var_ref z) )) ) (array_ref (var_ref r) (constant int (3)) ) ) ) (assign (xzw) (var_ref I) (swiz xzw (var_ref flattening_tmp) )) (assign (y) (var_ref I) (expression float neg (swiz y (var_ref flattening_tmp) )) ) (declare (temporary ) vec2 assignment_tmp) (assign (xy) (var_ref assignment_tmp) (expression vec2 * (expression vec2 * (var_ref C) (swiz xy (var_ref I) )) (expression float rcp (swiz w (var_ref flattening_tmp) )) ) ) (declare (temporary ) vec4 flattening_tmp@209) (assign (xyzw) (var_ref flattening_tmp@209) (expression vec4 + (expression vec4 + (expression vec4 + (expression vec4 * (array_ref (var_ref r) (constant int (0)) ) (swiz z (var_ref x) )) (expression vec4 * (array_ref (var_ref r) (constant int (1)) ) (swiz w (var_ref x) )) ) (expression vec4 * (array_ref (var_ref r) (constant int (2)) ) (swiz z (var_ref z) )) ) (array_ref (var_ref r) (constant int (3)) ) ) ) (assign (xzw) (var_ref K) (swiz xzw (var_ref flattening_tmp@209) )) (assign (y) (var_ref K) (expression float neg (swiz y (var_ref flattening_tmp@209) )) ) (declare (temporary ) vec2 assignment_tmp@210) (assign (xy) (var_ref assignment_tmp@210) (expression vec2 * (expression vec2 * (var_ref C) (swiz xy (var_ref K) )) (expression float rcp (swiz w (var_ref flattening_tmp@209) )) ) ) (declare (temporary ) float distance_retval) (declare () vec2 p@211) (assign (xy) (var_ref p@211) (expression vec2 + (var_ref assignment_tmp) (expression vec2 neg (var_ref assignment_tmp@210) ) ) ) (assign (x) (var_ref distance_retval) (expression float sqrt (expression float dot (var_ref p@211) (var_ref p@211) ) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (constant float (0.000000)) ) (assign (y) (var_ref vec_ctor) (var_ref distance_retval) ) (declare (temporary ) bool assignment_tmp@212) (assign (x) (var_ref assignment_tmp@212) (expression bool > (expression float abs (swiz y (array_ref (var_ref r) (constant int (2)) ) )) (constant float (0.001000)) ) ) (assign (z) (var_ref i) (var_ref abs_retval) ) (assign (xy) (var_ref i) (expression vec2 * (swiz xy (var_ref v) )(var_ref q) ) ) (assign (xy) (var_ref i) (expression vec2 + (swiz xy (var_ref i) )(expression float neg (expression float * (expression float + (expression float * (var_ref q) (var_ref abs_retval) ) (expression float neg (var_ref abs_retval) ) ) (constant float (0.500000)) ) ) ) ) (declare () float arg2) (assign (x) (var_ref arg2) (expression float b2f (var_ref assignment_tmp@212) ) ) (assign (xy) (var_ref i) (expression vec2 + (expression vec2 * (swiz xy (var_ref i) )(expression float + (constant float (1.000000)) (expression float neg (var_ref arg2) ) ) ) (expression vec2 * (expression vec2 + (var_ref vec_ctor) (expression float neg (expression float * (expression float + (var_ref distance_retval) (expression float neg (var_ref abs_retval) ) ) (constant float (0.500000)) ) ) ) (var_ref arg2) ) ) ) (assign (xyz) (var_ref i) (expression vec3 * (var_ref i) (constant float (2.000000)) ) ) (assign (x) (var_ref j) (swiz w (var_ref w) )) (assign (x) (var_ref S) (expression float + (expression float * (constant float (2.000000)) (expression float floor (expression float * (swiz x (var_ref y) )(constant float (0.500000)) ) ) ) (constant float (-1.000000)) ) ) (assign (x) (var_ref T) (expression float + (expression float * (expression float fract (expression float * (expression float floor (expression float * (expression float + (swiz x (var_ref y) )(constant float (1.000000)) ) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) (constant float (-4.000000)) ) (constant float (1.000000)) ) ) (declare (temporary ) float assignment_tmp@213) (assign (x) (var_ref assignment_tmp@213) (expression float * (swiz y (var_ref w) )(constant float (0.250000)) ) ) (assign (x) (var_ref o) (var_ref assignment_tmp@213) ) (declare () float arg2@214) (assign (x) (var_ref arg2@214) (expression float b2f (expression bool < (var_ref S) (constant float (0.000000)) ) ) ) (declare (temporary ) vec2 vec_ctor@215) (assign (x) (var_ref vec_ctor@215) (expression float + (expression float + (expression float * (expression float + (swiz y (var_ref i) )(expression float * (constant float (2.000000)) (swiz x (var_ref w) )) ) (expression float + (constant float (1.000000)) (expression float neg (var_ref arg2@214) ) ) ) (expression float * (expression float + (swiz x (var_ref i) )(expression float neg (expression float * (constant float (2.000000)) (swiz x (var_ref w) )) ) ) (var_ref arg2@214) ) ) (swiz z (var_ref w) )) ) (assign (y) (var_ref vec_ctor@215) (expression float * (var_ref T) (var_ref assignment_tmp@213) ) ) (assign (xy) (var_ref h) (var_ref vec_ctor@215) ) (assign (xyz) (var_ref k) (swiz yzw (var_ref y) )) (declare (temporary ) vec2 normalize_retval) (declare () vec2 arg0) (assign (xy) (var_ref arg0) (expression vec2 + (var_ref assignment_tmp@210) (expression vec2 neg (var_ref assignment_tmp) ) ) ) (assign (xy) (var_ref normalize_retval) (expression vec2 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0) ) ) ) ) (declare (temporary ) vec2 vec_ctor@216) (assign (x) (var_ref vec_ctor@216) (expression float neg (swiz y (var_ref normalize_retval) )) ) (assign (y) (var_ref vec_ctor@216) (swiz x (var_ref normalize_retval) )) (assign (x) (var_ref ba) (expression float * (var_ref S) (expression float neg (swiz x (var_ref z) )) ) ) (declare (temporary ) float step_retval) (assign (x) (var_ref step_retval) (expression float b2f (expression bool >= (constant float (0.000000)) (swiz z (var_ref v) )) ) ) (declare (temporary ) float assignment_tmp@217) (assign (x) (var_ref assignment_tmp@217) (expression float * (var_ref ba) (expression float + (expression float + (constant float (1.000000)) (expression float neg (var_ref step_retval) ) ) (expression float * (expression float sign (expression float + (expression float * (var_ref S) (swiz x (var_ref normalize_retval) )) (constant float (0.000100)) ) ) (var_ref step_retval) ) ) ) ) (assign (x) (var_ref ba) (var_ref assignment_tmp@217) ) (declare (temporary ) vec4 vec_ctor@218) (assign (w) (var_ref vec_ctor@218) (constant float (1.000000)) ) (assign (xy) (var_ref vec_ctor@218) (expression vec2 * (expression vec2 + (expression vec2 + (expression vec2 + (var_ref assignment_tmp) (expression vec2 neg (expression vec2 * (swiz x (var_ref w) )(var_ref normalize_retval) ) ) ) (expression vec2 neg (expression vec2 * (expression vec2 * (expression vec2 * (expression float * (var_ref assignment_tmp@213) (constant float (0.500000)) ) (var_ref vec_ctor@216) ) (var_ref T) ) (var_ref S) ) ) ) (expression vec2 + (expression vec2 * (var_ref vec_ctor@216) (var_ref assignment_tmp@217) ) (expression vec2 * (var_ref normalize_retval) (expression float * (var_ref S) (expression float neg (swiz y (var_ref z) )) ) ) ) ) (expression vec2 * (constant vec2 (2.000000 -2.000000)) (expression vec2 rcp (var_ref p) ) ) ) ) (assign (z) (var_ref vec_ctor@218) (var_ref A) ) (assign (zw) (var_ref gl_Position) (swiz zw (var_ref vec_ctor@218) )) (assign (xy) (var_ref gl_Position) (expression vec2 * (swiz xy (var_ref vec_ctor@218) )(expression float b2f (expression bool ! (expression bool || (expression bool || (expression bool < (swiz w (var_ref flattening_tmp) )(constant float (0.000100)) ) (expression bool < (swiz w (var_ref flattening_tmp@209) )(constant float (0.000100)) ) ) (expression bool && (var_ref assignment_tmp@212) (expression bool < (var_ref distance_retval) (var_ref abs_retval) ) ) ) ) ) ) ) (assign (xyz) (var_ref k@219) (var_ref k) ) (assign (x) (var_ref o@220) (var_ref o) ) (assign (xyzw) (var_ref gl_Position@221) (var_ref gl_Position) ) (assign (xy) (var_ref h@222) (var_ref h) ) (assign (xyz) (var_ref i@223) (var_ref i) ) (assign (x) (var_ref j@224) (var_ref j) ) )) ) ) GLSL IR for linked fragment program 36: ( (declare (in ) float o) (declare (uniform ) float w) (declare (uniform ) float m) (declare (in ) float j) (declare (in ) vec3 k) (declare (in ) vec3 i) (declare (in ) vec2 h) (declare (uniform ) sampler2D u) (declare (uniform ) sampler2D s) (declare (uniform ) sampler2D f) (declare (uniform ) sampler2D c) (declare (uniform ) vec2 v) (declare (uniform ) vec2 t) (declare (uniform ) vec2 g) (declare (uniform ) vec2 b) (declare (out ) vec4 gl_FragColor) (function main (signature void (parameters ) ( (declare () vec4 Q) (declare () vec2 z) (declare () vec2 y) (assign (xy) (var_ref y) (var_ref h) ) (assign (xy) (var_ref z) (swiz xy (var_ref i) )) (declare (temporary ) float assignment_tmp) (assign (x) (var_ref assignment_tmp) (expression float * (expression float + (swiz z (var_ref k) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref g) )) ) ) (declare (temporary ) vec2 vec_ctor) (assign (x) (var_ref vec_ctor) (expression float fract (var_ref assignment_tmp) ) ) (assign (y) (var_ref vec_ctor) (expression float * (expression float + (expression float floor (var_ref assignment_tmp) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref g) )) ) ) (declare (temporary ) vec4 floor_retval) (assign (xyzw) (var_ref floor_retval) (expression vec4 floor (expression vec4 + (constant float (0.500000)) (expression vec4 * (constant float (255.000000)) (tex vec4 (var_ref f) (var_ref vec_ctor) 0 1 () )) ) ) ) (declare (temporary ) float W_retval) (assign (x) (var_ref W_retval) (expression float * (constant float (1.032258)) (expression float fract (expression float * (swiz x (var_ref floor_retval) )(constant float (0.031250)) ) ) ) ) (declare (temporary ) bool discard_cond_temp) (assign (x) (var_ref discard_cond_temp) (constant bool (0)) ) (assign (expression bool all_equal (var_ref W_retval) (constant float (0.000000)) ) (x) (var_ref discard_cond_temp) (constant bool (1)) ) (discard (var_ref discard_cond_temp) ) (declare (temporary ) bool assignment_tmp@225) (assign (x) (var_ref assignment_tmp@225) (expression bool > (expression float max (expression float min (expression float floor (expression float * (swiz x (var_ref floor_retval) )(constant float (0.015625)) ) ) (constant float (1.000000)) ) (constant float (0.000000)) ) (constant float (0.500000)) ) ) (declare (temporary ) bool and_tmp) (assign (var_ref assignment_tmp@225) (x) (var_ref and_tmp) (expression bool > (expression float abs (swiz y (var_ref h) )) (expression float * (var_ref o) (constant float (0.500000)) ) ) ) (assign (expression bool ! (var_ref assignment_tmp@225) ) (x) (var_ref and_tmp) (constant bool (0)) ) (declare (temporary ) bool discard_cond_temp@226) (assign (x) (var_ref discard_cond_temp@226) (constant bool (0)) ) (assign (var_ref and_tmp) (x) (var_ref discard_cond_temp@226) (constant bool (1)) ) (discard (var_ref discard_cond_temp@226) ) (declare (temporary ) bool if_to_cond_assign_then) (assign (x) (var_ref if_to_cond_assign_then) (expression bool >= (expression float * (constant float (2.000000)) (expression float fract (expression float * (constant float (0.015625)) (swiz x (var_ref floor_retval) )) ) ) (constant float (1.000000)) ) ) (declare (temporary ) vec2 vec_ctor@227) (assign (var_ref if_to_cond_assign_then) (y) (var_ref vec_ctor@227) (constant float (0.000000)) ) (assign (var_ref if_to_cond_assign_then) (x) (var_ref vec_ctor@227) (swiz z (var_ref i) )) (assign (var_ref if_to_cond_assign_then) (xy) (var_ref y) (expression vec2 + (var_ref vec_ctor@227) (expression vec2 neg (var_ref h) ) ) ) (assign (var_ref if_to_cond_assign_then) (xy) (var_ref z) (expression vec2 + (swiz zz (var_ref i) )(expression vec2 neg (swiz yx (var_ref i) )) ) ) (declare (temporary ) float floor_retval@228) (assign (x) (var_ref floor_retval@228) (expression float floor (swiz x (var_ref y) )) ) (declare (temporary ) vec2 vec_ctor@229) (assign (x) (var_ref vec_ctor@229) (var_ref floor_retval@228) ) (assign (y) (var_ref vec_ctor@229) (var_ref j) ) (declare (temporary ) vec4 texture2D_retval) (assign (xyzw) (var_ref texture2D_retval) (tex vec4 (var_ref s) (expression vec2 * (expression vec2 + (var_ref vec_ctor@229) (constant float (0.500000)) ) (expression vec2 rcp (var_ref t) ) ) 0 1 () )) (declare (temporary ) vec2 assignment_tmp@230) (assign (xy) (var_ref assignment_tmp@230) (expression vec2 + (constant float (128.000000)) (expression vec2 neg (expression vec2 * (constant float (255.000000)) (swiz xy (var_ref texture2D_retval) )) ) ) ) (declare (temporary ) vec2 assignment_tmp@231) (assign (xy) (var_ref assignment_tmp@231) (expression vec2 + (var_ref floor_retval@228) (var_ref assignment_tmp@230) ) ) (declare () vec2 t@232) (assign (x) (var_ref t@232) (expression float b2f (expression bool >= (swiz x (var_ref assignment_tmp@231) )(swiz x (var_ref z) )) ) ) (assign (y) (var_ref t@232) (expression float b2f (expression bool >= (swiz y (var_ref assignment_tmp@231) )(swiz x (var_ref z) )) ) ) (declare () vec2 t@233) (assign (x) (var_ref t@233) (expression float b2f (expression bool >= (swiz y (var_ref z) )(swiz x (var_ref assignment_tmp@231) )) ) ) (assign (y) (var_ref t@233) (expression float b2f (expression bool >= (swiz y (var_ref z) )(swiz y (var_ref assignment_tmp@231) )) ) ) (declare (temporary ) vec2 assignment_tmp@234) (assign (xy) (var_ref assignment_tmp@234) (expression vec2 * (expression vec2 * (var_ref t@232) (var_ref t@233) ) (expression vec2 ceil (swiz xy (var_ref texture2D_retval) )) ) ) (declare (temporary ) bool discard_cond_temp@235) (assign (x) (var_ref discard_cond_temp@235) (constant bool (0)) ) (assign (expression bool all_equal (expression float + (swiz x (var_ref assignment_tmp@234) )(swiz y (var_ref assignment_tmp@234) )) (constant float (0.000000)) ) (x) (var_ref discard_cond_temp@235) (constant bool (1)) ) (discard (var_ref discard_cond_temp@235) ) (declare (temporary ) float conditional_tmp) (assign (var_ref assignment_tmp@225) (x) (var_ref conditional_tmp) (constant float (1.000000)) ) (assign (expression bool ! (var_ref assignment_tmp@225) ) (x) (var_ref conditional_tmp) (constant float (0.000000)) ) (declare (temporary ) vec2 vec_ctor@236) (assign (x) (var_ref vec_ctor@236) (expression float + (swiz x (var_ref assignment_tmp@231) )(var_ref conditional_tmp) ) ) (assign (y) (var_ref vec_ctor@236) (var_ref j) ) (declare (temporary ) vec2 conditional_tmp@237) (declare (temporary ) vec2 vec_ctor@238) (assign (var_ref assignment_tmp@225) (x) (var_ref vec_ctor@238) (expression float neg (swiz y (var_ref y) )) ) (assign (var_ref assignment_tmp@225) (y) (var_ref vec_ctor@238) (expression float neg (swiz x (var_ref assignment_tmp@230) )) ) (assign (var_ref assignment_tmp@225) (xy) (var_ref conditional_tmp@237) (var_ref vec_ctor@238) ) (declare (temporary ) bool if_to_cond_assign_else) (assign (x) (var_ref if_to_cond_assign_else) (expression bool ! (var_ref assignment_tmp@225) ) ) (declare (temporary ) vec2 vec_ctor@239) (assign (var_ref if_to_cond_assign_else) (x) (var_ref vec_ctor@239) (expression float neg (swiz x (var_ref assignment_tmp@230) )) ) (assign (var_ref if_to_cond_assign_else) (y) (var_ref vec_ctor@239) (swiz y (var_ref y) )) (assign (var_ref if_to_cond_assign_else) (xy) (var_ref conditional_tmp@237) (var_ref vec_ctor@239) ) (declare (temporary ) float conditional_tmp@240) (assign (var_ref assignment_tmp@225) (x) (var_ref conditional_tmp@240) (constant float (1.000000)) ) (assign (expression bool ! (var_ref assignment_tmp@225) ) (x) (var_ref conditional_tmp@240) (constant float (0.000000)) ) (declare (temporary ) vec2 vec_ctor@241) (assign (x) (var_ref vec_ctor@241) (expression float + (swiz y (var_ref assignment_tmp@231) )(var_ref conditional_tmp@240) ) ) (assign (y) (var_ref vec_ctor@241) (var_ref j) ) (declare (temporary ) vec2 conditional_tmp@242) (declare (temporary ) vec2 vec_ctor@243) (assign (var_ref assignment_tmp@225) (x) (var_ref vec_ctor@243) (expression float neg (swiz y (var_ref y) )) ) (assign (var_ref assignment_tmp@225) (y) (var_ref vec_ctor@243) (expression float neg (swiz y (var_ref assignment_tmp@230) )) ) (assign (var_ref assignment_tmp@225) (xy) (var_ref conditional_tmp@242) (var_ref vec_ctor@243) ) (declare (temporary ) bool if_to_cond_assign_else@244) (assign (x) (var_ref if_to_cond_assign_else@244) (expression bool ! (var_ref assignment_tmp@225) ) ) (declare (temporary ) vec2 vec_ctor@245) (assign (var_ref if_to_cond_assign_else@244) (x) (var_ref vec_ctor@245) (expression float neg (swiz y (var_ref assignment_tmp@230) )) ) (assign (var_ref if_to_cond_assign_else@244) (y) (var_ref vec_ctor@245) (swiz y (var_ref y) )) (assign (var_ref if_to_cond_assign_else@244) (xy) (var_ref conditional_tmp@242) (var_ref vec_ctor@245) ) (declare (temporary ) vec2 vec_ctor@246) (assign (x) (var_ref vec_ctor@246) (swiz w (tex vec4 (var_ref u) (expression vec2 * (expression vec2 + (expression vec2 + (expression vec2 * (constant float (1020.000000)) (swiz zw (tex vec4 (var_ref s) (expression vec2 * (expression vec2 + (var_ref vec_ctor@236) (constant float (0.500000)) ) (expression vec2 rcp (var_ref t) ) ) 0 1 () ))) (constant float (1.000000)) ) (var_ref conditional_tmp@237) ) (expression vec2 rcp (var_ref v) ) ) 0 1 () ))) (assign (y) (var_ref vec_ctor@246) (swiz w (tex vec4 (var_ref u) (expression vec2 * (expression vec2 + (expression vec2 + (expression vec2 * (constant float (1020.000000)) (swiz zw (tex vec4 (var_ref s) (expression vec2 * (expression vec2 + (var_ref vec_ctor@241) (constant float (0.500000)) ) (expression vec2 rcp (var_ref t) ) ) 0 1 () ))) (constant float (1.000000)) ) (var_ref conditional_tmp@242) ) (expression vec2 rcp (var_ref v) ) ) 0 1 () ))) (declare (temporary ) vec2 assignment_tmp@247) (assign (xy) (var_ref assignment_tmp@247) (expression vec2 * (var_ref vec_ctor@246) (var_ref assignment_tmp@234) ) ) (declare (temporary ) float clamp_retval) (assign (x) (var_ref clamp_retval) (expression float max (expression float min (expression float + (expression float + (expression float * (constant float (10.625000)) (expression float + (expression float max (swiz x (var_ref assignment_tmp@247) )(swiz y (var_ref assignment_tmp@247) )) (constant float (-0.500000)) ) ) (constant float (0.500000)) ) (var_ref w) ) (constant float (1.000000)) ) (constant float (0.000000)) ) ) (declare (temporary ) bool discard_cond_temp@248) (assign (x) (var_ref discard_cond_temp@248) (constant bool (0)) ) (assign (expression bool all_equal (var_ref clamp_retval) (constant float (0.000000)) ) (x) (var_ref discard_cond_temp@248) (constant bool (1)) ) (discard (var_ref discard_cond_temp@248) ) (declare (temporary ) float assignment_tmp@249) (assign (x) (var_ref assignment_tmp@249) (expression float * (expression float + (swiz y (var_ref k) )(constant float (0.500000)) ) (expression float rcp (swiz x (var_ref b) )) ) ) (declare (temporary ) vec2 vec_ctor@250) (assign (x) (var_ref vec_ctor@250) (expression float fract (var_ref assignment_tmp@249) ) ) (assign (y) (var_ref vec_ctor@250) (expression float * (expression float + (expression float + (expression float * (constant float (26.000000)) (expression float floor (var_ref assignment_tmp@249) ) ) (var_ref m) ) (constant float (0.500000)) ) (expression float rcp (swiz y (var_ref b) )) ) ) (declare (temporary ) vec4 texture2D_retval@251) (assign (xyzw) (var_ref texture2D_retval@251) (tex vec4 (var_ref c) (var_ref vec_ctor@250) 0 1 () )) (assign (xyz) (var_ref Q) (swiz xyz (var_ref texture2D_retval@251) )) (assign (w) (var_ref Q) (expression float * (swiz w (var_ref texture2D_retval@251) )(var_ref W_retval) ) ) (assign (w) (var_ref Q) (expression float * (swiz w (var_ref Q) )(var_ref clamp_retval) ) ) (assign (xyzw) (var_ref gl_FragColor) (var_ref Q) ) (assign (xyzw) (var_ref gl_FragColor@252) (var_ref gl_FragColor) ) )) ) ) r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL IN[5] DCL OUT[0], POSITION DCL OUT[1], GENERIC[12] DCL OUT[2], GENERIC[13] DCL OUT[3], GENERIC[14] DCL OUT[4], GENERIC[15] DCL OUT[5], GENERIC[16] DCL CONST[0..5] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL DCL TEMP[7], LOCAL DCL TEMP[8], LOCAL DCL TEMP[9], LOCAL DCL TEMP[10], LOCAL DCL TEMP[11], LOCAL DCL TEMP[12], LOCAL DCL TEMP[13], LOCAL DCL TEMP[14], LOCAL DCL TEMP[15], LOCAL DCL TEMP[16], LOCAL IMM FLT32 { 0.5000, 0.0000, 0.0010, 1.0000} IMM FLT32 { 2.0000, -1.0000, -4.0000, 0.2500} IMM FLT32 { 0.0001, 2.0000, -2.0000, 0.0000} 0: MUL TEMP[0].xy, CONST[5].xyyy, IMM[0].xxxx 1: ABS TEMP[1].x, IN[5].zzzz 2: MUL TEMP[2], CONST[0], IN[3].xxxx 3: MAD TEMP[2], CONST[1], IN[3].yyyy, TEMP[2] 4: MAD TEMP[2], CONST[2], IN[1].zzzz, TEMP[2] 5: ADD TEMP[2], TEMP[2], CONST[3] 6: MOV TEMP[3].x, TEMP[2].xxzw 7: MOV TEMP[3].y, -TEMP[2].yyyy 8: MUL TEMP[3].xy, TEMP[0].xyyy, TEMP[3].xyyy 9: RCP TEMP[4].x, TEMP[2].wwww 10: MUL TEMP[3].xy, TEMP[3].xyyy, TEMP[4].xxxx 11: MUL TEMP[4], CONST[0], IN[3].zzzz 12: MAD TEMP[4], CONST[1], IN[3].wwww, TEMP[4] 13: MAD TEMP[4], CONST[2], IN[1].zzzz, TEMP[4] 14: ADD TEMP[4], TEMP[4], CONST[3] 15: MOV TEMP[5].x, TEMP[4].xxzw 16: MOV TEMP[5].y, -TEMP[4].yyyy 17: MUL TEMP[0].xy, TEMP[0].xyyy, TEMP[5].xyyy 18: RCP TEMP[5].x, TEMP[4].wwww 19: MUL TEMP[0].xy, TEMP[0].xyyy, TEMP[5].xxxx 20: ADD TEMP[5].xy, TEMP[3].xyyy, -TEMP[0].xyyy 21: DP2 TEMP[5].x, TEMP[5].xyyy, TEMP[5].xyyy 22: RSQ TEMP[6].x, TEMP[5].xxxx 23: MUL TEMP[6].x, TEMP[6].xxxx, TEMP[5].xxxx 24: CMP TEMP[5].x, -TEMP[5].xxxx, TEMP[6].xxxx, IMM[0].yyyy 25: MOV TEMP[6].x, IMM[0].yyyy 26: MOV TEMP[6].y, TEMP[5].xxxx 27: ABS TEMP[7].x, CONST[2].yyyy 28: SLT TEMP[7].x, IMM[0].zzzz, TEMP[7].xxxx 29: MOV TEMP[8].z, TEMP[1].xxxx 30: MUL TEMP[8].xy, IN[5].xyyy, CONST[4].xxxx 31: MAD TEMP[9].x, CONST[4].xxxx, TEMP[1].xxxx, -TEMP[1].xxxx 32: MUL TEMP[9].x, TEMP[9].xxxx, IMM[0].xxxx 33: ADD TEMP[8].xy, TEMP[8].xyyy, -TEMP[9].xxxx 34: ADD TEMP[9].x, TEMP[5].xxxx, -TEMP[1].xxxx 35: MUL TEMP[9].x, TEMP[9].xxxx, IMM[0].xxxx 36: ADD TEMP[6].xy, TEMP[6].xyyy, -TEMP[9].xxxx 37: ADD TEMP[9].x, IMM[0].wwww, -TEMP[7].xxxx 38: MUL TEMP[9].xy, TEMP[8].xyyy, TEMP[9].xxxx 39: MAD TEMP[8].xy, TEMP[6].xyyy, TEMP[7].xxxx, TEMP[9].xyyy 40: MUL TEMP[8].xyz, TEMP[8].xyzz, IMM[1].xxxx 41: MUL TEMP[6].x, IN[2].xxxx, IMM[0].xxxx 42: FLR TEMP[6].x, TEMP[6].xxxx 43: MAD TEMP[6].x, IMM[1].xxxx, TEMP[6].xxxx, IMM[1].yyyy 44: ADD TEMP[9].x, IN[2].xxxx, IMM[0].wwww 45: MUL TEMP[9].x, TEMP[9].xxxx, IMM[0].xxxx 46: FLR TEMP[9].x, TEMP[9].xxxx 47: MUL TEMP[9].x, TEMP[9].xxxx, IMM[0].xxxx 48: FRC TEMP[9].x, TEMP[9].xxxx 49: MAD TEMP[9].x, TEMP[9].xxxx, IMM[1].zzzz, IMM[0].wwww 50: MUL TEMP[10].x, IN[4].yyyy, IMM[1].wwww 51: SLT TEMP[11].x, TEMP[6].xxxx, IMM[0].yyyy 52: MUL TEMP[12].x, IMM[1].xxxx, IN[4].xxxx 53: ADD TEMP[12].x, TEMP[8].xxxx, -TEMP[12].xxxx 54: MAD TEMP[13].x, IMM[1].xxxx, IN[4].xxxx, TEMP[8].yyyy 55: ADD TEMP[14].x, IMM[0].wwww, -TEMP[11].xxxx 56: MUL TEMP[13].x, TEMP[13].xxxx, TEMP[14].xxxx 57: MAD TEMP[11].x, TEMP[12].xxxx, TEMP[11].xxxx, TEMP[13].xxxx 58: ADD TEMP[11].x, TEMP[11].xxxx, IN[4].zzzz 59: MUL TEMP[12].x, TEMP[9].xxxx, TEMP[10].xxxx 60: MOV TEMP[11].y, TEMP[12].xxxx 61: ADD TEMP[0].xy, TEMP[0].xyyy, -TEMP[3].xyyy 62: DP2 TEMP[12].x, TEMP[0].xyyy, TEMP[0].xyyy 63: RSQ TEMP[12].x, TEMP[12].xxxx 64: MUL TEMP[0].xy, TEMP[0].xyyy, TEMP[12].xxxx 65: MOV TEMP[12].x, -TEMP[0].yyyy 66: MOV TEMP[12].y, TEMP[0].xxxx 67: MUL TEMP[13].x, TEMP[6].xxxx, -IN[1].xxxx 68: SGE TEMP[14].x, IMM[0].yyyy, IN[5].zzzz 69: MAD TEMP[15].x, TEMP[6].xxxx, TEMP[0].xxxx, IMM[2].xxxx 70: SSG TEMP[15].x, TEMP[15].xxxx 71: ADD TEMP[16].x, IMM[0].wwww, -TEMP[14].xxxx 72: MAD TEMP[14].x, TEMP[15].xxxx, TEMP[14].xxxx, TEMP[16].xxxx 73: MUL TEMP[13].x, TEMP[13].xxxx, TEMP[14].xxxx 74: MOV TEMP[14].w, IMM[0].wwww 75: MUL TEMP[15].xy, IN[4].xxxx, TEMP[0].xyyy 76: ADD TEMP[3].xy, TEMP[3].xyyy, -TEMP[15].xyyy 77: MUL TEMP[15].x, TEMP[10].xxxx, IMM[0].xxxx 78: MUL TEMP[15].xy, TEMP[15].xxxx, TEMP[12].xyyy 79: MUL TEMP[9].xy, TEMP[15].xyyy, TEMP[9].xxxx 80: MUL TEMP[9].xy, TEMP[9].xyyy, TEMP[6].xxxx 81: ADD TEMP[3].xy, TEMP[3].xyyy, -TEMP[9].xyyy 82: MUL TEMP[6].x, TEMP[6].xxxx, -IN[1].yyyy 83: MUL TEMP[9].xy, TEMP[12].xyyy, TEMP[13].xxxx 84: MAD TEMP[0].xy, TEMP[0].xyyy, TEMP[6].xxxx, TEMP[9].xyyy 85: ADD TEMP[0].xy, TEMP[3].xyyy, TEMP[0].xyyy 86: RCP TEMP[3].x, CONST[5].xxxx 87: RCP TEMP[3].y, CONST[5].yyyy 88: MUL TEMP[3].xy, IMM[2].yzzz, TEMP[3].xyyy 89: MUL TEMP[14].xy, TEMP[0].xyyy, TEMP[3].xyyy 90: MOV TEMP[14].z, IN[0].xxxx 91: MOV TEMP[0].zw, TEMP[14].wwzw 92: SLT TEMP[2].x, TEMP[2].wwww, IMM[2].xxxx 93: SLT TEMP[3].x, TEMP[4].wwww, IMM[2].xxxx 94: ADD TEMP[2].x, TEMP[2].xxxx, TEMP[3].xxxx 95: SLT TEMP[2].x, -TEMP[2].xxxx, IMM[0].yyyy 96: SLT TEMP[1].x, TEMP[5].xxxx, TEMP[1].xxxx 97: MUL TEMP[1].x, TEMP[7].xxxx, TEMP[1].xxxx 98: ADD TEMP[1].x, TEMP[2].xxxx, TEMP[1].xxxx 99: SLT TEMP[1].x, -TEMP[1].xxxx, IMM[0].yyyy 100: ADD TEMP[1].x, -TEMP[1].xxxx, IMM[0].wwww 101: MUL TEMP[0].xy, TEMP[14].xyyy, TEMP[1].xxxx 102: MOV OUT[3].xyz, IN[2].yzwy 103: MOV OUT[1], TEMP[10].xxxx 104: MOV OUT[0], TEMP[0] 105: MOV OUT[5].xy, TEMP[11].xyxx 106: MOV OUT[4].xyz, TEMP[8].xyzx 107: MOV OUT[2], IN[4].wwww 108: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0].xy, const[5].xyyy, const[6].xxxx; 1: ABS temp[1].x, input[5].zzzz; 2: MUL temp[2], const[0], input[3].xxxx; 3: MAD temp[2], const[1], input[3].yyyy, temp[2]; 4: MAD temp[2], const[2], input[1].zzzz, temp[2]; 5: ADD temp[2], temp[2], const[3]; 6: MOV temp[3].x, temp[2].xxzw; 7: MOV temp[3].y, -temp[2].yyyy; 8: MUL temp[3].xy, temp[0].xyyy, temp[3].xyyy; 9: RCP temp[4].x, temp[2].wwww; 10: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 11: MUL temp[4], const[0], input[3].zzzz; 12: MAD temp[4], const[1], input[3].wwww, temp[4]; 13: MAD temp[4], const[2], input[1].zzzz, temp[4]; 14: ADD temp[4], temp[4], const[3]; 15: MOV temp[5].x, temp[4].xxzw; 16: MOV temp[5].y, -temp[4].yyyy; 17: MUL temp[0].xy, temp[0].xyyy, temp[5].xyyy; 18: RCP temp[5].x, temp[4].wwww; 19: MUL temp[0].xy, temp[0].xyyy, temp[5].xxxx; 20: ADD temp[5].xy, temp[3].xyyy, -temp[0].xyyy; 21: DP2 temp[5].x, temp[5].xyyy, temp[5].xyyy; 22: RSQ temp[6].x, temp[5].xxxx; 23: MUL temp[6].x, temp[6].xxxx, temp[5].xxxx; 24: CMP temp[5].x, -temp[5].xxxx, temp[6].xxxx, const[6].yyyy; 25: MOV temp[6].x, const[6].yyyy; 26: MOV temp[6].y, temp[5].xxxx; 27: ABS temp[7].x, const[2].yyyy; 28: SLT temp[7].x, const[6].zzzz, temp[7].xxxx; 29: MOV temp[8].z, temp[1].xxxx; 30: MUL temp[8].xy, input[5].xyyy, const[4].xxxx; 31: MAD temp[9].x, const[4].xxxx, temp[1].xxxx, -temp[1].xxxx; 32: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 33: ADD temp[8].xy, temp[8].xyyy, -temp[9].xxxx; 34: ADD temp[9].x, temp[5].xxxx, -temp[1].xxxx; 35: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 36: ADD temp[6].xy, temp[6].xyyy, -temp[9].xxxx; 37: ADD temp[9].x, const[6].wwww, -temp[7].xxxx; 38: MUL temp[9].xy, temp[8].xyyy, temp[9].xxxx; 39: MAD temp[8].xy, temp[6].xyyy, temp[7].xxxx, temp[9].xyyy; 40: MUL temp[8].xyz, temp[8].xyzz, const[7].xxxx; 41: MUL temp[6].x, input[2].xxxx, const[6].xxxx; 42: FLR temp[6].x, temp[6].xxxx; 43: MAD temp[6].x, const[7].xxxx, temp[6].xxxx, const[7].yyyy; 44: ADD temp[9].x, input[2].xxxx, const[6].wwww; 45: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 46: FLR temp[9].x, temp[9].xxxx; 47: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 48: FRC temp[9].x, temp[9].xxxx; 49: MAD temp[9].x, temp[9].xxxx, const[7].zzzz, const[6].wwww; 50: MUL temp[10].x, input[4].yyyy, const[7].wwww; 51: SLT temp[11].x, temp[6].xxxx, const[6].yyyy; 52: MUL temp[12].x, const[7].xxxx, input[4].xxxx; 53: ADD temp[12].x, temp[8].xxxx, -temp[12].xxxx; 54: MAD temp[13].x, const[7].xxxx, input[4].xxxx, temp[8].yyyy; 55: ADD temp[14].x, const[6].wwww, -temp[11].xxxx; 56: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 57: MAD temp[11].x, temp[12].xxxx, temp[11].xxxx, temp[13].xxxx; 58: ADD temp[11].x, temp[11].xxxx, input[4].zzzz; 59: MUL temp[12].x, temp[9].xxxx, temp[10].xxxx; 60: MOV temp[11].y, temp[12].xxxx; 61: ADD temp[0].xy, temp[0].xyyy, -temp[3].xyyy; 62: DP2 temp[12].x, temp[0].xyyy, temp[0].xyyy; 63: RSQ temp[12].x, temp[12].xxxx; 64: MUL temp[0].xy, temp[0].xyyy, temp[12].xxxx; 65: MOV temp[12].x, -temp[0].yyyy; 66: MOV temp[12].y, temp[0].xxxx; 67: MUL temp[13].x, temp[6].xxxx, -input[1].xxxx; 68: SGE temp[14].x, const[6].yyyy, input[5].zzzz; 69: MAD temp[15].x, temp[6].xxxx, temp[0].xxxx, const[8].xxxx; 70: SSG temp[15].x, temp[15].xxxx; 71: ADD temp[16].x, const[6].wwww, -temp[14].xxxx; 72: MAD temp[14].x, temp[15].xxxx, temp[14].xxxx, temp[16].xxxx; 73: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 74: MOV temp[14].w, const[6].wwww; 75: MUL temp[15].xy, input[4].xxxx, temp[0].xyyy; 76: ADD temp[3].xy, temp[3].xyyy, -temp[15].xyyy; 77: MUL temp[15].x, temp[10].xxxx, const[6].xxxx; 78: MUL temp[15].xy, temp[15].xxxx, temp[12].xyyy; 79: MUL temp[9].xy, temp[15].xyyy, temp[9].xxxx; 80: MUL temp[9].xy, temp[9].xyyy, temp[6].xxxx; 81: ADD temp[3].xy, temp[3].xyyy, -temp[9].xyyy; 82: MUL temp[6].x, temp[6].xxxx, -input[1].yyyy; 83: MUL temp[9].xy, temp[12].xyyy, temp[13].xxxx; 84: MAD temp[0].xy, temp[0].xyyy, temp[6].xxxx, temp[9].xyyy; 85: ADD temp[0].xy, temp[3].xyyy, temp[0].xyyy; 86: RCP temp[3].x, const[5].xxxx; 87: RCP temp[3].y, const[5].yyyy; 88: MUL temp[3].xy, const[8].yzzz, temp[3].xyyy; 89: MUL temp[14].xy, temp[0].xyyy, temp[3].xyyy; 90: MOV temp[14].z, input[0].xxxx; 91: MOV temp[0].zw, temp[14].wwzw; 92: SLT temp[2].x, temp[2].wwww, const[8].xxxx; 93: SLT temp[3].x, temp[4].wwww, const[8].xxxx; 94: ADD temp[2].x, temp[2].xxxx, temp[3].xxxx; 95: SLT temp[2].x, -temp[2].xxxx, const[6].yyyy; 96: SLT temp[1].x, temp[5].xxxx, temp[1].xxxx; 97: MUL temp[1].x, temp[7].xxxx, temp[1].xxxx; 98: ADD temp[1].x, temp[2].xxxx, temp[1].xxxx; 99: SLT temp[1].x, -temp[1].xxxx, const[6].yyyy; 100: ADD temp[1].x, -temp[1].xxxx, const[6].wwww; 101: MUL temp[0].xy, temp[14].xyyy, temp[1].xxxx; 102: MOV output[3].xyz, input[2].yzwy; 103: MOV output[1], temp[10].xxxx; 104: MOV temp[17], temp[0]; 105: MOV output[5].xy, temp[11].xyxx; 106: MOV output[4].xyz, temp[8].xyzx; 107: MOV output[2], input[4].wwww; 108: MOV output[0], temp[17]; 109: MOV output[6], temp[17]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0].xy, const[5].xyyy, const[6].xxxx; 1: ABS temp[1].x, input[5].zzzz; 2: MUL temp[2], const[0], input[3].xxxx; 3: MAD temp[2], const[1], input[3].yyyy, temp[2]; 4: MAD temp[2], const[2], input[1].zzzz, temp[2]; 5: ADD temp[2], temp[2], const[3]; 6: MOV temp[3].x, temp[2].xxzw; 7: MOV temp[3].y, -temp[2].yyyy; 8: MUL temp[3].xy, temp[0].xyyy, temp[3].xyyy; 9: RCP temp[4].x, temp[2].wwww; 10: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 11: MUL temp[4], const[0], input[3].zzzz; 12: MAD temp[4], const[1], input[3].wwww, temp[4]; 13: MAD temp[4], const[2], input[1].zzzz, temp[4]; 14: ADD temp[4], temp[4], const[3]; 15: MOV temp[5].x, temp[4].xxzw; 16: MOV temp[5].y, -temp[4].yyyy; 17: MUL temp[0].xy, temp[0].xyyy, temp[5].xyyy; 18: RCP temp[5].x, temp[4].wwww; 19: MUL temp[0].xy, temp[0].xyyy, temp[5].xxxx; 20: ADD temp[5].xy, temp[3].xyyy, -temp[0].xyyy; 21: DP2 temp[5].x, temp[5].xyyy, temp[5].xyyy; 22: RSQ temp[6].x, temp[5].xxxx; 23: MUL temp[6].x, temp[6].xxxx, temp[5].xxxx; 24: CMP temp[5].x, -temp[5].xxxx, temp[6].xxxx, const[6].yyyy; 25: MOV temp[6].x, const[6].yyyy; 26: MOV temp[6].y, temp[5].xxxx; 27: ABS temp[7].x, const[2].yyyy; 28: SLT temp[7].x, const[6].zzzz, temp[7].xxxx; 29: MOV temp[8].z, temp[1].xxxx; 30: MUL temp[8].xy, input[5].xyyy, const[4].xxxx; 31: MAD temp[9].x, const[4].xxxx, temp[1].xxxx, -temp[1].xxxx; 32: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 33: ADD temp[8].xy, temp[8].xyyy, -temp[9].xxxx; 34: ADD temp[9].x, temp[5].xxxx, -temp[1].xxxx; 35: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 36: ADD temp[6].xy, temp[6].xyyy, -temp[9].xxxx; 37: ADD temp[9].x, const[6].wwww, -temp[7].xxxx; 38: MUL temp[9].xy, temp[8].xyyy, temp[9].xxxx; 39: MAD temp[8].xy, temp[6].xyyy, temp[7].xxxx, temp[9].xyyy; 40: MUL temp[8].xyz, temp[8].xyzz, const[7].xxxx; 41: MUL temp[6].x, input[2].xxxx, const[6].xxxx; 42: FLR temp[6].x, temp[6].xxxx; 43: MAD temp[6].x, const[7].xxxx, temp[6].xxxx, const[7].yyyy; 44: ADD temp[9].x, input[2].xxxx, const[6].wwww; 45: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 46: FLR temp[9].x, temp[9].xxxx; 47: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 48: FRC temp[9].x, temp[9].xxxx; 49: MAD temp[9].x, temp[9].xxxx, const[7].zzzz, const[6].wwww; 50: MUL temp[10].x, input[4].yyyy, const[7].wwww; 51: SLT temp[11].x, temp[6].xxxx, const[6].yyyy; 52: MUL temp[12].x, const[7].xxxx, input[4].xxxx; 53: ADD temp[12].x, temp[8].xxxx, -temp[12].xxxx; 54: MAD temp[13].x, const[7].xxxx, input[4].xxxx, temp[8].yyyy; 55: ADD temp[14].x, const[6].wwww, -temp[11].xxxx; 56: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 57: MAD temp[11].x, temp[12].xxxx, temp[11].xxxx, temp[13].xxxx; 58: ADD temp[11].x, temp[11].xxxx, input[4].zzzz; 59: MUL temp[12].x, temp[9].xxxx, temp[10].xxxx; 60: MOV temp[11].y, temp[12].xxxx; 61: ADD temp[0].xy, temp[0].xyyy, -temp[3].xyyy; 62: DP2 temp[12].x, temp[0].xyyy, temp[0].xyyy; 63: RSQ temp[12].x, temp[12].xxxx; 64: MUL temp[0].xy, temp[0].xyyy, temp[12].xxxx; 65: MOV temp[12].x, -temp[0].yyyy; 66: MOV temp[12].y, temp[0].xxxx; 67: MUL temp[13].x, temp[6].xxxx, -input[1].xxxx; 68: SGE temp[14].x, const[6].yyyy, input[5].zzzz; 69: MAD temp[15].x, temp[6].xxxx, temp[0].xxxx, const[8].xxxx; 70: SSG temp[15].x, temp[15].xxxx; 71: ADD temp[16].x, const[6].wwww, -temp[14].xxxx; 72: MAD temp[14].x, temp[15].xxxx, temp[14].xxxx, temp[16].xxxx; 73: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 74: MOV temp[14].w, const[6].wwww; 75: MUL temp[15].xy, input[4].xxxx, temp[0].xyyy; 76: ADD temp[3].xy, temp[3].xyyy, -temp[15].xyyy; 77: MUL temp[15].x, temp[10].xxxx, const[6].xxxx; 78: MUL temp[15].xy, temp[15].xxxx, temp[12].xyyy; 79: MUL temp[9].xy, temp[15].xyyy, temp[9].xxxx; 80: MUL temp[9].xy, temp[9].xyyy, temp[6].xxxx; 81: ADD temp[3].xy, temp[3].xyyy, -temp[9].xyyy; 82: MUL temp[6].x, temp[6].xxxx, -input[1].yyyy; 83: MUL temp[9].xy, temp[12].xyyy, temp[13].xxxx; 84: MAD temp[0].xy, temp[0].xyyy, temp[6].xxxx, temp[9].xyyy; 85: ADD temp[0].xy, temp[3].xyyy, temp[0].xyyy; 86: RCP temp[3].x, const[5].xxxx; 87: RCP temp[3].y, const[5].yyyy; 88: MUL temp[3].xy, const[8].yzzz, temp[3].xyyy; 89: MUL temp[14].xy, temp[0].xyyy, temp[3].xyyy; 90: MOV temp[14].z, input[0].xxxx; 91: MOV temp[0].zw, temp[14].wwzw; 92: SLT temp[2].x, temp[2].wwww, const[8].xxxx; 93: SLT temp[3].x, temp[4].wwww, const[8].xxxx; 94: ADD temp[2].x, temp[2].xxxx, temp[3].xxxx; 95: SLT temp[2].x, -temp[2].xxxx, const[6].yyyy; 96: SLT temp[1].x, temp[5].xxxx, temp[1].xxxx; 97: MUL temp[1].x, temp[7].xxxx, temp[1].xxxx; 98: ADD temp[1].x, temp[2].xxxx, temp[1].xxxx; 99: SLT temp[1].x, -temp[1].xxxx, const[6].yyyy; 100: ADD temp[1].x, -temp[1].xxxx, const[6].wwww; 101: MUL temp[0].xy, temp[14].xyyy, temp[1].xxxx; 102: MOV output[3].xyz, input[2].yzwy; 103: MOV output[1], temp[10].xxxx; 104: MOV temp[17], temp[0]; 105: MOV output[5].xy, temp[11].xyxx; 106: MOV output[4].xyz, temp[8].xyzx; 107: MOV output[2], input[4].wwww; 108: MOV output[0], temp[17]; 109: MOV output[6], temp[17]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0].xy, const[5].xyyy, const[6].xxxx; 1: ABS temp[1].x, input[5].zzzz; 2: MUL temp[2], const[0], input[3].xxxx; 3: MAD temp[2], const[1], input[3].yyyy, temp[2]; 4: MAD temp[2], const[2], input[1].zzzz, temp[2]; 5: ADD temp[2], temp[2], const[3]; 6: MOV temp[3].x, temp[2].xxzw; 7: MOV temp[3].y, -temp[2].yyyy; 8: MUL temp[3].xy, temp[0].xyyy, temp[3].xyyy; 9: RCP temp[4].x, temp[2].wwww; 10: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 11: MUL temp[4], const[0], input[3].zzzz; 12: MAD temp[4], const[1], input[3].wwww, temp[4]; 13: MAD temp[4], const[2], input[1].zzzz, temp[4]; 14: ADD temp[4], temp[4], const[3]; 15: MOV temp[5].x, temp[4].xxzw; 16: MOV temp[5].y, -temp[4].yyyy; 17: MUL temp[0].xy, temp[0].xyyy, temp[5].xyyy; 18: RCP temp[5].x, temp[4].wwww; 19: MUL temp[0].xy, temp[0].xyyy, temp[5].xxxx; 20: ADD temp[5].xy, temp[3].xyyy, -temp[0].xyyy; 21: DP2 temp[5].x, temp[5].xyyy, temp[5].xyyy; 22: RSQ temp[6].x, temp[5].xxxx; 23: MUL temp[6].x, temp[6].xxxx, temp[5].xxxx; 24: CMP temp[5].x, -temp[5].xxxx, temp[6].xxxx, const[6].yyyy; 25: MOV temp[6].x, const[6].yyyy; 26: MOV temp[6].y, temp[5].xxxx; 27: ABS temp[7].x, const[2].yyyy; 28: SLT temp[7].x, const[6].zzzz, temp[7].xxxx; 29: MOV temp[8].z, temp[1].xxxx; 30: MUL temp[8].xy, input[5].xyyy, const[4].xxxx; 31: MAD temp[9].x, const[4].xxxx, temp[1].xxxx, -temp[1].xxxx; 32: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 33: ADD temp[8].xy, temp[8].xyyy, -temp[9].xxxx; 34: ADD temp[9].x, temp[5].xxxx, -temp[1].xxxx; 35: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 36: ADD temp[6].xy, temp[6].xyyy, -temp[9].xxxx; 37: ADD temp[9].x, const[6].wwww, -temp[7].xxxx; 38: MUL temp[9].xy, temp[8].xyyy, temp[9].xxxx; 39: MAD temp[8].xy, temp[6].xyyy, temp[7].xxxx, temp[9].xyyy; 40: MUL temp[8].xyz, temp[8].xyzz, const[7].xxxx; 41: MUL temp[6].x, input[2].xxxx, const[6].xxxx; 42: FLR temp[6].x, temp[6].xxxx; 43: MAD temp[6].x, const[7].xxxx, temp[6].xxxx, const[7].yyyy; 44: ADD temp[9].x, input[2].xxxx, const[6].wwww; 45: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 46: FLR temp[9].x, temp[9].xxxx; 47: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 48: FRC temp[9].x, temp[9].xxxx; 49: MAD temp[9].x, temp[9].xxxx, const[7].zzzz, const[6].wwww; 50: MUL temp[10].x, input[4].yyyy, const[7].wwww; 51: SLT temp[11].x, temp[6].xxxx, const[6].yyyy; 52: MUL temp[12].x, const[7].xxxx, input[4].xxxx; 53: ADD temp[12].x, temp[8].xxxx, -temp[12].xxxx; 54: MAD temp[13].x, const[7].xxxx, input[4].xxxx, temp[8].yyyy; 55: ADD temp[14].x, const[6].wwww, -temp[11].xxxx; 56: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 57: MAD temp[11].x, temp[12].xxxx, temp[11].xxxx, temp[13].xxxx; 58: ADD temp[11].x, temp[11].xxxx, input[4].zzzz; 59: MUL temp[12].x, temp[9].xxxx, temp[10].xxxx; 60: MOV temp[11].y, temp[12].xxxx; 61: ADD temp[0].xy, temp[0].xyyy, -temp[3].xyyy; 62: DP2 temp[12].x, temp[0].xyyy, temp[0].xyyy; 63: RSQ temp[12].x, temp[12].xxxx; 64: MUL temp[0].xy, temp[0].xyyy, temp[12].xxxx; 65: MOV temp[12].x, -temp[0].yyyy; 66: MOV temp[12].y, temp[0].xxxx; 67: MUL temp[13].x, temp[6].xxxx, -input[1].xxxx; 68: SGE temp[14].x, const[6].yyyy, input[5].zzzz; 69: MAD temp[15].x, temp[6].xxxx, temp[0].xxxx, const[8].xxxx; 70: SSG temp[15].x, temp[15].xxxx; 71: ADD temp[16].x, const[6].wwww, -temp[14].xxxx; 72: MAD temp[14].x, temp[15].xxxx, temp[14].xxxx, temp[16].xxxx; 73: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 74: MOV temp[14].w, const[6].wwww; 75: MUL temp[15].xy, input[4].xxxx, temp[0].xyyy; 76: ADD temp[3].xy, temp[3].xyyy, -temp[15].xyyy; 77: MUL temp[15].x, temp[10].xxxx, const[6].xxxx; 78: MUL temp[15].xy, temp[15].xxxx, temp[12].xyyy; 79: MUL temp[9].xy, temp[15].xyyy, temp[9].xxxx; 80: MUL temp[9].xy, temp[9].xyyy, temp[6].xxxx; 81: ADD temp[3].xy, temp[3].xyyy, -temp[9].xyyy; 82: MUL temp[6].x, temp[6].xxxx, -input[1].yyyy; 83: MUL temp[9].xy, temp[12].xyyy, temp[13].xxxx; 84: MAD temp[0].xy, temp[0].xyyy, temp[6].xxxx, temp[9].xyyy; 85: ADD temp[0].xy, temp[3].xyyy, temp[0].xyyy; 86: RCP temp[3].x, const[5].xxxx; 87: RCP temp[3].y, const[5].yyyy; 88: MUL temp[3].xy, const[8].yzzz, temp[3].xyyy; 89: MUL temp[14].xy, temp[0].xyyy, temp[3].xyyy; 90: MOV temp[14].z, input[0].xxxx; 91: MOV temp[0].zw, temp[14].wwzw; 92: SLT temp[2].x, temp[2].wwww, const[8].xxxx; 93: SLT temp[3].x, temp[4].wwww, const[8].xxxx; 94: ADD temp[2].x, temp[2].xxxx, temp[3].xxxx; 95: SLT temp[2].x, -temp[2].xxxx, const[6].yyyy; 96: SLT temp[1].x, temp[5].xxxx, temp[1].xxxx; 97: MUL temp[1].x, temp[7].xxxx, temp[1].xxxx; 98: ADD temp[1].x, temp[2].xxxx, temp[1].xxxx; 99: SLT temp[1].x, -temp[1].xxxx, const[6].yyyy; 100: ADD temp[1].x, -temp[1].xxxx, const[6].wwww; 101: MUL temp[0].xy, temp[14].xyyy, temp[1].xxxx; 102: MOV output[3].xyz, input[2].yzwy; 103: MOV output[1], temp[10].xxxx; 104: MOV temp[17], temp[0]; 105: MOV output[5].xy, temp[11].xyxx; 106: MOV output[4].xyz, temp[8].xyzx; 107: MOV output[2], input[4].wwww; 108: MOV output[0], temp[17]; 109: MOV output[6], temp[17]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0].xy, const[5].xyyy, const[6].xxxx; 1: MAX temp[1].x, input[5].zzzz, -input[5].zzzz; 2: MUL temp[2], const[0], input[3].xxxx; 3: MAD temp[2], const[1], input[3].yyyy, temp[2]; 4: MAD temp[2], const[2], input[1].zzzz, temp[2]; 5: ADD temp[2], temp[2], const[3]; 6: MOV temp[3].x, temp[2].xxzw; 7: MOV temp[3].y, -temp[2].yyyy; 8: MUL temp[3].xy, temp[0].xyyy, temp[3].xyyy; 9: RCP temp[4].x, temp[2].wwww; 10: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 11: MUL temp[4], const[0], input[3].zzzz; 12: MAD temp[4], const[1], input[3].wwww, temp[4]; 13: MAD temp[4], const[2], input[1].zzzz, temp[4]; 14: ADD temp[4], temp[4], const[3]; 15: MOV temp[5].x, temp[4].xxzw; 16: MOV temp[5].y, -temp[4].yyyy; 17: MUL temp[0].xy, temp[0].xyyy, temp[5].xyyy; 18: RCP temp[5].x, temp[4].wwww; 19: MUL temp[0].xy, temp[0].xyyy, temp[5].xxxx; 20: ADD temp[5].xy, temp[3].xyyy, -temp[0].xyyy; 21: DP4 temp[5].x, temp[5].xy00, temp[5].xy00; 22: RSQ temp[6].x, temp[5].xxxx; 23: MUL temp[6].x, temp[6].xxxx, temp[5].xxxx; 24: SLT temp[18].x, -temp[5].xxxx, none.0000; 25: ADD temp[5].x, temp[6].xxxx, -const[6].yyyy; 26: MAD temp[5].x, temp[18], temp[5], const[6].yyyy; 27: MOV temp[6].x, const[6].yyyy; 28: MOV temp[6].y, temp[5].xxxx; 29: MAX temp[7].x, const[2].yyyy, -const[2].yyyy; 30: SLT temp[7].x, const[6].zzzz, temp[7].xxxx; 31: MOV temp[8].z, temp[1].xxxx; 32: MUL temp[8].xy, input[5].xyyy, const[4].xxxx; 33: MAD temp[9].x, const[4].xxxx, temp[1].xxxx, -temp[1].xxxx; 34: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 35: ADD temp[8].xy, temp[8].xyyy, -temp[9].xxxx; 36: ADD temp[9].x, temp[5].xxxx, -temp[1].xxxx; 37: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 38: ADD temp[6].xy, temp[6].xyyy, -temp[9].xxxx; 39: ADD temp[9].x, const[6].wwww, -temp[7].xxxx; 40: MUL temp[9].xy, temp[8].xyyy, temp[9].xxxx; 41: MAD temp[8].xy, temp[6].xyyy, temp[7].xxxx, temp[9].xyyy; 42: MUL temp[8].xyz, temp[8].xyzz, const[7].xxxx; 43: MUL temp[6].x, input[2].xxxx, const[6].xxxx; 44: FRC temp[19].x, temp[6].xxxx; 45: ADD temp[6].x, temp[6].xxxx, -temp[19]; 46: MAD temp[6].x, const[7].xxxx, temp[6].xxxx, const[7].yyyy; 47: ADD temp[9].x, input[2].xxxx, const[6].wwww; 48: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 49: FRC temp[20].x, temp[9].xxxx; 50: ADD temp[9].x, temp[9].xxxx, -temp[20]; 51: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 52: FRC temp[9].x, temp[9].xxxx; 53: MAD temp[9].x, temp[9].xxxx, const[7].zzzz, const[6].wwww; 54: MUL temp[10].x, input[4].yyyy, const[7].wwww; 55: SLT temp[11].x, temp[6].xxxx, const[6].yyyy; 56: MUL temp[12].x, const[7].xxxx, input[4].xxxx; 57: ADD temp[12].x, temp[8].xxxx, -temp[12].xxxx; 58: MAD temp[13].x, const[7].xxxx, input[4].xxxx, temp[8].yyyy; 59: ADD temp[14].x, const[6].wwww, -temp[11].xxxx; 60: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 61: MAD temp[11].x, temp[12].xxxx, temp[11].xxxx, temp[13].xxxx; 62: ADD temp[11].x, temp[11].xxxx, input[4].zzzz; 63: MUL temp[12].x, temp[9].xxxx, temp[10].xxxx; 64: MOV temp[11].y, temp[12].xxxx; 65: ADD temp[0].xy, temp[0].xyyy, -temp[3].xyyy; 66: DP4 temp[12].x, temp[0].xy00, temp[0].xy00; 67: RSQ temp[12].x, temp[12].xxxx; 68: MUL temp[0].xy, temp[0].xyyy, temp[12].xxxx; 69: MOV temp[12].x, -temp[0].yyyy; 70: MOV temp[12].y, temp[0].xxxx; 71: MUL temp[13].x, temp[6].xxxx, -input[1].xxxx; 72: SGE temp[14].x, const[6].yyyy, input[5].zzzz; 73: MAD temp[15].x, temp[6].xxxx, temp[0].xxxx, const[8].xxxx; 74: SLT temp[21].x, none.0000, temp[15].xxxx; 75: SLT temp[22].x, temp[15].xxxx, none.0000; 76: ADD temp[15].x, temp[21], -temp[22]; 77: ADD temp[16].x, const[6].wwww, -temp[14].xxxx; 78: MAD temp[14].x, temp[15].xxxx, temp[14].xxxx, temp[16].xxxx; 79: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 80: MOV temp[14].w, const[6].wwww; 81: MUL temp[15].xy, input[4].xxxx, temp[0].xyyy; 82: ADD temp[3].xy, temp[3].xyyy, -temp[15].xyyy; 83: MUL temp[15].x, temp[10].xxxx, const[6].xxxx; 84: MUL temp[15].xy, temp[15].xxxx, temp[12].xyyy; 85: MUL temp[9].xy, temp[15].xyyy, temp[9].xxxx; 86: MUL temp[9].xy, temp[9].xyyy, temp[6].xxxx; 87: ADD temp[3].xy, temp[3].xyyy, -temp[9].xyyy; 88: MUL temp[6].x, temp[6].xxxx, -input[1].yyyy; 89: MUL temp[9].xy, temp[12].xyyy, temp[13].xxxx; 90: MAD temp[0].xy, temp[0].xyyy, temp[6].xxxx, temp[9].xyyy; 91: ADD temp[0].xy, temp[3].xyyy, temp[0].xyyy; 92: RCP temp[3].x, const[5].xxxx; 93: RCP temp[3].y, const[5].yyyy; 94: MUL temp[3].xy, const[8].yzzz, temp[3].xyyy; 95: MUL temp[14].xy, temp[0].xyyy, temp[3].xyyy; 96: MOV temp[14].z, input[0].xxxx; 97: MOV temp[0].zw, temp[14].wwzw; 98: SLT temp[2].x, temp[2].wwww, const[8].xxxx; 99: SLT temp[3].x, temp[4].wwww, const[8].xxxx; 100: ADD temp[2].x, temp[2].xxxx, temp[3].xxxx; 101: SLT temp[2].x, -temp[2].xxxx, const[6].yyyy; 102: SLT temp[1].x, temp[5].xxxx, temp[1].xxxx; 103: MUL temp[1].x, temp[7].xxxx, temp[1].xxxx; 104: ADD temp[1].x, temp[2].xxxx, temp[1].xxxx; 105: SLT temp[1].x, -temp[1].xxxx, const[6].yyyy; 106: ADD temp[1].x, -temp[1].xxxx, const[6].wwww; 107: MUL temp[0].xy, temp[14].xyyy, temp[1].xxxx; 108: MOV output[3].xyz, input[2].yzwy; 109: MOV output[1], temp[10].xxxx; 110: MOV temp[17], temp[0]; 111: MOV output[5].xy, temp[11].xyxx; 112: MOV output[4].xyz, temp[8].xyzx; 113: MOV output[2], input[4].wwww; 114: MOV output[0], temp[17]; 115: MOV output[6], temp[17]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0].xy, const[5].xyyy, const[6].xxxx; 1: MAX temp[1].x, input[5].zzzz, -input[5].zzzz; 2: MUL temp[2], const[0], input[3].xxxx; 3: MAD temp[2], const[1], input[3].yyyy, temp[2]; 4: MAD temp[2], const[2], input[1].zzzz, temp[2]; 5: ADD temp[2], temp[2], const[3]; 6: MOV temp[3].x, temp[2].xxzw; 7: MOV temp[3].y, -temp[2].yyyy; 8: MUL temp[3].xy, temp[0].xyyy, temp[3].xyyy; 9: RCP temp[4].x, temp[2].wwww; 10: MUL temp[3].xy, temp[3].xyyy, temp[4].xxxx; 11: MUL temp[4], const[0], input[3].zzzz; 12: MAD temp[4], const[1], input[3].wwww, temp[4]; 13: MAD temp[4], const[2], input[1].zzzz, temp[4]; 14: ADD temp[4], temp[4], const[3]; 15: MOV temp[5].x, temp[4].xxzw; 16: MOV temp[5].y, -temp[4].yyyy; 17: MUL temp[0].xy, temp[0].xyyy, temp[5].xyyy; 18: RCP temp[5].x, temp[4].wwww; 19: MUL temp[0].xy, temp[0].xyyy, temp[5].xxxx; 20: ADD temp[5].xy, temp[3].xyyy, -temp[0].xyyy; 21: DP4 temp[5].x, temp[5].xy00, temp[5].xy00; 22: RSQ temp[6].x, temp[5].xxxx; 23: MUL temp[6].x, temp[6].xxxx, temp[5].xxxx; 24: SLT temp[18].x, -temp[5].xxxx, none.0000; 25: ADD temp[5].x, temp[6].xxxx, -const[6].yyyy; 26: MAD temp[5].x, temp[18], temp[5], const[6].yyyy; 27: MOV temp[6].x, const[6].yyyy; 28: MOV temp[6].y, temp[5].xxxx; 29: MAX temp[7].x, const[2].yyyy, -const[2].yyyy; 30: SLT temp[7].x, const[6].zzzz, temp[7].xxxx; 31: MOV temp[8].z, temp[1].xxxx; 32: MUL temp[8].xy, input[5].xyyy, const[4].xxxx; 33: MAD temp[9].x, const[4].xxxx, temp[1].xxxx, -temp[1].xxxx; 34: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 35: ADD temp[8].xy, temp[8].xyyy, -temp[9].xxxx; 36: ADD temp[9].x, temp[5].xxxx, -temp[1].xxxx; 37: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 38: ADD temp[6].xy, temp[6].xyyy, -temp[9].xxxx; 39: ADD temp[9].x, const[6].wwww, -temp[7].xxxx; 40: MUL temp[9].xy, temp[8].xyyy, temp[9].xxxx; 41: MAD temp[8].xy, temp[6].xyyy, temp[7].xxxx, temp[9].xyyy; 42: MUL temp[8].xyz, temp[8].xyzz, const[7].xxxx; 43: MUL temp[6].x, input[2].xxxx, const[6].xxxx; 44: FRC temp[19].x, temp[6].xxxx; 45: ADD temp[6].x, temp[6].xxxx, -temp[19]; 46: MAD temp[6].x, const[7].xxxx, temp[6].xxxx, const[7].yyyy; 47: ADD temp[9].x, input[2].xxxx, const[6].wwww; 48: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 49: FRC temp[20].x, temp[9].xxxx; 50: ADD temp[9].x, temp[9].xxxx, -temp[20]; 51: MUL temp[9].x, temp[9].xxxx, const[6].xxxx; 52: FRC temp[9].x, temp[9].xxxx; 53: MAD temp[9].x, temp[9].xxxx, const[7].zzzz, const[6].wwww; 54: MUL temp[10].x, input[4].yyyy, const[7].wwww; 55: SLT temp[11].x, temp[6].xxxx, const[6].yyyy; 56: MUL temp[12].x, const[7].xxxx, input[4].xxxx; 57: ADD temp[12].x, temp[8].xxxx, -temp[12].xxxx; 58: MAD temp[13].x, const[7].xxxx, input[4].xxxx, temp[8].yyyy; 59: ADD temp[14].x, const[6].wwww, -temp[11].xxxx; 60: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 61: MAD temp[11].x, temp[12].xxxx, temp[11].xxxx, temp[13].xxxx; 62: ADD temp[11].x, temp[11].xxxx, input[4].zzzz; 63: MUL temp[12].x, temp[9].xxxx, temp[10].xxxx; 64: MOV temp[11].y, temp[12].xxxx; 65: ADD temp[0].xy, temp[0].xyyy, -temp[3].xyyy; 66: DP4 temp[12].x, temp[0].xy00, temp[0].xy00; 67: RSQ temp[12].x, temp[12].xxxx; 68: MUL temp[0].xy, temp[0].xyyy, temp[12].xxxx; 69: MOV temp[12].x, -temp[0].yyyy; 70: MOV temp[12].y, temp[0].xxxx; 71: MUL temp[13].x, temp[6].xxxx, -input[1].xxxx; 72: SGE temp[14].x, const[6].yyyy, input[5].zzzz; 73: MAD temp[15].x, temp[6].xxxx, temp[0].xxxx, const[8].xxxx; 74: SLT temp[21].x, none.0000, temp[15].xxxx; 75: SLT temp[22].x, temp[15].xxxx, none.0000; 76: ADD temp[15].x, temp[21], -temp[22]; 77: ADD temp[16].x, const[6].wwww, -temp[14].xxxx; 78: MAD temp[14].x, temp[15].xxxx, temp[14].xxxx, temp[16].xxxx; 79: MUL temp[13].x, temp[13].xxxx, temp[14].xxxx; 80: MOV temp[14].w, const[6].wwww; 81: MUL temp[15].xy, input[4].xxxx, temp[0].xyyy; 82: ADD temp[3].xy, temp[3].xyyy, -temp[15].xyyy; 83: MUL temp[15].x, temp[10].xxxx, const[6].xxxx; 84: MUL temp[15].xy, temp[15].xxxx, temp[12].xyyy; 85: MUL temp[9].xy, temp[15].xyyy, temp[9].xxxx; 86: MUL temp[9].xy, temp[9].xyyy, temp[6].xxxx; 87: ADD temp[3].xy, temp[3].xyyy, -temp[9].xyyy; 88: MUL temp[6].x, temp[6].xxxx, -input[1].yyyy; 89: MUL temp[9].xy, temp[12].xyyy, temp[13].xxxx; 90: MAD temp[0].xy, temp[0].xyyy, temp[6].xxxx, temp[9].xyyy; 91: ADD temp[0].xy, temp[3].xyyy, temp[0].xyyy; 92: RCP temp[3].x, const[5].xxxx; 93: RCP temp[3].y, const[5].yyyy; 94: MUL temp[3].xy, const[8].yzzz, temp[3].xyyy; 95: MUL temp[14].xy, temp[0].xyyy, temp[3].xyyy; 96: MOV temp[14].z, input[0].xxxx; 97: MOV temp[0].zw, temp[14].wwzw; 98: SLT temp[2].x, temp[2].wwww, const[8].xxxx; 99: SLT temp[3].x, temp[4].wwww, const[8].xxxx; 100: ADD temp[2].x, temp[2].xxxx, temp[3].xxxx; 101: SLT temp[2].x, -temp[2].xxxx, const[6].yyyy; 102: SLT temp[1].x, temp[5].xxxx, temp[1].xxxx; 103: MUL temp[1].x, temp[7].xxxx, temp[1].xxxx; 104: ADD temp[1].x, temp[2].xxxx, temp[1].xxxx; 105: SLT temp[1].x, -temp[1].xxxx, const[6].yyyy; 106: ADD temp[1].x, -temp[1].xxxx, const[6].wwww; 107: MUL temp[0].xy, temp[14].xyyy, temp[1].xxxx; 108: MOV output[3].xyz, input[2].yzwy; 109: MOV output[1], temp[10].xxxx; 110: MOV temp[17], temp[0]; 111: MOV output[5].xy, temp[11].xyxx; 112: MOV output[4].xyz, temp[8].xyzx; 113: MOV output[2], input[4].wwww; 114: MOV output[0], temp[17]; 115: MOV output[6], temp[17]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[5].xy__, const[6].xx__; 1: MAX temp[1].x, input[5].z___, -input[5].z___; 2: MUL temp[2].xyw, const[0].xy_w, input[3].xx_x; 3: MAD temp[2].xyw, const[1].xy_w, input[3].yy_y, temp[2].xy_w; 4: MAD temp[2].xyw, const[2].xy_w, input[1].zz_z, temp[2].xy_w; 5: ADD temp[2].xyw, temp[2].xy_w, const[3].xy_w; 6: MOV temp[3].x, temp[2].x___; 7: MOV temp[3].y, -temp[2]._y__; 8: MUL temp[3].xy, temp[0].xy__, temp[3].xy__; 9: RCP temp[4].x, temp[2].w___; 10: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 11: MUL temp[4].xyw, const[0].xy_w, input[3].zz_z; 12: MAD temp[4].xyw, const[1].xy_w, input[3].ww_w, temp[4].xy_w; 13: MAD temp[4].xyw, const[2].xy_w, input[1].zz_z, temp[4].xy_w; 14: ADD temp[4].xyw, temp[4].xy_w, const[3].xy_w; 15: MOV temp[5].x, temp[4].x___; 16: MOV temp[5].y, -temp[4]._y__; 17: MUL temp[0].xy, temp[0].xy__, temp[5].xy__; 18: RCP temp[5].x, temp[4].w___; 19: MUL temp[0].xy, temp[0].xy__, temp[5].xx__; 20: ADD temp[5].xy, temp[3].xy__, -temp[0].xy__; 21: DP4 temp[5].x, temp[5].xy00, temp[5].xy00; 22: RSQ temp[6].x, temp[5].x___; 23: MUL temp[6].x, temp[6].x___, temp[5].x___; 24: SLT temp[18].x, -temp[5].x___, none.0___; 25: ADD temp[5].x, temp[6].x___, -const[6].y___; 26: MAD temp[5].x, temp[18].x___, temp[5].x___, const[6].y___; 27: MOV temp[6].x, const[6].y___; 28: MOV temp[6].y, temp[5]._x__; 29: MAX temp[7].x, const[2].y___, -const[2].y___; 30: SLT temp[7].x, const[6].z___, temp[7].x___; 31: MOV temp[8].z, temp[1].__x_; 32: MUL temp[8].xy, input[5].xy__, const[4].xx__; 33: MAD temp[9].x, const[4].x___, temp[1].x___, -temp[1].x___; 34: MUL temp[9].x, temp[9].x___, const[6].x___; 35: ADD temp[8].xy, temp[8].xy__, -temp[9].xx__; 36: ADD temp[9].x, temp[5].x___, -temp[1].x___; 37: MUL temp[9].x, temp[9].x___, const[6].x___; 38: ADD temp[6].xy, temp[6].xy__, -temp[9].xx__; 39: ADD temp[9].x, const[6].w___, -temp[7].x___; 40: MUL temp[9].xy, temp[8].xy__, temp[9].xx__; 41: MAD temp[8].xy, temp[6].xy__, temp[7].xx__, temp[9].xy__; 42: MUL temp[8].xyz, temp[8].xyz_, const[7].xxx_; 43: MUL temp[6].x, input[2].x___, const[6].x___; 44: FRC temp[19].x, temp[6].x___; 45: ADD temp[6].x, temp[6].x___, -temp[19].x___; 46: MAD temp[6].x, const[7].x___, temp[6].x___, const[7].y___; 47: ADD temp[9].x, input[2].x___, const[6].w___; 48: MUL temp[9].x, temp[9].x___, const[6].x___; 49: FRC temp[20].x, temp[9].x___; 50: ADD temp[9].x, temp[9].x___, -temp[20].x___; 51: MUL temp[9].x, temp[9].x___, const[6].x___; 52: FRC temp[9].x, temp[9].x___; 53: MAD temp[9].x, temp[9].x___, const[7].z___, const[6].w___; 54: MUL temp[10].x, input[4].y___, const[7].w___; 55: SLT temp[11].x, temp[6].x___, const[6].y___; 56: MUL temp[12].x, const[7].x___, input[4].x___; 57: ADD temp[12].x, temp[8].x___, -temp[12].x___; 58: MAD temp[13].x, const[7].x___, input[4].x___, temp[8].y___; 59: ADD temp[14].x, const[6].w___, -temp[11].x___; 60: MUL temp[13].x, temp[13].x___, temp[14].x___; 61: MAD temp[11].x, temp[12].x___, temp[11].x___, temp[13].x___; 62: ADD temp[11].x, temp[11].x___, input[4].z___; 63: MUL temp[12].x, temp[9].x___, temp[10].x___; 64: MOV temp[11].y, temp[12]._x__; 65: ADD temp[0].xy, temp[0].xy__, -temp[3].xy__; 66: DP4 temp[12].x, temp[0].xy00, temp[0].xy00; 67: RSQ temp[12].x, temp[12].x___; 68: MUL temp[0].xy, temp[0].xy__, temp[12].xx__; 69: MOV temp[12].x, -temp[0].y___; 70: MOV temp[12].y, temp[0]._x__; 71: MUL temp[13].x, temp[6].x___, -input[1].x___; 72: SGE temp[14].x, const[6].y___, input[5].z___; 73: MAD temp[15].x, temp[6].x___, temp[0].x___, const[8].x___; 74: SLT temp[21].x, none.0___, temp[15].x___; 75: SLT temp[22].x, temp[15].x___, none.0___; 76: ADD temp[15].x, temp[21].x___, -temp[22].x___; 77: ADD temp[16].x, const[6].w___, -temp[14].x___; 78: MAD temp[14].x, temp[15].x___, temp[14].x___, temp[16].x___; 79: MUL temp[13].x, temp[13].x___, temp[14].x___; 80: MOV temp[14].w, const[6].___w; 81: MUL temp[15].xy, input[4].xx__, temp[0].xy__; 82: ADD temp[3].xy, temp[3].xy__, -temp[15].xy__; 83: MUL temp[15].x, temp[10].x___, const[6].x___; 84: MUL temp[15].xy, temp[15].xx__, temp[12].xy__; 85: MUL temp[9].xy, temp[15].xy__, temp[9].xx__; 86: MUL temp[9].xy, temp[9].xy__, temp[6].xx__; 87: ADD temp[3].xy, temp[3].xy__, -temp[9].xy__; 88: MUL temp[6].x, temp[6].x___, -input[1].y___; 89: MUL temp[9].xy, temp[12].xy__, temp[13].xx__; 90: MAD temp[0].xy, temp[0].xy__, temp[6].xx__, temp[9].xy__; 91: ADD temp[0].xy, temp[3].xy__, temp[0].xy__; 92: RCP temp[3].x, const[5].x___; 93: RCP temp[3].y, const[5]._y__; 94: MUL temp[3].xy, const[8].yz__, temp[3].xy__; 95: MUL temp[14].xy, temp[0].xy__, temp[3].xy__; 96: MOV temp[14].z, input[0].__x_; 97: MOV temp[0].zw, temp[14].__zw; 98: SLT temp[2].x, temp[2].w___, const[8].x___; 99: SLT temp[3].x, temp[4].w___, const[8].x___; 100: ADD temp[2].x, temp[2].x___, temp[3].x___; 101: SLT temp[2].x, -temp[2].x___, const[6].y___; 102: SLT temp[1].x, temp[5].x___, temp[1].x___; 103: MUL temp[1].x, temp[7].x___, temp[1].x___; 104: ADD temp[1].x, temp[2].x___, temp[1].x___; 105: SLT temp[1].x, -temp[1].x___, const[6].y___; 106: ADD temp[1].x, -temp[1].x___, const[6].w___; 107: MUL temp[0].xy, temp[14].xy__, temp[1].xx__; 108: MOV output[3].xyz, input[2].yzw_; 109: MOV output[1], temp[10].xxxx; 110: MOV temp[17], temp[0]; 111: MOV output[5].xy, temp[11].xy__; 112: MOV output[4].xyz, temp[8].xyz_; 113: MOV output[2], input[4].wwww; 114: MOV output[0], temp[17]; 115: MOV output[6], temp[17]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xy, const[5].xy__, const[6].xx__; 1: MAX temp[1].x, input[5].z___, -input[5].z___; 2: MUL temp[2].xyw, const[0].xy_w, input[3].xx_x; 3: MAD temp[2].xyw, const[1].xy_w, input[3].yy_y, temp[2].xy_w; 4: MAD temp[2].xyw, const[2].xy_w, input[1].zz_z, temp[2].xy_w; 5: ADD temp[2].xyw, temp[2].xy_w, const[3].xy_w; 6: MOV temp[3].x, temp[2].x___; 7: MOV temp[3].y, -temp[2]._y__; 8: MUL temp[3].xy, temp[0].xy__, temp[3].xy__; 9: RCP temp[4].x, temp[2].w___; 10: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 11: MUL temp[4].xyw, const[0].xy_w, input[3].zz_z; 12: MAD temp[4].xyw, const[1].xy_w, input[3].ww_w, temp[4].xy_w; 13: MAD temp[4].xyw, const[2].xy_w, input[1].zz_z, temp[4].xy_w; 14: ADD temp[4].xyw, temp[4].xy_w, const[3].xy_w; 15: MOV temp[5].x, temp[4].x___; 16: MOV temp[5].y, -temp[4]._y__; 17: MUL temp[0].xy, temp[0].xy__, temp[5].xy__; 18: RCP temp[5].x, temp[4].w___; 19: MUL temp[0].xy, temp[0].xy__, temp[5].xx__; 20: ADD temp[5].xy, temp[3].xy__, -temp[0].xy__; 21: DP4 temp[5].x, temp[5].xy00, temp[5].xy00; 22: RSQ temp[6].x, temp[5].x___; 23: MUL temp[6].x, temp[6].x___, temp[5].x___; 24: SLT temp[18].x, -temp[5].x___, none.0___; 25: MUL temp[5].x, temp[18].x___, temp[6].x___; 26: MOV temp[6].x, none.0___; 27: MOV temp[6].y, temp[5]._x__; 28: MAX temp[7].x, const[2].y___, -const[2].y___; 29: SLT temp[7].x, const[6].z___, temp[7].x___; 30: MOV temp[8].z, temp[1].__x_; 31: MUL temp[8].xy, input[5].xy__, const[4].xx__; 32: MAD temp[9].x, const[4].x___, temp[1].x___, -temp[1].x___; 33: MUL temp[9].x, temp[9].x___, const[6].x___; 34: ADD temp[8].xy, temp[8].xy__, -temp[9].xx__; 35: ADD temp[9].x, temp[5].x___, -temp[1].x___; 36: MUL temp[9].x, temp[9].x___, const[6].x___; 37: ADD temp[6].xy, temp[6].xy__, -temp[9].xx__; 38: ADD temp[9].x, none.1___, -temp[7].x___; 39: MUL temp[9].xy, temp[8].xy__, temp[9].xx__; 40: MAD temp[8].xy, temp[6].xy__, temp[7].xx__, temp[9].xy__; 41: MUL temp[8].xyz, temp[8].xyz_, const[7].xxx_; 42: MUL temp[6].x, input[2].x___, const[6].x___; 43: FRC temp[19].x, temp[6].x___; 44: ADD temp[6].x, temp[6].x___, -temp[19].x___; 45: MAD temp[6].x, const[7].x___, temp[6].x___, none.-1___; 46: ADD temp[9].x, input[2].x___, none.1___; 47: MUL temp[9].x, temp[9].x___, const[6].x___; 48: FRC temp[20].x, temp[9].x___; 49: ADD temp[9].x, temp[9].x___, -temp[20].x___; 50: MUL temp[9].x, temp[9].x___, const[6].x___; 51: FRC temp[9].x, temp[9].x___; 52: MAD temp[9].x, temp[9].x___, const[7].z___, none.1___; 53: MUL temp[10].x, input[4].y___, const[7].w___; 54: SLT temp[11].x, temp[6].x___, none.0___; 55: MUL temp[12].x, const[7].x___, input[4].x___; 56: ADD temp[12].x, temp[8].x___, -temp[12].x___; 57: MAD temp[13].x, const[7].x___, input[4].x___, temp[8].y___; 58: ADD temp[14].x, none.1___, -temp[11].x___; 59: MUL temp[13].x, temp[13].x___, temp[14].x___; 60: MAD temp[11].x, temp[12].x___, temp[11].x___, temp[13].x___; 61: ADD temp[11].x, temp[11].x___, input[4].z___; 62: MUL temp[12].x, temp[9].x___, temp[10].x___; 63: MOV temp[11].y, temp[12]._x__; 64: ADD temp[0].xy, temp[0].xy__, -temp[3].xy__; 65: DP4 temp[12].x, temp[0].xy00, temp[0].xy00; 66: RSQ temp[12].x, temp[12].x___; 67: MUL temp[0].xy, temp[0].xy__, temp[12].xx__; 68: MOV temp[12].x, -temp[0].y___; 69: MOV temp[12].y, temp[0]._x__; 70: MUL temp[13].x, temp[6].x___, -input[1].x___; 71: SGE temp[14].x, none.0___, input[5].z___; 72: MAD temp[15].x, temp[6].x___, temp[0].x___, const[8].x___; 73: SLT temp[21].x, none.0___, temp[15].x___; 74: SLT temp[22].x, temp[15].x___, none.0___; 75: ADD temp[15].x, temp[21].x___, -temp[22].x___; 76: ADD temp[16].x, none.1___, -temp[14].x___; 77: MAD temp[14].x, temp[15].x___, temp[14].x___, temp[16].x___; 78: MUL temp[13].x, temp[13].x___, temp[14].x___; 79: MOV temp[14].w, none.___1; 80: MUL temp[15].xy, input[4].xx__, temp[0].xy__; 81: ADD temp[3].xy, temp[3].xy__, -temp[15].xy__; 82: MUL temp[15].x, temp[10].x___, const[6].x___; 83: MUL temp[15].xy, temp[15].xx__, temp[12].xy__; 84: MUL temp[9].xy, temp[15].xy__, temp[9].xx__; 85: MUL temp[9].xy, temp[9].xy__, temp[6].xx__; 86: ADD temp[3].xy, temp[3].xy__, -temp[9].xy__; 87: MUL temp[6].x, temp[6].x___, -input[1].y___; 88: MUL temp[9].xy, temp[12].xy__, temp[13].xx__; 89: MAD temp[0].xy, temp[0].xy__, temp[6].xx__, temp[9].xy__; 90: ADD temp[0].xy, temp[3].xy__, temp[0].xy__; 91: RCP temp[3].x, const[5].x___; 92: RCP temp[3].y, const[5]._y__; 93: MUL temp[3].xy, const[8].yz__, temp[3].xy__; 94: MUL temp[14].xy, temp[0].xy__, temp[3].xy__; 95: MOV temp[14].z, input[0].__x_; 96: MOV temp[0].zw, temp[14].__zw; 97: SLT temp[2].x, temp[2].w___, const[8].x___; 98: SLT temp[3].x, temp[4].w___, const[8].x___; 99: ADD temp[2].x, temp[2].x___, temp[3].x___; 100: SLT temp[2].x, -temp[2].x___, none.0___; 101: SLT temp[1].x, temp[5].x___, temp[1].x___; 102: MUL temp[1].x, temp[7].x___, temp[1].x___; 103: ADD temp[1].x, temp[2].x___, temp[1].x___; 104: SLT temp[1].x, -temp[1].x___, none.0___; 105: ADD temp[1].x, -temp[1].x___, none.1___; 106: MUL temp[0].xy, temp[14].xy__, temp[1].xx__; 107: MOV output[3].xyz, input[2].yzw_; 108: MOV output[1], temp[10].xxxx; 109: MOV output[5].xy, temp[11].xy__; 110: MOV output[4].xyz, temp[8].xyz_; 111: MOV output[2], input[4].wwww; 112: MOV output[0], temp[0]; 113: MOV output[6], temp[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[17], const[6].xx__; 1: MUL temp[0].xy, const[5].xy__, temp[17]; 2: MAX temp[1].x, input[5].z___, -input[5].z___; 3: MUL temp[2].xyw, const[0].xy_w, input[3].xx_x; 4: MAD temp[2].xyw, const[1].xy_w, input[3].yy_y, temp[2].xy_w; 5: MAD temp[2].xyw, const[2].xy_w, input[1].zz_z, temp[2].xy_w; 6: ADD temp[2].xyw, temp[2].xy_w, const[3].xy_w; 7: MOV temp[3].x, temp[2].x___; 8: MOV temp[3].y, -temp[2]._y__; 9: MUL temp[3].xy, temp[0].xy__, temp[3].xy__; 10: RCP temp[4].x, temp[2].w___; 11: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 12: MUL temp[4].xyw, const[0].xy_w, input[3].zz_z; 13: MAD temp[4].xyw, const[1].xy_w, input[3].ww_w, temp[4].xy_w; 14: MAD temp[4].xyw, const[2].xy_w, input[1].zz_z, temp[4].xy_w; 15: ADD temp[4].xyw, temp[4].xy_w, const[3].xy_w; 16: MOV temp[5].x, temp[4].x___; 17: MOV temp[5].y, -temp[4]._y__; 18: MUL temp[0].xy, temp[0].xy__, temp[5].xy__; 19: RCP temp[5].x, temp[4].w___; 20: MUL temp[0].xy, temp[0].xy__, temp[5].xx__; 21: ADD temp[5].xy, temp[3].xy__, -temp[0].xy__; 22: DP4 temp[5].x, temp[5].xy00, temp[5].xy00; 23: RSQ temp[6].x, temp[5].x___; 24: MUL temp[6].x, temp[6].x___, temp[5].x___; 25: SLT temp[18].x, -temp[5].x___, none.0___; 26: MUL temp[5].x, temp[18].x___, temp[6].x___; 27: MOV temp[6].x, none.0___; 28: MOV temp[6].y, temp[5]._x__; 29: MAX temp[7].x, const[2].y___, -const[2].y___; 30: SLT temp[7].x, const[6].z___, temp[7].x___; 31: MOV temp[8].z, temp[1].__x_; 32: MUL temp[8].xy, input[5].xy__, const[4].xx__; 33: MAD temp[9].x, const[4].x___, temp[1].x___, -temp[1].x___; 34: MUL temp[9].x, temp[9].x___, const[6].x___; 35: ADD temp[8].xy, temp[8].xy__, -temp[9].xx__; 36: ADD temp[9].x, temp[5].x___, -temp[1].x___; 37: MUL temp[9].x, temp[9].x___, const[6].x___; 38: ADD temp[6].xy, temp[6].xy__, -temp[9].xx__; 39: ADD temp[9].x, none.1___, -temp[7].x___; 40: MUL temp[9].xy, temp[8].xy__, temp[9].xx__; 41: MAD temp[8].xy, temp[6].xy__, temp[7].xx__, temp[9].xy__; 42: MUL temp[8].xyz, temp[8].xyz_, const[7].xxx_; 43: MUL temp[6].x, input[2].x___, const[6].x___; 44: FRC temp[19].x, temp[6].x___; 45: ADD temp[6].x, temp[6].x___, -temp[19].x___; 46: MAD temp[6].x, const[7].x___, temp[6].x___, none.-1___; 47: ADD temp[9].x, input[2].x___, none.1___; 48: MUL temp[9].x, temp[9].x___, const[6].x___; 49: FRC temp[20].x, temp[9].x___; 50: ADD temp[9].x, temp[9].x___, -temp[20].x___; 51: MUL temp[9].x, temp[9].x___, const[6].x___; 52: FRC temp[9].x, temp[9].x___; 53: MAD temp[9].x, temp[9].x___, const[7].z___, none.1___; 54: MUL temp[10].x, input[4].y___, const[7].w___; 55: SLT temp[11].x, temp[6].x___, none.0___; 56: MUL temp[12].x, const[7].x___, input[4].x___; 57: ADD temp[12].x, temp[8].x___, -temp[12].x___; 58: MAD temp[13].x, const[7].x___, input[4].x___, temp[8].y___; 59: ADD temp[14].x, none.1___, -temp[11].x___; 60: MUL temp[13].x, temp[13].x___, temp[14].x___; 61: MAD temp[11].x, temp[12].x___, temp[11].x___, temp[13].x___; 62: ADD temp[11].x, temp[11].x___, input[4].z___; 63: MUL temp[12].x, temp[9].x___, temp[10].x___; 64: MOV temp[11].y, temp[12]._x__; 65: ADD temp[0].xy, temp[0].xy__, -temp[3].xy__; 66: DP4 temp[12].x, temp[0].xy00, temp[0].xy00; 67: RSQ temp[12].x, temp[12].x___; 68: MUL temp[0].xy, temp[0].xy__, temp[12].xx__; 69: MOV temp[12].x, -temp[0].y___; 70: MOV temp[12].y, temp[0]._x__; 71: MUL temp[13].x, temp[6].x___, -input[1].x___; 72: SGE temp[14].x, none.0___, input[5].z___; 73: MAD temp[15].x, temp[6].x___, temp[0].x___, const[8].x___; 74: SLT temp[21].x, none.0___, temp[15].x___; 75: SLT temp[22].x, temp[15].x___, none.0___; 76: ADD temp[15].x, temp[21].x___, -temp[22].x___; 77: ADD temp[16].x, none.1___, -temp[14].x___; 78: MAD temp[14].x, temp[15].x___, temp[14].x___, temp[16].x___; 79: MUL temp[13].x, temp[13].x___, temp[14].x___; 80: MOV temp[14].w, none.___1; 81: MUL temp[15].xy, input[4].xx__, temp[0].xy__; 82: ADD temp[3].xy, temp[3].xy__, -temp[15].xy__; 83: MUL temp[15].x, temp[10].x___, const[6].x___; 84: MUL temp[15].xy, temp[15].xx__, temp[12].xy__; 85: MUL temp[9].xy, temp[15].xy__, temp[9].xx__; 86: MUL temp[9].xy, temp[9].xy__, temp[6].xx__; 87: ADD temp[3].xy, temp[3].xy__, -temp[9].xy__; 88: MUL temp[6].x, temp[6].x___, -input[1].y___; 89: MUL temp[9].xy, temp[12].xy__, temp[13].xx__; 90: MAD temp[0].xy, temp[0].xy__, temp[6].xx__, temp[9].xy__; 91: ADD temp[0].xy, temp[3].xy__, temp[0].xy__; 92: RCP temp[3].x, const[5].x___; 93: RCP temp[3].y, const[5]._y__; 94: MUL temp[3].xy, const[8].yz__, temp[3].xy__; 95: MUL temp[14].xy, temp[0].xy__, temp[3].xy__; 96: MOV temp[14].z, input[0].__x_; 97: MOV temp[0].zw, temp[14].__zw; 98: SLT temp[2].x, temp[2].w___, const[8].x___; 99: SLT temp[3].x, temp[4].w___, const[8].x___; 100: ADD temp[2].x, temp[2].x___, temp[3].x___; 101: SLT temp[2].x, -temp[2].x___, none.0___; 102: SLT temp[1].x, temp[5].x___, temp[1].x___; 103: MUL temp[1].x, temp[7].x___, temp[1].x___; 104: ADD temp[1].x, temp[2].x___, temp[1].x___; 105: SLT temp[1].x, -temp[1].x___, none.0___; 106: ADD temp[1].x, -temp[1].x___, none.1___; 107: MUL temp[0].xy, temp[14].xy__, temp[1].xx__; 108: MOV output[3].xyz, input[2].yzw_; 109: MOV output[1], temp[10].xxxx; 110: MOV output[5].xy, temp[11].xy__; 111: MOV output[4].xyz, temp[8].xyz_; 112: MOV output[2], input[4].wwww; 113: MOV output[0], temp[0]; 114: MOV output[6], temp[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV temp[0], const[6].xx__; 1: MUL temp[0].xy, const[5].xy__, temp[0]; 2: MAX temp[1].x, input[5].z___, -input[5].z___; 3: MUL temp[2].xyw, const[0].xy_w, input[3].xx_x; 4: MAD temp[2].xyw, const[1].xy_w, input[3].yy_y, temp[2].xy_w; 5: MAD temp[2].xyw, const[2].xy_w, input[1].zz_z, temp[2].xy_w; 6: ADD temp[2].xyw, temp[2].xy_w, const[3].xy_w; 7: MOV temp[3].x, temp[2].x___; 8: MOV temp[3].y, -temp[2]._y__; 9: MUL temp[3].xy, temp[0].xy__, temp[3].xy__; 10: RCP temp[4].x, temp[2].w___; 11: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 12: MUL temp[4].xyw, const[0].xy_w, input[3].zz_z; 13: MAD temp[4].xyw, const[1].xy_w, input[3].ww_w, temp[4].xy_w; 14: MAD temp[4].xyw, const[2].xy_w, input[1].zz_z, temp[4].xy_w; 15: ADD temp[4].xyw, temp[4].xy_w, const[3].xy_w; 16: MOV temp[5].x, temp[4].x___; 17: MOV temp[5].y, -temp[4]._y__; 18: MUL temp[0].xy, temp[0].xy__, temp[5].xy__; 19: RCP temp[5].x, temp[4].w___; 20: MUL temp[0].xy, temp[0].xy__, temp[5].xx__; 21: ADD temp[5].xy, temp[3].xy__, -temp[0].xy__; 22: DP4 temp[5].x, temp[5].xy00, temp[5].xy00; 23: RSQ temp[6].x, temp[5].x___; 24: MUL temp[6].x, temp[6].x___, temp[5].x___; 25: SLT temp[7].x, -temp[5].x___, none.0___; 26: MUL temp[5].x, temp[7].x___, temp[6].x___; 27: MOV temp[6].x, none.0___; 28: MOV temp[6].y, temp[5]._x__; 29: MAX temp[7].x, const[2].y___, -const[2].y___; 30: SLT temp[7].x, const[6].z___, temp[7].x___; 31: MOV temp[8].z, temp[1].__x_; 32: MUL temp[8].xy, input[5].xy__, const[4].xx__; 33: MAD temp[9].x, const[4].x___, temp[1].x___, -temp[1].x___; 34: MUL temp[9].x, temp[9].x___, const[6].x___; 35: ADD temp[8].xy, temp[8].xy__, -temp[9].xx__; 36: ADD temp[9].x, temp[5].x___, -temp[1].x___; 37: MUL temp[9].x, temp[9].x___, const[6].x___; 38: ADD temp[6].xy, temp[6].xy__, -temp[9].xx__; 39: ADD temp[9].x, none.1___, -temp[7].x___; 40: MUL temp[9].xy, temp[8].xy__, temp[9].xx__; 41: MAD temp[8].xy, temp[6].xy__, temp[7].xx__, temp[9].xy__; 42: MUL temp[8].xyz, temp[8].xyz_, const[7].xxx_; 43: MUL temp[6].x, input[2].x___, const[6].x___; 44: FRC temp[10].x, temp[6].x___; 45: ADD temp[6].x, temp[6].x___, -temp[10].x___; 46: MAD temp[6].x, const[7].x___, temp[6].x___, none.-1___; 47: ADD temp[9].x, input[2].x___, none.1___; 48: MUL temp[9].x, temp[9].x___, const[6].x___; 49: FRC temp[10].x, temp[9].x___; 50: ADD temp[9].x, temp[9].x___, -temp[10].x___; 51: MUL temp[9].x, temp[9].x___, const[6].x___; 52: FRC temp[9].x, temp[9].x___; 53: MAD temp[9].x, temp[9].x___, const[7].z___, none.1___; 54: MUL temp[10].x, input[4].y___, const[7].w___; 55: SLT temp[11].x, temp[6].x___, none.0___; 56: MUL temp[12].x, const[7].x___, input[4].x___; 57: ADD temp[12].x, temp[8].x___, -temp[12].x___; 58: MAD temp[13].x, const[7].x___, input[4].x___, temp[8].y___; 59: ADD temp[14].x, none.1___, -temp[11].x___; 60: MUL temp[13].x, temp[13].x___, temp[14].x___; 61: MAD temp[11].x, temp[12].x___, temp[11].x___, temp[13].x___; 62: ADD temp[11].x, temp[11].x___, input[4].z___; 63: MUL temp[12].x, temp[9].x___, temp[10].x___; 64: MOV temp[11].y, temp[12]._x__; 65: ADD temp[0].xy, temp[0].xy__, -temp[3].xy__; 66: DP4 temp[12].x, temp[0].xy00, temp[0].xy00; 67: RSQ temp[12].x, temp[12].x___; 68: MUL temp[0].xy, temp[0].xy__, temp[12].xx__; 69: MOV temp[12].x, -temp[0].y___; 70: MOV temp[12].y, temp[0]._x__; 71: MUL temp[13].x, temp[6].x___, -input[1].x___; 72: SGE temp[14].x, none.0___, input[5].z___; 73: MAD temp[15].x, temp[6].x___, temp[0].x___, const[8].x___; 74: SLT temp[16].x, none.0___, temp[15].x___; 75: SLT temp[17].x, temp[15].x___, none.0___; 76: ADD temp[15].x, temp[16].x___, -temp[17].x___; 77: ADD temp[16].x, none.1___, -temp[14].x___; 78: MAD temp[14].x, temp[15].x___, temp[14].x___, temp[16].x___; 79: MUL temp[13].x, temp[13].x___, temp[14].x___; 80: MOV temp[14].w, none.___1; 81: MUL temp[15].xy, input[4].xx__, temp[0].xy__; 82: ADD temp[3].xy, temp[3].xy__, -temp[15].xy__; 83: MUL temp[15].x, temp[10].x___, const[6].x___; 84: MUL temp[15].xy, temp[15].xx__, temp[12].xy__; 85: MUL temp[9].xy, temp[15].xy__, temp[9].xx__; 86: MUL temp[9].xy, temp[9].xy__, temp[6].xx__; 87: ADD temp[3].xy, temp[3].xy__, -temp[9].xy__; 88: MUL temp[6].x, temp[6].x___, -input[1].y___; 89: MUL temp[9].xy, temp[12].xy__, temp[13].xx__; 90: MAD temp[0].xy, temp[0].xy__, temp[6].xx__, temp[9].xy__; 91: ADD temp[0].xy, temp[3].xy__, temp[0].xy__; 92: RCP temp[3].x, const[5].x___; 93: RCP temp[3].y, const[5]._y__; 94: MUL temp[3].xy, const[8].yz__, temp[3].xy__; 95: MUL temp[14].xy, temp[0].xy__, temp[3].xy__; 96: MOV temp[14].z, input[0].__x_; 97: MOV temp[0].zw, temp[14].__zw; 98: SLT temp[2].x, temp[2].w___, const[8].x___; 99: SLT temp[3].x, temp[4].w___, const[8].x___; 100: ADD temp[2].x, temp[2].x___, temp[3].x___; 101: SLT temp[2].x, -temp[2].x___, none.0___; 102: SLT temp[1].x, temp[5].x___, temp[1].x___; 103: MUL temp[1].x, temp[7].x___, temp[1].x___; 104: ADD temp[1].x, temp[2].x___, temp[1].x___; 105: SLT temp[1].x, -temp[1].x___, none.0___; 106: ADD temp[1].x, -temp[1].x___, none.1___; 107: MUL temp[0].xy, temp[14].xy__, temp[1].xx__; 108: MOV output[3].xyz, input[2].yzw_; 109: MOV output[1], temp[10].xxxx; 110: MOV output[5].xy, temp[11].xy__; 111: MOV output[4].xyz, temp[8].xyz_; 112: MOV output[2], input[4].wwww; 113: MOV output[0], temp[0]; 114: MOV output[6], temp[0]; CONST[6] = { 0.5000 0.0000 0.0010 1.0000 } CONST[7] = { 2.0000 -1.0000 -4.0000 0.2500 } CONST[8] = { 0.0001 2.0000 -2.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0], const[6].xx__; 1: MUL temp[0].xy, const[5].xy__, temp[0]; 2: MAX temp[1].x, input[5].z___, -input[5].z___; 3: MUL temp[2].xyw, const[0].xy_w, input[3].xx_x; 4: MAD temp[2].xyw, const[1].xy_w, input[3].yy_y, temp[2].xy_w; 5: MAD temp[2].xyw, const[2].xy_w, input[1].zz_z, temp[2].xy_w; 6: ADD temp[2].xyw, temp[2].xy_w, const[3].xy_w; 7: MOV temp[3].x, temp[2].x___; 8: MOV temp[3].y, -temp[2]._y__; 9: MUL temp[3].xy, temp[0].xy__, temp[3].xy__; 10: RCP temp[4].x, temp[2].w___; 11: MUL temp[3].xy, temp[3].xy__, temp[4].xx__; 12: MUL temp[4].xyw, const[0].xy_w, input[3].zz_z; 13: MAD temp[4].xyw, const[1].xy_w, input[3].ww_w, temp[4].xy_w; 14: MAD temp[4].xyw, const[2].xy_w, input[1].zz_z, temp[4].xy_w; 15: ADD temp[4].xyw, temp[4].xy_w, const[3].xy_w; 16: MOV temp[5].x, temp[4].x___; 17: MOV temp[5].y, -temp[4]._y__; 18: MUL temp[0].xy, temp[0].xy__, temp[5].xy__; 19: RCP temp[5].x, temp[4].w___; 20: MUL temp[0].xy, temp[0].xy__, temp[5].xx__; 21: ADD temp[5].xy, temp[3].xy__, -temp[0].xy__; 22: DP4 temp[5].x, temp[5].xy00, temp[5].xy00; 23: RSQ temp[6].x, temp[5].x___; 24: MUL temp[6].x, temp[6].x___, temp[5].x___; 25: SLT temp[7].x, -temp[5].x___, none.0___; 26: MUL temp[5].x, temp[7].x___, temp[6].x___; 27: MOV temp[6].x, none.0___; 28: MOV temp[6].y, temp[5]._x__; 29: MAX temp[7].x, const[2].y___, -const[2].y___; 30: SLT temp[7].x, const[6].z___, temp[7].x___; 31: MOV temp[8].z, temp[1].__x_; 32: MUL temp[8].xy, input[5].xy__, const[4].xx__; 33: MAD temp[9].x, const[4].x___, temp[1].x___, -temp[1].x___; 34: MUL temp[9].x, temp[9].x___, const[6].x___; 35: ADD temp[8].xy, temp[8].xy__, -temp[9].xx__; 36: ADD temp[9].x, temp[5].x___, -temp[1].x___; 37: MUL temp[9].x, temp[9].x___, const[6].x___; 38: ADD temp[6].xy, temp[6].xy__, -temp[9].xx__; 39: ADD temp[9].x, none.1___, -temp[7].x___; 40: MUL temp[9].xy, temp[8].xy__, temp[9].xx__; 41: MAD temp[8].xy, temp[6].xy__, temp[7].xx__, temp[9].xy__; 42: MUL temp[8].xyz, temp[8].xyz_, const[7].xxx_; 43: MUL temp[6].x, input[2].x___, const[6].x___; 44: FRC temp[10].x, temp[6].x___; 45: ADD temp[6].x, temp[6].x___, -temp[10].x___; 46: MAD temp[6].x, const[7].x___, temp[6].x___, none.-1___; 47: ADD temp[9].x, input[2].x___, none.1___; 48: MUL temp[9].x, temp[9].x___, const[6].x___; 49: FRC temp[10].x, temp[9].x___; 50: ADD temp[9].x, temp[9].x___, -temp[10].x___; 51: MUL temp[9].x, temp[9].x___, const[6].x___; 52: FRC temp[9].x, temp[9].x___; 53: MAD temp[9].x, temp[9].x___, const[7].z___, none.1___; 54: MUL temp[10].x, input[4].y___, const[7].w___; 55: SLT temp[11].x, temp[6].x___, none.0___; 56: MUL temp[12].x, const[7].x___, input[4].x___; 57: ADD temp[12].x, temp[8].x___, -temp[12].x___; 58: MAD temp[13].x, const[7].x___, input[4].x___, temp[8].y___; 59: ADD temp[14].x, none.1___, -temp[11].x___; 60: MUL temp[13].x, temp[13].x___, temp[14].x___; 61: MAD temp[11].x, temp[12].x___, temp[11].x___, temp[13].x___; 62: ADD temp[11].x, temp[11].x___, input[4].z___; 63: MUL temp[12].x, temp[9].x___, temp[10].x___; 64: MOV temp[11].y, temp[12]._x__; 65: ADD temp[0].xy, temp[0].xy__, -temp[3].xy__; 66: DP4 temp[12].x, temp[0].xy00, temp[0].xy00; 67: RSQ temp[12].x, temp[12].x___; 68: MUL temp[0].xy, temp[0].xy__, temp[12].xx__; 69: MOV temp[12].x, -temp[0].y___; 70: MOV temp[12].y, temp[0]._x__; 71: MUL temp[13].x, temp[6].x___, -input[1].x___; 72: SGE temp[14].x, none.0___, input[5].z___; 73: MAD temp[15].x, temp[6].x___, temp[0].x___, const[8].x___; 74: SLT temp[16].x, none.0___, temp[15].x___; 75: SLT temp[17].x, temp[15].x___, none.0___; 76: ADD temp[15].x, temp[16].x___, -temp[17].x___; 77: ADD temp[16].x, none.1___, -temp[14].x___; 78: MAD temp[14].x, temp[15].x___, temp[14].x___, temp[16].x___; 79: MUL temp[13].x, temp[13].x___, temp[14].x___; 80: MOV temp[14].w, none.___1; 81: MUL temp[15].xy, input[4].xx__, temp[0].xy__; 82: ADD temp[3].xy, temp[3].xy__, -temp[15].xy__; 83: MUL temp[15].x, temp[10].x___, const[6].x___; 84: MUL temp[15].xy, temp[15].xx__, temp[12].xy__; 85: MUL temp[9].xy, temp[15].xy__, temp[9].xx__; 86: MUL temp[9].xy, temp[9].xy__, temp[6].xx__; 87: ADD temp[3].xy, temp[3].xy__, -temp[9].xy__; 88: MUL temp[6].x, temp[6].x___, -input[1].y___; 89: MUL temp[9].xy, temp[12].xy__, temp[13].xx__; 90: MAD temp[0].xy, temp[0].xy__, temp[6].xx__, temp[9].xy__; 91: ADD temp[0].xy, temp[3].xy__, temp[0].xy__; 92: RCP temp[3].x, const[5].x___; 93: RCP temp[3].y, const[5]._y__; 94: MUL temp[3].xy, const[8].yz__, temp[3].xy__; 95: MUL temp[14].xy, temp[0].xy__, temp[3].xy__; 96: MOV temp[14].z, input[0].__x_; 97: MOV temp[0].zw, temp[14].__zw; 98: SLT temp[2].x, temp[2].w___, const[8].x___; 99: SLT temp[3].x, temp[4].w___, const[8].x___; 100: ADD temp[2].x, temp[2].x___, temp[3].x___; 101: SLT temp[2].x, -temp[2].x___, none.0___; 102: SLT temp[1].x, temp[5].x___, temp[1].x___; 103: MUL temp[1].x, temp[7].x___, temp[1].x___; 104: ADD temp[1].x, temp[2].x___, temp[1].x___; 105: SLT temp[1].x, -temp[1].x___, none.0___; 106: ADD temp[1].x, -temp[1].x___, none.1___; 107: MUL temp[0].xy, temp[14].xy__, temp[1].xx__; 108: MOV output[3].xyz, input[2].yzw_; 109: MOV output[1], temp[10].xxxx; 110: MOV output[5].xy, temp[11].xy__; 111: MOV output[4].xyz, temp[8].xyz_; 112: MOV output[2], input[4].wwww; 113: MOV output[0], temp[0]; 114: MOV output[6], temp[0]; Final vertex program code: 0: op: 0x00f00003 dst: 0t op: VE_ADD src0: 0x01f800c2 reg: 6c swiz: X/ X/ U/ U src1: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 1: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f900a2 reg: 5c 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: 0x00102007 dst: 1t op: VE_MAXIMUM src0: 0x01ff40a1 reg: 5i swiz: Z/ U/ U/ U src1: 0x1fff40a1 reg: 5i swiz: -Z/-U/-U/-U src2: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 3: op: 0x00b04002 dst: 2t op: VE_MULTIPLY src0: 0x00f90002 reg: 0c swiz: X/ Y/ U/ W src1: 0x00380061 reg: 3i swiz: X/ X/ U/ X src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 4: op: 0x00b04004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x00f90022 reg: 1c swiz: X/ Y/ U/ W src1: 0x00792061 reg: 3i swiz: Y/ Y/ U/ Y src2: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W 5: op: 0x00b04004 dst: 2t op: VE_MULTIPLY_ADD src0: 0x00f90042 reg: 2c swiz: X/ Y/ U/ W src1: 0x00ba4021 reg: 1i swiz: Z/ Z/ U/ Z src2: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W 6: op: 0x00b04003 dst: 2t op: VE_ADD src0: 0x00f90040 reg: 2t swiz: X/ Y/ U/ W src1: 0x00f90062 reg: 3c swiz: X/ Y/ U/ W src2: 0x01248062 reg: 3c swiz: 0/ 0/ 0/ 0 7: op: 0x00106003 dst: 3t 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 8: op: 0x00206003 dst: 3t op: VE_ADD src0: 0x1ff9e040 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 9: op: 0x00306002 dst: 3t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 10: op: 0x00108046 dst: 4t op: ME_RECIP_DX src0: 0x00db6040 reg: 2t swiz: W/ W/ W/ W src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 11: op: 0x00306002 dst: 3t op: VE_MULTIPLY src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x01f80080 reg: 4t swiz: X/ X/ U/ U src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 12: op: 0x00b08002 dst: 4t op: VE_MULTIPLY src0: 0x00f90002 reg: 0c swiz: X/ Y/ U/ W src1: 0x00ba4061 reg: 3i swiz: Z/ Z/ U/ Z src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 13: op: 0x00b08004 dst: 4t op: VE_MULTIPLY_ADD src0: 0x00f90022 reg: 1c swiz: X/ Y/ U/ W src1: 0x00fb6061 reg: 3i swiz: W/ W/ U/ W src2: 0x00f90080 reg: 4t swiz: X/ Y/ U/ W 14: op: 0x00b08004 dst: 4t op: VE_MULTIPLY_ADD src0: 0x00f90042 reg: 2c swiz: X/ Y/ U/ W src1: 0x00ba4021 reg: 1i swiz: Z/ Z/ U/ Z src2: 0x00f90080 reg: 4t swiz: X/ Y/ U/ W 15: op: 0x00b08003 dst: 4t op: VE_ADD src0: 0x00f90080 reg: 4t swiz: X/ Y/ U/ W src1: 0x00f90062 reg: 3c swiz: X/ Y/ U/ W src2: 0x01248062 reg: 3c swiz: 0/ 0/ 0/ 0 16: op: 0x0010a003 dst: 5t op: VE_ADD src0: 0x01ff0080 reg: 4t swiz: X/ U/ U/ U src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 17: op: 0x0020a003 dst: 5t op: VE_ADD src0: 0x1ff9e080 reg: 4t swiz: -U/-Y/-U/-U src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 18: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f900a0 reg: 5t swiz: X/ Y/ U/ U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 19: op: 0x0010a046 dst: 5t op: ME_RECIP_DX src0: 0x00db6080 reg: 4t swiz: W/ W/ W/ W src1: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 20: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f800a0 reg: 5t swiz: X/ X/ U/ U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 21: op: 0x0030a003 dst: 5t op: VE_ADD src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x1ff90000 reg: 0t swiz: -X/-Y/-U/-U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 22: op: 0x0010a001 dst: 5t op: VE_DOT_PRODUCT src0: 0x012100a0 reg: 5t swiz: X/ Y/ 0/ 0 src1: 0x012100a0 reg: 5t swiz: X/ Y/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 23: op: 0x0010c048 dst: 6t op: ME_RECIP_SQRT_DX src0: 0x000000a0 reg: 5t swiz: X/ X/ X/ X src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 24: op: 0x0010c002 dst: 6t op: VE_MULTIPLY src0: 0x01ff00c0 reg: 6t swiz: X/ U/ U/ U src1: 0x01ff00a0 reg: 5t swiz: X/ U/ U/ U src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 25: op: 0x0010e00a dst: 7t op: VE_SET_LESS_THAN src0: 0x1fff00a0 reg: 5t swiz: -X/-U/-U/-U src1: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 26: op: 0x0010a002 dst: 5t op: VE_MULTIPLY src0: 0x01ff00e0 reg: 7t swiz: X/ U/ U/ U src1: 0x01ff00c0 reg: 6t swiz: X/ U/ U/ U src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 27: op: 0x0010c003 dst: 6t 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 28: op: 0x0020c003 dst: 6t op: VE_ADD src0: 0x01f8e0a0 reg: 5t swiz: U/ X/ U/ U src1: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 29: op: 0x0010e007 dst: 7t op: VE_MAXIMUM src0: 0x01ff2042 reg: 2c swiz: Y/ U/ U/ U src1: 0x1fff2042 reg: 2c swiz: -Y/-U/-U/-U src2: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 30: op: 0x0010e00a dst: 7t op: VE_SET_LESS_THAN src0: 0x01ff40c2 reg: 6c swiz: Z/ U/ U/ U src1: 0x01ff00e0 reg: 7t swiz: X/ U/ U/ U src2: 0x012480e0 reg: 7t swiz: 0/ 0/ 0/ 0 31: op: 0x00410003 dst: 8t op: VE_ADD src0: 0x01c7e020 reg: 1t swiz: U/ U/ X/ U src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 32: op: 0x00310002 dst: 8t op: VE_MULTIPLY src0: 0x01f900a1 reg: 5i swiz: X/ Y/ U/ U src1: 0x01f80082 reg: 4c swiz: X/ X/ U/ U src2: 0x01248082 reg: 4c swiz: 0/ 0/ 0/ 0 33: op: 0x00112004 dst: 9t op: VE_MULTIPLY_ADD src0: 0x01ff0082 reg: 4c swiz: X/ U/ U/ U src1: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src2: 0x1fff0020 reg: 1t swiz: -X/-U/-U/-U 34: op: 0x00112002 dst: 9t op: VE_MULTIPLY src0: 0x01ff0120 reg: 9t swiz: X/ U/ U/ U src1: 0x01ff00c2 reg: 6c swiz: X/ U/ U/ U src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 35: op: 0x00310003 dst: 8t op: VE_ADD src0: 0x01f90100 reg: 8t swiz: X/ Y/ U/ U src1: 0x1ff80120 reg: 9t swiz: -X/-X/-U/-U src2: 0x01248120 reg: 9t swiz: 0/ 0/ 0/ 0 36: op: 0x00112003 dst: 9t op: VE_ADD src0: 0x01ff00a0 reg: 5t swiz: X/ U/ U/ U src1: 0x1fff0020 reg: 1t swiz: -X/-U/-U/-U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 37: op: 0x00112002 dst: 9t op: VE_MULTIPLY src0: 0x01ff0120 reg: 9t swiz: X/ U/ U/ U src1: 0x01ff00c2 reg: 6c swiz: X/ U/ U/ U src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 38: op: 0x0030c003 dst: 6t op: VE_ADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x1ff80120 reg: 9t swiz: -X/-X/-U/-U src2: 0x01248120 reg: 9t swiz: 0/ 0/ 0/ 0 39: op: 0x00112003 dst: 9t op: VE_ADD src0: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src1: 0x1fff00e0 reg: 7t swiz: -X/-U/-U/-U src2: 0x012480e0 reg: 7t swiz: 0/ 0/ 0/ 0 40: op: 0x00312002 dst: 9t op: VE_MULTIPLY src0: 0x01f90100 reg: 8t swiz: X/ Y/ U/ U src1: 0x01f80120 reg: 9t swiz: X/ X/ U/ U src2: 0x01248120 reg: 9t swiz: 0/ 0/ 0/ 0 41: op: 0x00310080 dst: 8t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01f900c0 reg: 6t swiz: X/ Y/ U/ U src1: 0x01f800e0 reg: 7t swiz: X/ X/ U/ U src2: 0x01f90120 reg: 9t swiz: X/ Y/ U/ U 42: op: 0x00710002 dst: 8t op: VE_MULTIPLY src0: 0x01d10100 reg: 8t swiz: X/ Y/ Z/ U src1: 0x01c000e2 reg: 7c swiz: X/ X/ X/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 43: op: 0x0010c002 dst: 6t op: VE_MULTIPLY src0: 0x01ff0041 reg: 2i swiz: X/ U/ U/ U src1: 0x01ff00c2 reg: 6c swiz: X/ U/ U/ U src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 44: op: 0x00114006 dst: 10t op: VE_FRACTION src0: 0x01ff00c0 reg: 6t swiz: X/ U/ U/ U src1: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 45: op: 0x0010c003 dst: 6t op: VE_ADD src0: 0x01ff00c0 reg: 6t swiz: X/ U/ U/ U src1: 0x1fff0140 reg: 10t swiz: -X/-U/-U/-U src2: 0x01248140 reg: 10t swiz: 0/ 0/ 0/ 0 46: op: 0x0010c004 dst: 6t op: VE_MULTIPLY_ADD src0: 0x01ff00e2 reg: 7c swiz: X/ U/ U/ U src1: 0x01ff00c0 reg: 6t swiz: X/ U/ U/ U src2: 0x03ffa0e0 reg: 7t swiz: -1/ U/ U/ U 47: op: 0x00112003 dst: 9t op: VE_ADD src0: 0x01ff0041 reg: 2i swiz: X/ U/ U/ U src1: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 48: op: 0x00112002 dst: 9t op: VE_MULTIPLY src0: 0x01ff0120 reg: 9t swiz: X/ U/ U/ U src1: 0x01ff00c2 reg: 6c swiz: X/ U/ U/ U src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 49: op: 0x00114006 dst: 10t op: VE_FRACTION src0: 0x01ff0120 reg: 9t swiz: X/ U/ U/ U src1: 0x01248120 reg: 9t swiz: 0/ 0/ 0/ 0 src2: 0x01248120 reg: 9t swiz: 0/ 0/ 0/ 0 50: op: 0x00112003 dst: 9t op: VE_ADD src0: 0x01ff0120 reg: 9t swiz: X/ U/ U/ U src1: 0x1fff0140 reg: 10t swiz: -X/-U/-U/-U src2: 0x01248140 reg: 10t swiz: 0/ 0/ 0/ 0 51: op: 0x00112002 dst: 9t op: VE_MULTIPLY src0: 0x01ff0120 reg: 9t swiz: X/ U/ U/ U src1: 0x01ff00c2 reg: 6c swiz: X/ U/ U/ U src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 52: op: 0x00112006 dst: 9t op: VE_FRACTION src0: 0x01ff0120 reg: 9t swiz: X/ U/ U/ U src1: 0x01248120 reg: 9t swiz: 0/ 0/ 0/ 0 src2: 0x01248120 reg: 9t swiz: 0/ 0/ 0/ 0 53: op: 0x00112004 dst: 9t op: VE_MULTIPLY_ADD src0: 0x01ff0120 reg: 9t swiz: X/ U/ U/ U src1: 0x01ff40e2 reg: 7c swiz: Z/ U/ U/ U src2: 0x01ffa120 reg: 9t swiz: 1/ U/ U/ U 54: op: 0x00114002 dst: 10t op: VE_MULTIPLY src0: 0x01ff2081 reg: 4i swiz: Y/ U/ U/ U src1: 0x01ff60e2 reg: 7c swiz: W/ U/ U/ U src2: 0x012480e2 reg: 7c swiz: 0/ 0/ 0/ 0 55: op: 0x0011600a dst: 11t op: VE_SET_LESS_THAN src0: 0x01ff00c0 reg: 6t swiz: X/ U/ U/ U src1: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 56: op: 0x00118002 dst: 12t op: VE_MULTIPLY src0: 0x01ff00e2 reg: 7c swiz: X/ U/ U/ U src1: 0x01ff0081 reg: 4i swiz: X/ U/ U/ U src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 57: op: 0x00118003 dst: 12t op: VE_ADD src0: 0x01ff0100 reg: 8t swiz: X/ U/ U/ U src1: 0x1fff0180 reg: 12t swiz: -X/-U/-U/-U src2: 0x01248180 reg: 12t swiz: 0/ 0/ 0/ 0 58: op: 0x0011a004 dst: 13t op: VE_MULTIPLY_ADD src0: 0x01ff00e2 reg: 7c swiz: X/ U/ U/ U src1: 0x01ff0081 reg: 4i swiz: X/ U/ U/ U src2: 0x01ff2100 reg: 8t swiz: Y/ U/ U/ U 59: op: 0x0011c003 dst: 14t op: VE_ADD src0: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src1: 0x1fff0160 reg: 11t swiz: -X/-U/-U/-U src2: 0x01248160 reg: 11t swiz: 0/ 0/ 0/ 0 60: op: 0x0011a002 dst: 13t op: VE_MULTIPLY src0: 0x01ff01a0 reg: 13t swiz: X/ U/ U/ U src1: 0x01ff01c0 reg: 14t swiz: X/ U/ U/ U src2: 0x012481c0 reg: 14t swiz: 0/ 0/ 0/ 0 61: op: 0x00116080 dst: 11t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01ff0180 reg: 12t swiz: X/ U/ U/ U src1: 0x01ff0160 reg: 11t swiz: X/ U/ U/ U src2: 0x01ff01a0 reg: 13t swiz: X/ U/ U/ U 62: op: 0x00116003 dst: 11t op: VE_ADD src0: 0x01ff0160 reg: 11t swiz: X/ U/ U/ U src1: 0x01ff4081 reg: 4i swiz: Z/ U/ U/ U src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 63: op: 0x00118002 dst: 12t op: VE_MULTIPLY src0: 0x01ff0120 reg: 9t swiz: X/ U/ U/ U src1: 0x01ff0140 reg: 10t swiz: X/ U/ U/ U src2: 0x01248140 reg: 10t swiz: 0/ 0/ 0/ 0 64: op: 0x00216003 dst: 11t op: VE_ADD src0: 0x01f8e180 reg: 12t swiz: U/ X/ U/ U src1: 0x01248180 reg: 12t swiz: 0/ 0/ 0/ 0 src2: 0x01248180 reg: 12t swiz: 0/ 0/ 0/ 0 65: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x1ff90060 reg: 3t swiz: -X/-Y/-U/-U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 66: op: 0x00118001 dst: 12t op: VE_DOT_PRODUCT src0: 0x01210000 reg: 0t swiz: X/ Y/ 0/ 0 src1: 0x01210000 reg: 0t swiz: X/ Y/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 67: op: 0x00118048 dst: 12t op: ME_RECIP_SQRT_DX src0: 0x00000180 reg: 12t swiz: X/ X/ X/ X src1: 0x01248180 reg: 12t swiz: 0/ 0/ 0/ 0 src2: 0x01248180 reg: 12t swiz: 0/ 0/ 0/ 0 68: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f80180 reg: 12t swiz: X/ X/ U/ U src2: 0x01248180 reg: 12t swiz: 0/ 0/ 0/ 0 69: op: 0x00118003 dst: 12t op: VE_ADD src0: 0x1fff2000 reg: 0t swiz: -Y/-U/-U/-U src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 70: op: 0x00218003 dst: 12t op: VE_ADD 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 71: op: 0x0011a002 dst: 13t op: VE_MULTIPLY src0: 0x01ff00c0 reg: 6t swiz: X/ U/ U/ U src1: 0x1fff0021 reg: 1i swiz: -X/-U/-U/-U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 72: op: 0x0011c009 dst: 14t op: VE_SET_GREATER_THAN_EQUAL src0: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src1: 0x01ff40a1 reg: 5i swiz: Z/ U/ U/ U src2: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 73: op: 0x0011e004 dst: 15t op: VE_MULTIPLY_ADD src0: 0x01ff00c0 reg: 6t swiz: X/ U/ U/ U src1: 0x01ff0000 reg: 0t swiz: X/ U/ U/ U src2: 0x01ff0102 reg: 8c swiz: X/ U/ U/ U 74: op: 0x0012000a dst: 16t op: VE_SET_LESS_THAN src0: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src1: 0x01ff01e0 reg: 15t swiz: X/ U/ U/ U src2: 0x012481e0 reg: 15t swiz: 0/ 0/ 0/ 0 75: op: 0x0012200a dst: 17t op: VE_SET_LESS_THAN src0: 0x01ff01e0 reg: 15t swiz: X/ U/ U/ U src1: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 76: op: 0x0011e003 dst: 15t op: VE_ADD src0: 0x01ff0200 reg: 16t swiz: X/ U/ U/ U src1: 0x1fff0220 reg: 17t swiz: -X/-U/-U/-U src2: 0x01248220 reg: 17t swiz: 0/ 0/ 0/ 0 77: op: 0x00120003 dst: 16t op: VE_ADD src0: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src1: 0x1fff01c0 reg: 14t swiz: -X/-U/-U/-U src2: 0x012481c0 reg: 14t swiz: 0/ 0/ 0/ 0 78: op: 0x0011c080 dst: 14t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01ff01e0 reg: 15t swiz: X/ U/ U/ U src1: 0x01ff01c0 reg: 14t swiz: X/ U/ U/ U src2: 0x01ff0200 reg: 16t swiz: X/ U/ U/ U 79: op: 0x0011a002 dst: 13t op: VE_MULTIPLY src0: 0x01ff01a0 reg: 13t swiz: X/ U/ U/ U src1: 0x01ff01c0 reg: 14t swiz: X/ U/ U/ U src2: 0x012481c0 reg: 14t swiz: 0/ 0/ 0/ 0 80: op: 0x0081c003 dst: 14t op: VE_ADD src0: 0x017fe000 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 81: op: 0x0031e002 dst: 15t op: VE_MULTIPLY src0: 0x01f80081 reg: 4i swiz: X/ X/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 82: op: 0x00306003 dst: 3t op: VE_ADD src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x1ff901e0 reg: 15t swiz: -X/-Y/-U/-U src2: 0x012481e0 reg: 15t swiz: 0/ 0/ 0/ 0 83: op: 0x0011e002 dst: 15t op: VE_MULTIPLY src0: 0x01ff0140 reg: 10t swiz: X/ U/ U/ U src1: 0x01ff00c2 reg: 6c swiz: X/ U/ U/ U src2: 0x012480c2 reg: 6c swiz: 0/ 0/ 0/ 0 84: op: 0x0031e002 dst: 15t op: VE_MULTIPLY src0: 0x01f801e0 reg: 15t swiz: X/ X/ U/ U src1: 0x01f90180 reg: 12t swiz: X/ Y/ U/ U src2: 0x01248180 reg: 12t swiz: 0/ 0/ 0/ 0 85: op: 0x00312002 dst: 9t op: VE_MULTIPLY src0: 0x01f901e0 reg: 15t swiz: X/ Y/ U/ U src1: 0x01f80120 reg: 9t swiz: X/ X/ U/ U src2: 0x01248120 reg: 9t swiz: 0/ 0/ 0/ 0 86: op: 0x00312002 dst: 9t op: VE_MULTIPLY src0: 0x01f90120 reg: 9t swiz: X/ Y/ U/ U src1: 0x01f800c0 reg: 6t swiz: X/ X/ U/ U src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 87: op: 0x00306003 dst: 3t op: VE_ADD src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x1ff90120 reg: 9t swiz: -X/-Y/-U/-U src2: 0x01248120 reg: 9t swiz: 0/ 0/ 0/ 0 88: op: 0x0010c002 dst: 6t op: VE_MULTIPLY src0: 0x01ff00c0 reg: 6t swiz: X/ U/ U/ U src1: 0x1fff2021 reg: 1i swiz: -Y/-U/-U/-U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 89: op: 0x00312002 dst: 9t op: VE_MULTIPLY src0: 0x01f90180 reg: 12t swiz: X/ Y/ U/ U src1: 0x01f801a0 reg: 13t swiz: X/ X/ U/ U src2: 0x012481a0 reg: 13t swiz: 0/ 0/ 0/ 0 90: op: 0x00300080 dst: 0t op: PVS_MACRO_OP_2CLK_MADD src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f800c0 reg: 6t swiz: X/ X/ U/ U src2: 0x01f90120 reg: 9t swiz: X/ Y/ U/ U 91: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src1: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 92: op: 0x00106046 dst: 3t op: ME_RECIP_DX src0: 0x000000a2 reg: 5c swiz: X/ X/ X/ X src1: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 src2: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 93: op: 0x00206046 dst: 3t op: ME_RECIP_DX src0: 0x004920a2 reg: 5c swiz: Y/ Y/ Y/ Y src1: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 src2: 0x012480a2 reg: 5c swiz: 0/ 0/ 0/ 0 94: op: 0x00306002 dst: 3t op: VE_MULTIPLY src0: 0x01fa2102 reg: 8c swiz: Y/ Z/ U/ U src1: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 95: op: 0x0031c002 dst: 14t op: VE_MULTIPLY src0: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U src1: 0x01f90060 reg: 3t swiz: X/ Y/ U/ U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 96: op: 0x0041c003 dst: 14t op: VE_ADD src0: 0x01c7e001 reg: 0i swiz: U/ U/ X/ U src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 97: op: 0x00c00003 dst: 0t op: VE_ADD src0: 0x00d7e1c0 reg: 14t swiz: U/ U/ Z/ W src1: 0x012481c0 reg: 14t swiz: 0/ 0/ 0/ 0 src2: 0x012481c0 reg: 14t swiz: 0/ 0/ 0/ 0 98: op: 0x0010400a dst: 2t op: VE_SET_LESS_THAN src0: 0x01ff6040 reg: 2t swiz: W/ U/ U/ U src1: 0x01ff0102 reg: 8c swiz: X/ U/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 99: op: 0x0010600a dst: 3t op: VE_SET_LESS_THAN src0: 0x01ff6080 reg: 4t swiz: W/ U/ U/ U src1: 0x01ff0102 reg: 8c swiz: X/ U/ U/ U src2: 0x01248102 reg: 8c swiz: 0/ 0/ 0/ 0 100: op: 0x00104003 dst: 2t op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff0060 reg: 3t swiz: X/ U/ U/ U src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 101: op: 0x0010400a dst: 2t op: VE_SET_LESS_THAN src0: 0x1fff0040 reg: 2t swiz: -X/-U/-U/-U src1: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 102: op: 0x0010200a dst: 1t op: VE_SET_LESS_THAN src0: 0x01ff00a0 reg: 5t swiz: X/ U/ U/ U src1: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 103: op: 0x00102002 dst: 1t op: VE_MULTIPLY src0: 0x01ff00e0 reg: 7t swiz: X/ U/ U/ U src1: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 104: op: 0x00102003 dst: 1t op: VE_ADD src0: 0x01ff0040 reg: 2t swiz: X/ U/ U/ U src1: 0x01ff0020 reg: 1t swiz: X/ U/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 105: op: 0x0010200a dst: 1t op: VE_SET_LESS_THAN src0: 0x1fff0020 reg: 1t swiz: -X/-U/-U/-U src1: 0x01ff8000 reg: 0t swiz: 0/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 106: op: 0x00102003 dst: 1t op: VE_ADD src0: 0x1fff0020 reg: 1t swiz: -X/-U/-U/-U src1: 0x01ffa000 reg: 0t swiz: 1/ U/ U/ U src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 107: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f901c0 reg: 14t swiz: X/ Y/ U/ U src1: 0x01f80020 reg: 1t swiz: X/ X/ U/ U src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 108: op: 0x00706203 dst: 3o op: VE_ADD src0: 0x01da2041 reg: 2i swiz: Y/ Z/ W/ U src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 109: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00000140 reg: 10t swiz: X/ X/ X/ X src1: 0x01248140 reg: 10t swiz: 0/ 0/ 0/ 0 src2: 0x01248140 reg: 10t swiz: 0/ 0/ 0/ 0 110: op: 0x0030a203 dst: 5o op: VE_ADD src0: 0x01f90160 reg: 11t swiz: X/ Y/ U/ U src1: 0x01248160 reg: 11t swiz: 0/ 0/ 0/ 0 src2: 0x01248160 reg: 11t swiz: 0/ 0/ 0/ 0 111: op: 0x00708203 dst: 4o op: VE_ADD src0: 0x01d10100 reg: 8t swiz: X/ Y/ Z/ U src1: 0x01248100 reg: 8t swiz: 0/ 0/ 0/ 0 src2: 0x01248100 reg: 8t swiz: 0/ 0/ 0/ 0 112: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00db6081 reg: 4i swiz: W/ W/ W/ W src1: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 113: 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 114: op: 0x00f0c203 dst: 6o 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 fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[12], PERSPECTIVE DCL IN[1], GENERIC[13], PERSPECTIVE DCL IN[2], GENERIC[14], PERSPECTIVE DCL IN[3], GENERIC[15], PERSPECTIVE DCL IN[4], GENERIC[16], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[0..1] DCL CONST[6..9] DCL TEMP[0], LOCAL DCL TEMP[1], LOCAL DCL TEMP[2], LOCAL DCL TEMP[3], LOCAL DCL TEMP[4], LOCAL DCL TEMP[5], LOCAL DCL TEMP[6], LOCAL DCL TEMP[7], LOCAL DCL TEMP[8], LOCAL DCL TEMP[9], LOCAL IMM FLT32 { 0.5000, 255.0000, 1.0323, 0.0312} IMM FLT32 { 0.0000, 1.0000, 0.0156, 2.0000} IMM FLT32 { 128.0000, 1020.0000, 10.6250, -0.5000} IMM FLT32 { 26.0000, 0.0000, 0.0000, 0.0000} 0: ADD TEMP[0].x, IN[2].zzzz, IMM[0].xxxx 1: RCP TEMP[1].x, CONST[8].xxxx 2: MUL TEMP[2].x, TEMP[0].xxxx, TEMP[1].xxxx 3: FRC TEMP[3].x, TEMP[2].xxxx 4: FLR TEMP[2].x, TEMP[2].xxxx 5: ADD TEMP[2].x, TEMP[2].xxxx, IMM[0].xxxx 6: RCP TEMP[4].x, CONST[8].yyyy 7: MUL TEMP[2].x, TEMP[2].xxxx, TEMP[4].xxxx 8: MOV TEMP[3].y, TEMP[2].xxxx 9: TEX TEMP[2], TEMP[3].xyyy, SAMP[2], 2D 10: MAD TEMP[2], IMM[0].yyyy, TEMP[2], IMM[0].xxxx 11: FLR TEMP[2].x, TEMP[2] 12: MUL TEMP[3].x, TEMP[2].xxxx, IMM[0].wwww 13: FRC TEMP[3].x, TEMP[3].xxxx 14: MUL TEMP[3].x, IMM[0].zzzz, TEMP[3].xxxx 15: SEQ TEMP[5].x, TEMP[3].xxxx, IMM[1].xxxx 16: CMP TEMP[4].x, -TEMP[5].xxxx, IMM[1].yyyy, IMM[1].xxxx 17: KIL -TEMP[4].xxxx 18: MUL TEMP[4].x, TEMP[2].xxxx, IMM[1].zzzz 19: FLR TEMP[4].x, TEMP[4].xxxx 20: MOV_SAT TEMP[4].x, TEMP[4].xxxx 21: SLT TEMP[4].x, IMM[0].xxxx, TEMP[4].xxxx 22: ABS TEMP[5].x, IN[4].yyyy 23: MUL TEMP[6].x, IN[0].xxxx, IMM[0].xxxx 24: SLT TEMP[5].x, TEMP[6].xxxx, TEMP[5].xxxx 25: ADD TEMP[6].x, -TEMP[4].xxxx, IMM[1].yyyy 26: CMP TEMP[5].x, -TEMP[6].xxxx, IMM[1].xxxx, TEMP[5].xxxx 27: CMP TEMP[5].x, -TEMP[5].xxxx, IMM[1].yyyy, IMM[1].xxxx 28: KIL -TEMP[5].xxxx 29: MUL TEMP[2].x, IMM[1].zzzz, TEMP[2].xxxx 30: FRC TEMP[2].x, TEMP[2].xxxx 31: MUL TEMP[2].x, IMM[1].wwww, TEMP[2].xxxx 32: SGE TEMP[2].x, TEMP[2].xxxx, IMM[1].yyyy 33: MOV TEMP[5].y, IMM[1].xxxx 34: MOV TEMP[5].x, IN[3].zzzz 35: ADD TEMP[5].xy, TEMP[5].xyyy, -IN[4].xyyy 36: CMP TEMP[0].xy, -TEMP[2].xxxx, TEMP[5].xyxx, IN[4].xyyy 37: ADD TEMP[5].xy, IN[3].zzzz, -IN[3].yxxx 38: CMP TEMP[1].xy, -TEMP[2].xxxx, TEMP[5].xyxx, IN[3].xyyy 39: FLR TEMP[2].x, TEMP[0].xxxx 40: MOV TEMP[5].x, TEMP[2].xxxx 41: MOV TEMP[5].y, IN[1].xxxx 42: ADD TEMP[5].xy, TEMP[5].xyyy, IMM[0].xxxx 43: RCP TEMP[6].x, CONST[7].xxxx 44: RCP TEMP[6].y, CONST[7].yyyy 45: MUL TEMP[5].xy, TEMP[5].xyyy, TEMP[6].xyyy 46: TEX TEMP[5].xy, TEMP[5].xyyy, SAMP[1], 2D 47: MUL TEMP[6].xy, IMM[0].yyyy, TEMP[5].xyyy 48: ADD TEMP[6].xy, IMM[2].xxxx, -TEMP[6].xyyy 49: ADD TEMP[2].xy, TEMP[2].xxxx, TEMP[6].xyyy 50: SGE TEMP[7].x, TEMP[2].xxxx, TEMP[1].xxxx 51: MOV TEMP[7].x, TEMP[7].xxxx 52: SGE TEMP[8].x, TEMP[2].yyyy, TEMP[1].xxxx 53: MOV TEMP[7].y, TEMP[8].xxxx 54: SGE TEMP[8].x, TEMP[1].yyyy, TEMP[2].xxxx 55: MOV TEMP[8].x, TEMP[8].xxxx 56: SGE TEMP[1].x, TEMP[1].yyyy, TEMP[2].yyyy 57: MOV TEMP[8].y, TEMP[1].xxxx 58: MUL TEMP[1].xy, TEMP[7].xyyy, TEMP[8].xyyy 59: CEIL TEMP[5].xy, TEMP[5].xyyy 60: MUL TEMP[1].xy, TEMP[1].xyyy, TEMP[5].xyyy 61: ADD TEMP[7].x, TEMP[1].xxxx, TEMP[1].yyyy 62: SEQ TEMP[7].x, TEMP[7].xxxx, IMM[1].xxxx 63: CMP TEMP[5].x, -TEMP[7].xxxx, IMM[1].yyyy, IMM[1].xxxx 64: KIL -TEMP[5].xxxx 65: ADD TEMP[7].x, -TEMP[4].xxxx, IMM[1].yyyy 66: CMP TEMP[5].x, -TEMP[7].xxxx, IMM[1].xxxx, IMM[1].yyyy 67: ADD TEMP[5].x, TEMP[2].xxxx, TEMP[5].xxxx 68: MOV TEMP[5].y, IN[1].xxxx 69: MOV TEMP[7].x, -TEMP[0].yyyy 70: MOV TEMP[7].y, -TEMP[6].xxxx 71: ADD TEMP[8].x, -TEMP[4].xxxx, IMM[1].yyyy 72: MOV TEMP[9].x, -TEMP[6].xxxx 73: MOV TEMP[9].y, TEMP[0].yyyy 74: CMP TEMP[7].xy, -TEMP[8].xxxx, TEMP[9].xyxx, TEMP[7].xyyy 75: ADD TEMP[9].x, -TEMP[4].xxxx, IMM[1].yyyy 76: CMP TEMP[8].x, -TEMP[9].xxxx, IMM[1].xxxx, IMM[1].yyyy 77: ADD TEMP[2].x, TEMP[2].yyyy, TEMP[8].xxxx 78: MOV TEMP[2].y, IN[1].xxxx 79: MOV TEMP[8].x, -TEMP[0].yyyy 80: MOV TEMP[8].y, -TEMP[6].yyyy 81: ADD TEMP[4].x, -TEMP[4].xxxx, IMM[1].yyyy 82: MOV TEMP[6].x, -TEMP[6].yyyy 83: MOV TEMP[6].y, TEMP[0].yyyy 84: CMP TEMP[0].xy, -TEMP[4].xxxx, TEMP[6].xyxx, TEMP[8].xyyy 85: ADD TEMP[4].xy, TEMP[5].xyyy, IMM[0].xxxx 86: RCP TEMP[5].x, CONST[7].xxxx 87: RCP TEMP[5].y, CONST[7].yyyy 88: MUL TEMP[4].xy, TEMP[4].xyyy, TEMP[5].xyyy 89: TEX TEMP[4].zw, TEMP[4].xyyy, SAMP[1], 2D 90: MAD TEMP[4].xy, IMM[2].yyyy, TEMP[4].zwww, IMM[1].yyyy 91: ADD TEMP[4].xy, TEMP[4].xyyy, TEMP[7].xyyy 92: RCP TEMP[5].x, CONST[6].xxxx 93: RCP TEMP[5].y, CONST[6].yyyy 94: MUL TEMP[4].xy, TEMP[4].xyyy, TEMP[5].xyyy 95: TEX TEMP[4].w, TEMP[4].xyyy, SAMP[0], 2D 96: MOV TEMP[4].x, TEMP[4].wwww 97: ADD TEMP[2].xy, TEMP[2].xyyy, IMM[0].xxxx 98: RCP TEMP[5].x, CONST[7].xxxx 99: RCP TEMP[5].y, CONST[7].yyyy 100: MUL TEMP[2].xy, TEMP[2].xyyy, TEMP[5].xyyy 101: TEX TEMP[2].zw, TEMP[2].xyyy, SAMP[1], 2D 102: MAD TEMP[2].xy, IMM[2].yyyy, TEMP[2].zwww, IMM[1].yyyy 103: ADD TEMP[0].xy, TEMP[2].xyyy, TEMP[0].xyyy 104: RCP TEMP[2].x, CONST[6].xxxx 105: RCP TEMP[2].y, CONST[6].yyyy 106: MUL TEMP[0].xy, TEMP[0].xyyy, TEMP[2].xyyy 107: TEX TEMP[0].w, TEMP[0].xyyy, SAMP[0], 2D 108: MOV TEMP[4].y, TEMP[0].wwww 109: MUL TEMP[0].xy, TEMP[4].xyyy, TEMP[1].xyyy 110: MAX TEMP[0].x, TEMP[0].xxxx, TEMP[0].yyyy 111: ADD TEMP[0].x, TEMP[0].xxxx, IMM[2].wwww 112: MAD TEMP[0].x, IMM[2].zzzz, TEMP[0].xxxx, IMM[0].xxxx 113: ADD_SAT TEMP[0].x, TEMP[0].xxxx, CONST[0].xxxx 114: SEQ TEMP[2].x, TEMP[0].xxxx, IMM[1].xxxx 115: CMP TEMP[1].x, -TEMP[2].xxxx, IMM[1].yyyy, IMM[1].xxxx 116: KIL -TEMP[1].xxxx 117: ADD TEMP[1].x, IN[2].yyyy, IMM[0].xxxx 118: RCP TEMP[2].x, CONST[9].xxxx 119: MUL TEMP[1].x, TEMP[1].xxxx, TEMP[2].xxxx 120: FRC TEMP[2].x, TEMP[1].xxxx 121: FLR TEMP[1].x, TEMP[1].xxxx 122: MAD TEMP[1].x, IMM[3].xxxx, TEMP[1].xxxx, CONST[1].xxxx 123: ADD TEMP[1].x, TEMP[1].xxxx, IMM[0].xxxx 124: RCP TEMP[4].x, CONST[9].yyyy 125: MUL TEMP[1].x, TEMP[1].xxxx, TEMP[4].xxxx 126: MOV TEMP[2].y, TEMP[1].xxxx 127: TEX TEMP[1], TEMP[2].xyyy, SAMP[3], 2D 128: MOV TEMP[2].xyz, TEMP[1].xyzx 129: MUL TEMP[1].x, TEMP[1].wwww, TEMP[3].xxxx 130: MUL TEMP[0].x, TEMP[1].xxxx, TEMP[0].xxxx 131: MOV TEMP[2].w, TEMP[0].xxxx 132: MOV OUT[0], TEMP[2] 133: END Fragment Program: before compilation # Radeon Compiler Program 0: ADD temp[0].x, input[2].zzzz, const[10].xxxx; 1: RCP temp[1].x, const[8].xxxx; 2: MUL temp[2].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[3].x, temp[2].xxxx; 4: FLR temp[2].x, temp[2].xxxx; 5: ADD temp[2].x, temp[2].xxxx, const[10].xxxx; 6: RCP temp[4].x, const[8].yyyy; 7: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 8: MOV temp[3].y, temp[2].xxxx; 9: TEX temp[2], temp[3].xyyy, 2D[2]; 10: MAD temp[2], const[10].yyyy, temp[2], const[10].xxxx; 11: FLR temp[2].x, temp[2]; 12: MUL temp[3].x, temp[2].xxxx, const[10].wwww; 13: FRC temp[3].x, temp[3].xxxx; 14: MUL temp[3].x, const[10].zzzz, temp[3].xxxx; 15: SEQ temp[5].x, temp[3].xxxx, const[11].xxxx; 16: CMP temp[4].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 17: KIL -temp[4].xxxx; 18: MUL temp[4].x, temp[2].xxxx, const[11].zzzz; 19: FLR temp[4].x, temp[4].xxxx; 20: MOV_SAT temp[4].x, temp[4].xxxx; 21: SLT temp[4].x, const[10].xxxx, temp[4].xxxx; 22: ABS temp[5].x, input[4].yyyy; 23: MUL temp[6].x, input[0].xxxx, const[10].xxxx; 24: SLT temp[5].x, temp[6].xxxx, temp[5].xxxx; 25: ADD temp[6].x, -temp[4].xxxx, const[11].yyyy; 26: CMP temp[5].x, -temp[6].xxxx, const[11].xxxx, temp[5].xxxx; 27: CMP temp[5].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 28: KIL -temp[5].xxxx; 29: MUL temp[2].x, const[11].zzzz, temp[2].xxxx; 30: FRC temp[2].x, temp[2].xxxx; 31: MUL temp[2].x, const[11].wwww, temp[2].xxxx; 32: SGE temp[2].x, temp[2].xxxx, const[11].yyyy; 33: MOV temp[5].y, const[11].xxxx; 34: MOV temp[5].x, input[3].zzzz; 35: ADD temp[5].xy, temp[5].xyyy, -input[4].xyyy; 36: CMP temp[0].xy, -temp[2].xxxx, temp[5].xyxx, input[4].xyyy; 37: ADD temp[5].xy, input[3].zzzz, -input[3].yxxx; 38: CMP temp[1].xy, -temp[2].xxxx, temp[5].xyxx, input[3].xyyy; 39: FLR temp[2].x, temp[0].xxxx; 40: MOV temp[5].x, temp[2].xxxx; 41: MOV temp[5].y, input[1].xxxx; 42: ADD temp[5].xy, temp[5].xyyy, const[10].xxxx; 43: RCP temp[6].x, const[7].xxxx; 44: RCP temp[6].y, const[7].yyyy; 45: MUL temp[5].xy, temp[5].xyyy, temp[6].xyyy; 46: TEX temp[5].xy, temp[5].xyyy, 2D[1]; 47: MUL temp[6].xy, const[10].yyyy, temp[5].xyyy; 48: ADD temp[6].xy, const[12].xxxx, -temp[6].xyyy; 49: ADD temp[2].xy, temp[2].xxxx, temp[6].xyyy; 50: SGE temp[7].x, temp[2].xxxx, temp[1].xxxx; 51: MOV temp[7].x, temp[7].xxxx; 52: SGE temp[8].x, temp[2].yyyy, temp[1].xxxx; 53: MOV temp[7].y, temp[8].xxxx; 54: SGE temp[8].x, temp[1].yyyy, temp[2].xxxx; 55: MOV temp[8].x, temp[8].xxxx; 56: SGE temp[1].x, temp[1].yyyy, temp[2].yyyy; 57: MOV temp[8].y, temp[1].xxxx; 58: MUL temp[1].xy, temp[7].xyyy, temp[8].xyyy; 59: CEIL temp[5].xy, temp[5].xyyy; 60: MUL temp[1].xy, temp[1].xyyy, temp[5].xyyy; 61: ADD temp[7].x, temp[1].xxxx, temp[1].yyyy; 62: SEQ temp[7].x, temp[7].xxxx, const[11].xxxx; 63: CMP temp[5].x, -temp[7].xxxx, const[11].yyyy, const[11].xxxx; 64: KIL -temp[5].xxxx; 65: ADD temp[7].x, -temp[4].xxxx, const[11].yyyy; 66: CMP temp[5].x, -temp[7].xxxx, const[11].xxxx, const[11].yyyy; 67: ADD temp[5].x, temp[2].xxxx, temp[5].xxxx; 68: MOV temp[5].y, input[1].xxxx; 69: MOV temp[7].x, -temp[0].yyyy; 70: MOV temp[7].y, -temp[6].xxxx; 71: ADD temp[8].x, -temp[4].xxxx, const[11].yyyy; 72: MOV temp[9].x, -temp[6].xxxx; 73: MOV temp[9].y, temp[0].yyyy; 74: CMP temp[7].xy, -temp[8].xxxx, temp[9].xyxx, temp[7].xyyy; 75: ADD temp[9].x, -temp[4].xxxx, const[11].yyyy; 76: CMP temp[8].x, -temp[9].xxxx, const[11].xxxx, const[11].yyyy; 77: ADD temp[2].x, temp[2].yyyy, temp[8].xxxx; 78: MOV temp[2].y, input[1].xxxx; 79: MOV temp[8].x, -temp[0].yyyy; 80: MOV temp[8].y, -temp[6].yyyy; 81: ADD temp[4].x, -temp[4].xxxx, const[11].yyyy; 82: MOV temp[6].x, -temp[6].yyyy; 83: MOV temp[6].y, temp[0].yyyy; 84: CMP temp[0].xy, -temp[4].xxxx, temp[6].xyxx, temp[8].xyyy; 85: ADD temp[4].xy, temp[5].xyyy, const[10].xxxx; 86: RCP temp[5].x, const[7].xxxx; 87: RCP temp[5].y, const[7].yyyy; 88: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 89: TEX temp[4].zw, temp[4].xyyy, 2D[1]; 90: MAD temp[4].xy, const[12].yyyy, temp[4].zwww, const[11].yyyy; 91: ADD temp[4].xy, temp[4].xyyy, temp[7].xyyy; 92: RCP temp[5].x, const[6].xxxx; 93: RCP temp[5].y, const[6].yyyy; 94: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 95: TEX temp[4].w, temp[4].xyyy, 2D[0]; 96: MOV temp[4].x, temp[4].wwww; 97: ADD temp[2].xy, temp[2].xyyy, const[10].xxxx; 98: RCP temp[5].x, const[7].xxxx; 99: RCP temp[5].y, const[7].yyyy; 100: MUL temp[2].xy, temp[2].xyyy, temp[5].xyyy; 101: TEX temp[2].zw, temp[2].xyyy, 2D[1]; 102: MAD temp[2].xy, const[12].yyyy, temp[2].zwww, const[11].yyyy; 103: ADD temp[0].xy, temp[2].xyyy, temp[0].xyyy; 104: RCP temp[2].x, const[6].xxxx; 105: RCP temp[2].y, const[6].yyyy; 106: MUL temp[0].xy, temp[0].xyyy, temp[2].xyyy; 107: TEX temp[0].w, temp[0].xyyy, 2D[0]; 108: MOV temp[4].y, temp[0].wwww; 109: MUL temp[0].xy, temp[4].xyyy, temp[1].xyyy; 110: MAX temp[0].x, temp[0].xxxx, temp[0].yyyy; 111: ADD temp[0].x, temp[0].xxxx, const[12].wwww; 112: MAD temp[0].x, const[12].zzzz, temp[0].xxxx, const[10].xxxx; 113: ADD_SAT temp[0].x, temp[0].xxxx, const[0].xxxx; 114: SEQ temp[2].x, temp[0].xxxx, const[11].xxxx; 115: CMP temp[1].x, -temp[2].xxxx, const[11].yyyy, const[11].xxxx; 116: KIL -temp[1].xxxx; 117: ADD temp[1].x, input[2].yyyy, const[10].xxxx; 118: RCP temp[2].x, const[9].xxxx; 119: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 120: FRC temp[2].x, temp[1].xxxx; 121: FLR temp[1].x, temp[1].xxxx; 122: MAD temp[1].x, const[13].xxxx, temp[1].xxxx, const[1].xxxx; 123: ADD temp[1].x, temp[1].xxxx, const[10].xxxx; 124: RCP temp[4].x, const[9].yyyy; 125: MUL temp[1].x, temp[1].xxxx, temp[4].xxxx; 126: MOV temp[2].y, temp[1].xxxx; 127: TEX temp[1], temp[2].xyyy, 2D[3]; 128: MOV temp[2].xyz, temp[1].xyzx; 129: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 130: MUL temp[0].x, temp[1].xxxx, temp[0].xxxx; 131: MOV temp[2].w, temp[0].xxxx; 132: MOV output[0], temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: ADD temp[0].x, input[2].zzzz, const[10].xxxx; 1: RCP temp[1].x, const[8].xxxx; 2: MUL temp[2].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[3].x, temp[2].xxxx; 4: FLR temp[2].x, temp[2].xxxx; 5: ADD temp[2].x, temp[2].xxxx, const[10].xxxx; 6: RCP temp[4].x, const[8].yyyy; 7: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 8: MOV temp[3].y, temp[2].xxxx; 9: TEX temp[2], temp[3].xyyy, 2D[2]; 10: MAD temp[2], const[10].yyyy, temp[2], const[10].xxxx; 11: FLR temp[2].x, temp[2]; 12: MUL temp[3].x, temp[2].xxxx, const[10].wwww; 13: FRC temp[3].x, temp[3].xxxx; 14: MUL temp[3].x, const[10].zzzz, temp[3].xxxx; 15: SEQ temp[5].x, temp[3].xxxx, const[11].xxxx; 16: CMP temp[4].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 17: KIL -temp[4].xxxx; 18: MUL temp[4].x, temp[2].xxxx, const[11].zzzz; 19: FLR temp[4].x, temp[4].xxxx; 20: MOV_SAT temp[4].x, temp[4].xxxx; 21: SLT temp[4].x, const[10].xxxx, temp[4].xxxx; 22: ABS temp[5].x, input[4].yyyy; 23: MUL temp[6].x, input[0].xxxx, const[10].xxxx; 24: SLT temp[5].x, temp[6].xxxx, temp[5].xxxx; 25: ADD temp[6].x, -temp[4].xxxx, const[11].yyyy; 26: CMP temp[5].x, -temp[6].xxxx, const[11].xxxx, temp[5].xxxx; 27: CMP temp[5].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 28: KIL -temp[5].xxxx; 29: MUL temp[2].x, const[11].zzzz, temp[2].xxxx; 30: FRC temp[2].x, temp[2].xxxx; 31: MUL temp[2].x, const[11].wwww, temp[2].xxxx; 32: SGE temp[2].x, temp[2].xxxx, const[11].yyyy; 33: MOV temp[5].y, const[11].xxxx; 34: MOV temp[5].x, input[3].zzzz; 35: ADD temp[5].xy, temp[5].xyyy, -input[4].xyyy; 36: CMP temp[0].xy, -temp[2].xxxx, temp[5].xyxx, input[4].xyyy; 37: ADD temp[5].xy, input[3].zzzz, -input[3].yxxx; 38: CMP temp[1].xy, -temp[2].xxxx, temp[5].xyxx, input[3].xyyy; 39: FLR temp[2].x, temp[0].xxxx; 40: MOV temp[5].x, temp[2].xxxx; 41: MOV temp[5].y, input[1].xxxx; 42: ADD temp[5].xy, temp[5].xyyy, const[10].xxxx; 43: RCP temp[6].x, const[7].xxxx; 44: RCP temp[6].y, const[7].yyyy; 45: MUL temp[5].xy, temp[5].xyyy, temp[6].xyyy; 46: TEX temp[5].xy, temp[5].xyyy, 2D[1]; 47: MUL temp[6].xy, const[10].yyyy, temp[5].xyyy; 48: ADD temp[6].xy, const[12].xxxx, -temp[6].xyyy; 49: ADD temp[2].xy, temp[2].xxxx, temp[6].xyyy; 50: SGE temp[7].x, temp[2].xxxx, temp[1].xxxx; 51: MOV temp[7].x, temp[7].xxxx; 52: SGE temp[8].x, temp[2].yyyy, temp[1].xxxx; 53: MOV temp[7].y, temp[8].xxxx; 54: SGE temp[8].x, temp[1].yyyy, temp[2].xxxx; 55: MOV temp[8].x, temp[8].xxxx; 56: SGE temp[1].x, temp[1].yyyy, temp[2].yyyy; 57: MOV temp[8].y, temp[1].xxxx; 58: MUL temp[1].xy, temp[7].xyyy, temp[8].xyyy; 59: CEIL temp[5].xy, temp[5].xyyy; 60: MUL temp[1].xy, temp[1].xyyy, temp[5].xyyy; 61: ADD temp[7].x, temp[1].xxxx, temp[1].yyyy; 62: SEQ temp[7].x, temp[7].xxxx, const[11].xxxx; 63: CMP temp[5].x, -temp[7].xxxx, const[11].yyyy, const[11].xxxx; 64: KIL -temp[5].xxxx; 65: ADD temp[7].x, -temp[4].xxxx, const[11].yyyy; 66: CMP temp[5].x, -temp[7].xxxx, const[11].xxxx, const[11].yyyy; 67: ADD temp[5].x, temp[2].xxxx, temp[5].xxxx; 68: MOV temp[5].y, input[1].xxxx; 69: MOV temp[7].x, -temp[0].yyyy; 70: MOV temp[7].y, -temp[6].xxxx; 71: ADD temp[8].x, -temp[4].xxxx, const[11].yyyy; 72: MOV temp[9].x, -temp[6].xxxx; 73: MOV temp[9].y, temp[0].yyyy; 74: CMP temp[7].xy, -temp[8].xxxx, temp[9].xyxx, temp[7].xyyy; 75: ADD temp[9].x, -temp[4].xxxx, const[11].yyyy; 76: CMP temp[8].x, -temp[9].xxxx, const[11].xxxx, const[11].yyyy; 77: ADD temp[2].x, temp[2].yyyy, temp[8].xxxx; 78: MOV temp[2].y, input[1].xxxx; 79: MOV temp[8].x, -temp[0].yyyy; 80: MOV temp[8].y, -temp[6].yyyy; 81: ADD temp[4].x, -temp[4].xxxx, const[11].yyyy; 82: MOV temp[6].x, -temp[6].yyyy; 83: MOV temp[6].y, temp[0].yyyy; 84: CMP temp[0].xy, -temp[4].xxxx, temp[6].xyxx, temp[8].xyyy; 85: ADD temp[4].xy, temp[5].xyyy, const[10].xxxx; 86: RCP temp[5].x, const[7].xxxx; 87: RCP temp[5].y, const[7].yyyy; 88: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 89: TEX temp[4].zw, temp[4].xyyy, 2D[1]; 90: MAD temp[4].xy, const[12].yyyy, temp[4].zwww, const[11].yyyy; 91: ADD temp[4].xy, temp[4].xyyy, temp[7].xyyy; 92: RCP temp[5].x, const[6].xxxx; 93: RCP temp[5].y, const[6].yyyy; 94: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 95: TEX temp[4].w, temp[4].xyyy, 2D[0]; 96: MOV temp[4].x, temp[4].wwww; 97: ADD temp[2].xy, temp[2].xyyy, const[10].xxxx; 98: RCP temp[5].x, const[7].xxxx; 99: RCP temp[5].y, const[7].yyyy; 100: MUL temp[2].xy, temp[2].xyyy, temp[5].xyyy; 101: TEX temp[2].zw, temp[2].xyyy, 2D[1]; 102: MAD temp[2].xy, const[12].yyyy, temp[2].zwww, const[11].yyyy; 103: ADD temp[0].xy, temp[2].xyyy, temp[0].xyyy; 104: RCP temp[2].x, const[6].xxxx; 105: RCP temp[2].y, const[6].yyyy; 106: MUL temp[0].xy, temp[0].xyyy, temp[2].xyyy; 107: TEX temp[0].w, temp[0].xyyy, 2D[0]; 108: MOV temp[4].y, temp[0].wwww; 109: MUL temp[0].xy, temp[4].xyyy, temp[1].xyyy; 110: MAX temp[0].x, temp[0].xxxx, temp[0].yyyy; 111: ADD temp[0].x, temp[0].xxxx, const[12].wwww; 112: MAD temp[0].x, const[12].zzzz, temp[0].xxxx, const[10].xxxx; 113: ADD_SAT temp[0].x, temp[0].xxxx, const[0].xxxx; 114: SEQ temp[2].x, temp[0].xxxx, const[11].xxxx; 115: CMP temp[1].x, -temp[2].xxxx, const[11].yyyy, const[11].xxxx; 116: KIL -temp[1].xxxx; 117: ADD temp[1].x, input[2].yyyy, const[10].xxxx; 118: RCP temp[2].x, const[9].xxxx; 119: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 120: FRC temp[2].x, temp[1].xxxx; 121: FLR temp[1].x, temp[1].xxxx; 122: MAD temp[1].x, const[13].xxxx, temp[1].xxxx, const[1].xxxx; 123: ADD temp[1].x, temp[1].xxxx, const[10].xxxx; 124: RCP temp[4].x, const[9].yyyy; 125: MUL temp[1].x, temp[1].xxxx, temp[4].xxxx; 126: MOV temp[2].y, temp[1].xxxx; 127: TEX temp[1], temp[2].xyyy, 2D[3]; 128: MOV temp[2].xyz, temp[1].xyzx; 129: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 130: MUL temp[0].x, temp[1].xxxx, temp[0].xxxx; 131: MOV temp[2].w, temp[0].xxxx; 132: MOV output[0], temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: ADD temp[0].x, input[2].zzzz, const[10].xxxx; 1: RCP temp[1].x, const[8].xxxx; 2: MUL temp[2].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[3].x, temp[2].xxxx; 4: FLR temp[2].x, temp[2].xxxx; 5: ADD temp[2].x, temp[2].xxxx, const[10].xxxx; 6: RCP temp[4].x, const[8].yyyy; 7: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 8: MOV temp[3].y, temp[2].xxxx; 9: TEX temp[2], temp[3].xyyy, 2D[2]; 10: MAD temp[2], const[10].yyyy, temp[2], const[10].xxxx; 11: FLR temp[2].x, temp[2]; 12: MUL temp[3].x, temp[2].xxxx, const[10].wwww; 13: FRC temp[3].x, temp[3].xxxx; 14: MUL temp[3].x, const[10].zzzz, temp[3].xxxx; 15: SEQ temp[5].x, temp[3].xxxx, const[11].xxxx; 16: CMP temp[4].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 17: KIL -temp[4].xxxx; 18: MUL temp[4].x, temp[2].xxxx, const[11].zzzz; 19: FLR temp[4].x, temp[4].xxxx; 20: MOV_SAT temp[4].x, temp[4].xxxx; 21: SLT temp[4].x, const[10].xxxx, temp[4].xxxx; 22: ABS temp[5].x, input[4].yyyy; 23: MUL temp[6].x, input[0].xxxx, const[10].xxxx; 24: SLT temp[5].x, temp[6].xxxx, temp[5].xxxx; 25: ADD temp[6].x, -temp[4].xxxx, const[11].yyyy; 26: CMP temp[5].x, -temp[6].xxxx, const[11].xxxx, temp[5].xxxx; 27: CMP temp[5].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 28: KIL -temp[5].xxxx; 29: MUL temp[2].x, const[11].zzzz, temp[2].xxxx; 30: FRC temp[2].x, temp[2].xxxx; 31: MUL temp[2].x, const[11].wwww, temp[2].xxxx; 32: SGE temp[2].x, temp[2].xxxx, const[11].yyyy; 33: MOV temp[5].y, const[11].xxxx; 34: MOV temp[5].x, input[3].zzzz; 35: ADD temp[5].xy, temp[5].xyyy, -input[4].xyyy; 36: CMP temp[0].xy, -temp[2].xxxx, temp[5].xyxx, input[4].xyyy; 37: ADD temp[5].xy, input[3].zzzz, -input[3].yxxx; 38: CMP temp[1].xy, -temp[2].xxxx, temp[5].xyxx, input[3].xyyy; 39: FLR temp[2].x, temp[0].xxxx; 40: MOV temp[5].x, temp[2].xxxx; 41: MOV temp[5].y, input[1].xxxx; 42: ADD temp[5].xy, temp[5].xyyy, const[10].xxxx; 43: RCP temp[6].x, const[7].xxxx; 44: RCP temp[6].y, const[7].yyyy; 45: MUL temp[5].xy, temp[5].xyyy, temp[6].xyyy; 46: TEX temp[5].xy, temp[5].xyyy, 2D[1]; 47: MUL temp[6].xy, const[10].yyyy, temp[5].xyyy; 48: ADD temp[6].xy, const[12].xxxx, -temp[6].xyyy; 49: ADD temp[2].xy, temp[2].xxxx, temp[6].xyyy; 50: SGE temp[7].x, temp[2].xxxx, temp[1].xxxx; 51: MOV temp[7].x, temp[7].xxxx; 52: SGE temp[8].x, temp[2].yyyy, temp[1].xxxx; 53: MOV temp[7].y, temp[8].xxxx; 54: SGE temp[8].x, temp[1].yyyy, temp[2].xxxx; 55: MOV temp[8].x, temp[8].xxxx; 56: SGE temp[1].x, temp[1].yyyy, temp[2].yyyy; 57: MOV temp[8].y, temp[1].xxxx; 58: MUL temp[1].xy, temp[7].xyyy, temp[8].xyyy; 59: CEIL temp[5].xy, temp[5].xyyy; 60: MUL temp[1].xy, temp[1].xyyy, temp[5].xyyy; 61: ADD temp[7].x, temp[1].xxxx, temp[1].yyyy; 62: SEQ temp[7].x, temp[7].xxxx, const[11].xxxx; 63: CMP temp[5].x, -temp[7].xxxx, const[11].yyyy, const[11].xxxx; 64: KIL -temp[5].xxxx; 65: ADD temp[7].x, -temp[4].xxxx, const[11].yyyy; 66: CMP temp[5].x, -temp[7].xxxx, const[11].xxxx, const[11].yyyy; 67: ADD temp[5].x, temp[2].xxxx, temp[5].xxxx; 68: MOV temp[5].y, input[1].xxxx; 69: MOV temp[7].x, -temp[0].yyyy; 70: MOV temp[7].y, -temp[6].xxxx; 71: ADD temp[8].x, -temp[4].xxxx, const[11].yyyy; 72: MOV temp[9].x, -temp[6].xxxx; 73: MOV temp[9].y, temp[0].yyyy; 74: CMP temp[7].xy, -temp[8].xxxx, temp[9].xyxx, temp[7].xyyy; 75: ADD temp[9].x, -temp[4].xxxx, const[11].yyyy; 76: CMP temp[8].x, -temp[9].xxxx, const[11].xxxx, const[11].yyyy; 77: ADD temp[2].x, temp[2].yyyy, temp[8].xxxx; 78: MOV temp[2].y, input[1].xxxx; 79: MOV temp[8].x, -temp[0].yyyy; 80: MOV temp[8].y, -temp[6].yyyy; 81: ADD temp[4].x, -temp[4].xxxx, const[11].yyyy; 82: MOV temp[6].x, -temp[6].yyyy; 83: MOV temp[6].y, temp[0].yyyy; 84: CMP temp[0].xy, -temp[4].xxxx, temp[6].xyxx, temp[8].xyyy; 85: ADD temp[4].xy, temp[5].xyyy, const[10].xxxx; 86: RCP temp[5].x, const[7].xxxx; 87: RCP temp[5].y, const[7].yyyy; 88: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 89: TEX temp[4].zw, temp[4].xyyy, 2D[1]; 90: MAD temp[4].xy, const[12].yyyy, temp[4].zwww, const[11].yyyy; 91: ADD temp[4].xy, temp[4].xyyy, temp[7].xyyy; 92: RCP temp[5].x, const[6].xxxx; 93: RCP temp[5].y, const[6].yyyy; 94: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 95: TEX temp[4].w, temp[4].xyyy, 2D[0]; 96: MOV temp[4].x, temp[4].wwww; 97: ADD temp[2].xy, temp[2].xyyy, const[10].xxxx; 98: RCP temp[5].x, const[7].xxxx; 99: RCP temp[5].y, const[7].yyyy; 100: MUL temp[2].xy, temp[2].xyyy, temp[5].xyyy; 101: TEX temp[2].zw, temp[2].xyyy, 2D[1]; 102: MAD temp[2].xy, const[12].yyyy, temp[2].zwww, const[11].yyyy; 103: ADD temp[0].xy, temp[2].xyyy, temp[0].xyyy; 104: RCP temp[2].x, const[6].xxxx; 105: RCP temp[2].y, const[6].yyyy; 106: MUL temp[0].xy, temp[0].xyyy, temp[2].xyyy; 107: TEX temp[0].w, temp[0].xyyy, 2D[0]; 108: MOV temp[4].y, temp[0].wwww; 109: MUL temp[0].xy, temp[4].xyyy, temp[1].xyyy; 110: MAX temp[0].x, temp[0].xxxx, temp[0].yyyy; 111: ADD temp[0].x, temp[0].xxxx, const[12].wwww; 112: MAD temp[0].x, const[12].zzzz, temp[0].xxxx, const[10].xxxx; 113: ADD_SAT temp[0].x, temp[0].xxxx, const[0].xxxx; 114: SEQ temp[2].x, temp[0].xxxx, const[11].xxxx; 115: CMP temp[1].x, -temp[2].xxxx, const[11].yyyy, const[11].xxxx; 116: KIL -temp[1].xxxx; 117: ADD temp[1].x, input[2].yyyy, const[10].xxxx; 118: RCP temp[2].x, const[9].xxxx; 119: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 120: FRC temp[2].x, temp[1].xxxx; 121: FLR temp[1].x, temp[1].xxxx; 122: MAD temp[1].x, const[13].xxxx, temp[1].xxxx, const[1].xxxx; 123: ADD temp[1].x, temp[1].xxxx, const[10].xxxx; 124: RCP temp[4].x, const[9].yyyy; 125: MUL temp[1].x, temp[1].xxxx, temp[4].xxxx; 126: MOV temp[2].y, temp[1].xxxx; 127: TEX temp[1], temp[2].xyyy, 2D[3]; 128: MOV temp[2].xyz, temp[1].xyzx; 129: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 130: MUL temp[0].x, temp[1].xxxx, temp[0].xxxx; 131: MOV temp[2].w, temp[0].xxxx; 132: MOV output[0], temp[2]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].x, input[2].zzzz, const[10].xxxx; 1: RCP temp[1].x, const[8].xxxx; 2: MUL temp[2].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[3].x, temp[2].xxxx; 4: FLR temp[2].x, temp[2].xxxx; 5: ADD temp[2].x, temp[2].xxxx, const[10].xxxx; 6: RCP temp[4].x, const[8].yyyy; 7: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 8: MOV temp[3].y, temp[2].xxxx; 9: TEX temp[2], temp[3].xyyy, 2D[2]; 10: MAD temp[2], const[10].yyyy, temp[2], const[10].xxxx; 11: FLR temp[2].x, temp[2]; 12: MUL temp[3].x, temp[2].xxxx, const[10].wwww; 13: FRC temp[3].x, temp[3].xxxx; 14: MUL temp[3].x, const[10].zzzz, temp[3].xxxx; 15: SEQ temp[5].x, temp[3].xxxx, const[11].xxxx; 16: CMP temp[4].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 17: KIL -temp[4].xxxx; 18: MUL temp[4].x, temp[2].xxxx, const[11].zzzz; 19: FLR temp[4].x, temp[4].xxxx; 20: MOV_SAT temp[4].x, temp[4].xxxx; 21: SLT temp[4].x, const[10].xxxx, temp[4].xxxx; 22: ABS temp[5].x, input[4].yyyy; 23: MUL temp[6].x, input[0].xxxx, const[10].xxxx; 24: SLT temp[5].x, temp[6].xxxx, temp[5].xxxx; 25: ADD temp[6].x, -temp[4].xxxx, const[11].yyyy; 26: CMP temp[5].x, -temp[6].xxxx, const[11].xxxx, temp[5].xxxx; 27: CMP temp[5].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 28: KIL -temp[5].xxxx; 29: MUL temp[2].x, const[11].zzzz, temp[2].xxxx; 30: FRC temp[2].x, temp[2].xxxx; 31: MUL temp[2].x, const[11].wwww, temp[2].xxxx; 32: SGE temp[2].x, temp[2].xxxx, const[11].yyyy; 33: MOV temp[5].y, const[11].xxxx; 34: MOV temp[5].x, input[3].zzzz; 35: ADD temp[5].xy, temp[5].xyyy, -input[4].xyyy; 36: CMP temp[0].xy, -temp[2].xxxx, temp[5].xyxx, input[4].xyyy; 37: ADD temp[5].xy, input[3].zzzz, -input[3].yxxx; 38: CMP temp[1].xy, -temp[2].xxxx, temp[5].xyxx, input[3].xyyy; 39: FLR temp[2].x, temp[0].xxxx; 40: MOV temp[5].x, temp[2].xxxx; 41: MOV temp[5].y, input[1].xxxx; 42: ADD temp[5].xy, temp[5].xyyy, const[10].xxxx; 43: RCP temp[6].x, const[7].xxxx; 44: RCP temp[6].y, const[7].yyyy; 45: MUL temp[5].xy, temp[5].xyyy, temp[6].xyyy; 46: TEX temp[5].xy, temp[5].xyyy, 2D[1]; 47: MUL temp[6].xy, const[10].yyyy, temp[5].xyyy; 48: ADD temp[6].xy, const[12].xxxx, -temp[6].xyyy; 49: ADD temp[2].xy, temp[2].xxxx, temp[6].xyyy; 50: SGE temp[7].x, temp[2].xxxx, temp[1].xxxx; 51: MOV temp[7].x, temp[7].xxxx; 52: SGE temp[8].x, temp[2].yyyy, temp[1].xxxx; 53: MOV temp[7].y, temp[8].xxxx; 54: SGE temp[8].x, temp[1].yyyy, temp[2].xxxx; 55: MOV temp[8].x, temp[8].xxxx; 56: SGE temp[1].x, temp[1].yyyy, temp[2].yyyy; 57: MOV temp[8].y, temp[1].xxxx; 58: MUL temp[1].xy, temp[7].xyyy, temp[8].xyyy; 59: CEIL temp[5].xy, temp[5].xyyy; 60: MUL temp[1].xy, temp[1].xyyy, temp[5].xyyy; 61: ADD temp[7].x, temp[1].xxxx, temp[1].yyyy; 62: SEQ temp[7].x, temp[7].xxxx, const[11].xxxx; 63: CMP temp[5].x, -temp[7].xxxx, const[11].yyyy, const[11].xxxx; 64: KIL -temp[5].xxxx; 65: ADD temp[7].x, -temp[4].xxxx, const[11].yyyy; 66: CMP temp[5].x, -temp[7].xxxx, const[11].xxxx, const[11].yyyy; 67: ADD temp[5].x, temp[2].xxxx, temp[5].xxxx; 68: MOV temp[5].y, input[1].xxxx; 69: MOV temp[7].x, -temp[0].yyyy; 70: MOV temp[7].y, -temp[6].xxxx; 71: ADD temp[8].x, -temp[4].xxxx, const[11].yyyy; 72: MOV temp[9].x, -temp[6].xxxx; 73: MOV temp[9].y, temp[0].yyyy; 74: CMP temp[7].xy, -temp[8].xxxx, temp[9].xyxx, temp[7].xyyy; 75: ADD temp[9].x, -temp[4].xxxx, const[11].yyyy; 76: CMP temp[8].x, -temp[9].xxxx, const[11].xxxx, const[11].yyyy; 77: ADD temp[2].x, temp[2].yyyy, temp[8].xxxx; 78: MOV temp[2].y, input[1].xxxx; 79: MOV temp[8].x, -temp[0].yyyy; 80: MOV temp[8].y, -temp[6].yyyy; 81: ADD temp[4].x, -temp[4].xxxx, const[11].yyyy; 82: MOV temp[6].x, -temp[6].yyyy; 83: MOV temp[6].y, temp[0].yyyy; 84: CMP temp[0].xy, -temp[4].xxxx, temp[6].xyxx, temp[8].xyyy; 85: ADD temp[4].xy, temp[5].xyyy, const[10].xxxx; 86: RCP temp[5].x, const[7].xxxx; 87: RCP temp[5].y, const[7].yyyy; 88: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 89: TEX temp[4].zw, temp[4].xyyy, 2D[1]; 90: MAD temp[4].xy, const[12].yyyy, temp[4].zwww, const[11].yyyy; 91: ADD temp[4].xy, temp[4].xyyy, temp[7].xyyy; 92: RCP temp[5].x, const[6].xxxx; 93: RCP temp[5].y, const[6].yyyy; 94: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 95: TEX temp[4].w, temp[4].xyyy, 2D[0]; 96: MOV temp[4].x, temp[4].wwww; 97: ADD temp[2].xy, temp[2].xyyy, const[10].xxxx; 98: RCP temp[5].x, const[7].xxxx; 99: RCP temp[5].y, const[7].yyyy; 100: MUL temp[2].xy, temp[2].xyyy, temp[5].xyyy; 101: TEX temp[2].zw, temp[2].xyyy, 2D[1]; 102: MAD temp[2].xy, const[12].yyyy, temp[2].zwww, const[11].yyyy; 103: ADD temp[0].xy, temp[2].xyyy, temp[0].xyyy; 104: RCP temp[2].x, const[6].xxxx; 105: RCP temp[2].y, const[6].yyyy; 106: MUL temp[0].xy, temp[0].xyyy, temp[2].xyyy; 107: TEX temp[0].w, temp[0].xyyy, 2D[0]; 108: MOV temp[4].y, temp[0].wwww; 109: MUL temp[0].xy, temp[4].xyyy, temp[1].xyyy; 110: MAX temp[0].x, temp[0].xxxx, temp[0].yyyy; 111: ADD temp[0].x, temp[0].xxxx, const[12].wwww; 112: MAD temp[0].x, const[12].zzzz, temp[0].xxxx, const[10].xxxx; 113: ADD_SAT temp[0].x, temp[0].xxxx, const[0].xxxx; 114: SEQ temp[2].x, temp[0].xxxx, const[11].xxxx; 115: CMP temp[1].x, -temp[2].xxxx, const[11].yyyy, const[11].xxxx; 116: KIL -temp[1].xxxx; 117: ADD temp[1].x, input[2].yyyy, const[10].xxxx; 118: RCP temp[2].x, const[9].xxxx; 119: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 120: FRC temp[2].x, temp[1].xxxx; 121: FLR temp[1].x, temp[1].xxxx; 122: MAD temp[1].x, const[13].xxxx, temp[1].xxxx, const[1].xxxx; 123: ADD temp[1].x, temp[1].xxxx, const[10].xxxx; 124: RCP temp[4].x, const[9].yyyy; 125: MUL temp[1].x, temp[1].xxxx, temp[4].xxxx; 126: MOV temp[2].y, temp[1].xxxx; 127: TEX temp[1], temp[2].xyyy, 2D[3]; 128: MOV temp[2].xyz, temp[1].xyzx; 129: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 130: MUL temp[0].x, temp[1].xxxx, temp[0].xxxx; 131: MOV temp[2].w, temp[0].xxxx; 132: MOV output[0], temp[2]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].x, input[2].zzzz, const[10].xxxx; 1: RCP temp[1].x, const[8].xxxx; 2: MUL temp[2].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[3].x, temp[2].xxxx; 4: FLR temp[2].x, temp[2].xxxx; 5: ADD temp[2].x, temp[2].xxxx, const[10].xxxx; 6: RCP temp[4].x, const[8].yyyy; 7: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 8: MOV temp[3].y, temp[2].xxxx; 9: TEX temp[2], temp[3].xyyy, 2D[2]; 10: MAD temp[2], const[10].yyyy, temp[2], const[10].xxxx; 11: FLR temp[2].x, temp[2]; 12: MUL temp[3].x, temp[2].xxxx, const[10].wwww; 13: FRC temp[3].x, temp[3].xxxx; 14: MUL temp[3].x, const[10].zzzz, temp[3].xxxx; 15: SEQ temp[5].x, temp[3].xxxx, const[11].xxxx; 16: CMP temp[4].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 17: KIL -temp[4].xxxx; 18: MUL temp[4].x, temp[2].xxxx, const[11].zzzz; 19: FLR temp[4].x, temp[4].xxxx; 20: MOV_SAT temp[4].x, temp[4].xxxx; 21: SLT temp[4].x, const[10].xxxx, temp[4].xxxx; 22: ABS temp[5].x, input[4].yyyy; 23: MUL temp[6].x, input[0].xxxx, const[10].xxxx; 24: SLT temp[5].x, temp[6].xxxx, temp[5].xxxx; 25: ADD temp[6].x, -temp[4].xxxx, const[11].yyyy; 26: CMP temp[5].x, -temp[6].xxxx, const[11].xxxx, temp[5].xxxx; 27: CMP temp[5].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 28: KIL -temp[5].xxxx; 29: MUL temp[2].x, const[11].zzzz, temp[2].xxxx; 30: FRC temp[2].x, temp[2].xxxx; 31: MUL temp[2].x, const[11].wwww, temp[2].xxxx; 32: SGE temp[2].x, temp[2].xxxx, const[11].yyyy; 33: MOV temp[5].y, const[11].xxxx; 34: MOV temp[5].x, input[3].zzzz; 35: ADD temp[5].xy, temp[5].xyyy, -input[4].xyyy; 36: CMP temp[0].xy, -temp[2].xxxx, temp[5].xyxx, input[4].xyyy; 37: ADD temp[5].xy, input[3].zzzz, -input[3].yxxx; 38: CMP temp[1].xy, -temp[2].xxxx, temp[5].xyxx, input[3].xyyy; 39: FLR temp[2].x, temp[0].xxxx; 40: MOV temp[5].x, temp[2].xxxx; 41: MOV temp[5].y, input[1].xxxx; 42: ADD temp[5].xy, temp[5].xyyy, const[10].xxxx; 43: RCP temp[6].x, const[7].xxxx; 44: RCP temp[6].y, const[7].yyyy; 45: MUL temp[5].xy, temp[5].xyyy, temp[6].xyyy; 46: TEX temp[5].xy, temp[5].xyyy, 2D[1]; 47: MUL temp[6].xy, const[10].yyyy, temp[5].xyyy; 48: ADD temp[6].xy, const[12].xxxx, -temp[6].xyyy; 49: ADD temp[2].xy, temp[2].xxxx, temp[6].xyyy; 50: SGE temp[7].x, temp[2].xxxx, temp[1].xxxx; 51: MOV temp[7].x, temp[7].xxxx; 52: SGE temp[8].x, temp[2].yyyy, temp[1].xxxx; 53: MOV temp[7].y, temp[8].xxxx; 54: SGE temp[8].x, temp[1].yyyy, temp[2].xxxx; 55: MOV temp[8].x, temp[8].xxxx; 56: SGE temp[1].x, temp[1].yyyy, temp[2].yyyy; 57: MOV temp[8].y, temp[1].xxxx; 58: MUL temp[1].xy, temp[7].xyyy, temp[8].xyyy; 59: CEIL temp[5].xy, temp[5].xyyy; 60: MUL temp[1].xy, temp[1].xyyy, temp[5].xyyy; 61: ADD temp[7].x, temp[1].xxxx, temp[1].yyyy; 62: SEQ temp[7].x, temp[7].xxxx, const[11].xxxx; 63: CMP temp[5].x, -temp[7].xxxx, const[11].yyyy, const[11].xxxx; 64: KIL -temp[5].xxxx; 65: ADD temp[7].x, -temp[4].xxxx, const[11].yyyy; 66: CMP temp[5].x, -temp[7].xxxx, const[11].xxxx, const[11].yyyy; 67: ADD temp[5].x, temp[2].xxxx, temp[5].xxxx; 68: MOV temp[5].y, input[1].xxxx; 69: MOV temp[7].x, -temp[0].yyyy; 70: MOV temp[7].y, -temp[6].xxxx; 71: ADD temp[8].x, -temp[4].xxxx, const[11].yyyy; 72: MOV temp[9].x, -temp[6].xxxx; 73: MOV temp[9].y, temp[0].yyyy; 74: CMP temp[7].xy, -temp[8].xxxx, temp[9].xyxx, temp[7].xyyy; 75: ADD temp[9].x, -temp[4].xxxx, const[11].yyyy; 76: CMP temp[8].x, -temp[9].xxxx, const[11].xxxx, const[11].yyyy; 77: ADD temp[2].x, temp[2].yyyy, temp[8].xxxx; 78: MOV temp[2].y, input[1].xxxx; 79: MOV temp[8].x, -temp[0].yyyy; 80: MOV temp[8].y, -temp[6].yyyy; 81: ADD temp[4].x, -temp[4].xxxx, const[11].yyyy; 82: MOV temp[6].x, -temp[6].yyyy; 83: MOV temp[6].y, temp[0].yyyy; 84: CMP temp[0].xy, -temp[4].xxxx, temp[6].xyxx, temp[8].xyyy; 85: ADD temp[4].xy, temp[5].xyyy, const[10].xxxx; 86: RCP temp[5].x, const[7].xxxx; 87: RCP temp[5].y, const[7].yyyy; 88: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 89: TEX temp[4].zw, temp[4].xyyy, 2D[1]; 90: MAD temp[4].xy, const[12].yyyy, temp[4].zwww, const[11].yyyy; 91: ADD temp[4].xy, temp[4].xyyy, temp[7].xyyy; 92: RCP temp[5].x, const[6].xxxx; 93: RCP temp[5].y, const[6].yyyy; 94: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 95: TEX temp[4].w, temp[4].xyyy, 2D[0]; 96: MOV temp[4].x, temp[4].wwww; 97: ADD temp[2].xy, temp[2].xyyy, const[10].xxxx; 98: RCP temp[5].x, const[7].xxxx; 99: RCP temp[5].y, const[7].yyyy; 100: MUL temp[2].xy, temp[2].xyyy, temp[5].xyyy; 101: TEX temp[2].zw, temp[2].xyyy, 2D[1]; 102: MAD temp[2].xy, const[12].yyyy, temp[2].zwww, const[11].yyyy; 103: ADD temp[0].xy, temp[2].xyyy, temp[0].xyyy; 104: RCP temp[2].x, const[6].xxxx; 105: RCP temp[2].y, const[6].yyyy; 106: MUL temp[0].xy, temp[0].xyyy, temp[2].xyyy; 107: TEX temp[0].w, temp[0].xyyy, 2D[0]; 108: MOV temp[4].y, temp[0].wwww; 109: MUL temp[0].xy, temp[4].xyyy, temp[1].xyyy; 110: MAX temp[0].x, temp[0].xxxx, temp[0].yyyy; 111: ADD temp[0].x, temp[0].xxxx, const[12].wwww; 112: MAD temp[0].x, const[12].zzzz, temp[0].xxxx, const[10].xxxx; 113: ADD_SAT temp[0].x, temp[0].xxxx, const[0].xxxx; 114: SEQ temp[2].x, temp[0].xxxx, const[11].xxxx; 115: CMP temp[1].x, -temp[2].xxxx, const[11].yyyy, const[11].xxxx; 116: KIL -temp[1].xxxx; 117: ADD temp[1].x, input[2].yyyy, const[10].xxxx; 118: RCP temp[2].x, const[9].xxxx; 119: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 120: FRC temp[2].x, temp[1].xxxx; 121: FLR temp[1].x, temp[1].xxxx; 122: MAD temp[1].x, const[13].xxxx, temp[1].xxxx, const[1].xxxx; 123: ADD temp[1].x, temp[1].xxxx, const[10].xxxx; 124: RCP temp[4].x, const[9].yyyy; 125: MUL temp[1].x, temp[1].xxxx, temp[4].xxxx; 126: MOV temp[2].y, temp[1].xxxx; 127: TEX temp[1], temp[2].xyyy, 2D[3]; 128: MOV temp[2].xyz, temp[1].xyzx; 129: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 130: MUL temp[0].x, temp[1].xxxx, temp[0].xxxx; 131: MOV temp[2].w, temp[0].xxxx; 132: MOV output[0], temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: ADD temp[0].x, input[2].zzzz, const[10].xxxx; 1: RCP temp[1].x, const[8].xxxx; 2: MUL temp[2].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[3].x, temp[2].xxxx; 4: FLR temp[2].x, temp[2].xxxx; 5: ADD temp[2].x, temp[2].xxxx, const[10].xxxx; 6: RCP temp[4].x, const[8].yyyy; 7: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 8: MOV temp[3].y, temp[2].xxxx; 9: TEX temp[2], temp[3].xyyy, 2D[2]; 10: MAD temp[2], const[10].yyyy, temp[2], const[10].xxxx; 11: FLR temp[2].x, temp[2]; 12: MUL temp[3].x, temp[2].xxxx, const[10].wwww; 13: FRC temp[3].x, temp[3].xxxx; 14: MUL temp[3].x, const[10].zzzz, temp[3].xxxx; 15: SEQ temp[5].x, temp[3].xxxx, const[11].xxxx; 16: CMP temp[4].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 17: KIL -temp[4].xxxx; 18: MUL temp[4].x, temp[2].xxxx, const[11].zzzz; 19: FLR temp[4].x, temp[4].xxxx; 20: MOV_SAT temp[4].x, temp[4].xxxx; 21: SLT temp[4].x, const[10].xxxx, temp[4].xxxx; 22: ABS temp[5].x, input[4].yyyy; 23: MUL temp[6].x, input[0].xxxx, const[10].xxxx; 24: SLT temp[5].x, temp[6].xxxx, temp[5].xxxx; 25: ADD temp[6].x, -temp[4].xxxx, const[11].yyyy; 26: CMP temp[5].x, -temp[6].xxxx, const[11].xxxx, temp[5].xxxx; 27: CMP temp[5].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 28: KIL -temp[5].xxxx; 29: MUL temp[2].x, const[11].zzzz, temp[2].xxxx; 30: FRC temp[2].x, temp[2].xxxx; 31: MUL temp[2].x, const[11].wwww, temp[2].xxxx; 32: SGE temp[2].x, temp[2].xxxx, const[11].yyyy; 33: MOV temp[5].y, const[11].xxxx; 34: MOV temp[5].x, input[3].zzzz; 35: ADD temp[5].xy, temp[5].xyyy, -input[4].xyyy; 36: CMP temp[0].xy, -temp[2].xxxx, temp[5].xyxx, input[4].xyyy; 37: ADD temp[5].xy, input[3].zzzz, -input[3].yxxx; 38: CMP temp[1].xy, -temp[2].xxxx, temp[5].xyxx, input[3].xyyy; 39: FLR temp[2].x, temp[0].xxxx; 40: MOV temp[5].x, temp[2].xxxx; 41: MOV temp[5].y, input[1].xxxx; 42: ADD temp[5].xy, temp[5].xyyy, const[10].xxxx; 43: RCP temp[6].x, const[7].xxxx; 44: RCP temp[6].y, const[7].yyyy; 45: MUL temp[5].xy, temp[5].xyyy, temp[6].xyyy; 46: TEX temp[10], temp[5].xyyy, 2D[1]; 47: MOV temp[5].xy, temp[10]; 48: MUL temp[6].xy, const[10].yyyy, temp[5].xyyy; 49: ADD temp[6].xy, const[12].xxxx, -temp[6].xyyy; 50: ADD temp[2].xy, temp[2].xxxx, temp[6].xyyy; 51: SGE temp[7].x, temp[2].xxxx, temp[1].xxxx; 52: MOV temp[7].x, temp[7].xxxx; 53: SGE temp[8].x, temp[2].yyyy, temp[1].xxxx; 54: MOV temp[7].y, temp[8].xxxx; 55: SGE temp[8].x, temp[1].yyyy, temp[2].xxxx; 56: MOV temp[8].x, temp[8].xxxx; 57: SGE temp[1].x, temp[1].yyyy, temp[2].yyyy; 58: MOV temp[8].y, temp[1].xxxx; 59: MUL temp[1].xy, temp[7].xyyy, temp[8].xyyy; 60: CEIL temp[5].xy, temp[5].xyyy; 61: MUL temp[1].xy, temp[1].xyyy, temp[5].xyyy; 62: ADD temp[7].x, temp[1].xxxx, temp[1].yyyy; 63: SEQ temp[7].x, temp[7].xxxx, const[11].xxxx; 64: CMP temp[5].x, -temp[7].xxxx, const[11].yyyy, const[11].xxxx; 65: KIL -temp[5].xxxx; 66: ADD temp[7].x, -temp[4].xxxx, const[11].yyyy; 67: CMP temp[5].x, -temp[7].xxxx, const[11].xxxx, const[11].yyyy; 68: ADD temp[5].x, temp[2].xxxx, temp[5].xxxx; 69: MOV temp[5].y, input[1].xxxx; 70: MOV temp[7].x, -temp[0].yyyy; 71: MOV temp[7].y, -temp[6].xxxx; 72: ADD temp[8].x, -temp[4].xxxx, const[11].yyyy; 73: MOV temp[9].x, -temp[6].xxxx; 74: MOV temp[9].y, temp[0].yyyy; 75: CMP temp[7].xy, -temp[8].xxxx, temp[9].xyxx, temp[7].xyyy; 76: ADD temp[9].x, -temp[4].xxxx, const[11].yyyy; 77: CMP temp[8].x, -temp[9].xxxx, const[11].xxxx, const[11].yyyy; 78: ADD temp[2].x, temp[2].yyyy, temp[8].xxxx; 79: MOV temp[2].y, input[1].xxxx; 80: MOV temp[8].x, -temp[0].yyyy; 81: MOV temp[8].y, -temp[6].yyyy; 82: ADD temp[4].x, -temp[4].xxxx, const[11].yyyy; 83: MOV temp[6].x, -temp[6].yyyy; 84: MOV temp[6].y, temp[0].yyyy; 85: CMP temp[0].xy, -temp[4].xxxx, temp[6].xyxx, temp[8].xyyy; 86: ADD temp[4].xy, temp[5].xyyy, const[10].xxxx; 87: RCP temp[5].x, const[7].xxxx; 88: RCP temp[5].y, const[7].yyyy; 89: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 90: TEX temp[11], temp[4].xyyy, 2D[1]; 91: MOV temp[4].zw, temp[11]; 92: MAD temp[4].xy, const[12].yyyy, temp[4].zwww, const[11].yyyy; 93: ADD temp[4].xy, temp[4].xyyy, temp[7].xyyy; 94: RCP temp[5].x, const[6].xxxx; 95: RCP temp[5].y, const[6].yyyy; 96: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 97: TEX temp[12], temp[4].xyyy, 2D[0]; 98: MOV temp[4].w, temp[12]; 99: MOV temp[4].x, temp[4].wwww; 100: ADD temp[2].xy, temp[2].xyyy, const[10].xxxx; 101: RCP temp[5].x, const[7].xxxx; 102: RCP temp[5].y, const[7].yyyy; 103: MUL temp[2].xy, temp[2].xyyy, temp[5].xyyy; 104: TEX temp[13], temp[2].xyyy, 2D[1]; 105: MOV temp[2].zw, temp[13]; 106: MAD temp[2].xy, const[12].yyyy, temp[2].zwww, const[11].yyyy; 107: ADD temp[0].xy, temp[2].xyyy, temp[0].xyyy; 108: RCP temp[2].x, const[6].xxxx; 109: RCP temp[2].y, const[6].yyyy; 110: MUL temp[0].xy, temp[0].xyyy, temp[2].xyyy; 111: TEX temp[14], temp[0].xyyy, 2D[0]; 112: MOV temp[0].w, temp[14]; 113: MOV temp[4].y, temp[0].wwww; 114: MUL temp[0].xy, temp[4].xyyy, temp[1].xyyy; 115: MAX temp[0].x, temp[0].xxxx, temp[0].yyyy; 116: ADD temp[0].x, temp[0].xxxx, const[12].wwww; 117: MAD temp[0].x, const[12].zzzz, temp[0].xxxx, const[10].xxxx; 118: ADD_SAT temp[0].x, temp[0].xxxx, const[0].xxxx; 119: SEQ temp[2].x, temp[0].xxxx, const[11].xxxx; 120: CMP temp[1].x, -temp[2].xxxx, const[11].yyyy, const[11].xxxx; 121: KIL -temp[1].xxxx; 122: ADD temp[1].x, input[2].yyyy, const[10].xxxx; 123: RCP temp[2].x, const[9].xxxx; 124: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 125: FRC temp[2].x, temp[1].xxxx; 126: FLR temp[1].x, temp[1].xxxx; 127: MAD temp[1].x, const[13].xxxx, temp[1].xxxx, const[1].xxxx; 128: ADD temp[1].x, temp[1].xxxx, const[10].xxxx; 129: RCP temp[4].x, const[9].yyyy; 130: MUL temp[1].x, temp[1].xxxx, temp[4].xxxx; 131: MOV temp[2].y, temp[1].xxxx; 132: TEX temp[1], temp[2].xyyy, 2D[3]; 133: MOV temp[2].xyz, temp[1].xyzx; 134: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 135: MUL temp[0].x, temp[1].xxxx, temp[0].xxxx; 136: MOV temp[2].w, temp[0].xxxx; 137: MOV output[0], temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].x, input[2].zzzz, const[10].xxxx; 1: RCP temp[1].x, const[8].xxxx; 2: MUL temp[2].x, temp[0].xxxx, temp[1].xxxx; 3: FRC temp[3].x, temp[2].xxxx; 4: FRC temp[15].x, temp[2].xxxx; 5: ADD temp[2].x, temp[2].xxxx, -temp[15]; 6: ADD temp[2].x, temp[2].xxxx, const[10].xxxx; 7: RCP temp[4].x, const[8].yyyy; 8: MUL temp[2].x, temp[2].xxxx, temp[4].xxxx; 9: MOV temp[3].y, temp[2].xxxx; 10: TEX temp[2], temp[3].xyyy, 2D[2]; 11: MAD temp[2], const[10].yyyy, temp[2], const[10].xxxx; 12: FRC temp[16].x, temp[2]; 13: ADD temp[2].x, temp[2], -temp[16]; 14: MUL temp[3].x, temp[2].xxxx, const[10].wwww; 15: FRC temp[3].x, temp[3].xxxx; 16: MUL temp[3].x, const[10].zzzz, temp[3].xxxx; 17: ADD temp[5].x, temp[3].xxxx, -const[11].xxxx; 18: CMP temp[5].x, -|temp[5]|, none.0000, none.1111; 19: CMP temp[4].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 20: KIL -temp[4].xxxx; 21: MUL temp[4].x, temp[2].xxxx, const[11].zzzz; 22: FRC temp[17].x, temp[4].xxxx; 23: ADD temp[4].x, temp[4].xxxx, -temp[17]; 24: MOV_SAT temp[4].x, temp[4].xxxx; 25: ADD temp[18].x, const[10].xxxx, -temp[4].xxxx; 26: CMP temp[4].x, temp[18], none.1111, none.0000; 27: MOV temp[5].x, |input[4].yyyy|; 28: MUL temp[6].x, input[0].xxxx, const[10].xxxx; 29: ADD temp[19].x, temp[6].xxxx, -temp[5].xxxx; 30: CMP temp[5].x, temp[19], none.1111, none.0000; 31: ADD temp[6].x, -temp[4].xxxx, const[11].yyyy; 32: CMP temp[5].x, -temp[6].xxxx, const[11].xxxx, temp[5].xxxx; 33: CMP temp[5].x, -temp[5].xxxx, const[11].yyyy, const[11].xxxx; 34: KIL -temp[5].xxxx; 35: MUL temp[2].x, const[11].zzzz, temp[2].xxxx; 36: FRC temp[2].x, temp[2].xxxx; 37: MUL temp[2].x, const[11].wwww, temp[2].xxxx; 38: ADD temp[20].x, temp[2].xxxx, -const[11].yyyy; 39: CMP temp[2].x, temp[20], none.0000, none.1111; 40: MOV temp[5].y, const[11].xxxx; 41: MOV temp[5].x, input[3].zzzz; 42: ADD temp[5].xy, temp[5].xyyy, -input[4].xyyy; 43: CMP temp[0].xy, -temp[2].xxxx, temp[5].xyxx, input[4].xyyy; 44: ADD temp[5].xy, input[3].zzzz, -input[3].yxxx; 45: CMP temp[1].xy, -temp[2].xxxx, temp[5].xyxx, input[3].xyyy; 46: FRC temp[2].x, temp[0].xxxx; 47: ADD temp[2].x, temp[0].xxxx, -temp[2]; 48: MOV temp[5].x, temp[2].xxxx; 49: MOV temp[5].y, input[1].xxxx; 50: ADD temp[5].xy, temp[5].xyyy, const[10].xxxx; 51: RCP temp[6].x, const[7].xxxx; 52: RCP temp[6].y, const[7].yyyy; 53: MUL temp[5].xy, temp[5].xyyy, temp[6].xyyy; 54: TEX temp[10], temp[5].xyyy, 2D[1]; 55: MOV temp[5].xy, temp[10]; 56: MUL temp[6].xy, const[10].yyyy, temp[5].xyyy; 57: ADD temp[6].xy, const[12].xxxx, -temp[6].xyyy; 58: ADD temp[2].xy, temp[2].xxxx, temp[6].xyyy; 59: ADD temp[7].x, temp[2].xxxx, -temp[1].xxxx; 60: CMP temp[7].x, temp[7], none.0000, none.1111; 61: MOV temp[7].x, temp[7].xxxx; 62: ADD temp[8].x, temp[2].yyyy, -temp[1].xxxx; 63: CMP temp[8].x, temp[8], none.0000, none.1111; 64: MOV temp[7].y, temp[8].xxxx; 65: ADD temp[8].x, temp[1].yyyy, -temp[2].xxxx; 66: CMP temp[8].x, temp[8], none.0000, none.1111; 67: MOV temp[8].x, temp[8].xxxx; 68: ADD temp[21].x, temp[1].yyyy, -temp[2].yyyy; 69: CMP temp[1].x, temp[21], none.0000, none.1111; 70: MOV temp[8].y, temp[1].xxxx; 71: MUL temp[1].xy, temp[7].xyyy, temp[8].xyyy; 72: FRC temp[22].xy, -temp[5].xyyy; 73: ADD temp[5].xy, temp[5].xyyy, temp[22]; 74: MUL temp[1].xy, temp[1].xyyy, temp[5].xyyy; 75: ADD temp[7].x, temp[1].xxxx, temp[1].yyyy; 76: ADD temp[23].x, temp[7].xxxx, -const[11].xxxx; 77: CMP temp[7].x, -|temp[23]|, none.0000, none.1111; 78: CMP temp[5].x, -temp[7].xxxx, const[11].yyyy, const[11].xxxx; 79: KIL -temp[5].xxxx; 80: ADD temp[7].x, -temp[4].xxxx, const[11].yyyy; 81: CMP temp[5].x, -temp[7].xxxx, const[11].xxxx, const[11].yyyy; 82: ADD temp[5].x, temp[2].xxxx, temp[5].xxxx; 83: MOV temp[5].y, input[1].xxxx; 84: MOV temp[7].x, -temp[0].yyyy; 85: MOV temp[7].y, -temp[6].xxxx; 86: ADD temp[8].x, -temp[4].xxxx, const[11].yyyy; 87: MOV temp[9].x, -temp[6].xxxx; 88: MOV temp[9].y, temp[0].yyyy; 89: CMP temp[7].xy, -temp[8].xxxx, temp[9].xyxx, temp[7].xyyy; 90: ADD temp[9].x, -temp[4].xxxx, const[11].yyyy; 91: CMP temp[8].x, -temp[9].xxxx, const[11].xxxx, const[11].yyyy; 92: ADD temp[2].x, temp[2].yyyy, temp[8].xxxx; 93: MOV temp[2].y, input[1].xxxx; 94: MOV temp[8].x, -temp[0].yyyy; 95: MOV temp[8].y, -temp[6].yyyy; 96: ADD temp[4].x, -temp[4].xxxx, const[11].yyyy; 97: MOV temp[6].x, -temp[6].yyyy; 98: MOV temp[6].y, temp[0].yyyy; 99: CMP temp[0].xy, -temp[4].xxxx, temp[6].xyxx, temp[8].xyyy; 100: ADD temp[4].xy, temp[5].xyyy, const[10].xxxx; 101: RCP temp[5].x, const[7].xxxx; 102: RCP temp[5].y, const[7].yyyy; 103: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 104: TEX temp[11], temp[4].xyyy, 2D[1]; 105: MOV temp[4].zw, temp[11]; 106: MAD temp[4].xy, const[12].yyyy, temp[4].zwww, const[11].yyyy; 107: ADD temp[4].xy, temp[4].xyyy, temp[7].xyyy; 108: RCP temp[5].x, const[6].xxxx; 109: RCP temp[5].y, const[6].yyyy; 110: MUL temp[4].xy, temp[4].xyyy, temp[5].xyyy; 111: TEX temp[12], temp[4].xyyy, 2D[0]; 112: MOV temp[4].w, temp[12]; 113: MOV temp[4].x, temp[4].wwww; 114: ADD temp[2].xy, temp[2].xyyy, const[10].xxxx; 115: RCP temp[5].x, const[7].xxxx; 116: RCP temp[5].y, const[7].yyyy; 117: MUL temp[2].xy, temp[2].xyyy, temp[5].xyyy; 118: TEX temp[13], temp[2].xyyy, 2D[1]; 119: MOV temp[2].zw, temp[13]; 120: MAD temp[2].xy, const[12].yyyy, temp[2].zwww, const[11].yyyy; 121: ADD temp[0].xy, temp[2].xyyy, temp[0].xyyy; 122: RCP temp[2].x, const[6].xxxx; 123: RCP temp[2].y, const[6].yyyy; 124: MUL temp[0].xy, temp[0].xyyy, temp[2].xyyy; 125: TEX temp[14], temp[0].xyyy, 2D[0]; 126: MOV temp[0].w, temp[14]; 127: MOV temp[4].y, temp[0].wwww; 128: MUL temp[0].xy, temp[4].xyyy, temp[1].xyyy; 129: MAX temp[0].x, temp[0].xxxx, temp[0].yyyy; 130: ADD temp[0].x, temp[0].xxxx, const[12].wwww; 131: MAD temp[0].x, const[12].zzzz, temp[0].xxxx, const[10].xxxx; 132: ADD_SAT temp[0].x, temp[0].xxxx, const[0].xxxx; 133: ADD temp[2].x, temp[0].xxxx, -const[11].xxxx; 134: CMP temp[2].x, -|temp[2]|, none.0000, none.1111; 135: CMP temp[1].x, -temp[2].xxxx, const[11].yyyy, const[11].xxxx; 136: KIL -temp[1].xxxx; 137: ADD temp[1].x, input[2].yyyy, const[10].xxxx; 138: RCP temp[2].x, const[9].xxxx; 139: MUL temp[1].x, temp[1].xxxx, temp[2].xxxx; 140: FRC temp[2].x, temp[1].xxxx; 141: FRC temp[24].x, temp[1].xxxx; 142: ADD temp[1].x, temp[1].xxxx, -temp[24]; 143: MAD temp[1].x, const[13].xxxx, temp[1].xxxx, const[1].xxxx; 144: ADD temp[1].x, temp[1].xxxx, const[10].xxxx; 145: RCP temp[4].x, const[9].yyyy; 146: MUL temp[1].x, temp[1].xxxx, temp[4].xxxx; 147: MOV temp[2].y, temp[1].xxxx; 148: TEX temp[1], temp[2].xyyy, 2D[3]; 149: MOV temp[2].xyz, temp[1].xyzx; 150: MUL temp[1].x, temp[1].wwww, temp[3].xxxx; 151: MUL temp[0].x, temp[1].xxxx, temp[0].xxxx; 152: MOV temp[2].w, temp[0].xxxx; 153: MOV output[0], temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: ADD temp[0].x, input[2].z___, const[10].x___; 1: RCP temp[1].x, const[8].x___; 2: MUL temp[2].x, temp[0].x___, temp[1].x___; 3: FRC temp[3].x, temp[2].x___; 4: FRC temp[15].x, temp[2].x___; 5: ADD temp[2].x, temp[2].x___, -temp[15].x___; 6: ADD temp[2].x, temp[2].x___, const[10].x___; 7: RCP temp[4].x, const[8].y___; 8: MUL temp[2].x, temp[2].x___, temp[4].x___; 9: MOV temp[3].y, temp[2]._x__; 10: TEX temp[2].x, temp[3].xy__, 2D[2]; 11: MAD temp[2].x, const[10].y___, temp[2].x___, const[10].x___; 12: FRC temp[16].x, temp[2].x___; 13: ADD temp[2].x, temp[2].x___, -temp[16].x___; 14: MUL temp[3].x, temp[2].x___, const[10].w___; 15: FRC temp[3].x, temp[3].x___; 16: MUL temp[3].x, const[10].z___, temp[3].x___; 17: ADD temp[5].x, temp[3].x___, -const[11].x___; 18: CMP temp[5].x, -|temp[5].x___|, none.0___, none.1___; 19: CMP temp[4].x, -temp[5].x___, const[11].y___, const[11].x___; 20: KIL -temp[4].xxxx; 21: MUL temp[4].x, temp[2].x___, const[11].z___; 22: FRC temp[17].x, temp[4].x___; 23: ADD temp[4].x, temp[4].x___, -temp[17].x___; 24: MOV_SAT temp[4].x, temp[4].x___; 25: ADD temp[18].x, const[10].x___, -temp[4].x___; 26: CMP temp[4].x, temp[18].x___, none.1___, none.0___; 27: MOV temp[5].x, |input[4].y___|; 28: MUL temp[6].x, input[0].x___, const[10].x___; 29: ADD temp[19].x, temp[6].x___, -temp[5].x___; 30: CMP temp[5].x, temp[19].x___, none.1___, none.0___; 31: ADD temp[6].x, -temp[4].x___, const[11].y___; 32: CMP temp[5].x, -temp[6].x___, const[11].x___, temp[5].x___; 33: CMP temp[5].x, -temp[5].x___, const[11].y___, const[11].x___; 34: KIL -temp[5].xxxx; 35: MUL temp[2].x, const[11].z___, temp[2].x___; 36: FRC temp[2].x, temp[2].x___; 37: MUL temp[2].x, const[11].w___, temp[2].x___; 38: ADD temp[20].x, temp[2].x___, -const[11].y___; 39: CMP temp[2].x, temp[20].x___, none.0___, none.1___; 40: MOV temp[5].y, const[11]._x__; 41: MOV temp[5].x, input[3].z___; 42: ADD temp[5].xy, temp[5].xy__, -input[4].xy__; 43: CMP temp[0].xy, -temp[2].xx__, temp[5].xy__, input[4].xy__; 44: ADD temp[5].xy, input[3].zz__, -input[3].yx__; 45: CMP temp[1].xy, -temp[2].xx__, temp[5].xy__, input[3].xy__; 46: FRC temp[2].x, temp[0].x___; 47: ADD temp[2].x, temp[0].x___, -temp[2].x___; 48: MOV temp[5].x, temp[2].x___; 49: MOV temp[5].y, input[1]._x__; 50: ADD temp[5].xy, temp[5].xy__, const[10].xx__; 51: RCP temp[6].x, const[7].x___; 52: RCP temp[6].y, const[7]._y__; 53: MUL temp[5].xy, temp[5].xy__, temp[6].xy__; 54: TEX temp[10].xy, temp[5].xy__, 2D[1]; 55: MOV temp[5].xy, temp[10].xy__; 56: MUL temp[6].xy, const[10].yy__, temp[5].xy__; 57: ADD temp[6].xy, const[12].xx__, -temp[6].xy__; 58: ADD temp[2].xy, temp[2].xx__, temp[6].xy__; 59: ADD temp[7].x, temp[2].x___, -temp[1].x___; 60: CMP temp[7].x, temp[7].x___, none.0___, none.1___; 61: MOV temp[7].x, temp[7].x___; 62: ADD temp[8].x, temp[2].y___, -temp[1].x___; 63: CMP temp[8].x, temp[8].x___, none.0___, none.1___; 64: MOV temp[7].y, temp[8]._x__; 65: ADD temp[8].x, temp[1].y___, -temp[2].x___; 66: CMP temp[8].x, temp[8].x___, none.0___, none.1___; 67: MOV temp[8].x, temp[8].x___; 68: ADD temp[21].x, temp[1].y___, -temp[2].y___; 69: CMP temp[1].x, temp[21].x___, none.0___, none.1___; 70: MOV temp[8].y, temp[1]._x__; 71: MUL temp[1].xy, temp[7].xy__, temp[8].xy__; 72: FRC temp[22].xy, -temp[5].xy__; 73: ADD temp[5].xy, temp[5].xy__, temp[22].xy__; 74: MUL temp[1].xy, temp[1].xy__, temp[5].xy__; 75: ADD temp[7].x, temp[1].x___, temp[1].y___; 76: ADD temp[23].x, temp[7].x___, -const[11].x___; 77: CMP temp[7].x, -|temp[23].x___|, none.0___, none.1___; 78: CMP temp[5].x, -temp[7].x___, const[11].y___, const[11].x___; 79: KIL -temp[5].xxxx; 80: ADD temp[7].x, -temp[4].x___, const[11].y___; 81: CMP temp[5].x, -temp[7].x___, const[11].x___, const[11].y___; 82: ADD temp[5].x, temp[2].x___, temp[5].x___; 83: MOV temp[5].y, input[1]._x__; 84: MOV temp[7].x, -temp[0].y___; 85: MOV temp[7].y, -temp[6]._x__; 86: ADD temp[8].x, -temp[4].x___, const[11].y___; 87: MOV temp[9].x, -temp[6].x___; 88: MOV temp[9].y, temp[0]._y__; 89: CMP temp[7].xy, -temp[8].xx__, temp[9].xy__, temp[7].xy__; 90: ADD temp[9].x, -temp[4].x___, const[11].y___; 91: CMP temp[8].x, -temp[9].x___, const[11].x___, const[11].y___; 92: ADD temp[2].x, temp[2].y___, temp[8].x___; 93: MOV temp[2].y, input[1]._x__; 94: MOV temp[8].x, -temp[0].y___; 95: MOV temp[8].y, -temp[6]._y__; 96: ADD temp[4].x, -temp[4].x___, const[11].y___; 97: MOV temp[6].x, -temp[6].y___; 98: MOV temp[6].y, temp[0]._y__; 99: CMP temp[0].xy, -temp[4].xx__, temp[6].xy__, temp[8].xy__; 100: ADD temp[4].xy, temp[5].xy__, const[10].xx__; 101: RCP temp[5].x, const[7].x___; 102: RCP temp[5].y, const[7]._y__; 103: MUL temp[4].xy, temp[4].xy__, temp[5].xy__; 104: TEX temp[11].zw, temp[4].xy__, 2D[1]; 105: MOV temp[4].zw, temp[11].__zw; 106: MAD temp[4].xy, const[12].yy__, temp[4].zw__, const[11].yy__; 107: ADD temp[4].xy, temp[4].xy__, temp[7].xy__; 108: RCP temp[5].x, const[6].x___; 109: RCP temp[5].y, const[6]._y__; 110: MUL temp[4].xy, temp[4].xy__, temp[5].xy__; 111: TEX temp[12].w, temp[4].xy__, 2D[0]; 112: MOV temp[4].w, temp[12].___w; 113: MOV temp[4].x, temp[4].w___; 114: ADD temp[2].xy, temp[2].xy__, const[10].xx__; 115: RCP temp[5].x, const[7].x___; 116: RCP temp[5].y, const[7]._y__; 117: MUL temp[2].xy, temp[2].xy__, temp[5].xy__; 118: TEX temp[13].zw, temp[2].xy__, 2D[1]; 119: MOV temp[2].zw, temp[13].__zw; 120: MAD temp[2].xy, const[12].yy__, temp[2].zw__, const[11].yy__; 121: ADD temp[0].xy, temp[2].xy__, temp[0].xy__; 122: RCP temp[2].x, const[6].x___; 123: RCP temp[2].y, const[6]._y__; 124: MUL temp[0].xy, temp[0].xy__, temp[2].xy__; 125: TEX temp[14].w, temp[0].xy__, 2D[0]; 126: MOV temp[0].w, temp[14].___w; 127: MOV temp[4].y, temp[0]._w__; 128: MUL temp[0].xy, temp[4].xy__, temp[1].xy__; 129: MAX temp[0].x, temp[0].x___, temp[0].y___; 130: ADD temp[0].x, temp[0].x___, const[12].w___; 131: MAD temp[0].x, const[12].z___, temp[0].x___, const[10].x___; 132: ADD_SAT temp[0].x, temp[0].x___, const[0].x___; 133: ADD temp[2].x, temp[0].x___, -const[11].x___; 134: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 135: CMP temp[1].x, -temp[2].x___, const[11].y___, const[11].x___; 136: KIL -temp[1].xxxx; 137: ADD temp[1].x, input[2].y___, const[10].x___; 138: RCP temp[2].x, const[9].x___; 139: MUL temp[1].x, temp[1].x___, temp[2].x___; 140: FRC temp[2].x, temp[1].x___; 141: FRC temp[24].x, temp[1].x___; 142: ADD temp[1].x, temp[1].x___, -temp[24].x___; 143: MAD temp[1].x, const[13].x___, temp[1].x___, const[1].x___; 144: ADD temp[1].x, temp[1].x___, const[10].x___; 145: RCP temp[4].x, const[9].y___; 146: MUL temp[1].x, temp[1].x___, temp[4].x___; 147: MOV temp[2].y, temp[1]._x__; 148: TEX temp[1], temp[2].xy__, 2D[3]; 149: MOV temp[2].xyz, temp[1].xyz_; 150: MUL temp[1].x, temp[1].w___, temp[3].x___; 151: MUL temp[0].x, temp[1].x___, temp[0].x___; 152: MOV temp[2].w, temp[0].___x; 153: MOV output[0], temp[2]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: ADD temp[0].x, input[2].z___, const[10].x___; 1: RCP temp[1].x, const[8].x___; 2: MUL temp[2].x, temp[0].x___, temp[1].x___; 3: FRC temp[3].x, temp[2].x___; 4: FRC temp[15].x, temp[2].x___; 5: ADD temp[2].x, temp[2].x___, -temp[15].x___; 6: ADD temp[2].x, temp[2].x___, const[10].x___; 7: RCP temp[4].x, const[8].y___; 8: MUL temp[2].x, temp[2].x___, temp[4].x___; 9: MOV temp[3].y, temp[2]._x__; 10: TEX temp[2].x, temp[3].xy__, 2D[2]; 11: MAD temp[2].x, const[10].y___, temp[2].x___, const[10].x___; 12: FRC temp[16].x, temp[2].x___; 13: ADD temp[2].x, temp[2].x___, -temp[16].x___; 14: MUL temp[3].x, temp[2].x___, const[10].w___; 15: FRC temp[3].x, temp[3].x___; 16: MUL temp[3].x, const[10].z___, temp[3].x___; 17: ADD temp[5].x, temp[3].x___, -const[11].x___; 18: CMP temp[5].x, -|temp[5].x___|, none.0___, none.1___; 19: CMP temp[4].x, -temp[5].x___, const[11].y___, const[11].x___; 20: KIL -temp[4].xxxx; 21: MUL temp[4].x, temp[2].x___, const[11].z___; 22: FRC temp[17].x, temp[4].x___; 23: ADD temp[4].x, temp[4].x___, -temp[17].x___; 24: MOV_SAT temp[4].x, temp[4].x___; 25: ADD temp[18].x, const[10].x___, -temp[4].x___; 26: CMP temp[4].x, temp[18].x___, none.1___, none.0___; 27: MOV temp[5].x, |input[4].y___|; 28: MUL temp[6].x, input[0].x___, const[10].x___; 29: ADD temp[19].x, temp[6].x___, -temp[5].x___; 30: CMP temp[5].x, temp[19].x___, none.1___, none.0___; 31: ADD temp[6].x, -temp[4].x___, const[11].y___; 32: CMP temp[5].x, -temp[6].x___, const[11].x___, temp[5].x___; 33: CMP temp[5].x, -temp[5].x___, const[11].y___, const[11].x___; 34: KIL -temp[5].xxxx; 35: MUL temp[2].x, const[11].z___, temp[2].x___; 36: FRC temp[2].x, temp[2].x___; 37: MUL temp[2].x, const[11].w___, temp[2].x___; 38: ADD temp[20].x, temp[2].x___, -const[11].y___; 39: CMP temp[2].x, temp[20].x___, none.0___, none.1___; 40: MOV temp[5].y, const[11]._x__; 41: MOV temp[5].x, input[3].z___; 42: ADD temp[5].xy, temp[5].xy__, -input[4].xy__; 43: CMP temp[0].xy, -temp[2].xx__, temp[5].xy__, input[4].xy__; 44: ADD temp[5].xy, input[3].zz__, -input[3].yx__; 45: CMP temp[1].xy, -temp[2].xx__, temp[5].xy__, input[3].xy__; 46: FRC temp[2].x, temp[0].x___; 47: ADD temp[2].x, temp[0].x___, -temp[2].x___; 48: MOV temp[5].x, temp[2].x___; 49: MOV temp[5].y, input[1]._x__; 50: ADD temp[5].xy, temp[5].xy__, const[10].xx__; 51: RCP temp[6].x, const[7].x___; 52: RCP temp[6].y, const[7]._y__; 53: MUL temp[5].xy, temp[5].xy__, temp[6].xy__; 54: TEX temp[10].xy, temp[5].xy__, 2D[1]; 55: MOV temp[5].xy, temp[10].xy__; 56: MUL temp[6].xy, const[10].yy__, temp[5].xy__; 57: ADD temp[6].xy, const[12].xx__, -temp[6].xy__; 58: ADD temp[2].xy, temp[2].xx__, temp[6].xy__; 59: ADD temp[7].x, temp[2].x___, -temp[1].x___; 60: CMP temp[7].x, temp[7].x___, none.0___, none.1___; 61: MOV temp[7].x, temp[7].x___; 62: ADD temp[8].x, temp[2].y___, -temp[1].x___; 63: CMP temp[8].x, temp[8].x___, none.0___, none.1___; 64: MOV temp[7].y, temp[8]._x__; 65: ADD temp[8].x, temp[1].y___, -temp[2].x___; 66: CMP temp[8].x, temp[8].x___, none.0___, none.1___; 67: MOV temp[8].x, temp[8].x___; 68: ADD temp[21].x, temp[1].y___, -temp[2].y___; 69: CMP temp[1].x, temp[21].x___, none.0___, none.1___; 70: MOV temp[8].y, temp[1]._x__; 71: MUL temp[1].xy, temp[7].xy__, temp[8].xy__; 72: FRC temp[22].xy, -temp[5].xy__; 73: ADD temp[5].xy, temp[5].xy__, temp[22].xy__; 74: MUL temp[1].xy, temp[1].xy__, temp[5].xy__; 75: ADD temp[7].x, temp[1].x___, temp[1].y___; 76: ADD temp[23].x, temp[7].x___, -const[11].x___; 77: CMP temp[7].x, -|temp[23].x___|, none.0___, none.1___; 78: CMP temp[5].x, -temp[7].x___, const[11].y___, const[11].x___; 79: KIL -temp[5].xxxx; 80: ADD temp[7].x, -temp[4].x___, const[11].y___; 81: CMP temp[5].x, -temp[7].x___, const[11].x___, const[11].y___; 82: ADD temp[5].x, temp[2].x___, temp[5].x___; 83: MOV temp[5].y, input[1]._x__; 84: MOV temp[7].x, -temp[0].y___; 85: MOV temp[7].y, -temp[6]._x__; 86: ADD temp[8].x, -temp[4].x___, const[11].y___; 87: MOV temp[9].x, -temp[6].x___; 88: MOV temp[9].y, temp[0]._y__; 89: CMP temp[7].xy, -temp[8].xx__, temp[9].xy__, temp[7].xy__; 90: ADD temp[9].x, -temp[4].x___, const[11].y___; 91: CMP temp[8].x, -temp[9].x___, const[11].x___, const[11].y___; 92: ADD temp[2].x, temp[2].y___, temp[8].x___; 93: MOV temp[2].y, input[1]._x__; 94: MOV temp[8].x, -temp[0].y___; 95: MOV temp[8].y, -temp[6]._y__; 96: ADD temp[4].x, -temp[4].x___, const[11].y___; 97: MOV temp[6].x, -temp[6].y___; 98: MOV temp[6].y, temp[0]._y__; 99: CMP temp[0].xy, -temp[4].xx__, temp[6].xy__, temp[8].xy__; 100: ADD temp[4].xy, temp[5].xy__, const[10].xx__; 101: RCP temp[5].x, const[7].x___; 102: RCP temp[5].y, const[7]._y__; 103: MUL temp[4].xy, temp[4].xy__, temp[5].xy__; 104: TEX temp[11].zw, temp[4].xy__, 2D[1]; 105: MOV temp[4].zw, temp[11].__zw; 106: MAD temp[4].xy, const[12].yy__, temp[4].zw__, const[11].yy__; 107: ADD temp[4].xy, temp[4].xy__, temp[7].xy__; 108: RCP temp[5].x, const[6].x___; 109: RCP temp[5].y, const[6]._y__; 110: MUL temp[4].xy, temp[4].xy__, temp[5].xy__; 111: TEX temp[12].w, temp[4].xy__, 2D[0]; 112: MOV temp[4].w, temp[12].___w; 113: MOV temp[4].x, temp[4].w___; 114: ADD temp[2].xy, temp[2].xy__, const[10].xx__; 115: RCP temp[5].x, const[7].x___; 116: RCP temp[5].y, const[7]._y__; 117: MUL temp[2].xy, temp[2].xy__, temp[5].xy__; 118: TEX temp[13].zw, temp[2].xy__, 2D[1]; 119: MOV temp[2].zw, temp[13].__zw; 120: MAD temp[2].xy, const[12].yy__, temp[2].zw__, const[11].yy__; 121: ADD temp[0].xy, temp[2].xy__, temp[0].xy__; 122: RCP temp[2].x, const[6].x___; 123: RCP temp[2].y, const[6]._y__; 124: MUL temp[0].xy, temp[0].xy__, temp[2].xy__; 125: TEX temp[14].w, temp[0].xy__, 2D[0]; 126: MOV temp[0].w, temp[14].___w; 127: MOV temp[4].y, temp[0]._w__; 128: MUL temp[0].xy, temp[4].xy__, temp[1].xy__; 129: MAX temp[0].x, temp[0].x___, temp[0].y___; 130: ADD temp[0].x, temp[0].x___, const[12].w___; 131: MAD temp[0].x, const[12].z___, temp[0].x___, const[10].x___; 132: ADD_SAT temp[0].x, temp[0].x___, const[0].x___; 133: ADD temp[2].x, temp[0].x___, -const[11].x___; 134: CMP temp[2].x, -|temp[2].x___|, none.0___, none.1___; 135: CMP temp[1].x, -temp[2].x___, const[11].y___, const[11].x___; 136: KIL -temp[1].xxxx; 137: ADD temp[1].x, input[2].y___, const[10].x___; 138: RCP temp[2].x, const[9].x___; 139: MUL temp[1].x, temp[1].x___, temp[2].x___; 140: FRC temp[2].x, temp[1].x___; 141: FRC temp[24].x, temp[1].x___; 142: ADD temp[1].x, temp[1].x___, -temp[24].x___; 143: MAD temp[1].x, const[13].x___, temp[1].x___, const[1].x___; 144: ADD temp[1].x, temp[1].x___, const[10].x___; 145: RCP temp[4].x, const[9].y___; 146: MUL temp[1].x, temp[1].x___, temp[4].x___; 147: MOV temp[2].y, temp[1]._x__; 148: TEX temp[1], temp[2].xy__, 2D[3]; 149: MOV temp[2].xyz, temp[1].xyz_; 150: MUL temp[1].x, temp[1].w___, temp[3].x___; 151: MUL temp[0].x, temp[1].x___, temp[0].x___; 152: MOV temp[2].w, temp[0].___x; 153: MOV output[0], temp[2]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: ADD temp[25].x, input[2].z___, const[10].x___; 1: RCP temp[26].x, const[8].x___; 2: MUL temp[27].x, temp[25].x___, temp[26].x___; 3: FRC temp[28].x, temp[27].x___; 4: FRC temp[29].x, temp[27].x___; 5: ADD temp[30].x, temp[27].x___, -temp[29].x___; 6: ADD temp[31].x, temp[30].x___, const[10].x___; 7: RCP temp[32].x, const[8].y___; 8: MUL temp[33].x, temp[31].x___, temp[32].x___; 9: MOV temp[28].y, temp[33]._x__; 10: TEX temp[34].x, temp[28].xy__, 2D[2]; 11: MAD temp[35].x, const[10].y___, temp[34].x___, const[10].x___; 12: FRC temp[36].x, temp[35].x___; 13: ADD temp[37].x, temp[35].x___, -temp[36].x___; 14: MUL temp[38].x, temp[37].x___, const[10].w___; 15: FRC temp[39].x, temp[38].x___; 16: MUL temp[40].x, const[10].z___, temp[39].x___; 17: ADD temp[41].x, temp[40].x___, -const[11].x___; 18: CMP temp[42].x, -|temp[41].x___|, none.0___, none.1___; 19: CMP temp[43].x, -temp[42].x___, const[11].y___, const[11].x___; 20: KIL -temp[43].xxxx; 21: MUL temp[44].x, temp[37].x___, const[11].z___; 22: FRC temp[45].x, temp[44].x___; 23: ADD temp[46].x, temp[44].x___, -temp[45].x___; 24: MOV_SAT temp[47].x, temp[46].x___; 25: ADD temp[48].x, const[10].x___, -temp[47].x___; 26: CMP temp[49].x, temp[48].x___, none.1___, none.0___; 27: MOV temp[50].x, |input[4].y___|; 28: MUL temp[51].x, input[0].x___, const[10].x___; 29: ADD temp[52].x, temp[51].x___, -temp[50].x___; 30: CMP temp[53].x, temp[52].x___, none.1___, none.0___; 31: ADD temp[54].x, -temp[49].x___, const[11].y___; 32: CMP temp[55].x, -temp[54].x___, const[11].x___, temp[53].x___; 33: CMP temp[56].x, -temp[55].x___, const[11].y___, const[11].x___; 34: KIL -temp[56].xxxx; 35: MUL temp[57].x, const[11].z___, temp[37].x___; 36: FRC temp[58].x, temp[57].x___; 37: MUL temp[59].x, const[11].w___, temp[58].x___; 38: ADD temp[60].x, temp[59].x___, -const[11].y___; 39: CMP temp[61].x, temp[60].x___, none.0___, none.1___; 40: MOV temp[62].y, const[11]._x__; 41: MOV temp[62].x, input[3].z___; 42: ADD temp[63].xy, temp[62].xy__, -input[4].xy__; 43: CMP temp[64].xy, -temp[61].xx__, temp[63].xy__, input[4].xy__; 44: ADD temp[65].xy, input[3].zz__, -input[3].yx__; 45: CMP temp[66].xy, -temp[61].xx__, temp[65].xy__, input[3].xy__; 46: FRC temp[67].x, temp[64].x___; 47: ADD temp[68].x, temp[64].x___, -temp[67].x___; 48: MOV temp[69].x, temp[68].x___; 49: MOV temp[69].y, input[1]._x__; 50: ADD temp[70].xy, temp[69].xy__, const[10].xx__; 51: RCP temp[71].x, const[7].x___; 52: RCP temp[71].y, const[7]._y__; 53: MUL temp[72].xy, temp[70].xy__, temp[71].xy__; 54: TEX temp[73].xy, temp[72].xy__, 2D[1]; 55: MOV temp[74].xy, temp[73].xy__; 56: MUL temp[75].xy, const[10].yy__, temp[74].xy__; 57: ADD temp[76].xy, const[12].xx__, -temp[75].xy__; 58: ADD temp[77].xy, temp[68].xx__, temp[76].xy__; 59: ADD temp[78].x, temp[77].x___, -temp[66].x___; 60: CMP temp[79].x, temp[78].x___, none.0___, none.1___; 61: MOV temp[80].x, temp[79].x___; 62: ADD temp[81].x, temp[77].y___, -temp[66].x___; 63: CMP temp[82].x, temp[81].x___, none.0___, none.1___; 64: MOV temp[80].y, temp[82]._x__; 65: ADD temp[83].x, temp[66].y___, -temp[77].x___; 66: CMP temp[84].x, temp[83].x___, none.0___, none.1___; 67: MOV temp[85].x, temp[84].x___; 68: ADD temp[86].x, temp[66].y___, -temp[77].y___; 69: CMP temp[87].x, temp[86].x___, none.0___, none.1___; 70: MOV temp[85].y, temp[87]._x__; 71: MUL temp[88].xy, temp[80].xy__, temp[85].xy__; 72: FRC temp[89].xy, -temp[74].xy__; 73: ADD temp[90].xy, temp[74].xy__, temp[89].xy__; 74: MUL temp[91].xy, temp[88].xy__, temp[90].xy__; 75: ADD temp[92].x, temp[91].x___, temp[91].y___; 76: ADD temp[93].x, temp[92].x___, -const[11].x___; 77: CMP temp[94].x, -|temp[93].x___|, none.0___, none.1___; 78: CMP temp[95].x, -temp[94].x___, const[11].y___, const[11].x___; 79: KIL -temp[95].xxxx; 80: ADD temp[96].x, -temp[49].x___, const[11].y___; 81: CMP temp[97].x, -temp[96].x___, const[11].x___, const[11].y___; 82: ADD temp[98].x, temp[77].x___, temp[97].x___; 83: MOV temp[98].y, input[1]._x__; 84: MOV temp[99].x, -temp[64].y___; 85: MOV temp[99].y, -temp[76]._x__; 86: ADD temp[100].x, -temp[49].x___, const[11].y___; 87: MOV temp[101].x, -temp[76].x___; 88: MOV temp[101].y, temp[64]._y__; 89: CMP temp[102].xy, -temp[100].xx__, temp[101].xy__, temp[99].xy__; 90: ADD temp[103].x, -temp[49].x___, const[11].y___; 91: CMP temp[104].x, -temp[103].x___, const[11].x___, const[11].y___; 92: ADD temp[105].x, temp[77].y___, temp[104].x___; 93: MOV temp[105].y, input[1]._x__; 94: MOV temp[106].x, -temp[64].y___; 95: MOV temp[106].y, -temp[76]._y__; 96: ADD temp[107].x, -temp[49].x___, const[11].y___; 97: MOV temp[108].x, -temp[76].y___; 98: MOV temp[108].y, temp[64]._y__; 99: CMP temp[109].xy, -temp[107].xx__, temp[108].xy__, temp[106].xy__; 100: ADD temp[110].xy, temp[98].xy__, const[10].xx__; 101: RCP temp[111].x, const[7].x___; 102: RCP temp[111].y, const[7]._y__; 103: MUL temp[112].xy, temp[110].xy__, temp[111].xy__; 104: TEX temp[113].zw, temp[112].xy__, 2D[1]; 105: MOV temp[114].zw, temp[113].__zw; 106: MAD temp[115].xy, const[12].yy__, temp[114].zw__, const[11].yy__; 107: ADD temp[116].xy, temp[115].xy__, temp[102].xy__; 108: RCP temp[117].x, const[6].x___; 109: RCP temp[117].y, const[6]._y__; 110: MUL temp[118].xy, temp[116].xy__, temp[117].xy__; 111: TEX temp[119].w, temp[118].xy__, 2D[0]; 112: MOV temp[120].w, temp[119].___w; 113: MOV temp[121].x, temp[120].w___; 114: ADD temp[122].xy, temp[105].xy__, const[10].xx__; 115: RCP temp[123].x, const[7].x___; 116: RCP temp[123].y, const[7]._y__; 117: MUL temp[124].xy, temp[122].xy__, temp[123].xy__; 118: TEX temp[125].zw, temp[124].xy__, 2D[1]; 119: MOV temp[126].zw, temp[125].__zw; 120: MAD temp[127].xy, const[12].yy__, temp[126].zw__, const[11].yy__; 121: ADD temp[128].xy, temp[127].xy__, temp[109].xy__; 122: RCP temp[129].x, const[6].x___; 123: RCP temp[129].y, const[6]._y__; 124: MUL temp[130].xy, temp[128].xy__, temp[129].xy__; 125: TEX temp[131].w, temp[130].xy__, 2D[0]; 126: MOV temp[132].w, temp[131].___w; 127: MOV temp[121].y, temp[132]._w__; 128: MUL temp[133].xy, temp[121].xy__, temp[91].xy__; 129: MAX temp[134].x, temp[133].x___, temp[133].y___; 130: ADD temp[135].x, temp[134].x___, const[12].w___; 131: MAD temp[136].x, const[12].z___, temp[135].x___, const[10].x___; 132: ADD_SAT temp[137].x, temp[136].x___, const[0].x___; 133: ADD temp[138].x, temp[137].x___, -const[11].x___; 134: CMP temp[139].x, -|temp[138].x___|, none.0___, none.1___; 135: CMP temp[140].x, -temp[139].x___, const[11].y___, const[11].x___; 136: KIL -temp[140].xxxx; 137: ADD temp[141].x, input[2].y___, const[10].x___; 138: RCP temp[142].x, const[9].x___; 139: MUL temp[143].x, temp[141].x___, temp[142].x___; 140: FRC temp[144].x, temp[143].x___; 141: FRC temp[145].x, temp[143].x___; 142: ADD temp[146].x, temp[143].x___, -temp[145].x___; 143: MAD temp[147].x, const[13].x___, temp[146].x___, const[1].x___; 144: ADD temp[148].x, temp[147].x___, const[10].x___; 145: RCP temp[149].x, const[9].y___; 146: MUL temp[150].x, temp[148].x___, temp[149].x___; 147: MOV temp[144].y, temp[150]._x__; 148: TEX temp[151], temp[144].xy__, 2D[3]; 149: MOV temp[152].xyz, temp[151].xyz_; 150: MUL temp[153].x, temp[151].w___, temp[40].x___; 151: MUL temp[154].x, temp[153].x___, temp[137].x___; 152: MOV temp[152].w, temp[154].___x; 153: MOV output[0], temp[152]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: ADD temp[25].x, input[2].z___, none.H___; 1: RCP temp[26].x, const[8].x___; 2: MUL temp[27].x, temp[25].x___, temp[26].x___; 3: FRC temp[28].x, temp[27].x___; 4: FRC temp[29].x, temp[27].x___; 5: ADD temp[31].x, (temp[27] - temp[29]).x___, none.H___; 6: RCP temp[32].x, const[8].y___; 7: MUL temp[33].x, temp[31].x___, temp[32].x___; 8: MOV temp[28].y, temp[33]._x__; 9: TEX temp[34].x, temp[28].xy__, 2D[2]; 10: MAD temp[35].x, const[10].y___, temp[34].x___, none.H___; 11: FRC temp[36].x, temp[35].x___; 12: MUL temp[38].x, (temp[35] - temp[36]).x___, const[10].w___; 13: FRC temp[39].x, temp[38].x___; 14: MUL temp[40].x, const[10].z___, temp[39].x___; 15: CMP temp[42].x, -|temp[40].x___|, none.0___, none.1___; 16: CMP temp[43].x, -temp[42].x___, none.1___, none.0___; 17: KIL -temp[43].xxxx; 18: MUL temp[44].x, (temp[35] - temp[36]).x___, const[11].z___; 19: FRC temp[45].x, temp[44].x___; 20: MOV_SAT temp[47].x, (temp[44] - temp[45]).x___; 21: ADD temp[48].x, none.H___, -temp[47].x___; 22: CMP temp[49].x, temp[48].x___, none.1___, none.0___; 23: MUL temp[51].x, input[0].x___, none.H___; 24: ADD temp[52].x, temp[51].x___, -|input[4].y___|; 25: CMP temp[53].x, temp[52].x___, none.1___, none.0___; 26: ADD temp[54].x, -temp[49].x___, none.1___; 27: CMP temp[55].x, -temp[54].x___, none.0___, temp[53].x___; 28: CMP temp[56].x, -temp[55].x___, none.1___, none.0___; 29: KIL -temp[56].xxxx; 30: MUL temp[57].x, const[11].z___, (temp[35] - temp[36]).x___; 31: FRC temp[59].x * 2, temp[57].x___; 32: ADD temp[60].x, temp[59].x___, -none.1___; 33: CMP temp[61].x, temp[60].x___, none.0___, none.1___; 34: MOV temp[62].y, none._0__; 35: MOV temp[62].x, input[3].z___; 36: CMP temp[64].xy, -temp[61].xx__, (temp[62] - input[4]).xy__, input[4].xy__; 37: ADD temp[65].xy, input[3].zz__, -input[3].yx__; 38: CMP temp[66].xy, -temp[61].xx__, temp[65].xy__, input[3].xy__; 39: FRC temp[67].x, temp[64].x___; 40: MOV temp[69].x, (temp[64] - temp[67]).x___; 41: MOV temp[69].y, input[1]._x__; 42: ADD temp[70].xy, temp[69].xy__, none.HH__; 43: RCP temp[71].x, const[7].x___; 44: RCP temp[71].y, const[7]._y__; 45: MUL temp[72].xy, temp[70].xy__, temp[71].xy__; 46: TEX temp[73].xy, temp[72].xy__, 2D[1]; 47: MUL temp[75].xy, const[10].yy__, temp[73].xy__; 48: ADD temp[76].xy, const[12].xx__, -temp[75].xy__; 49: ADD temp[77].xy, (temp[64] - temp[67]).xx__, temp[76].xy__; 50: CMP temp[79].x, (temp[77] - temp[66]).x___, none.0___, none.1___; 51: MOV temp[80].x, temp[79].x___; 52: ADD temp[81].x, temp[77].y___, -temp[66].x___; 53: CMP temp[82].x, temp[81].x___, none.0___, none.1___; 54: MOV temp[80].y, temp[82]._x__; 55: ADD temp[83].x, temp[66].y___, -temp[77].x___; 56: CMP temp[84].x, temp[83].x___, none.0___, none.1___; 57: MOV temp[85].x, temp[84].x___; 58: CMP temp[87].x, (temp[66] - temp[77]).y___, none.0___, none.1___; 59: MOV temp[85].y, temp[87]._x__; 60: MUL temp[88].xy, temp[80].xy__, temp[85].xy__; 61: FRC temp[89].xy, -temp[73].xy__; 62: MUL temp[91].xy, temp[88].xy__, (temp[89] + temp[73]).xy__; 63: ADD temp[92].x, temp[91].x___, temp[91].y___; 64: CMP temp[94].x, -|temp[92].x___|, none.0___, none.1___; 65: CMP temp[95].x, -temp[94].x___, none.1___, none.0___; 66: KIL -temp[95].xxxx; 67: ADD temp[96].x, -temp[49].x___, none.1___; 68: CMP temp[97].x, -temp[96].x___, none.0___, none.1___; 69: ADD temp[98].x, temp[77].x___, temp[97].x___; 70: MOV temp[98].y, input[1]._x__; 71: MOV temp[99].x, -temp[64].y___; 72: MOV temp[99].y, -temp[76]._x__; 73: ADD temp[100].x, -temp[49].x___, none.1___; 74: MOV temp[101].x, -temp[76].x___; 75: MOV temp[101].y, temp[64]._y__; 76: CMP temp[102].xy, -temp[100].xx__, temp[101].xy__, temp[99].xy__; 77: ADD temp[103].x, -temp[49].x___, none.1___; 78: CMP temp[104].x, -temp[103].x___, none.0___, none.1___; 79: ADD temp[105].x, temp[77].y___, temp[104].x___; 80: MOV temp[105].y, input[1]._x__; 81: MOV temp[106].x, -temp[64].y___; 82: MOV temp[106].y, -temp[76]._y__; 83: ADD temp[107].x, -temp[49].x___, none.1___; 84: MOV temp[108].x, -temp[76].y___; 85: MOV temp[108].y, temp[64]._y__; 86: CMP temp[109].xy, -temp[107].xx__, temp[108].xy__, temp[106].xy__; 87: ADD temp[110].xy, temp[98].xy__, none.HH__; 88: RCP temp[111].x, const[7].x___; 89: RCP temp[111].y, const[7]._y__; 90: MUL temp[112].xy, temp[110].xy__, temp[111].xy__; 91: TEX temp[113].zw, temp[112].xy__, 2D[1]; 92: MAD temp[115].xy, const[12].yy__, temp[113].zw__, none.11__; 93: RCP temp[117].x, const[6].x___; 94: RCP temp[117].y, const[6]._y__; 95: MUL temp[118].xy, (temp[102] + temp[115]).xy__, temp[117].xy__; 96: TEX temp[119].w, temp[118].xy__, 2D[0]; 97: MOV temp[121].x, temp[119].w___; 98: ADD temp[122].xy, temp[105].xy__, none.HH__; 99: RCP temp[123].x, const[7].x___; 100: RCP temp[123].y, const[7]._y__; 101: MUL temp[124].xy, temp[122].xy__, temp[123].xy__; 102: TEX temp[125].zw, temp[124].xy__, 2D[1]; 103: MAD temp[127].xy, const[12].yy__, temp[125].zw__, none.11__; 104: RCP temp[129].x, const[6].x___; 105: RCP temp[129].y, const[6]._y__; 106: MUL temp[130].xy, (temp[109] + temp[127]).xy__, temp[129].xy__; 107: TEX temp[131].w, temp[130].xy__, 2D[0]; 108: MOV temp[121].y, temp[131]._w__; 109: MUL temp[133].xy, temp[121].xy__, temp[91].xy__; 110: MAX temp[134].x, temp[133].x___, temp[133].y___; 111: ADD temp[135].x, temp[134].x___, none.-H___; 112: MAD temp[136].x, const[12].z___, temp[135].x___, none.H___; 113: ADD_SAT temp[137].x, temp[136].x___, const[0].x___; 114: CMP temp[139].x, -|temp[137].x___|, none.0___, none.1___; 115: CMP temp[140].x, -temp[139].x___, none.1___, none.0___; 116: KIL -temp[140].xxxx; 117: ADD temp[141].x, input[2].y___, none.H___; 118: RCP temp[142].x, const[9].x___; 119: MUL temp[143].x, temp[141].x___, temp[142].x___; 120: FRC temp[144].x, temp[143].x___; 121: FRC temp[145].x, temp[143].x___; 122: ADD temp[146].x, temp[143].x___, -temp[145].x___; 123: MAD temp[147].x, const[13].x___, temp[146].x___, const[1].x___; 124: ADD temp[148].x, temp[147].x___, none.H___; 125: RCP temp[149].x, const[9].y___; 126: MUL temp[150].x, temp[148].x___, temp[149].x___; 127: MOV temp[144].y, temp[150]._x__; 128: TEX temp[151], temp[144].xy__, 2D[3]; 129: MOV temp[152].xyz, temp[151].xyz_; 130: MUL temp[153].x, temp[151].w___, temp[40].x___; 131: MUL temp[154].x, temp[153].x___, temp[137].x___; 132: MOV temp[152].w, temp[154].___x; 133: MOV output[0], temp[152]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: ADD temp[25].x, input[2].z___, none.H___; 1: RCP temp[26].x, const[8].x___; 2: MUL temp[27].x, temp[25].x___, temp[26].x___; 3: FRC temp[28].x, temp[27].x___; 4: FRC temp[29].x, temp[27].x___; 5: ADD temp[31].x, (temp[27] - temp[29]).x___, none.H___; 6: RCP temp[32].x, const[8].y___; 7: MUL temp[33].x, temp[31].x___, temp[32].x___; 8: MOV temp[28].y, temp[33]._x__; 9: TEX temp[34].x, temp[28].xy__, 2D[2]; 10: MAD temp[35].x, const[10].y___, temp[34].x___, none.H___; 11: FRC temp[36].x, temp[35].x___; 12: MUL temp[38].x, (temp[35] - temp[36]).x___, const[10].w___; 13: FRC temp[39].x, temp[38].x___; 14: MUL temp[40].x, const[10].z___, temp[39].x___; 15: CMP temp[42].x, -|temp[40].x___|, none.0___, none.1___; 16: CMP temp[43].x, -temp[42].x___, none.1___, none.0___; 17: MOV temp[0], -temp[43].xxxx; 18: KIL temp[0]; 19: MUL temp[44].x, (temp[35] - temp[36]).x___, const[11].z___; 20: FRC temp[45].x, temp[44].x___; 21: MOV_SAT temp[47].x, (temp[44] - temp[45]).x___; 22: ADD temp[48].x, none.H___, -temp[47].x___; 23: CMP temp[49].x, temp[48].x___, none.1___, none.0___; 24: MUL temp[51].x, input[0].x___, none.H___; 25: ADD temp[52].x, temp[51].x___, -|input[4].y___|; 26: CMP temp[53].x, temp[52].x___, none.1___, none.0___; 27: ADD temp[54].x, -temp[49].x___, none.1___; 28: CMP temp[55].x, -temp[54].x___, none.0___, temp[53].x___; 29: CMP temp[56].x, -temp[55].x___, none.1___, none.0___; 30: MOV temp[1], -temp[56].xxxx; 31: KIL temp[1]; 32: MUL temp[57].x, const[11].z___, (temp[35] - temp[36]).x___; 33: FRC temp[59].x * 2, temp[57].x___; 34: ADD temp[60].x, temp[59].x___, -none.1___; 35: CMP temp[61].x, temp[60].x___, none.0___, none.1___; 36: MOV temp[62].y, none._0__; 37: MOV temp[62].x, input[3].z___; 38: CMP temp[64].xy, -temp[61].xx__, (temp[62] - input[4]).xy__, input[4].xy__; 39: MOV temp[2].y, -input[3]._x__; 40: MOV temp[2].x, -input[3].y___; 41: ADD temp[65].xy, input[3].zz__, temp[2].xy__; 42: CMP temp[66].xy, -temp[61].xx__, temp[65].xy__, input[3].xy__; 43: FRC temp[67].x, temp[64].x___; 44: MOV temp[69].x, (temp[64] - temp[67]).x___; 45: MOV temp[69].y, input[1]._x__; 46: ADD temp[70].xy, temp[69].xy__, none.HH__; 47: RCP temp[71].x, const[7].x___; 48: RCP temp[71].y, const[7]._y__; 49: MUL temp[72].xy, temp[70].xy__, temp[71].xy__; 50: TEX temp[73].xy, temp[72].xy__, 2D[1]; 51: MUL temp[75].xy, const[10].yy__, temp[73].xy__; 52: ADD temp[76].xy, const[12].xx__, -temp[75].xy__; 53: ADD temp[77].xy, (temp[64] - temp[67]).xx__, temp[76].xy__; 54: CMP temp[79].x, (temp[77] - temp[66]).x___, none.0___, none.1___; 55: MOV temp[80].x, temp[79].x___; 56: ADD temp[81].x, temp[77].y___, -temp[66].x___; 57: CMP temp[82].x, temp[81].x___, none.0___, none.1___; 58: MOV temp[80].y, temp[82]._x__; 59: ADD temp[83].x, temp[66].y___, -temp[77].x___; 60: CMP temp[84].x, temp[83].x___, none.0___, none.1___; 61: MOV temp[85].x, temp[84].x___; 62: CMP temp[87].x, (temp[66] - temp[77]).y___, none.0___, none.1___; 63: MOV temp[85].y, temp[87]._x__; 64: MUL temp[88].xy, temp[80].xy__, temp[85].xy__; 65: FRC temp[89].xy, -temp[73].xy__; 66: MUL temp[91].xy, temp[88].xy__, (temp[89] + temp[73]).xy__; 67: ADD temp[92].x, temp[91].x___, temp[91].y___; 68: CMP temp[94].x, -|temp[92].x___|, none.0___, none.1___; 69: CMP temp[95].x, -temp[94].x___, none.1___, none.0___; 70: MOV temp[3], -temp[95].xxxx; 71: KIL temp[3]; 72: ADD temp[96].x, -temp[49].x___, none.1___; 73: CMP temp[97].x, -temp[96].x___, none.0___, none.1___; 74: ADD temp[98].x, temp[77].x___, temp[97].x___; 75: MOV temp[98].y, input[1]._x__; 76: MOV temp[99].x, -temp[64].y___; 77: MOV temp[99].y, -temp[76]._x__; 78: ADD temp[100].x, -temp[49].x___, none.1___; 79: MOV temp[101].x, -temp[76].x___; 80: MOV temp[101].y, temp[64]._y__; 81: CMP temp[102].xy, -temp[100].xx__, temp[101].xy__, temp[99].xy__; 82: ADD temp[103].x, -temp[49].x___, none.1___; 83: CMP temp[104].x, -temp[103].x___, none.0___, none.1___; 84: ADD temp[105].x, temp[77].y___, temp[104].x___; 85: MOV temp[105].y, input[1]._x__; 86: MOV temp[106].x, -temp[64].y___; 87: MOV temp[106].y, -temp[76]._y__; 88: ADD temp[107].x, -temp[49].x___, none.1___; 89: MOV temp[108].x, -temp[76].y___; 90: MOV temp[108].y, temp[64]._y__; 91: CMP temp[109].xy, -temp[107].xx__, temp[108].xy__, temp[106].xy__; 92: ADD temp[110].xy, temp[98].xy__, none.HH__; 93: RCP temp[111].x, const[7].x___; 94: RCP temp[111].y, const[7]._y__; 95: MUL temp[112].xy, temp[110].xy__, temp[111].xy__; 96: TEX temp[113].zw, temp[112].xy__, 2D[1]; 97: MOV temp[4].x, temp[113].z___; 98: MOV temp[4].y, temp[113]._w__; 99: MAD temp[115].xy, const[12].yy__, temp[4].xy__, none.11__; 100: RCP temp[117].x, const[6].x___; 101: RCP temp[117].y, const[6]._y__; 102: MUL temp[118].xy, (temp[102] + temp[115]).xy__, temp[117].xy__; 103: TEX temp[119].w, temp[118].xy__, 2D[0]; 104: MOV temp[121].x, temp[119].w___; 105: ADD temp[122].xy, temp[105].xy__, none.HH__; 106: RCP temp[123].x, const[7].x___; 107: RCP temp[123].y, const[7]._y__; 108: MUL temp[124].xy, temp[122].xy__, temp[123].xy__; 109: TEX temp[125].zw, temp[124].xy__, 2D[1]; 110: MOV temp[5].x, temp[125].z___; 111: MOV temp[5].y, temp[125]._w__; 112: MAD temp[127].xy, const[12].yy__, temp[5].xy__, none.11__; 113: RCP temp[129].x, const[6].x___; 114: RCP temp[129].y, const[6]._y__; 115: MUL temp[130].xy, (temp[109] + temp[127]).xy__, temp[129].xy__; 116: TEX temp[131].w, temp[130].xy__, 2D[0]; 117: MOV temp[121].y, temp[131]._w__; 118: MUL temp[133].xy, temp[121].xy__, temp[91].xy__; 119: MAX temp[134].x, temp[133].x___, temp[133].y___; 120: ADD temp[135].x, temp[134].x___, none.-H___; 121: MAD temp[136].x, const[12].z___, temp[135].x___, none.H___; 122: ADD_SAT temp[137].x, temp[136].x___, const[0].x___; 123: CMP temp[139].x, -|temp[137].x___|, none.0___, none.1___; 124: CMP temp[140].x, -temp[139].x___, none.1___, none.0___; 125: MOV temp[6], -temp[140].xxxx; 126: KIL temp[6]; 127: ADD temp[141].x, input[2].y___, none.H___; 128: RCP temp[142].x, const[9].x___; 129: MUL temp[143].x, temp[141].x___, temp[142].x___; 130: FRC temp[144].x, temp[143].x___; 131: FRC temp[145].x, temp[143].x___; 132: ADD temp[146].x, temp[143].x___, -temp[145].x___; 133: MAD temp[147].x, const[13].x___, temp[146].x___, const[1].x___; 134: ADD temp[148].x, temp[147].x___, none.H___; 135: RCP temp[149].x, const[9].y___; 136: MUL temp[150].x, temp[148].x___, temp[149].x___; 137: MOV temp[144].y, temp[150]._x__; 138: TEX temp[151], temp[144].xy__, 2D[3]; 139: MOV temp[152].xyz, temp[151].xyz_; 140: MUL temp[153].x, temp[151].w___, temp[40].x___; 141: MUL temp[154].x, temp[153].x___, temp[137].x___; 142: MOV temp[152].w, temp[154].___x; 143: MOV output[0], temp[152]; CONST[6] = { 0.5000 255.0000 1.0323 0.0312 } CONST[7] = { 0.0000 1.0000 0.0156 2.0000 } CONST[8] = { 128.0000 1020.0000 10.6250 -0.5000 } CONST[9] = { 26.0000 0.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: ADD temp[25].x, input[2].z___, none.H___; 1: RCP temp[26].x, const[4].x___; 2: MUL temp[27].x, temp[25].x___, temp[26].x___; 3: FRC temp[28].x, temp[27].x___; 4: FRC temp[29].x, temp[27].x___; 5: ADD temp[31].x, (temp[27] - temp[29]).x___, none.H___; 6: RCP temp[32].x, const[4].y___; 7: MUL temp[33].x, temp[31].x___, temp[32].x___; 8: MOV temp[28].y, temp[33]._x__; 9: TEX temp[34].x, temp[28].xy__, 2D[2]; 10: MAD temp[35].x, const[6].y___, temp[34].x___, none.H___; 11: FRC temp[36].x, temp[35].x___; 12: MUL temp[38].x, (temp[35] - temp[36]).x___, const[6].w___; 13: FRC temp[39].x, temp[38].x___; 14: MUL temp[40].x, const[6].z___, temp[39].x___; 15: CMP temp[42].x, -|temp[40].x___|, none.0___, none.1___; 16: CMP temp[43].x, -temp[42].x___, none.1___, none.0___; 17: MOV temp[0], -temp[43].xxxx; 18: KIL temp[0]; 19: MUL temp[44].x, (temp[35] - temp[36]).x___, const[7].z___; 20: FRC temp[45].x, temp[44].x___; 21: MOV_SAT temp[47].x, (temp[44] - temp[45]).x___; 22: ADD temp[48].x, none.H___, -temp[47].x___; 23: CMP temp[49].x, temp[48].x___, none.1___, none.0___; 24: MUL temp[51].x, input[0].x___, none.H___; 25: ADD temp[52].x, temp[51].x___, -|input[4].y___|; 26: CMP temp[53].x, temp[52].x___, none.1___, none.0___; 27: ADD temp[54].x, -temp[49].x___, none.1___; 28: CMP temp[55].x, -temp[54].x___, none.0___, temp[53].x___; 29: CMP temp[56].x, -temp[55].x___, none.1___, none.0___; 30: MOV temp[1], -temp[56].xxxx; 31: KIL temp[1]; 32: MUL temp[57].x, const[7].z___, (temp[35] - temp[36]).x___; 33: FRC temp[59].x * 2, temp[57].x___; 34: ADD temp[60].x, temp[59].x___, -none.1___; 35: CMP temp[61].x, temp[60].x___, none.0___, none.1___; 36: MOV temp[62].y, none._0__; 37: MOV temp[62].x, input[3].z___; 38: CMP temp[64].xy, -temp[61].xx__, (temp[62] - input[4]).xy__, input[4].xy__; 39: MOV temp[2].y, -input[3]._x__; 40: MOV temp[2].x, -input[3].y___; 41: ADD temp[65].xy, input[3].zz__, temp[2].xy__; 42: CMP temp[66].xy, -temp[61].xx__, temp[65].xy__, input[3].xy__; 43: FRC temp[67].x, temp[64].x___; 44: MOV temp[69].x, (temp[64] - temp[67]).x___; 45: MOV temp[69].y, input[1]._x__; 46: ADD temp[70].xy, temp[69].xy__, none.HH__; 47: RCP temp[71].x, const[3].x___; 48: RCP temp[71].y, const[3]._y__; 49: MUL temp[72].xy, temp[70].xy__, temp[71].xy__; 50: TEX temp[73].xy, temp[72].xy__, 2D[1]; 51: MUL temp[75].xy, const[6].yy__, temp[73].xy__; 52: ADD temp[76].xy, const[8].xx__, -temp[75].xy__; 53: ADD temp[77].xy, (temp[64] - temp[67]).xx__, temp[76].xy__; 54: CMP temp[79].x, (temp[77] - temp[66]).x___, none.0___, none.1___; 55: MOV temp[80].x, temp[79].x___; 56: ADD temp[81].x, temp[77].y___, -temp[66].x___; 57: CMP temp[82].x, temp[81].x___, none.0___, none.1___; 58: MOV temp[80].y, temp[82]._x__; 59: ADD temp[83].x, temp[66].y___, -temp[77].x___; 60: CMP temp[84].x, temp[83].x___, none.0___, none.1___; 61: MOV temp[85].x, temp[84].x___; 62: CMP temp[87].x, (temp[66] - temp[77]).y___, none.0___, none.1___; 63: MOV temp[85].y, temp[87]._x__; 64: MUL temp[88].xy, temp[80].xy__, temp[85].xy__; 65: FRC temp[89].xy, -temp[73].xy__; 66: MUL temp[91].xy, temp[88].xy__, (temp[89] + temp[73]).xy__; 67: ADD temp[92].x, temp[91].x___, temp[91].y___; 68: CMP temp[94].x, -|temp[92].x___|, none.0___, none.1___; 69: CMP temp[95].x, -temp[94].x___, none.1___, none.0___; 70: MOV temp[3], -temp[95].xxxx; 71: KIL temp[3]; 72: ADD temp[96].x, -temp[49].x___, none.1___; 73: CMP temp[97].x, -temp[96].x___, none.0___, none.1___; 74: ADD temp[98].x, temp[77].x___, temp[97].x___; 75: MOV temp[98].y, input[1]._x__; 76: MOV temp[99].x, -temp[64].y___; 77: MOV temp[99].y, -temp[76]._x__; 78: ADD temp[100].x, -temp[49].x___, none.1___; 79: MOV temp[101].x, -temp[76].x___; 80: MOV temp[101].y, temp[64]._y__; 81: CMP temp[102].xy, -temp[100].xx__, temp[101].xy__, temp[99].xy__; 82: ADD temp[103].x, -temp[49].x___, none.1___; 83: CMP temp[104].x, -temp[103].x___, none.0___, none.1___; 84: ADD temp[105].x, temp[77].y___, temp[104].x___; 85: MOV temp[105].y, input[1]._x__; 86: MOV temp[106].x, -temp[64].y___; 87: MOV temp[106].y, -temp[76]._y__; 88: ADD temp[107].x, -temp[49].x___, none.1___; 89: MOV temp[108].x, -temp[76].y___; 90: MOV temp[108].y, temp[64]._y__; 91: CMP temp[109].xy, -temp[107].xx__, temp[108].xy__, temp[106].xy__; 92: ADD temp[110].xy, temp[98].xy__, none.HH__; 93: RCP temp[111].x, const[3].x___; 94: RCP temp[111].y, const[3]._y__; 95: MUL temp[112].xy, temp[110].xy__, temp[111].xy__; 96: TEX temp[113].zw, temp[112].xy__, 2D[1]; 97: MOV temp[4].x, temp[113].z___; 98: MOV temp[4].y, temp[113]._w__; 99: MAD temp[115].xy, const[8].yy__, temp[4].xy__, none.11__; 100: RCP temp[117].x, const[2].x___; 101: RCP temp[117].y, const[2]._y__; 102: MUL temp[118].xy, (temp[102] + temp[115]).xy__, temp[117].xy__; 103: TEX temp[119].w, temp[118].xy__, 2D[0]; 104: MOV temp[121].x, temp[119].w___; 105: ADD temp[122].xy, temp[105].xy__, none.HH__; 106: RCP temp[123].x, const[3].x___; 107: RCP temp[123].y, const[3]._y__; 108: MUL temp[124].xy, temp[122].xy__, temp[123].xy__; 109: TEX temp[125].zw, temp[124].xy__, 2D[1]; 110: MOV temp[5].x, temp[125].z___; 111: MOV temp[5].y, temp[125]._w__; 112: MAD temp[127].xy, const[8].yy__, temp[5].xy__, none.11__; 113: RCP temp[129].x, const[2].x___; 114: RCP temp[129].y, const[2]._y__; 115: MUL temp[130].xy, (temp[109] + temp[127]).xy__, temp[129].xy__; 116: TEX temp[131].w, temp[130].xy__, 2D[0]; 117: MOV temp[121].y, temp[131]._w__; 118: MUL temp[133].xy, temp[121].xy__, temp[91].xy__; 119: MAX temp[134].x, temp[133].x___, temp[133].y___; 120: ADD temp[135].x, temp[134].x___, none.-H___; 121: MAD temp[136].x, const[8].z___, temp[135].x___, none.H___; 122: ADD_SAT temp[137].x, temp[136].x___, const[0].x___; 123: CMP temp[139].x, -|temp[137].x___|, none.0___, none.1___; 124: CMP temp[140].x, -temp[139].x___, none.1___, none.0___; 125: MOV temp[6], -temp[140].xxxx; 126: KIL temp[6]; 127: ADD temp[141].x, input[2].y___, none.H___; 128: RCP temp[142].x, const[5].x___; 129: MUL temp[143].x, temp[141].x___, temp[142].x___; 130: FRC temp[144].x, temp[143].x___; 131: FRC temp[145].x, temp[143].x___; 132: ADD temp[146].x, temp[143].x___, -temp[145].x___; 133: MAD temp[147].x, const[9].x___, temp[146].x___, const[1].x___; 134: ADD temp[148].x, temp[147].x___, none.H___; 135: RCP temp[149].x, const[5].y___; 136: MUL temp[150].x, temp[148].x___, temp[149].x___; 137: MOV temp[144].y, temp[150]._x__; 138: TEX temp[151], temp[144].xy__, 2D[3]; 139: MOV temp[152].xyz, temp[151].xyz_; 140: MUL temp[153].x, temp[151].w___, temp[40].x___; 141: MUL temp[154].x, temp[153].x___, temp[137].x___; 142: MOV temp[152].w, temp[154].___x; 143: MOV output[0], temp[152]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[2] MAD temp[25].x, src0.z__, src0.111, src0.H__ 1: src0.xyz = const[4] REPL_ALPHA temp[26].x RCP, src0.x 2: src0.xyz = temp[25], src1.xyz = temp[26] MAD temp[27].x, src0.x__, src1.x__, src0.000 3: src0.xyz = temp[27] FRC temp[28].x, src0.x__ 4: src0.xyz = temp[27] FRC temp[29].x, src0.x__ 5: src0.xyz = temp[29], src1.xyz = temp[27], srcp.xyz = (src1 - src0) MAD temp[31].x, srcp.x__, src0.111, src0.H__ 6: src0.xyz = const[4] REPL_ALPHA temp[32].x RCP, src0.y 7: src0.xyz = temp[31], src1.xyz = temp[32] MAD temp[33].x, src0.x__, src1.x__, src0.000 8: src0.xyz = temp[33] MAD temp[28].y, src0._x_, src0.111, src0.000 9: TEX temp[34].x, temp[28].xy__, 2D[2]; 10: src0.xyz = const[6], src1.xyz = temp[34] MAD temp[35].x, src0.y__, src1.x__, src0.H__ 11: src0.xyz = temp[35] FRC temp[36].x, src0.x__ 12: src0.xyz = temp[36], src0.w = const[6], src1.xyz = temp[35], srcp.xyz = (src1 - src0) MAD temp[38].x, srcp.x__, src0.w__, src0.000 13: src0.xyz = temp[38] FRC temp[39].x, src0.x__ 14: src0.xyz = const[6], src1.xyz = temp[39] MAD temp[40].x, src0.z__, src1.x__, src0.000 15: src0.xyz = temp[40] CMP temp[42].x, src0.1__, src0.0__, -|src0.x__| 16: src0.xyz = temp[42] CMP temp[43].x, src0.0__, src0.1__, -src0.x__ 17: src0.xyz = temp[43] MAD temp[0].xyz, -src0.xxx, src0.111, src0.000 MAD temp[0].w, -src0.x, src0.1, src0.0 18: KIL temp[0]; 19: src0.xyz = temp[36], src1.xyz = temp[35], src2.xyz = const[7], srcp.xyz = (src1 - src0) MAD temp[44].x, srcp.x__, src2.z__, src0.000 20: src0.xyz = temp[44] FRC temp[45].x, src0.x__ 21: src0.xyz = temp[45], src1.xyz = temp[44], srcp.xyz = (src1 - src0) MAD_SAT temp[47].x, srcp.x__, src0.111, src0.000 22: src0.xyz = temp[47] MAD temp[48].x, src0.H__, src0.111, -src0.x__ 23: src0.xyz = temp[48] CMP temp[49].x, src0.0__, src0.1__, src0.x__ 24: src0.xyz = input[0] MAD temp[51].x, src0.x__, src0.H__, src0.000 25: src0.xyz = temp[51], src1.xyz = input[4] MAD temp[52].x, src0.x__, |src0.111|, -|src1.y__| 26: src0.xyz = temp[52] CMP temp[53].x, src0.0__, src0.1__, src0.x__ 27: src0.xyz = temp[49] MAD temp[54].x, -src0.x__, src0.111, src0.1__ 28: src0.xyz = temp[53], src1.xyz = temp[54] CMP temp[55].x, src0.x__, src0.0__, -src1.x__ 29: src0.xyz = temp[55] CMP temp[56].x, src0.0__, src0.1__, -src0.x__ 30: src0.xyz = temp[56] MAD temp[1].xyz, -src0.xxx, src0.111, src0.000 MAD temp[1].w, -src0.x, src0.1, src0.0 31: KIL temp[1]; 32: src0.xyz = temp[36], src1.xyz = temp[35], src2.xyz = const[7], srcp.xyz = (src1 - src0) MAD temp[57].x, src2.z__, srcp.x__, src0.000 33: src0.xyz = temp[57] FRC temp[59].x * 2, src0.x__ 34: src0.xyz = temp[59] MAD temp[60].x, src0.x__, src0.111, -src0.1__ 35: src0.xyz = temp[60] CMP temp[61].x, src0.1__, src0.0__, src0.x__ 36: MAD temp[62].y, src0._0_, src0.111, src0.000 37: src0.xyz = input[3] MAD temp[62].x, src0.z__, src0.111, src0.000 38: src0.xyz = input[4], src1.xyz = temp[62], src2.xyz = temp[61], srcp.xyz = (src1 - src0) CMP temp[64].xy, src0.xy_, srcp.xy_, -src2.xx_ 39: src0.xyz = input[3] MAD temp[2].y, -src0._x_, src0.111, src0.000 40: src0.xyz = input[3] MAD temp[2].x, -src0.y__, src0.111, src0.000 41: src0.xyz = input[3], src1.xyz = temp[2] MAD temp[65].xy, src0.zz_, src0.111, src1.xy_ 42: src0.xyz = input[3], src1.xyz = temp[65], src2.xyz = temp[61] CMP temp[66].xy, src0.xy_, src1.xy_, -src2.xx_ 43: src0.xyz = temp[64] FRC temp[67].x, src0.x__ 44: src0.xyz = temp[67], src1.xyz = temp[64], srcp.xyz = (src1 - src0) MAD temp[69].x, srcp.x__, src0.111, src0.000 45: src0.xyz = input[1] MAD temp[69].y, src0._x_, src0.111, src0.000 46: src0.xyz = temp[69] MAD temp[70].xy, src0.xy_, src0.111, src0.HH_ 47: src0.xyz = const[3] REPL_ALPHA temp[71].x RCP, src0.x 48: src0.xyz = const[3] REPL_ALPHA temp[71].y RCP, src0.y 49: src0.xyz = temp[70], src1.xyz = temp[71] MAD temp[72].xy, src0.xy_, src1.xy_, src0.000 50: TEX temp[73].xy, temp[72].xy__, 2D[1]; 51: src0.xyz = const[6], src1.xyz = temp[73] MAD temp[75].xy, src0.yy_, src1.xy_, src0.000 52: src0.xyz = const[8], src1.xyz = temp[75] MAD temp[76].xy, src0.xx_, src0.111, -src1.xy_ 53: src0.xyz = temp[67], src1.xyz = temp[64], src2.xyz = temp[76], srcp.xyz = (src1 - src0) MAD temp[77].xy, srcp.xx_, src0.111, src2.xy_ 54: src0.xyz = temp[66], src1.xyz = temp[77], srcp.xyz = (src1 - src0) CMP temp[79].x, src0.1__, src0.0__, srcp.x__ 55: src0.xyz = temp[79] MAD temp[80].x, src0.x__, src0.111, src0.000 56: src0.xyz = temp[77], src1.xyz = temp[66] MAD temp[81].x, src0.y__, src0.111, -src1.x__ 57: src0.xyz = temp[81] CMP temp[82].x, src0.1__, src0.0__, src0.x__ 58: src0.xyz = temp[82] MAD temp[80].y, src0._x_, src0.111, src0.000 59: src0.xyz = temp[66], src1.xyz = temp[77] MAD temp[83].x, src0.y__, src0.111, -src1.x__ 60: src0.xyz = temp[83] CMP temp[84].x, src0.1__, src0.0__, src0.x__ 61: src0.xyz = temp[84] MAD temp[85].x, src0.x__, src0.111, src0.000 62: src0.xyz = temp[77], src1.xyz = temp[66], srcp.xyz = (src1 - src0) CMP temp[87].x, src0.1__, src0.0__, srcp.y__ 63: src0.xyz = temp[87] MAD temp[85].y, src0._x_, src0.111, src0.000 64: src0.xyz = temp[80], src1.xyz = temp[85] MAD temp[88].xy, src0.xy_, src1.xy_, src0.000 65: src0.xyz = temp[73] FRC temp[89].xy, -src0.xy_ 66: src0.xyz = temp[73], src1.xyz = temp[89], src2.xyz = temp[88], srcp.xyz = (src1 + src0) MAD temp[91].xy, src2.xy_, srcp.xy_, src0.000 67: src0.xyz = temp[91] MAD temp[92].x, src0.x__, src0.111, src0.y__ 68: src0.xyz = temp[92] CMP temp[94].x, src0.1__, src0.0__, -|src0.x__| 69: src0.xyz = temp[94] CMP temp[95].x, src0.0__, src0.1__, -src0.x__ 70: src0.xyz = temp[95] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 71: KIL temp[3]; 72: src0.xyz = temp[49] MAD temp[96].x, -src0.x__, src0.111, src0.1__ 73: src0.xyz = temp[96] CMP temp[97].x, src0.1__, src0.0__, -src0.x__ 74: src0.xyz = temp[77], src1.xyz = temp[97] MAD temp[98].x, src0.x__, src0.111, src1.x__ 75: src0.xyz = input[1] MAD temp[98].y, src0._x_, src0.111, src0.000 76: src0.xyz = temp[64] MAD temp[99].x, -src0.y__, src0.111, src0.000 77: src0.xyz = temp[76] MAD temp[99].y, -src0._x_, src0.111, src0.000 78: src0.xyz = temp[49] MAD temp[100].x, -src0.x__, src0.111, src0.1__ 79: src0.xyz = temp[76] MAD temp[101].x, -src0.x__, src0.111, src0.000 80: src0.xyz = temp[64] MAD temp[101].y, src0._y_, src0.111, src0.000 81: src0.xyz = temp[99], src1.xyz = temp[101], src2.xyz = temp[100] CMP temp[102].xy, src0.xy_, src1.xy_, -src2.xx_ 82: src0.xyz = temp[49] MAD temp[103].x, -src0.x__, src0.111, src0.1__ 83: src0.xyz = temp[103] CMP temp[104].x, src0.1__, src0.0__, -src0.x__ 84: src0.xyz = temp[77], src1.xyz = temp[104] MAD temp[105].x, src0.y__, src0.111, src1.x__ 85: src0.xyz = input[1] MAD temp[105].y, src0._x_, src0.111, src0.000 86: src0.xyz = temp[64] MAD temp[106].x, -src0.y__, src0.111, src0.000 87: src0.xyz = temp[76] MAD temp[106].y, -src0._y_, src0.111, src0.000 88: src0.xyz = temp[49] MAD temp[107].x, -src0.x__, src0.111, src0.1__ 89: src0.xyz = temp[76] MAD temp[108].x, -src0.y__, src0.111, src0.000 90: src0.xyz = temp[64] MAD temp[108].y, src0._y_, src0.111, src0.000 91: src0.xyz = temp[106], src1.xyz = temp[108], src2.xyz = temp[107] CMP temp[109].xy, src0.xy_, src1.xy_, -src2.xx_ 92: src0.xyz = temp[98] MAD temp[110].xy, src0.xy_, src0.111, src0.HH_ 93: src0.xyz = const[3] REPL_ALPHA temp[111].x RCP, src0.x 94: src0.xyz = const[3] REPL_ALPHA temp[111].y RCP, src0.y 95: src0.xyz = temp[110], src1.xyz = temp[111] MAD temp[112].xy, src0.xy_, src1.xy_, src0.000 96: TEX temp[113].zw, temp[112].xy__, 2D[1]; 97: src0.xyz = temp[113] MAD temp[4].x, src0.z__, src0.111, src0.000 98: src0.w = temp[113] MAD temp[4].y, src0._w_, src0.111, src0.000 99: src0.xyz = const[8], src1.xyz = temp[4] MAD temp[115].xy, src0.yy_, src1.xy_, src0.11_ 100: src0.xyz = const[2] REPL_ALPHA temp[117].x RCP, src0.x 101: src0.xyz = const[2] REPL_ALPHA temp[117].y RCP, src0.y 102: src0.xyz = temp[115], src1.xyz = temp[102], src2.xyz = temp[117], srcp.xyz = (src1 + src0) MAD temp[118].xy, srcp.xy_, src2.xy_, src0.000 103: TEX temp[119].w, temp[118].xy__, 2D[0]; 104: src0.w = temp[119] MAD temp[121].x, src0.w__, src0.111, src0.000 105: src0.xyz = temp[105] MAD temp[122].xy, src0.xy_, src0.111, src0.HH_ 106: src0.xyz = const[3] REPL_ALPHA temp[123].x RCP, src0.x 107: src0.xyz = const[3] REPL_ALPHA temp[123].y RCP, src0.y 108: src0.xyz = temp[122], src1.xyz = temp[123] MAD temp[124].xy, src0.xy_, src1.xy_, src0.000 109: TEX temp[125].zw, temp[124].xy__, 2D[1]; 110: src0.xyz = temp[125] MAD temp[5].x, src0.z__, src0.111, src0.000 111: src0.w = temp[125] MAD temp[5].y, src0._w_, src0.111, src0.000 112: src0.xyz = const[8], src1.xyz = temp[5] MAD temp[127].xy, src0.yy_, src1.xy_, src0.11_ 113: src0.xyz = const[2] REPL_ALPHA temp[129].x RCP, src0.x 114: src0.xyz = const[2] REPL_ALPHA temp[129].y RCP, src0.y 115: src0.xyz = temp[127], src1.xyz = temp[109], src2.xyz = temp[129], srcp.xyz = (src1 + src0) MAD temp[130].xy, srcp.xy_, src2.xy_, src0.000 116: TEX temp[131].w, temp[130].xy__, 2D[0]; 117: src0.w = temp[131] MAD temp[121].y, src0._w_, src0.111, src0.000 118: src0.xyz = temp[121], src1.xyz = temp[91] MAD temp[133].xy, src0.xy_, src1.xy_, src0.000 119: src0.xyz = temp[133] MAX temp[134].x, src0.x__, src0.y__ 120: src0.xyz = temp[134] MAD temp[135].x, src0.x__, src0.111, -src0.H__ 121: src0.xyz = const[8], src1.xyz = temp[135] MAD temp[136].x, src0.z__, src1.x__, src0.H__ 122: src0.xyz = temp[136], src1.xyz = const[0] MAD_SAT temp[137].x, src0.x__, src0.111, src1.x__ 123: src0.xyz = temp[137] CMP temp[139].x, src0.1__, src0.0__, -|src0.x__| 124: src0.xyz = temp[139] CMP temp[140].x, src0.0__, src0.1__, -src0.x__ 125: src0.xyz = temp[140] MAD temp[6].xyz, -src0.xxx, src0.111, src0.000 MAD temp[6].w, -src0.x, src0.1, src0.0 126: KIL temp[6]; 127: src0.xyz = input[2] MAD temp[141].x, src0.y__, src0.111, src0.H__ 128: src0.xyz = const[5] REPL_ALPHA temp[142].x RCP, src0.x 129: src0.xyz = temp[141], src1.xyz = temp[142] MAD temp[143].x, src0.x__, src1.x__, src0.000 130: src0.xyz = temp[143] FRC temp[144].x, src0.x__ 131: src0.xyz = temp[143] FRC temp[145].x, src0.x__ 132: src0.xyz = temp[143], src1.xyz = temp[145] MAD temp[146].x, src0.x__, src0.111, -src1.x__ 133: src0.xyz = const[9], src1.xyz = temp[146], src2.xyz = const[1] MAD temp[147].x, src0.x__, src1.x__, src2.x__ 134: src0.xyz = temp[147] MAD temp[148].x, src0.x__, src0.111, src0.H__ 135: src0.xyz = const[5] REPL_ALPHA temp[149].x RCP, src0.y 136: src0.xyz = temp[148], src1.xyz = temp[149] MAD temp[150].x, src0.x__, src1.x__, src0.000 137: src0.xyz = temp[150] MAD temp[144].y, src0._x_, src0.111, src0.000 138: TEX temp[151], temp[144].xy__, 2D[3]; 139: src0.xyz = temp[151] MAD temp[152].xyz, src0.xyz, src0.111, src0.000 140: src0.xyz = temp[40], src0.w = temp[151] MAD temp[153].x, src0.w__, src0.x__, src0.000 141: src0.xyz = temp[153], src1.xyz = temp[137] MAD temp[154].x, src0.x__, src1.x__, src0.000 142: src0.xyz = temp[154] MAD temp[152].w, src0.x, src0.1, src0.0 143: src0.xyz = temp[152], src0.w = temp[152] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[3], src1.xyz = input[2] MAD temp[2].y, -src0._x_, src0.111, src0.000 MAD temp[141].w, src1.y, src0.1, src0.H 1: src0.xyz = input[3], src1.xyz = const[5] MAD temp[62].x, src0.z__, src0.111, src0.000 RCP temp[149].w, src1.y 2: src0.xyz = const[5] MAD temp[62].y, src0._0_, src0.111, src0.000 RCP temp[142].w, src0.x 3: src0.xyz = input[3], src0.w = temp[141], src1.w = temp[142] MAD temp[2].x, -src0.y__, src0.111, src0.000 MAD temp[143].w, src0.w, src1.w, src0.0 4: src0.xyz = input[1], src0.w = temp[143] MAD temp[69].y, src0._x_, src0.111, src0.000 FRC temp[145].w, src0.w 5: src0.xyz = input[1], src0.w = temp[143], src1.w = temp[145] MAD temp[98].y, src0._x_, src0.111, src0.000 MAD temp[146].w, src0.w, src0.1, -src1.w 6: src0.xyz = input[1], src0.w = temp[146], src1.xyz = const[9], src2.xyz = const[1] MAD temp[105].y, src0._x_, src0.111, src0.000 MAD temp[147].w, src1.x, src0.w, src2.x 7: src0.xyz = input[3], src0.w = temp[147], src1.xyz = temp[2] MAD temp[65].xy, src0.zz_, src0.111, src1.xy_ MAD temp[148].w, src0.w, src0.1, src0.H 8: src0.xyz = temp[143], src0.w = temp[143], src1.w = temp[148], src2.w = temp[149] FRC temp[144].x, src0.w__ MAD temp[150].w, src1.w, src2.w, src0.0 9: src0.xyz = input[0], src1.xyz = const[4] MAD temp[51].x, src0.x__, src0.H__, src0.000 RCP temp[32].w, src1.y 10: src0.xyz = temp[150], src0.w = temp[150], src1.xyz = temp[51], src2.xyz = input[4] MAD temp[144].y, src0._w_, src0.111, src0.000 MAD temp[52].w, src1.x, |src0.1|, -|src2.y| 11: src0.xyz = input[2], src1.xyz = const[4] MAD temp[25].x, src0.z__, src0.111, src0.H__ RCP temp[26].w, src1.x 12: src0.xyz = temp[25], src0.w = temp[26], src1.xyz = temp[26], src1.w = temp[52] MAD temp[27].x, src0.x__, src0.w__, src0.000 CMP temp[53].w, src0.0, src0.1, src1.w 13: src0.xyz = const[3] REPL_ALPHA temp[71].x RCP, src0.x 14: src0.xyz = const[3] REPL_ALPHA temp[71].y RCP, src0.y 15: src0.xyz = const[3] REPL_ALPHA temp[111].x RCP, src0.x 16: src0.xyz = const[3] REPL_ALPHA temp[111].y RCP, src0.y 17: src0.xyz = const[2] REPL_ALPHA temp[117].x RCP, src0.x 18: src0.xyz = const[2] REPL_ALPHA temp[117].y RCP, src0.y 19: src0.xyz = const[3] REPL_ALPHA temp[123].x RCP, src0.x 20: src0.xyz = const[3] REPL_ALPHA temp[123].y RCP, src0.y 21: src0.xyz = const[2] REPL_ALPHA temp[129].x RCP, src0.x 22: src0.xyz = const[2] REPL_ALPHA temp[129].y RCP, src0.y 23: src0.xyz = temp[27] FRC temp[29].x, src0.x__ 24: src0.xyz = temp[29], src1.xyz = temp[27], srcp.xyz = (src1 - src0) FRC temp[28].x, src1.x__ MAD temp[31].w, srcp.x, src0.1, src0.H 25: src0.xyz = temp[31], src0.w = temp[32], src1.xyz = temp[32], src1.w = temp[31] MAD temp[33].x, src1.w__, src0.w__, src0.000 26: src0.xyz = temp[33] MAD temp[28].y, src0._x_, src0.111, src0.000 27: BEGIN_TEX; 28: TEX temp[151], temp[144].xy__, 2D[3]; 29: TEX temp[34].x, temp[28].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 30: src0.xyz = const[6], src1.xyz = temp[34] SEM_WAIT MAD temp[35].x, src0.y__, src1.x__, src0.H__ 31: src0.xyz = temp[151] MAD temp[152].xyz, src0.xyz, src0.111, src0.000 32: src0.xyz = temp[35] FRC temp[36].x, src0.x__ 33: src0.xyz = temp[36], src1.xyz = temp[35], src2.xyz = const[7], srcp.xyz = (src1 - src0) MAD temp[44].x, srcp.x__, src2.z__, src0.000 34: src0.xyz = temp[36], src0.w = const[6], src1.xyz = temp[35], src2.xyz = temp[44], srcp.xyz = (src1 - src0) FRC temp[45].x, src2.x__ MAD temp[38].w, srcp.x, src0.w, src0.0 35: src0.xyz = temp[45], src0.w = temp[38], src1.xyz = temp[44], src2.xyz = temp[38], srcp.xyz = (src1 - src0) FRC temp[39].x, src0.w__ MAD_SAT temp[47].w, srcp.x, src0.1, src0.0 36: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = const[6], src2.xyz = temp[39] MAD temp[48].x, src0.H__, src0.111, -src0.w__ MAD temp[40].w, src1.z, src2.x, src0.0 37: src0.xyz = temp[40], src0.w = temp[151], src1.xyz = temp[48], src1.w = temp[40] MAD temp[153].x, src0.w__, src1.w__, src0.000 CMP temp[49].w, src0.0, src0.1, src1.x 38: src0.xyz = temp[49], src0.w = temp[49] MAD temp[54].x, -src0.w__, src0.111, src0.1__ MAD temp[96].w, -src0.w, src0.1, src0.1 39: src0.xyz = temp[96], src0.w = temp[96], src1.xyz = temp[54], src1.w = temp[53] CMP temp[97].x, src0.1__, src0.0__, -src0.w__ CMP temp[55].w, src1.w, src0.0, -src1.x 40: src0.xyz = temp[49], src0.w = temp[49] MAD temp[100].x, -src0.w__, src0.111, src0.1__ MAD temp[103].w, -src0.w, src0.1, src0.1 41: src0.xyz = temp[103], src0.w = temp[103], src1.w = temp[55] CMP temp[104].x, src0.1__, src0.0__, -src0.w__ CMP temp[56].w, src0.0, src0.1, -src1.w 42: src0.xyz = temp[49], src0.w = temp[49], src1.w = temp[40] MAD temp[107].x, -src0.w__, src0.111, src0.1__ CMP temp[42].w, src0.1, src0.0, -|src1.w| 43: src0.xyz = temp[36], src1.xyz = temp[35], src2.xyz = const[7], srcp.xyz = (src1 - src0) MAD temp[57].w, src2.z, srcp.x, src0.0 44: src0.xyz = temp[57], src0.w = temp[57], src1.w = temp[42] FRC temp[59].x * 2, src0.w__ CMP temp[43].w, src0.0, src0.1, -src1.w 45: src0.xyz = temp[56], src0.w = temp[56] MAD temp[1].xyz, -src0.www, src0.111, src0.000 MAD temp[1].w, -src0.w, src0.1, src0.0 46: BEGIN_TEX; 47: KIL temp[1]; 48: src0.xyz = temp[43], src0.w = temp[43] MAD temp[0].xyz, -src0.www, src0.111, src0.000 MAD temp[0].w, -src0.w, src0.1, src0.0 49: BEGIN_TEX; 50: KIL temp[0]; 51: src0.xyz = temp[59] MAD temp[60].x, src0.x__, src0.111, -src0.1__ 52: src0.xyz = temp[60] CMP temp[61].x, src0.1__, src0.0__, src0.x__ 53: src0.xyz = input[4], src1.xyz = temp[62], src2.xyz = temp[61], srcp.xyz = (src1 - src0) CMP temp[64].xy, src0.xy_, srcp.xy_, -src2.xx_ 54: src0.xyz = input[3], src1.xyz = temp[65], src2.xyz = temp[61] CMP temp[66].xy, src0.xy_, src1.xy_, -src2.xx_ 55: src0.xyz = temp[64] FRC temp[67].x, src0.x__ 56: src0.xyz = temp[64] MAD temp[108].y, src0._y_, src0.111, src0.000 57: src0.xyz = temp[67], src1.xyz = temp[64], srcp.xyz = (src1 - src0) MAD temp[69].x, srcp.x__, src0.111, src0.000 58: src0.xyz = temp[64] MAD temp[106].x, -src0.y__, src0.111, src0.000 59: src0.xyz = temp[64] MAD temp[101].y, src0._y_, src0.111, src0.000 60: src0.xyz = temp[64] MAD temp[99].x, -src0.y__, src0.111, src0.000 61: src0.xyz = temp[69] MAD temp[70].xy, src0.xy_, src0.111, src0.HH_ 62: src0.xyz = temp[70], src1.xyz = temp[71] MAD temp[72].xy, src0.xy_, src1.xy_, src0.000 63: BEGIN_TEX; 64: TEX temp[73].xy, temp[72].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 65: src0.xyz = const[6], src1.xyz = temp[73] SEM_WAIT MAD temp[75].xy, src0.yy_, src1.xy_, src0.000 66: src0.xyz = temp[73] FRC temp[89].xy, -src0.xy_ 67: src0.xyz = const[8], src1.xyz = temp[75] MAD temp[76].xy, src0.xx_, src0.111, -src1.xy_ 68: src0.xyz = temp[67], src1.xyz = temp[64], src2.xyz = temp[76], srcp.xyz = (src1 - src0) MAD temp[77].xy, srcp.xx_, src0.111, src2.xy_ 69: src0.xyz = temp[76], src1.xyz = temp[77], src2.xyz = temp[66] MAD temp[106].y, -src0._y_, src0.111, src0.000 MAD temp[81].w, src1.y, src0.1, -src2.x 70: src0.xyz = temp[77], src0.w = temp[81], src1.xyz = temp[97] MAD temp[98].x, src0.x__, src0.111, src1.x__ CMP temp[82].w, src0.1, src0.0, src0.w 71: src0.xyz = temp[77], src1.xyz = temp[66], src2.xyz = temp[76], srcp.xyz = (src1 - src0) MAD temp[108].x, -src2.y__, src0.111, src0.000 CMP temp[87].w, src0.1, src0.0, srcp.y 72: src0.xyz = temp[66], src1.xyz = temp[77], src2.xyz = temp[76], srcp.xyz = (src1 - src0) MAD temp[99].y, -src2._x_, src0.111, src0.000 CMP temp[79].w, src0.1, src0.0, srcp.x 73: src0.xyz = temp[76], src1.xyz = temp[66], src2.xyz = temp[77] MAD temp[101].x, -src0.x__, src0.111, src0.000 MAD temp[83].w, src1.y, src0.1, -src2.x 74: src0.xyz = temp[77], src0.w = temp[83], src1.xyz = temp[104] MAD temp[105].x, src0.y__, src0.111, src1.x__ CMP temp[84].w, src0.1, src0.0, src0.w 75: src0.xyz = temp[106], src1.xyz = temp[108], src2.xyz = temp[107] CMP temp[109].xy, src0.xy_, src1.xy_, -src2.xx_ 76: src0.xyz = temp[82], src0.w = temp[82] MAD temp[80].y, src0._w_, src0.111, src0.000 77: src0.xyz = temp[87], src0.w = temp[87] MAD temp[85].y, src0._w_, src0.111, src0.000 78: src0.xyz = temp[99], src1.xyz = temp[101], src2.xyz = temp[100] CMP temp[102].xy, src0.xy_, src1.xy_, -src2.xx_ 79: src0.xyz = temp[79], src0.w = temp[79] MAD temp[80].x, src0.w__, src0.111, src0.000 80: src0.xyz = temp[84], src0.w = temp[84] MAD temp[85].x, src0.w__, src0.111, src0.000 81: src0.xyz = temp[98] MAD temp[110].xy, src0.xy_, src0.111, src0.HH_ 82: src0.xyz = temp[105] MAD temp[122].xy, src0.xy_, src0.111, src0.HH_ 83: src0.xyz = temp[80], src1.xyz = temp[85] MAD temp[88].xy, src0.xy_, src1.xy_, src0.000 84: src0.xyz = temp[110], src1.xyz = temp[111] MAD temp[112].xy, src0.xy_, src1.xy_, src0.000 85: src0.xyz = temp[73], src1.xyz = temp[89], src2.xyz = temp[88], srcp.xyz = (src1 + src0) MAD temp[91].xy, src2.xy_, srcp.xy_, src0.000 86: src0.xyz = temp[122], src1.xyz = temp[123], src2.xyz = temp[91] MAD temp[124].xy, src0.xy_, src1.xy_, src0.000 MAD temp[92].w, src2.x, src0.1, src2.y 87: src0.xyz = temp[92], src0.w = temp[92] CMP temp[94].x, src0.1__, src0.0__, -|src0.w__| 88: src0.xyz = temp[94] CMP temp[95].x, src0.0__, src0.1__, -src0.x__ 89: src0.xyz = temp[95] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 90: BEGIN_TEX; 91: TEX temp[113].zw, temp[112].xy__, 2D[1]; 92: TEX temp[125].zw, temp[124].xy__, 2D[1]; 93: KIL temp[3]; 94: src0.xyz = temp[113] SEM_WAIT MAD temp[4].x, src0.z__, src0.111, src0.000 95: src0.w = temp[113] MAD temp[4].y, src0._w_, src0.111, src0.000 96: src0.xyz = temp[125] MAD temp[5].x, src0.z__, src0.111, src0.000 97: src0.w = temp[125] MAD temp[5].y, src0._w_, src0.111, src0.000 98: src0.xyz = const[8], src1.xyz = temp[4] MAD temp[115].xy, src0.yy_, src1.xy_, src0.11_ 99: src0.xyz = const[8], src1.xyz = temp[5] MAD temp[127].xy, src0.yy_, src1.xy_, src0.11_ 100: src0.xyz = temp[115], src1.xyz = temp[102], src2.xyz = temp[117], srcp.xyz = (src1 + src0) MAD temp[118].xy, srcp.xy_, src2.xy_, src0.000 101: src0.xyz = temp[127], src1.xyz = temp[109], src2.xyz = temp[129], srcp.xyz = (src1 + src0) MAD temp[130].xy, srcp.xy_, src2.xy_, src0.000 102: BEGIN_TEX; 103: TEX temp[119].w, temp[118].xy__, 2D[0]; 104: TEX temp[131].w, temp[130].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 105: src0.w = temp[119] SEM_WAIT MAD temp[121].x, src0.w__, src0.111, src0.000 106: src0.w = temp[131] MAD temp[121].y, src0._w_, src0.111, src0.000 107: src0.xyz = temp[121], src1.xyz = temp[91] MAD temp[133].xy, src0.xy_, src1.xy_, src0.000 108: src0.xyz = temp[133] MAX temp[134].x, src0.x__, src0.y__ 109: src0.xyz = temp[134] MAD temp[135].x, src0.x__, src0.111, -src0.H__ 110: src0.xyz = const[8], src1.xyz = temp[135] MAD temp[136].x, src0.z__, src1.x__, src0.H__ 111: src0.xyz = temp[136], src1.xyz = const[0] MAD_SAT temp[137].x, src0.x__, src0.111, src1.x__ 112: src0.xyz = temp[137], src1.xyz = temp[153] CMP temp[139].x, src0.1__, src0.0__, -|src0.x__| MAD temp[154].w, src1.x, src0.x, src0.0 113: src0.xyz = temp[139], src0.w = temp[154] CMP temp[140].x, src0.0__, src0.1__, -src0.x__ MAD temp[152].w, src0.w, src0.1, src0.0 114: src0.xyz = temp[140] MAD temp[6].xyz, -src0.xxx, src0.111, src0.000 MAD temp[6].w, -src0.x, src0.1, src0.0 115: BEGIN_TEX; 116: KIL temp[6]; 117: src0.xyz = temp[152], src0.w = temp[152] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[3], src1.xyz = input[2] MAD temp[2].y, -src0._x_, src0.111, src0.000 MAD temp[141].w, src1.y, src0.1, src0.H 1: src0.xyz = input[3], src1.xyz = const[5] MAD temp[62].x, src0.z__, src0.111, src0.000 RCP temp[149].w, src1.y 2: src0.xyz = const[5] MAD temp[62].y, src0._0_, src0.111, src0.000 RCP temp[142].w, src0.x 3: src0.xyz = input[3], src0.w = temp[141], src1.w = temp[142] MAD temp[2].x, -src0.y__, src0.111, src0.000 MAD temp[143].w, src0.w, src1.w, src0.0 4: src0.xyz = input[1], src0.w = temp[143] MAD temp[69].y, src0._x_, src0.111, src0.000 FRC temp[145].w, src0.w 5: src0.xyz = input[1], src0.w = temp[143], src1.w = temp[145] MAD temp[98].y, src0._x_, src0.111, src0.000 MAD temp[146].w, src0.w, src0.1, -src1.w 6: src0.xyz = input[1], src0.w = temp[146], src1.xyz = const[9], src2.xyz = const[1] MAD temp[105].y, src0._x_, src0.111, src0.000 MAD temp[147].w, src1.x, src0.w, src2.x 7: src0.xyz = input[3], src0.w = temp[147], src1.xyz = temp[2] MAD temp[65].xy, src0.zz_, src0.111, src1.xy_ MAD temp[148].w, src0.w, src0.1, src0.H 8: src0.w = temp[143], src1.w = temp[148], src2.w = temp[149] FRC temp[144].x, src0.w__ MAD temp[150].w, src1.w, src2.w, src0.0 9: src0.xyz = input[0], src1.xyz = const[4] MAD temp[51].x, src0.x__, src0.H__, src0.000 RCP temp[32].w, src1.y 10: src0.w = temp[150], src1.xyz = temp[51], src2.xyz = input[4] MAD temp[144].y, src0._w_, src0.111, src0.000 MAD temp[52].w, src1.x, |src0.1|, -|src2.y| 11: src0.xyz = input[2], src1.xyz = const[4] MAD temp[25].x, src0.z__, src0.111, src0.H__ RCP temp[26].w, src1.x 12: src0.xyz = temp[25], src0.w = temp[26], src1.w = temp[52] MAD temp[27].x, src0.x__, src0.w__, src0.000 CMP temp[53].w, src0.0, src0.1, src1.w 13: src0.xyz = const[3] REPL_ALPHA temp[71].x RCP, src0.x 14: src0.xyz = const[3] REPL_ALPHA temp[71].y RCP, src0.y 15: src0.xyz = const[3] REPL_ALPHA temp[111].x RCP, src0.x 16: src0.xyz = const[3] REPL_ALPHA temp[111].y RCP, src0.y 17: src0.xyz = const[2] REPL_ALPHA temp[117].x RCP, src0.x 18: src0.xyz = const[2] REPL_ALPHA temp[117].y RCP, src0.y 19: src0.xyz = const[3] REPL_ALPHA temp[123].x RCP, src0.x 20: src0.xyz = const[3] REPL_ALPHA temp[123].y RCP, src0.y 21: src0.xyz = const[2] REPL_ALPHA temp[129].x RCP, src0.x 22: src0.xyz = const[2] REPL_ALPHA temp[129].y RCP, src0.y 23: src0.xyz = temp[27] FRC temp[29].x, src0.x__ 24: src0.xyz = temp[29], src1.xyz = temp[27], srcp.xyz = (src1 - src0) FRC temp[28].x, src1.x__ MAD temp[31].w, srcp.x, src0.1, src0.H 25: src0.w = temp[32], src1.w = temp[31] MAD temp[33].x, src1.w__, src0.w__, src0.000 26: src0.xyz = temp[33] MAD temp[28].y, src0._x_, src0.111, src0.000 27: BEGIN_TEX; 28: TEX temp[151], temp[144].xy__, 2D[3]; 29: TEX temp[34].x, temp[28].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 30: src0.xyz = const[6], src1.xyz = temp[34] SEM_WAIT MAD temp[35].x, src0.y__, src1.x__, src0.H__ 31: src0.xyz = temp[151] MAD temp[152].xyz, src0.xyz, src0.111, src0.000 32: src0.xyz = temp[35] FRC temp[36].x, src0.x__ 33: src0.xyz = temp[36], src1.xyz = temp[35], src2.xyz = const[7], srcp.xyz = (src1 - src0) MAD temp[44].x, srcp.x__, src2.z__, src0.000 34: src0.xyz = temp[36], src0.w = const[6], src1.xyz = temp[35], src2.xyz = temp[44], srcp.xyz = (src1 - src0) FRC temp[45].x, src2.x__ MAD temp[38].w, srcp.x, src0.w, src0.0 35: src0.xyz = temp[45], src0.w = temp[38], src1.xyz = temp[44], srcp.xyz = (src1 - src0) FRC temp[39].x, src0.w__ MAD_SAT temp[47].w, srcp.x, src0.1, src0.0 36: src0.w = temp[47], src1.xyz = const[6], src2.xyz = temp[39] MAD temp[48].x, src0.H__, src0.111, -src0.w__ MAD temp[40].w, src1.z, src2.x, src0.0 37: src0.w = temp[151], src1.xyz = temp[48], src1.w = temp[40] MAD temp[153].x, src0.w__, src1.w__, src0.000 CMP temp[49].w, src0.0, src0.1, src1.x 38: src0.w = temp[49] MAD temp[54].x, -src0.w__, src0.111, src0.1__ MAD temp[96].w, -src0.w, src0.1, src0.1 39: src0.w = temp[96], src1.xyz = temp[54], src1.w = temp[53] CMP temp[97].x, src0.1__, src0.0__, -src0.w__ CMP temp[55].w, src1.w, src0.0, -src1.x 40: src0.w = temp[49] MAD temp[100].x, -src0.w__, src0.111, src0.1__ MAD temp[103].w, -src0.w, src0.1, src0.1 41: src0.w = temp[103], src1.w = temp[55] CMP temp[104].x, src0.1__, src0.0__, -src0.w__ CMP temp[56].w, src0.0, src0.1, -src1.w 42: src0.w = temp[49], src1.w = temp[40] MAD temp[107].x, -src0.w__, src0.111, src0.1__ CMP temp[42].w, src0.1, src0.0, -|src1.w| 43: src0.xyz = temp[36], src1.xyz = temp[35], src2.xyz = const[7], srcp.xyz = (src1 - src0) MAD temp[57].w, src2.z, srcp.x, src0.0 44: src0.w = temp[57], src1.w = temp[42] FRC temp[59].x * 2, src0.w__ CMP temp[43].w, src0.0, src0.1, -src1.w 45: src0.w = temp[56] MAD temp[1].xyz, -src0.www, src0.111, src0.000 MAD temp[1].w, -src0.w, src0.1, src0.0 46: BEGIN_TEX; 47: KIL temp[1]; 48: src0.w = temp[43] MAD temp[0].xyz, -src0.www, src0.111, src0.000 MAD temp[0].w, -src0.w, src0.1, src0.0 49: BEGIN_TEX; 50: KIL temp[0]; 51: src0.xyz = temp[59] MAD temp[60].x, src0.x__, src0.111, -src0.1__ 52: src0.xyz = temp[60] CMP temp[61].x, src0.1__, src0.0__, src0.x__ 53: src0.xyz = input[4], src1.xyz = temp[62], src2.xyz = temp[61], srcp.xyz = (src1 - src0) CMP temp[64].xy, src0.xy_, srcp.xy_, -src2.xx_ 54: src0.xyz = input[3], src1.xyz = temp[65], src2.xyz = temp[61] CMP temp[66].xy, src0.xy_, src1.xy_, -src2.xx_ 55: src0.xyz = temp[64] FRC temp[67].x, src0.x__ 56: src0.xyz = temp[64] MAD temp[108].y, src0._y_, src0.111, src0.000 57: src0.xyz = temp[67], src1.xyz = temp[64], srcp.xyz = (src1 - src0) MAD temp[69].x, srcp.x__, src0.111, src0.000 58: src0.xyz = temp[64] MAD temp[106].x, -src0.y__, src0.111, src0.000 59: src0.xyz = temp[64] MAD temp[101].y, src0._y_, src0.111, src0.000 60: src0.xyz = temp[64] MAD temp[99].x, -src0.y__, src0.111, src0.000 61: src0.xyz = temp[69] MAD temp[70].xy, src0.xy_, src0.111, src0.HH_ 62: src0.xyz = temp[70], src1.xyz = temp[71] MAD temp[72].xy, src0.xy_, src1.xy_, src0.000 63: BEGIN_TEX; 64: TEX temp[73].xy, temp[72].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 65: src0.xyz = const[6], src1.xyz = temp[73] SEM_WAIT MAD temp[75].xy, src0.yy_, src1.xy_, src0.000 66: src0.xyz = temp[73] FRC temp[89].xy, -src0.xy_ 67: src0.xyz = const[8], src1.xyz = temp[75] MAD temp[76].xy, src0.xx_, src0.111, -src1.xy_ 68: src0.xyz = temp[67], src1.xyz = temp[64], src2.xyz = temp[76], srcp.xyz = (src1 - src0) MAD temp[77].xy, srcp.xx_, src0.111, src2.xy_ 69: src0.xyz = temp[76], src1.xyz = temp[77], src2.xyz = temp[66] MAD temp[106].y, -src0._y_, src0.111, src0.000 MAD temp[81].w, src1.y, src0.1, -src2.x 70: src0.xyz = temp[77], src0.w = temp[81], src1.xyz = temp[97] MAD temp[98].x, src0.x__, src0.111, src1.x__ CMP temp[82].w, src0.1, src0.0, src0.w 71: src0.xyz = temp[77], src1.xyz = temp[66], src2.xyz = temp[76], srcp.xyz = (src1 - src0) MAD temp[108].x, -src2.y__, src0.111, src0.000 CMP temp[87].w, src0.1, src0.0, srcp.y 72: src0.xyz = temp[66], src1.xyz = temp[77], src2.xyz = temp[76], srcp.xyz = (src1 - src0) MAD temp[99].y, -src2._x_, src0.111, src0.000 CMP temp[79].w, src0.1, src0.0, srcp.x 73: src0.xyz = temp[76], src1.xyz = temp[66], src2.xyz = temp[77] MAD temp[101].x, -src0.x__, src0.111, src0.000 MAD temp[83].w, src1.y, src0.1, -src2.x 74: src0.xyz = temp[77], src0.w = temp[83], src1.xyz = temp[104] MAD temp[105].x, src0.y__, src0.111, src1.x__ CMP temp[84].w, src0.1, src0.0, src0.w 75: src0.xyz = temp[106], src1.xyz = temp[108], src2.xyz = temp[107] CMP temp[109].xy, src0.xy_, src1.xy_, -src2.xx_ 76: src0.w = temp[82] MAD temp[80].y, src0._w_, src0.111, src0.000 77: src0.w = temp[87] MAD temp[85].y, src0._w_, src0.111, src0.000 78: src0.xyz = temp[99], src1.xyz = temp[101], src2.xyz = temp[100] CMP temp[102].xy, src0.xy_, src1.xy_, -src2.xx_ 79: src0.w = temp[79] MAD temp[80].x, src0.w__, src0.111, src0.000 80: src0.w = temp[84] MAD temp[85].x, src0.w__, src0.111, src0.000 81: src0.xyz = temp[98] MAD temp[110].xy, src0.xy_, src0.111, src0.HH_ 82: src0.xyz = temp[105] MAD temp[122].xy, src0.xy_, src0.111, src0.HH_ 83: src0.xyz = temp[80], src1.xyz = temp[85] MAD temp[88].xy, src0.xy_, src1.xy_, src0.000 84: src0.xyz = temp[110], src1.xyz = temp[111] MAD temp[112].xy, src0.xy_, src1.xy_, src0.000 85: src0.xyz = temp[73], src1.xyz = temp[89], src2.xyz = temp[88], srcp.xyz = (src1 + src0) MAD temp[91].xy, src2.xy_, srcp.xy_, src0.000 86: src0.xyz = temp[122], src1.xyz = temp[123], src2.xyz = temp[91] MAD temp[124].xy, src0.xy_, src1.xy_, src0.000 MAD temp[92].w, src2.x, src0.1, src2.y 87: src0.w = temp[92] CMP temp[94].x, src0.1__, src0.0__, -|src0.w__| 88: src0.xyz = temp[94] CMP temp[95].x, src0.0__, src0.1__, -src0.x__ 89: src0.xyz = temp[95] MAD temp[3].xyz, -src0.xxx, src0.111, src0.000 MAD temp[3].w, -src0.x, src0.1, src0.0 90: BEGIN_TEX; 91: TEX temp[113].zw, temp[112].xy__, 2D[1]; 92: TEX temp[125].zw, temp[124].xy__, 2D[1]; 93: KIL temp[3]; 94: src0.xyz = temp[113] SEM_WAIT MAD temp[4].x, src0.z__, src0.111, src0.000 95: src0.w = temp[113] MAD temp[4].y, src0._w_, src0.111, src0.000 96: src0.xyz = temp[125] MAD temp[5].x, src0.z__, src0.111, src0.000 97: src0.w = temp[125] MAD temp[5].y, src0._w_, src0.111, src0.000 98: src0.xyz = const[8], src1.xyz = temp[4] MAD temp[115].xy, src0.yy_, src1.xy_, src0.11_ 99: src0.xyz = const[8], src1.xyz = temp[5] MAD temp[127].xy, src0.yy_, src1.xy_, src0.11_ 100: src0.xyz = temp[115], src1.xyz = temp[102], src2.xyz = temp[117], srcp.xyz = (src1 + src0) MAD temp[118].xy, srcp.xy_, src2.xy_, src0.000 101: src0.xyz = temp[127], src1.xyz = temp[109], src2.xyz = temp[129], srcp.xyz = (src1 + src0) MAD temp[130].xy, srcp.xy_, src2.xy_, src0.000 102: BEGIN_TEX; 103: TEX temp[119].w, temp[118].xy__, 2D[0]; 104: TEX temp[131].w, temp[130].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 105: src0.w = temp[119] SEM_WAIT MAD temp[121].x, src0.w__, src0.111, src0.000 106: src0.w = temp[131] MAD temp[121].y, src0._w_, src0.111, src0.000 107: src0.xyz = temp[121], src1.xyz = temp[91] MAD temp[133].xy, src0.xy_, src1.xy_, src0.000 108: src0.xyz = temp[133] MAX temp[134].x, src0.x__, src0.y__ 109: src0.xyz = temp[134] MAD temp[135].x, src0.x__, src0.111, -src0.H__ 110: src0.xyz = const[8], src1.xyz = temp[135] MAD temp[136].x, src0.z__, src1.x__, src0.H__ 111: src0.xyz = temp[136], src1.xyz = const[0] MAD_SAT temp[137].x, src0.x__, src0.111, src1.x__ 112: src0.xyz = temp[137], src1.xyz = temp[153] CMP temp[139].x, src0.1__, src0.0__, -|src0.x__| MAD temp[154].w, src1.x, src0.x, src0.0 113: src0.xyz = temp[139], src0.w = temp[154] CMP temp[140].x, src0.0__, src0.1__, -src0.x__ MAD temp[152].w, src0.w, src0.1, src0.0 114: src0.xyz = temp[140] MAD temp[6].xyz, -src0.xxx, src0.111, src0.000 MAD temp[6].w, -src0.x, src0.1, src0.0 115: BEGIN_TEX; 116: KIL temp[6]; 117: src0.xyz = temp[152], src0.w = temp[152] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[3], src1.xyz = input[2] MAD temp[5].y, -src0._x_, src0.11_, src0.00_ MAD temp[0].w, src1.y, src0.1, src0.H 1: src0.xyz = input[3], src1.xyz = const[5] MAD temp[6].x, src0.z__, src0.11_, src0.00_ RCP temp[1].w, src1.y 2: src0.xyz = const[5] MAD temp[6].y, src0._0_, src0.11_, src0.00_ RCP temp[2].w, src0.x 3: src0.xyz = input[3], src0.w = temp[0], src1.w = temp[2] MAD temp[5].x, -src0.y__, src0.11_, src0.00_ MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = input[1], src0.w = temp[0] MAD temp[7].y, src0._x_, src0.11_, src0.00_ FRC temp[2].w, src0.w 5: src0.xyz = input[1], src0.w = temp[0], src1.w = temp[2] MAD temp[8].y, src0._x_, src0.11_, src0.00_ MAD temp[2].w, src0.w, src0.1, -src1.w 6: src0.xyz = input[1], src0.w = temp[2], src1.xyz = const[9], src2.xyz = const[1] MAD temp[1].y, src0._x_, src0.11_, src0.00_ MAD temp[2].w, src1.x, src0.w, src2.x 7: src0.xyz = input[3], src0.w = temp[2], src1.xyz = temp[5] MAD temp[5].xy, src0.zz_, src0.11_, src1.xy_ MAD temp[2].w, src0.w, src0.1, src0.H 8: src0.w = temp[0], src1.w = temp[2], src2.w = temp[1] FRC temp[9].x, src0.w__ MAD temp[0].w, src1.w, src2.w, src0.0 9: src0.xyz = input[0], src1.xyz = const[4] MAD temp[0].x, src0.x__, src0.H__, src0.0__ RCP temp[1].w, src1.y 10: src0.w = temp[0], src1.xyz = temp[0], src2.xyz = input[4] MAD temp[9].y, src0._w_, src0.11_, src0.00_ MAD temp[0].w, src1.x, |src0.1|, -|src2.y| 11: src0.xyz = input[2], src1.xyz = const[4] MAD temp[0].x, src0.z__, src0.1__, src0.H__ RCP temp[2].w, src1.x 12: src0.xyz = temp[0], src0.w = temp[2], src1.w = temp[0] MAD temp[0].x, src0.x__, src0.w__, src0.0__ CMP temp[0].w, src0.0, src0.1, src1.w 13: src0.xyz = const[3] REPL_ALPHA temp[2].x RCP, src0.x 14: src0.xyz = const[3] REPL_ALPHA temp[2].y RCP, src0.y 15: src0.xyz = const[3] REPL_ALPHA temp[10].x RCP, src0.x 16: src0.xyz = const[3] REPL_ALPHA temp[10].y RCP, src0.y 17: src0.xyz = const[2] REPL_ALPHA temp[11].x RCP, src0.x 18: src0.xyz = const[2] REPL_ALPHA temp[11].y RCP, src0.y 19: src0.xyz = const[3] REPL_ALPHA temp[12].x RCP, src0.x 20: src0.xyz = const[3] REPL_ALPHA temp[12].y RCP, src0.y 21: src0.xyz = const[2] REPL_ALPHA temp[13].x RCP, src0.x 22: src0.xyz = const[2] REPL_ALPHA temp[13].y RCP, src0.y 23: src0.xyz = temp[0] FRC temp[14].x, src0.x__ 24: src0.xyz = temp[14], src1.xyz = temp[0], srcp.xyz = (src1 - src0) FRC temp[0].x, src1.x__ MAD temp[2].w, srcp.x, src0.1, src0.H 25: src0.w = temp[1], src1.w = temp[2] MAD temp[0].z, src1.__w, src0.__w, src0.__0 26: src0.xyz = temp[0] MAD temp[0].y, src0._z_, src0.11_, src0.00_ 27: BEGIN_TEX; 28: TEX temp[9], temp[9].xy__, 2D[3]; 29: TEX temp[14].x, temp[0].xy__, 2D[2] SEM_WAIT SEM_ACQUIRE; 30: src0.xyz = const[6], src1.xyz = temp[14] SEM_WAIT MAD temp[0].x, src0.y__, src1.x__, src0.H__ 31: src0.xyz = temp[9] MAD temp[14].xyz, src0.xyz, src0.111, src0.000 32: src0.xyz = temp[0] FRC temp[15].x, src0.x__ 33: src0.xyz = temp[15], src1.xyz = temp[0], src2.xyz = const[7], srcp.xyz = (src1 - src0) MAD temp[16].x, srcp.x__, src2.z__, src0.0__ 34: src0.xyz = temp[15], src0.w = const[6], src1.xyz = temp[0], src2.xyz = temp[16], srcp.xyz = (src1 - src0) FRC temp[17].x, src2.x__ MAD temp[1].w, srcp.x, src0.w, src0.0 35: src0.xyz = temp[17], src0.w = temp[1], src1.xyz = temp[16], srcp.xyz = (src1 - src0) FRC temp[0].y, src0._w_ MAD_SAT temp[1].w, srcp.x, src0.1, src0.0 36: src0.w = temp[1], src1.xyz = const[6], src2.xyz = temp[0] MAD temp[0].y, src0._H_, src0._1_, -src0._w_ MAD temp[1].w, src1.z, src2.y, src0.0 37: src0.w = temp[9], src1.xyz = temp[0], src1.w = temp[1] MAD temp[0].y, src0._w_, src1._w_, src0._0_ CMP temp[2].w, src0.0, src0.1, src1.y 38: src0.w = temp[2] MAD temp[0].z, -src0.__w, src0.__1, src0.__1 MAD temp[3].w, -src0.w, src0.1, src0.1 39: src0.w = temp[3], src1.xyz = temp[0], src1.w = temp[0] CMP temp[0].z, src0.__1, src0.__0, -src0.__w CMP temp[0].w, src1.w, src0.0, -src1.z 40: src0.w = temp[2] MAD temp[1].z, -src0.__w, src0.__1, src0.__1 MAD temp[3].w, -src0.w, src0.1, src0.1 41: src0.w = temp[3], src1.w = temp[0] CMP temp[2].z, src0.__1, src0.__0, -src0.__w CMP temp[0].w, src0.0, src0.1, -src1.w 42: src0.w = temp[2], src1.w = temp[1] MAD temp[4].z, -src0.__w, src0.__1, src0.__1 CMP temp[1].w, src0.1, src0.0, -|src1.w| 43: src0.xyz = temp[15], src1.xyz = temp[0], src2.xyz = const[7], srcp.xyz = (src1 - src0) MAD temp[2].w, src2.z, srcp.x, src0.0 44: src0.w = temp[2], src1.w = temp[1] FRC temp[0].x * 2, src0.w__ CMP temp[1].w, src0.0, src0.1, -src1.w 45: src0.w = temp[0] MAD temp[9].xyz, -src0.www, src0.111, src0.000 MAD temp[9].w, -src0.w, src0.1, src0.0 46: BEGIN_TEX; 47: KIL temp[9]; 48: src0.w = temp[1] MAD temp[9].xyz, -src0.www, src0.111, src0.000 MAD temp[9].w, -src0.w, src0.1, src0.0 49: BEGIN_TEX; 50: KIL temp[9]; 51: src0.xyz = temp[0] MAD temp[0].x, src0.x__, src0.1__, -src0.1__ 52: src0.xyz = temp[0] CMP temp[0].x, src0.1__, src0.0__, src0.x__ 53: src0.xyz = input[4], src1.xyz = temp[6], src2.xyz = temp[0], srcp.xyz = (src1 - src0) CMP temp[4].xy, src0.xy_, srcp.xy_, -src2.xx_ 54: src0.xyz = input[3], src1.xyz = temp[5], src2.xyz = temp[0] CMP temp[3].xy, src0.xy_, src1.xy_, -src2.xx_ 55: src0.xyz = temp[4] FRC temp[0].x, src0.x__ 56: src0.xyz = temp[4] MAD temp[5].y, src0._y_, src0.11_, src0.00_ 57: src0.xyz = temp[0], src1.xyz = temp[4], srcp.xyz = (src1 - src0) MAD temp[7].x, srcp.x__, src0.11_, src0.00_ 58: src0.xyz = temp[4] MAD temp[6].x, -src0.y__, src0.11_, src0.00_ 59: src0.xyz = temp[4] MAD temp[9].y, src0._y_, src0.11_, src0.00_ 60: src0.xyz = temp[4] MAD temp[15].x, -src0.y__, src0.11_, src0.00_ 61: src0.xyz = temp[7] MAD temp[7].xy, src0.xy_, src0.11_, src0.HH_ 62: src0.xyz = temp[7], src1.xyz = temp[2] MAD temp[2].xy, src0.xy_, src1.xy_, src0.00_ 63: BEGIN_TEX; 64: TEX temp[7].xy, temp[2].xy__, 2D[1] SEM_WAIT SEM_ACQUIRE; 65: src0.xyz = const[6], src1.xyz = temp[7] SEM_WAIT MAD temp[2].xy, src0.yy_, src1.xy_, src0.00_ 66: src0.xyz = temp[7] FRC temp[16].xy, -src0.xy_ 67: src0.xyz = const[8], src1.xyz = temp[2] MAD temp[2].xy, src0.xx_, src0.11_, -src1.xy_ 68: src0.xyz = temp[0], src1.xyz = temp[4], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[4].xy, srcp.xx_, src0.11_, src2.xy_ 69: src0.xyz = temp[2], src1.xyz = temp[4], src2.xyz = temp[3] MAD temp[6].y, -src0._y_, src0.11_, src0.00_ MAD temp[0].w, src1.y, src0.1, -src2.x 70: src0.xyz = temp[4], src0.w = temp[0], src1.xyz = temp[0] MAD temp[8].x, src0.x__, src0.11_, src1.z__ CMP temp[0].w, src0.1, src0.0, src0.w 71: src0.xyz = temp[4], src1.xyz = temp[3], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[5].x, -src2.y__, src0.11_, src0.00_ CMP temp[1].w, src0.1, src0.0, srcp.y 72: src0.xyz = temp[3], src1.xyz = temp[4], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD temp[15].y, -src2._x_, src0.11_, src0.00_ CMP temp[2].w, src0.1, src0.0, srcp.x 73: src0.xyz = temp[2], src1.xyz = temp[3], src2.xyz = temp[4] MAD temp[9].x, -src0.x__, src0.11_, src0.00_ MAD temp[3].w, src1.y, src0.1, -src2.x 74: src0.xyz = temp[4], src0.w = temp[3], src1.xyz = temp[2] MAD temp[1].x, src0.y__, src0.11_, src1.z__ CMP temp[3].w, src0.1, src0.0, src0.w 75: src0.xyz = temp[6], src1.xyz = temp[5], src2.xyz = temp[4] CMP temp[2].xy, src0.xy_, src1.xy_, -src2.zz_ 76: src0.w = temp[0] MAD temp[3].y, src0._w_, src0.11_, src0.00_ 77: src0.w = temp[1] MAD temp[4].y, src0._w_, src0.11_, src0.00_ 78: src0.xyz = temp[15], src1.xyz = temp[9], src2.xyz = temp[1] CMP temp[5].xy, src0.xy_, src1.xy_, -src2.zz_ 79: src0.w = temp[2] MAD temp[3].x, src0.w__, src0.11_, src0.00_ 80: src0.w = temp[3] MAD temp[4].x, src0.w__, src0.11_, src0.00_ 81: src0.xyz = temp[8] MAD temp[6].xy, src0.xy_, src0.11_, src0.HH_ 82: src0.xyz = temp[1] MAD temp[1].xy, src0.xy_, src0.11_, src0.HH_ 83: src0.xyz = temp[3], src1.xyz = temp[4] MAD temp[3].xy, src0.xy_, src1.xy_, src0.00_ 84: src0.xyz = temp[6], src1.xyz = temp[10] MAD temp[4].xy, src0.xy_, src1.xy_, src0.00_ 85: src0.xyz = temp[7], src1.xyz = temp[16], src2.xyz = temp[3], srcp.xyz = (src1 + src0) MAD temp[3].xy, src2.xy_, srcp.xy_, src0.00_ 86: src0.xyz = temp[1], src1.xyz = temp[12], src2.xyz = temp[3] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ MAD temp[0].w, src2.x, src0.1, src2.y 87: src0.w = temp[0] CMP temp[0].x, src0.1__, src0.0__, -|src0.w__| 88: src0.xyz = temp[0] CMP temp[0].x, src0.0__, src0.1__, -src0.x__ 89: src0.xyz = temp[0] MAD temp[6].xyz, -src0.xxx, src0.111, src0.000 MAD temp[6].w, -src0.x, src0.1, src0.0 90: BEGIN_TEX; 91: TEX temp[4].zw, temp[4].xy__, 2D[1]; 92: TEX temp[1].zw, temp[1].xy__, 2D[1]; 93: KIL temp[6]; 94: src0.xyz = temp[4] SEM_WAIT MAD temp[6].x, src0.z__, src0.11_, src0.00_ 95: src0.w = temp[4] MAD temp[6].y, src0._w_, src0.11_, src0.00_ 96: src0.xyz = temp[1] MAD temp[4].x, src0.z__, src0.11_, src0.00_ 97: src0.w = temp[1] MAD temp[4].y, src0._w_, src0.11_, src0.00_ 98: src0.xyz = const[8], src1.xyz = temp[6] MAD temp[1].xy, src0.yy_, src1.xy_, src0.11_ 99: src0.xyz = const[8], src1.xyz = temp[4] MAD temp[4].xy, src0.yy_, src1.xy_, src0.11_ 100: src0.xyz = temp[1], src1.xyz = temp[5], src2.xyz = temp[11], srcp.xyz = (src1 + src0) MAD temp[1].xy, srcp.xy_, src2.xy_, src0.00_ 101: src0.xyz = temp[4], src1.xyz = temp[2], src2.xyz = temp[13], srcp.xyz = (src1 + src0) MAD temp[2].xy, srcp.xy_, src2.xy_, src0.00_ 102: BEGIN_TEX; 103: TEX temp[1].w, temp[1].xy__, 2D[0]; 104: TEX temp[2].w, temp[2].xy__, 2D[0] SEM_WAIT SEM_ACQUIRE; 105: src0.w = temp[1] SEM_WAIT MAD temp[1].x, src0.w__, src0.11_, src0.00_ 106: src0.w = temp[2] MAD temp[1].y, src0._w_, src0.11_, src0.00_ 107: src0.xyz = temp[1], src1.xyz = temp[3] MAD temp[1].xy, src0.xy_, src1.xy_, src0.00_ 108: src0.xyz = temp[1] MAX temp[0].x, src0.x__, src0.y__ 109: src0.xyz = temp[0] MAD temp[0].x, src0.x__, src0.1__, -src0.H__ 110: src0.xyz = const[8], src1.xyz = temp[0] MAD temp[0].x, src0.z__, src1.x__, src0.H__ 111: src0.xyz = temp[0], src1.xyz = const[0] MAD_SAT temp[0].x, src0.x__, src0.1__, src1.x__ 112: src0.xyz = temp[0], src1.xyz = temp[0] CMP temp[0].x, src0.1__, src0.0__, -|src0.x__| MAD temp[0].w, src1.y, src0.x, src0.0 113: src0.xyz = temp[0], src0.w = temp[0] CMP temp[0].x, src0.0__, src0.1__, -src0.x__ MAD temp[0].w, src0.w, src0.1, src0.0 114: src0.xyz = temp[0] MAD temp[1].xyz, -src0.xxx, src0.111, src0.000 MAD temp[1].w, -src0.x, src0.1, src0.0 115: BEGIN_TEX; 116: KIL temp[1]; 117: src0.xyz = temp[14], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 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. r300: Initial fragment program FRAG DCL OUT[0], COLOR IMM FLT32 { 0.0000, 1.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxy 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], none.0001; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD color[0].xyz, src0.000, src0.111, src0.000 MAD color[0].w, src0.1, src0.1, src0.0 pc=19************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: 0.0 1.0 0.0 op: 00050a94 w: 1.0 1.0 0.0 op: 00040891