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 'transform loops' # 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 'source conflict resolve' # 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 'dead constants' # 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]; Final vertex program code: 0: op: 0x00f00003 dst: 0t 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 1: 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 2: 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 3: 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: Making miptree for texture, format i8_unorm r300: Texture miptree: Level 0 (1x1x1 px, pitch 32 bytes) 32 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 32, Dim: 1x1x1, LastLevel: 0, Size: 32, Format: i8_unorm r300: DRM version: 2.12.0, Name: ATI R420, ID: 0x4a50, GB: 4, Z: 1 r300: GART size: 61 MB, VRAM size: 256 MB r300: AA compression RAM: YES, Z compression RAM: NO, HiZ RAM: NO r300: Making miptree for texture, format r32_float r300: Texture miptree: Level 0 (128x8x1 px, pitch 512 bytes) 4096 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x8x1, LastLevel: 0, Size: 4096, Format: r32_float r300: Making miptree for texture, format r32_float r300: Texture miptree: Level 0 (128x8x1 px, pitch 512 bytes) 4096 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x8x1, LastLevel: 0, Size: 4096, Format: r32_float r300: Making miptree for texture, format r32_float r300: Texture miptree: Level 0 (128x8x1 px, pitch 512 bytes) 4096 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x8x1, LastLevel: 0, Size: 4096, Format: r32_float r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL OUT[3], GENERIC[3] DCL OUT[4], GENERIC[4] DCL TEMP[0] IMM FLT32 { 0.0078, 1.0000, 0.0625, -0.0156} IMM FLT32 { 0.0005, -0.0078, 0.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL OUT[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].zw, IMM[0].yyyy 3: MUL TEMP[0].xw, IN[2].xxxx, IMM[0].zzzz 4: FRC TEMP[0].y, TEMP[0].xxxx 5: FLR TEMP[0].w, TEMP[0] 6: ADD TEMP[0].x, TEMP[0].yyyy, IMM[0].wwww 7: MAD OUT[1].x, IN[0], IMM[0].zzzz, TEMP[0] 8: MOV OUT[1].y, IN[0] 9: MOV OUT[1].z, IN[1] 10: MUL OUT[1].w, TEMP[0], IMM[1].xxxx 11: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].yyyy 12: MAD OUT[2].x, IN[0], IMM[0].zzzz, TEMP[0] 13: MOV OUT[2].y, IN[0] 14: MOV OUT[2].z, IN[1] 15: MUL OUT[2].w, TEMP[0], IMM[1].xxxx 16: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].zzzz 17: MAD OUT[3].x, IN[0], IMM[0].zzzz, TEMP[0] 18: MOV OUT[3].y, IN[0] 19: MOV OUT[3].z, IN[1] 20: MUL OUT[3].w, TEMP[0], IMM[1].xxxx 21: ADD TEMP[0].x, TEMP[0].yyyy, IMM[0].xxxx 22: MAD OUT[4].x, IN[0], IMM[0].zzzz, TEMP[0] 23: MOV OUT[4].y, IN[0] 24: MOV OUT[4].z, IN[1] 25: MUL OUT[4].w, TEMP[0], IMM[1].xxxx 26: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FRC temp[2].w, temp[0]; 6: ADD temp[0].w, temp[0], -temp[2]; 7: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 8: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 9: MOV output[1].y, input[0]; 10: MOV output[1].z, input[1]; 11: MUL output[1].w, temp[0], const[1].xxxx; 12: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 13: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 14: MOV output[2].y, input[0]; 15: MOV output[2].z, input[1]; 16: MUL output[2].w, temp[0], const[1].xxxx; 17: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 18: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 19: MOV output[3].y, input[0]; 20: MOV output[3].z, input[1]; 21: MUL output[3].w, temp[0], const[1].xxxx; 22: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 23: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 24: MOV output[4].y, input[0]; 25: MOV output[4].z, input[1]; 26: MUL output[4].w, temp[0], const[1].xxxx; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FRC temp[2].w, temp[0]; 6: ADD temp[0].w, temp[0], -temp[2]; 7: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 8: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 9: MOV output[1].y, input[0]; 10: MOV output[1].z, input[1]; 11: MUL output[1].w, temp[0], const[1].xxxx; 12: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 13: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 14: MOV output[2].y, input[0]; 15: MOV output[2].z, input[1]; 16: MUL output[2].w, temp[0], const[1].xxxx; 17: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 18: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 19: MOV output[3].y, input[0]; 20: MOV output[3].z, input[1]; 21: MUL output[3].w, temp[0], const[1].xxxx; 22: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 23: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 24: MOV output[4].y, input[0]; 25: MOV output[4].z, input[1]; 26: MUL output[4].w, temp[0], const[1].xxxx; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[1].xy, temp[0], const[0].xxxx; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 5: FRC temp[0].y, temp[0].xxxx; 6: FRC temp[2].w, temp[0]; 7: ADD temp[0].w, temp[0], -temp[2]; 8: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 9: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 10: MOV output[1].y, input[0]; 11: MOV output[1].z, input[1]; 12: MUL output[1].w, temp[0], const[1].xxxx; 13: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 14: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 15: MOV output[2].y, input[0]; 16: MOV output[2].z, input[1]; 17: MUL output[2].w, temp[0], const[1].xxxx; 18: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 19: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 20: MOV output[3].y, input[0]; 21: MOV output[3].z, input[1]; 22: MUL output[3].w, temp[0], const[1].xxxx; 23: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 24: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 25: MOV output[4].y, input[0]; 26: MOV output[4].z, input[1]; 27: MUL output[4].w, temp[0], const[1].xxxx; 28: MOV output[0], temp[1]; 29: MOV output[5], temp[1]; CONST[0] = { 0.0078 1.0000 0.0625 -0.0156 } CONST[1] = { 0.0005 -0.0078 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[1].xy, temp[0], const[0].xxxx; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 5: FRC temp[0].y, temp[0].xxxx; 6: FRC temp[2].w, temp[0]; 7: ADD temp[0].w, temp[0], -temp[2]; 8: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 9: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 10: MOV output[1].y, input[0]; 11: MOV output[1].z, input[1]; 12: MUL output[1].w, temp[0], const[1].xxxx; 13: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 14: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 15: MOV output[2].y, input[0]; 16: MOV output[2].z, input[1]; 17: MUL output[2].w, temp[0], const[1].xxxx; 18: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 19: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 20: MOV output[3].y, input[0]; 21: MOV output[3].z, input[1]; 22: MUL output[3].w, temp[0], const[1].xxxx; 23: ADD temp[0].x, temp[0].yyyy, const[0].xxxx; 24: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 25: MOV output[4].y, input[0]; 26: MOV output[4].z, input[1]; 27: MUL output[4].w, temp[0], const[1].xxxx; 28: MOV output[0], temp[1]; 29: MOV output[5], temp[1]; Final vertex program code: 0: op: 0x00f06003 dst: 3t 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 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 2: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 4: op: 0x00900002 dst: 0t op: VE_MULTIPLY src0: 0x00000041 reg: 2i swiz: X/ X/ X/ X src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00200006 dst: 0t op: VE_FRACTION 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 6: op: 0x00804006 dst: 2t op: VE_FRACTION 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 7: op: 0x00800003 dst: 0t op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x1ed10040 reg: 2t swiz: -X/-Y/-Z/-W src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 8: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 9: op: 0x00102204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 10: op: 0x00202203 dst: 1o 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 11: op: 0x00402203 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 12: op: 0x00802202 dst: 1o op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 13: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x00492022 reg: 1c swiz: Y/ Y/ Y/ Y src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 14: op: 0x00104204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 15: op: 0x00204203 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 16: op: 0x00404203 dst: 2o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 17: op: 0x00804202 dst: 2o op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 18: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x00924022 reg: 1c swiz: Z/ Z/ Z/ Z src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 19: op: 0x00106204 dst: 3o op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 20: op: 0x00206203 dst: 3o 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 21: op: 0x00406203 dst: 3o 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 22: op: 0x00806202 dst: 3o op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 23: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 24: op: 0x00108204 dst: 4o op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 25: op: 0x00208203 dst: 4o 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 26: op: 0x00408203 dst: 4o 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 27: op: 0x00808202 dst: 4o op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 28: 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 29: op: 0x00f0a203 dst: 5o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 30 Instructions ~ 0 Flow Control Instructions ~ 4 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL OUT[3], GENERIC[3] DCL OUT[4], GENERIC[4] DCL TEMP[0] IMM FLT32 { 0.0156, 1.0000, 0.0625, -0.0156} IMM FLT32 { 0.0005, -0.0078, 0.0000, 0.0078} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL OUT[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].zw, IMM[0].yyyy 3: MUL TEMP[0].xw, IN[2].xxxx, IMM[0].zzzz 4: FRC TEMP[0].y, TEMP[0].xxxx 5: FLR TEMP[0].w, TEMP[0] 6: ADD TEMP[0].x, TEMP[0].yyyy, IMM[0].wwww 7: MAD OUT[1].x, IN[0], IMM[0].zzzz, TEMP[0] 8: MOV OUT[1].y, IN[0] 9: MOV OUT[1].z, IN[1] 10: MUL OUT[1].w, TEMP[0], IMM[1].xxxx 11: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].yyyy 12: MAD OUT[2].x, IN[0], IMM[0].zzzz, TEMP[0] 13: MOV OUT[2].y, IN[0] 14: MOV OUT[2].z, IN[1] 15: MUL OUT[2].w, TEMP[0], IMM[1].xxxx 16: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].zzzz 17: MAD OUT[3].x, IN[0], IMM[0].zzzz, TEMP[0] 18: MOV OUT[3].y, IN[0] 19: MOV OUT[3].z, IN[1] 20: MUL OUT[3].w, TEMP[0], IMM[1].xxxx 21: ADD TEMP[0].x, TEMP[0].yyyy, IMM[1].wwww 22: MAD OUT[4].x, IN[0], IMM[0].zzzz, TEMP[0] 23: MOV OUT[4].y, IN[0] 24: MOV OUT[4].z, IN[1] 25: MUL OUT[4].w, TEMP[0], IMM[1].xxxx 26: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FLR temp[0].w, temp[0]; 6: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 7: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 8: MOV output[1].y, input[0]; 9: MOV output[1].z, input[1]; 10: MUL output[1].w, temp[0], const[1].xxxx; 11: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 12: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 13: MOV output[2].y, input[0]; 14: MOV output[2].z, input[1]; 15: MUL output[2].w, temp[0], const[1].xxxx; 16: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 17: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 18: MOV output[3].y, input[0]; 19: MOV output[3].z, input[1]; 20: MUL output[3].w, temp[0], const[1].xxxx; 21: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 22: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 23: MOV output[4].y, input[0]; 24: MOV output[4].z, input[1]; 25: MUL output[4].w, temp[0], const[1].xxxx; 26: MOV output[0], temp[1]; 27: MOV output[5], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FRC temp[2].w, temp[0]; 6: ADD temp[0].w, temp[0], -temp[2]; 7: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 8: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 9: MOV output[1].y, input[0]; 10: MOV output[1].z, input[1]; 11: MUL output[1].w, temp[0], const[1].xxxx; 12: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 13: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 14: MOV output[2].y, input[0]; 15: MOV output[2].z, input[1]; 16: MUL output[2].w, temp[0], const[1].xxxx; 17: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 18: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 19: MOV output[3].y, input[0]; 20: MOV output[3].z, input[1]; 21: MUL output[3].w, temp[0], const[1].xxxx; 22: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 23: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 24: MOV output[4].y, input[0]; 25: MOV output[4].z, input[1]; 26: MUL output[4].w, temp[0], const[1].xxxx; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[1].xy, temp[0], const[0].xxxx; 2: MOV temp[1].zw, const[0].yyyy; 3: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 4: FRC temp[0].y, temp[0].xxxx; 5: FRC temp[2].w, temp[0]; 6: ADD temp[0].w, temp[0], -temp[2]; 7: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 8: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 9: MOV output[1].y, input[0]; 10: MOV output[1].z, input[1]; 11: MUL output[1].w, temp[0], const[1].xxxx; 12: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 13: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 14: MOV output[2].y, input[0]; 15: MOV output[2].z, input[1]; 16: MUL output[2].w, temp[0], const[1].xxxx; 17: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 18: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 19: MOV output[3].y, input[0]; 20: MOV output[3].z, input[1]; 21: MUL output[3].w, temp[0], const[1].xxxx; 22: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 23: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 24: MOV output[4].y, input[0]; 25: MOV output[4].z, input[1]; 26: MUL output[4].w, temp[0], const[1].xxxx; 27: MOV output[0], temp[1]; 28: MOV output[5], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[1].xy, temp[0], const[0].xxxx; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 5: FRC temp[0].y, temp[0].xxxx; 6: FRC temp[2].w, temp[0]; 7: ADD temp[0].w, temp[0], -temp[2]; 8: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 9: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 10: MOV output[1].y, input[0]; 11: MOV output[1].z, input[1]; 12: MUL output[1].w, temp[0], const[1].xxxx; 13: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 14: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 15: MOV output[2].y, input[0]; 16: MOV output[2].z, input[1]; 17: MUL output[2].w, temp[0], const[1].xxxx; 18: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 19: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 20: MOV output[3].y, input[0]; 21: MOV output[3].z, input[1]; 22: MUL output[3].w, temp[0], const[1].xxxx; 23: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 24: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 25: MOV output[4].y, input[0]; 26: MOV output[4].z, input[1]; 27: MUL output[4].w, temp[0], const[1].xxxx; 28: MOV output[0], temp[1]; 29: MOV output[5], temp[1]; CONST[0] = { 0.0156 1.0000 0.0625 -0.0156 } CONST[1] = { 0.0005 -0.0078 0.0000 0.0078 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[1].xy, temp[0], const[0].xxxx; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].xw, input[2].xxxx, const[0].zzzz; 5: FRC temp[0].y, temp[0].xxxx; 6: FRC temp[2].w, temp[0]; 7: ADD temp[0].w, temp[0], -temp[2]; 8: ADD temp[0].x, temp[0].yyyy, const[0].wwww; 9: MAD output[1].x, input[0], const[0].zzzz, temp[0]; 10: MOV output[1].y, input[0]; 11: MOV output[1].z, input[1]; 12: MUL output[1].w, temp[0], const[1].xxxx; 13: ADD temp[0].x, temp[0].yyyy, const[1].yyyy; 14: MAD output[2].x, input[0], const[0].zzzz, temp[0]; 15: MOV output[2].y, input[0]; 16: MOV output[2].z, input[1]; 17: MUL output[2].w, temp[0], const[1].xxxx; 18: ADD temp[0].x, temp[0].yyyy, const[1].zzzz; 19: MAD output[3].x, input[0], const[0].zzzz, temp[0]; 20: MOV output[3].y, input[0]; 21: MOV output[3].z, input[1]; 22: MUL output[3].w, temp[0], const[1].xxxx; 23: ADD temp[0].x, temp[0].yyyy, const[1].wwww; 24: MAD output[4].x, input[0], const[0].zzzz, temp[0]; 25: MOV output[4].y, input[0]; 26: MOV output[4].z, input[1]; 27: MUL output[4].w, temp[0], const[1].xxxx; 28: MOV output[0], temp[1]; 29: MOV output[5], temp[1]; Final vertex program code: 0: op: 0x00f06003 dst: 3t 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 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 2: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 4: op: 0x00900002 dst: 0t op: VE_MULTIPLY src0: 0x00000041 reg: 2i swiz: X/ X/ X/ X src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00200006 dst: 0t op: VE_FRACTION 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 6: op: 0x00804006 dst: 2t op: VE_FRACTION 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 7: op: 0x00800003 dst: 0t op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x1ed10040 reg: 2t swiz: -X/-Y/-Z/-W src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 8: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 9: op: 0x00102204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 10: op: 0x00202203 dst: 1o 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 11: op: 0x00402203 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 12: op: 0x00802202 dst: 1o op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 13: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x00492022 reg: 1c swiz: Y/ Y/ Y/ Y src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 14: op: 0x00104204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 15: op: 0x00204203 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 16: op: 0x00404203 dst: 2o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 17: op: 0x00804202 dst: 2o op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 18: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x00924022 reg: 1c swiz: Z/ Z/ Z/ Z src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 19: op: 0x00106204 dst: 3o op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 20: op: 0x00206203 dst: 3o 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 21: op: 0x00406203 dst: 3o 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 22: op: 0x00806202 dst: 3o op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 23: op: 0x00100003 dst: 0t op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x00db6022 reg: 1c swiz: W/ W/ W/ W src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 24: op: 0x00108204 dst: 4o op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 25: op: 0x00208203 dst: 4o 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 26: op: 0x00408203 dst: 4o 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 27: op: 0x00808202 dst: 4o op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 28: 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 29: op: 0x00f0a203 dst: 5o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 30 Instructions ~ 0 Flow Control Instructions ~ 4 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Making miptree for texture, format r16g16b16a16_snorm r300: Texture miptree: Level 0 (256x1024x1 px, pitch 2048 bytes) 2097152 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 256, Dim: 256x1024x1, LastLevel: 0, Size: 2097152, Format: r16g16b16a16_snorm r300: Making miptree for texture, format r16g16b16a16_snorm r300: Texture miptree: Level 0 (128x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x512x1, LastLevel: 0, Size: 524288, Format: r16g16b16a16_snorm r300: Making miptree for texture, format r16g16b16a16_snorm r300: Texture miptree: Level 0 (128x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x512x1, LastLevel: 0, Size: 524288, Format: r16g16b16a16_snorm r300: Making miptree for texture, format r16g16b16a16_float r300: Texture miptree: Level 0 (256x256x4 px, pitch 2048 bytes) 2097152 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 256, Dim: 256x256x4, LastLevel: 0, Size: 2097152, Format: r16g16b16a16_float r300: Making miptree for texture, format r16g16b16a16_float r300: Texture miptree: Level 0 (128x128x4 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x128x4, LastLevel: 0, Size: 524288, Format: r16g16b16a16_float r300: Making miptree for texture, format r16g16b16a16_float r300: Texture miptree: Level 0 (128x128x4 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x128x4, LastLevel: 0, Size: 524288, Format: r16g16b16a16_float r300: Making miptree for texture, format r32g32b32a32_float r300: Texture miptree: Level 0 (2x8x1 px, pitch 32 bytes) 256 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 2, Dim: 2x8x1, LastLevel: 0, Size: 256, Format: r32g32b32a32_float r300: Initial vertex program VERT DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL TEMP[0] IMM FLT32 { 0.0078, 1.0000, 0.0039, 0.0000} 0: MAD OUT[0].xy, IN[1], IMM[0].xxxx, IMM[0].xxxx 1: MOV OUT[0].zw, IMM[0].yyyy 2: MUL TEMP[0].xy, IN[1], IMM[0].xxxx 3: MOV OUT[1].x, TEMP[0].xxxx 4: MOV OUT[1].y, TEMP[0].yyyy 5: ADD OUT[2].x, TEMP[0].xxxx, IMM[0].zzzz 6: MOV OUT[2].y, TEMP[0].yyyy 7: END Vertex Program: before compilation # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; CONST[0] = { 0.0078 1.0000 0.0039 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Final vertex program code: 0: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x00000002 reg: 0c swiz: X/ X/ X/ X 1: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00102203 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 4: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x00000000 reg: 0t swiz: X/ X/ X/ X src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 7: 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 8: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 9 Instructions ~ 0 Flow Control Instructions ~ 2 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL OUT[3], GENERIC[3] DCL OUT[4], GENERIC[4] DCL TEMP[0..1] IMM FLT32 { 0.0078, 1.0000, 0.0039, 0.0000} IMM FLT32 { 0.5000, 0.0000, 0.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MUL TEMP[1].xy, IN[1], IMM[0].xxxx 5: MOV OUT[1].x, TEMP[1].xxxx 6: MOV OUT[1].y, TEMP[0].yyyy 7: ADD OUT[2].x, TEMP[1].xxxx, IMM[0].zzzz 8: MOV OUT[2].y, TEMP[0].yyyy 9: MOV OUT[3].x, IMM[0].wwww 10: MOV OUT[3].y, IN[0].xxxx 11: ADD OUT[4].x, IMM[0].wwww, IMM[1].xxxx 12: MOV OUT[4].y, IN[0].xxxx 13: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[2].xy, temp[0]; 4: MOV temp[2].zw, const[0].yyyy; 5: MUL temp[1].xy, input[1], const[0].xxxx; 6: MOV output[1].x, temp[1].xxxx; 7: MOV output[1].y, temp[0].yyyy; 8: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 9: MOV output[2].y, temp[0].yyyy; 10: MOV output[3].x, const[0].wwww; 11: MOV output[3].y, input[0].xxxx; 12: MOV temp[4], const[1].xxxx; 13: ADD output[4].x, const[0].wwww, temp[4]; 14: MOV output[4].y, input[0].xxxx; 15: MOV output[0], temp[2]; 16: MOV output[5], temp[2]; CONST[0] = { 0.0078 1.0000 0.0039 0.0000 } CONST[1] = { 0.5000 0.0000 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[2].xy, temp[0]; 4: MOV temp[2].zw, const[0].yyyy; 5: MUL temp[1].xy, input[1], const[0].xxxx; 6: MOV output[1].x, temp[1].xxxx; 7: MOV output[1].y, temp[0].yyyy; 8: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 9: MOV output[2].y, temp[0].yyyy; 10: MOV output[3].x, const[0].wwww; 11: MOV output[3].y, input[0].xxxx; 12: MOV temp[4], const[1].xxxx; 13: ADD output[4].x, const[0].wwww, temp[4]; 14: MOV output[4].y, input[0].xxxx; 15: MOV output[0], temp[2]; 16: MOV output[5], temp[2]; Final vertex program code: 0: op: 0x00f06003 dst: 3t 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 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00304003 dst: 2t 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 4: op: 0x00c04003 dst: 2t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00102203 dst: 1o op: VE_ADD src0: 0x00000020 reg: 1t swiz: X/ X/ X/ X src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 7: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x00000020 reg: 1t swiz: X/ X/ X/ X src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 9: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 10: op: 0x00106203 dst: 3o op: VE_ADD src0: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 11: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 12: op: 0x00f08003 dst: 4t op: VE_ADD src0: 0x00000022 reg: 1c swiz: X/ X/ X/ X src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 13: op: 0x00108203 dst: 4o op: VE_ADD src0: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src1: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 14: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 15: 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 16: op: 0x00f0a203 dst: 5o 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 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 17 Instructions ~ 0 Flow Control Instructions ~ 5 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Initial vertex program VERT DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL TEMP[0] IMM FLT32 { 0.0156, 1.0000, 0.0078, 0.0000} 0: MAD OUT[0].xy, IN[1], IMM[0].xxxx, IMM[0].xxxx 1: MOV OUT[0].zw, IMM[0].yyyy 2: MUL TEMP[0].xy, IN[1], IMM[0].xxxx 3: MOV OUT[1].x, TEMP[0].xxxx 4: MOV OUT[1].y, TEMP[0].yyyy 5: ADD OUT[2].x, TEMP[0].xxxx, IMM[0].zzzz 6: MOV OUT[2].y, TEMP[0].yyyy 7: END Vertex Program: before compilation # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; CONST[0] = { 0.0156 1.0000 0.0078 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MAD temp[1].xy, input[1], const[0].xxxx, const[0].xxxx; 1: MOV temp[1].zw, const[0].yyyy; 2: MUL temp[0].xy, input[1], const[0].xxxx; 3: MOV output[1].x, temp[0].xxxx; 4: MOV output[1].y, temp[0].yyyy; 5: ADD output[2].x, temp[0].xxxx, const[0].zzzz; 6: MOV output[2].y, temp[0].yyyy; 7: MOV output[0], temp[1]; 8: MOV output[3], temp[1]; Final vertex program code: 0: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x00000002 reg: 0c swiz: X/ X/ X/ X 1: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00102203 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 4: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x00000000 reg: 0t swiz: X/ X/ X/ X src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 7: 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 8: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 9 Instructions ~ 0 Flow Control Instructions ~ 2 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL OUT[3], GENERIC[3] DCL OUT[4], GENERIC[4] DCL TEMP[0..1] IMM FLT32 { 0.0156, 1.0000, 0.0078, 0.0000} IMM FLT32 { 0.5000, 0.0000, 0.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MUL TEMP[1].xy, IN[1], IMM[0].xxxx 5: MOV OUT[1].x, TEMP[1].xxxx 6: MOV OUT[1].y, TEMP[0].yyyy 7: ADD OUT[2].x, TEMP[1].xxxx, IMM[0].zzzz 8: MOV OUT[2].y, TEMP[0].yyyy 9: MOV OUT[3].x, IMM[0].wwww 10: MOV OUT[3].y, IN[0].xxxx 11: ADD OUT[4].x, IMM[0].wwww, IMM[1].xxxx 12: MOV OUT[4].y, IN[0].xxxx 13: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[2].xy, temp[0]; 3: MOV temp[2].zw, const[0].yyyy; 4: MUL temp[1].xy, input[1], const[0].xxxx; 5: MOV output[1].x, temp[1].xxxx; 6: MOV output[1].y, temp[0].yyyy; 7: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 8: MOV output[2].y, temp[0].yyyy; 9: MOV output[3].x, const[0].wwww; 10: MOV output[3].y, input[0].xxxx; 11: ADD output[4].x, const[0].wwww, const[1].xxxx; 12: MOV output[4].y, input[0].xxxx; 13: MOV output[0], temp[2]; 14: MOV output[5], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[2].xy, temp[0]; 4: MOV temp[2].zw, const[0].yyyy; 5: MUL temp[1].xy, input[1], const[0].xxxx; 6: MOV output[1].x, temp[1].xxxx; 7: MOV output[1].y, temp[0].yyyy; 8: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 9: MOV output[2].y, temp[0].yyyy; 10: MOV output[3].x, const[0].wwww; 11: MOV output[3].y, input[0].xxxx; 12: MOV temp[4], const[1].xxxx; 13: ADD output[4].x, const[0].wwww, temp[4]; 14: MOV output[4].y, input[0].xxxx; 15: MOV output[0], temp[2]; 16: MOV output[5], temp[2]; CONST[0] = { 0.0156 1.0000 0.0078 0.0000 } CONST[1] = { 0.5000 0.0000 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[2].xy, temp[0]; 4: MOV temp[2].zw, const[0].yyyy; 5: MUL temp[1].xy, input[1], const[0].xxxx; 6: MOV output[1].x, temp[1].xxxx; 7: MOV output[1].y, temp[0].yyyy; 8: ADD output[2].x, temp[1].xxxx, const[0].zzzz; 9: MOV output[2].y, temp[0].yyyy; 10: MOV output[3].x, const[0].wwww; 11: MOV output[3].y, input[0].xxxx; 12: MOV temp[4], const[1].xxxx; 13: ADD output[4].x, const[0].wwww, temp[4]; 14: MOV output[4].y, input[0].xxxx; 15: MOV output[0], temp[2]; 16: MOV output[5], temp[2]; Final vertex program code: 0: op: 0x00f06003 dst: 3t 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 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00304003 dst: 2t 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 4: op: 0x00c04003 dst: 2t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00302002 dst: 1t op: VE_MULTIPLY src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00102203 dst: 1o op: VE_ADD src0: 0x00000020 reg: 1t swiz: X/ X/ X/ X src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 7: op: 0x00202203 dst: 1o op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x00000020 reg: 1t swiz: X/ X/ X/ X src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 9: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 10: op: 0x00106203 dst: 3o op: VE_ADD src0: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 11: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 12: op: 0x00f08003 dst: 4t op: VE_ADD src0: 0x00000022 reg: 1c swiz: X/ X/ X/ X src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 13: op: 0x00108203 dst: 4o op: VE_ADD src0: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src1: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 14: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 15: 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 16: op: 0x00f0a203 dst: 5o 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 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 17 Instructions ~ 0 Flow Control Instructions ~ 5 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL TEMP[0] IMM FLT32 { 0.0156, 1.0000, 0.0005, 0.2500} IMM FLT32 { 0.0005, 0.2500, 0.0039, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MAD OUT[1].xy, IMM[1].xxyz, IN[2], TEMP[0] 5: MUL OUT[1].zw, IMM[1].xxyz, IN[2] 6: MAD OUT[2].xy, IMM[1].xxyz, IN[3], TEMP[0] 7: MUL OUT[2].zw, IMM[1].xxyz, IN[3] 8: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[2], input[0]; 1: ADD temp[0].xy, input[1], temp[2]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[1].xy, temp[0]; 4: MOV temp[1].zw, const[0].yyyy; 5: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 6: MUL output[1].zw, const[1].xxyz, input[2]; 7: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 8: MUL output[2].zw, const[1].xxyz, input[3]; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; CONST[0] = { 0.0156 1.0000 0.0005 0.2500 } CONST[1] = { 0.0005 0.2500 0.0039 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[2], input[0]; 1: ADD temp[0].xy, input[1], temp[2]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[1].xy, temp[0]; 4: MOV temp[1].zw, const[0].yyyy; 5: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 6: MUL output[1].zw, const[1].xxyz, input[2]; 7: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 8: MUL output[2].zw, const[1].xxyz, input[3]; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; Final vertex program code: 0: op: 0x00f04003 dst: 2t 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 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00d10040 reg: 2t swiz: X/ Y/ Z/ W src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00302003 dst: 1t 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 4: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00302204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x00880022 reg: 1c swiz: X/ X/ Y/ Z src1: 0x00d10041 reg: 2i swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 6: op: 0x00c02202 dst: 1o op: VE_MULTIPLY src0: 0x00880022 reg: 1c swiz: X/ X/ Y/ Z src1: 0x00d10041 reg: 2i swiz: X/ Y/ Z/ W src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 7: op: 0x00304204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x00880022 reg: 1c swiz: X/ X/ Y/ Z src1: 0x00d10061 reg: 3i swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 8: op: 0x00c04202 dst: 2o op: VE_MULTIPLY src0: 0x00880022 reg: 1c swiz: X/ X/ Y/ Z src1: 0x00d10061 reg: 3i swiz: X/ Y/ Z/ W src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 9: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 10: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 11 Instructions ~ 0 Flow Control Instructions ~ 3 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL OUT[3], GENERIC[3] DCL OUT[4], GENERIC[4] DCL OUT[5], GENERIC[5] DCL TEMP[0..2] IMM FLT32 { 0.0078, 1.0000, 2.0000, 0.0000} IMM FLT32 { 0.5000, 0.0039, -1.0000, -0.0078} IMM FLT32 { -0.0078, 0.0000, 0.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MUL TEMP[0].z, IN[0].xxxx, IMM[0].zzzz 5: MUL TEMP[2].xy, IN[1], IMM[0].xxxx 6: MOV OUT[2].x, IMM[0].wwww 7: MOV OUT[2].y, IN[0].yyyy 8: ADD OUT[3].x, IMM[0].wwww, IMM[1].xxxx 9: MOV OUT[3].y, IN[0].yyyy 10: MOV OUT[4].y, TEMP[2].yyyy 11: MOV OUT[4].x, TEMP[0].xxxx 12: ADD OUT[5].y, TEMP[2].yyyy, IMM[1].yyyy 13: MOV OUT[5].x, TEMP[0].xxxx 14: MOV OUT[4].z, TEMP[0] 15: MOV OUT[5].z, TEMP[0] 16: MUL OUT[1].z, IN[1].zzzz, IMM[1].xxxx 17: MOV OUT[1].w, IMM[1].zzzz 18: IF IN[1].wwww :25 19: CMP TEMP[1].xy, -IN[0].yyyy, IMM[0].wxww, IMM[2].xyxx 20: MUL TEMP[1].z, IN[1].yyyy, IMM[1].xxxx 21: FRC TEMP[1].z, TEMP[1] 22: CMP TEMP[1].y, -TEMP[1].zzzz, TEMP[1].xxxx, TEMP[1].yyyy 23: ADD OUT[0].y, TEMP[0], TEMP[1] 24: CMP OUT[1].w, -TEMP[1].zzzz, IMM[0].wwww, IMM[0].yyyy 25: ENDIF 26: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: IF input[1].wwww; 19: CMP temp[1].xy, -input[0].yyyy, const[0].wxww, const[2].xyxx; 20: MUL temp[1].z, input[1].yyyy, const[1].xxxx; 21: FRC temp[1].z, temp[1]; 22: CMP temp[1].y, -temp[1].zzzz, temp[1].xxxx, temp[1].yyyy; 23: ADD temp[3].y, temp[0], temp[1]; 24: CMP output[1].w, -temp[1].zzzz, const[0].wwww, const[0].yyyy; 25: ENDIF; 26: MOV output[0], temp[3]; 27: MOV output[6], temp[3]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: IF input[1].wwww; 19: CMP temp[1].xy, -input[0].yyyy, const[0].wxww, const[2].xyxx; 20: MUL temp[1].z, input[1].yyyy, const[1].xxxx; 21: FRC temp[1].z, temp[1]; 22: CMP temp[1].y, -temp[1].zzzz, temp[1].xxxx, temp[1].yyyy; 23: ADD temp[3].y, temp[0], temp[1]; 24: CMP output[1].w, -temp[1].zzzz, const[0].wwww, const[0].yyyy; 25: ENDIF; 26: MOV output[0], temp[3]; 27: MOV output[6], temp[3]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 17: MOV temp[5].w, const[1].zzzz; 18: MOV temp[4].x, input[1].wwww; 19: MOV temp[6], temp[1]; 20: MOV temp[7], temp[3]; 21: MOV temp[8], temp[5]; 22: CMP temp[6].xy, -input[0].yyyy, const[0].wxww, const[2].xyxx; 23: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 24: FRC temp[6].z, temp[6]; 25: CMP temp[6].y, -temp[6].zzzz, temp[6].xxxx, temp[6].yyyy; 26: ADD temp[7].y, temp[0], temp[6]; 27: CMP temp[8].w, -temp[6].zzzz, const[0].wwww, const[0].yyyy; 28: CMP temp[5], -|temp[4].xxxx|, temp[8], temp[5]; 29: CMP temp[3], -|temp[4].xxxx|, temp[7], temp[3]; 30: CMP temp[1], -|temp[4].xxxx|, temp[6], temp[1]; 31: MOV output[0], temp[3]; 32: MOV output[6], temp[3]; 33: MOV output[1], temp[5]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 17: MOV temp[5].w, const[1].zzzz; 18: MOV temp[4].x, input[1].wwww; 19: MOV temp[6], temp[1]; 20: MOV temp[7], temp[3]; 21: MOV temp[8], temp[5]; 22: CMP temp[6].xy, -input[0].yyyy, const[0].wxww, const[2].xyxx; 23: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 24: FRC temp[6].z, temp[6]; 25: CMP temp[6].y, -temp[6].zzzz, temp[6].xxxx, temp[6].yyyy; 26: ADD temp[7].y, temp[0], temp[6]; 27: CMP temp[8].w, -temp[6].zzzz, const[0].wwww, const[0].yyyy; 28: CMP temp[5], -|temp[4].xxxx|, temp[8], temp[5]; 29: CMP temp[3], -|temp[4].xxxx|, temp[7], temp[3]; 30: CMP temp[1], -|temp[4].xxxx|, temp[6], temp[1]; 31: MOV output[0], temp[3]; 32: MOV output[6], temp[3]; 33: MOV output[1], temp[5]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 17: MOV temp[5].w, const[1].zzzz; 18: MOV temp[4].x, input[1].wwww; 19: MOV temp[6], temp[1]; 20: MOV temp[7], temp[3]; 21: MOV temp[8], temp[5]; 22: SLT temp[6].xy, -input[0].yyyy, none.0000; 23: ADD temp[9].xy, const[0].wxww, -const[2].xyxx; 24: MAD temp[6].xy, temp[6], temp[9], const[2].xyxx; 25: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 26: FRC temp[6].z, temp[6]; 27: SLT temp[10].y, -temp[6].zzzz, none.0000; 28: ADD temp[11].y, temp[6].xxxx, -temp[6].yyyy; 29: MAD temp[6].y, temp[10], temp[11], temp[6].yyyy; 30: ADD temp[7].y, temp[0], temp[6]; 31: SLT temp[8].w, -temp[6].zzzz, none.0000; 32: ADD temp[12].w, const[0].wwww, -const[0].yyyy; 33: MAD temp[8].w, temp[8], temp[12], const[0].yyyy; 34: SLT temp[13], -|temp[4].xxxx|, none.0000; 35: ADD temp[14], temp[8], -temp[5]; 36: MAD temp[5], temp[13], temp[14], temp[5]; 37: SLT temp[15], -|temp[4].xxxx|, none.0000; 38: ADD temp[16], temp[7], -temp[3]; 39: MAD temp[3], temp[15], temp[16], temp[3]; 40: SLT temp[17], -|temp[4].xxxx|, none.0000; 41: ADD temp[18], temp[6], -temp[1]; 42: MAD temp[1], temp[17], temp[18], temp[1]; 43: MOV output[0], temp[3]; 44: MOV output[6], temp[3]; 45: MOV output[1], temp[5]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[3].xy, temp[0]; 3: MOV temp[3].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 17: MOV temp[5].w, const[1].zzzz; 18: MOV temp[4].x, input[1].wwww; 19: MOV temp[6], temp[1]; 20: MOV temp[7], temp[3]; 21: MOV temp[8], temp[5]; 22: SLT temp[6].xy, -input[0].yyyy, none.0000; 23: ADD temp[9].xy, const[0].wxww, -const[2].xyxx; 24: MAD temp[6].xy, temp[6], temp[9], const[2].xyxx; 25: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 26: FRC temp[6].z, temp[6]; 27: SLT temp[10].y, -temp[6].zzzz, none.0000; 28: ADD temp[11].y, temp[6].xxxx, -temp[6].yyyy; 29: MAD temp[6].y, temp[10], temp[11], temp[6].yyyy; 30: ADD temp[7].y, temp[0], temp[6]; 31: SLT temp[8].w, -temp[6].zzzz, none.0000; 32: ADD temp[12].w, const[0].wwww, -const[0].yyyy; 33: MAD temp[8].w, temp[8], temp[12], const[0].yyyy; 34: MAX temp[19], -temp[4].xxxx, temp[4].xxxx; 35: SLT temp[13], temp[19], none.0000; 36: ADD temp[14], temp[8], -temp[5]; 37: MAD temp[5], temp[13], temp[14], temp[5]; 38: MAX temp[20], -temp[4].xxxx, temp[4].xxxx; 39: SLT temp[15], temp[20], none.0000; 40: ADD temp[16], temp[7], -temp[3]; 41: MAD temp[3], temp[15], temp[16], temp[3]; 42: MAX temp[21], -temp[4].xxxx, temp[4].xxxx; 43: SLT temp[17], temp[21], none.0000; 44: ADD temp[18], temp[6], -temp[1]; 45: MAD temp[1], temp[17], temp[18], temp[1]; 46: MOV output[0], temp[3]; 47: MOV output[6], temp[3]; 48: MOV output[1], temp[5]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[22], input[0]; 1: ADD temp[0].xy, input[1], temp[22]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[3].xy, temp[0]; 4: MOV temp[3].zw, const[0].yyyy; 5: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 6: MUL temp[2].xy, input[1], const[0].xxxx; 7: MOV output[2].x, const[0].wwww; 8: MOV output[2].y, input[0].yyyy; 9: MOV temp[23], const[1].xxxx; 10: ADD output[3].x, const[0].wwww, temp[23]; 11: MOV output[3].y, input[0].yyyy; 12: MOV output[4].y, temp[2].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 15: MOV output[5].x, temp[0].xxxx; 16: MOV output[4].z, temp[0]; 17: MOV output[5].z, temp[0]; 18: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 19: MOV temp[5].w, const[1].zzzz; 20: MOV temp[4].x, input[1].wwww; 21: MOV temp[6], temp[1]; 22: MOV temp[7], temp[3]; 23: MOV temp[8], temp[5]; 24: SLT temp[6].xy, -input[0].yyyy, none.0000; 25: MOV temp[24], -const[2].xyxx; 26: ADD temp[9].xy, const[0].wxww, temp[24]; 27: MAD temp[6].xy, temp[6], temp[9], const[2].xyxx; 28: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 29: FRC temp[6].z, temp[6]; 30: SLT temp[10].y, -temp[6].zzzz, none.0000; 31: ADD temp[11].y, temp[6].xxxx, -temp[6].yyyy; 32: MAD temp[6].y, temp[10], temp[11], temp[6].yyyy; 33: ADD temp[7].y, temp[0], temp[6]; 34: SLT temp[8].w, -temp[6].zzzz, none.0000; 35: ADD temp[12].w, const[0].wwww, -const[0].yyyy; 36: MAD temp[8].w, temp[8], temp[12], const[0].yyyy; 37: MAX temp[19], -temp[4].xxxx, temp[4].xxxx; 38: SLT temp[13], temp[19], none.0000; 39: ADD temp[14], temp[8], -temp[5]; 40: MAD temp[5], temp[13], temp[14], temp[5]; 41: MAX temp[20], -temp[4].xxxx, temp[4].xxxx; 42: SLT temp[15], temp[20], none.0000; 43: ADD temp[16], temp[7], -temp[3]; 44: MAD temp[3], temp[15], temp[16], temp[3]; 45: MAX temp[21], -temp[4].xxxx, temp[4].xxxx; 46: SLT temp[17], temp[21], none.0000; 47: ADD temp[18], temp[6], -temp[1]; 48: MAD temp[1], temp[17], temp[18], temp[1]; 49: MOV output[0], temp[3]; 50: MOV output[6], temp[3]; 51: MOV output[1], temp[5]; CONST[0] = { 0.0078 1.0000 2.0000 0.0000 } CONST[1] = { 0.5000 0.0039 -1.0000 -0.0078 } CONST[2] = { -0.0078 0.0000 0.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[22], input[0]; 1: ADD temp[0].xy, input[1], temp[22]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[3].xy, temp[0]; 4: MOV temp[3].zw, const[0].yyyy; 5: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 6: MUL temp[2].xy, input[1], const[0].xxxx; 7: MOV output[2].x, const[0].wwww; 8: MOV output[2].y, input[0].yyyy; 9: MOV temp[23], const[1].xxxx; 10: ADD output[3].x, const[0].wwww, temp[23]; 11: MOV output[3].y, input[0].yyyy; 12: MOV output[4].y, temp[2].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 15: MOV output[5].x, temp[0].xxxx; 16: MOV output[4].z, temp[0]; 17: MOV output[5].z, temp[0]; 18: MUL temp[5].z, input[1].zzzz, const[1].xxxx; 19: MOV temp[5].w, const[1].zzzz; 20: MOV temp[4].x, input[1].wwww; 21: MOV temp[6], temp[1]; 22: MOV temp[7], temp[3]; 23: MOV temp[8], temp[5]; 24: SLT temp[6].xy, -input[0].yyyy, none.0000; 25: MOV temp[24], -const[2].xyxx; 26: ADD temp[9].xy, const[0].wxww, temp[24]; 27: MAD temp[6].xy, temp[6], temp[9], const[2].xyxx; 28: MUL temp[6].z, input[1].yyyy, const[1].xxxx; 29: FRC temp[6].z, temp[6]; 30: SLT temp[10].y, -temp[6].zzzz, none.0000; 31: ADD temp[11].y, temp[6].xxxx, -temp[6].yyyy; 32: MAD temp[6].y, temp[10], temp[11], temp[6].yyyy; 33: ADD temp[7].y, temp[0], temp[6]; 34: SLT temp[8].w, -temp[6].zzzz, none.0000; 35: ADD temp[12].w, const[0].wwww, -const[0].yyyy; 36: MAD temp[8].w, temp[8], temp[12], const[0].yyyy; 37: MAX temp[19], -temp[4].xxxx, temp[4].xxxx; 38: SLT temp[13], temp[19], none.0000; 39: ADD temp[14], temp[8], -temp[5]; 40: MAD temp[5], temp[13], temp[14], temp[5]; 41: MAX temp[20], -temp[4].xxxx, temp[4].xxxx; 42: SLT temp[15], temp[20], none.0000; 43: ADD temp[16], temp[7], -temp[3]; 44: MAD temp[3], temp[15], temp[16], temp[3]; 45: MAX temp[21], -temp[4].xxxx, temp[4].xxxx; 46: SLT temp[17], temp[21], none.0000; 47: ADD temp[18], temp[6], -temp[1]; 48: MAD temp[1], temp[17], temp[18], temp[1]; 49: MOV output[0], temp[3]; 50: MOV output[6], temp[3]; 51: MOV output[1], temp[5]; Final vertex program code: 0: op: 0x00f2c003 dst: 22t 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 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00d102c0 reg: 22t swiz: X/ Y/ Z/ W src2: 0x012482c0 reg: 22t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00306003 dst: 3t 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 4: op: 0x00c06003 dst: 3t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00400002 dst: 0t op: VE_MULTIPLY src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00304002 dst: 2t op: VE_MULTIPLY src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 7: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 8: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 9: op: 0x00f2e003 dst: 23t op: VE_ADD src0: 0x00000022 reg: 1c swiz: X/ X/ X/ X src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 10: op: 0x00106203 dst: 3o op: VE_ADD src0: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src1: 0x00d102e0 reg: 23t swiz: X/ Y/ Z/ W src2: 0x012482e0 reg: 23t swiz: 0/ 0/ 0/ 0 11: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 12: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x00492040 reg: 2t swiz: Y/ Y/ Y/ Y src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 13: op: 0x00108203 dst: 4o 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 14: op: 0x0020a203 dst: 5o op: VE_ADD src0: 0x00492040 reg: 2t swiz: Y/ Y/ Y/ Y src1: 0x00492022 reg: 1c swiz: Y/ Y/ Y/ Y src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 15: op: 0x0010a203 dst: 5o 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 16: op: 0x00408203 dst: 4o 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 17: op: 0x0040a203 dst: 5o 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 18: op: 0x0040a002 dst: 5t op: VE_MULTIPLY src0: 0x00924021 reg: 1i swiz: Z/ Z/ Z/ Z src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 19: op: 0x0080a003 dst: 5t op: VE_ADD src0: 0x00924022 reg: 1c swiz: Z/ Z/ Z/ Z src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 20: op: 0x00108003 dst: 4t op: VE_ADD src0: 0x00db6021 reg: 1i swiz: W/ W/ W/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 21: op: 0x00f0c003 dst: 6t 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 22: op: 0x00f0e003 dst: 7t op: VE_ADD src0: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 23: op: 0x00f10003 dst: 8t 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 24: op: 0x0030c00a dst: 6t op: VE_SET_LESS_THAN src0: 0x1e492001 reg: 0i swiz: -Y/-Y/-Y/-Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 25: op: 0x00f30003 dst: 24t op: VE_ADD src0: 0x1e010042 reg: 2c swiz: -X/-Y/-X/-X src1: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 src2: 0x01248042 reg: 2c swiz: 0/ 0/ 0/ 0 26: op: 0x00312003 dst: 9t op: VE_ADD src0: 0x00d86002 reg: 0c swiz: W/ X/ W/ W src1: 0x00d10300 reg: 24t swiz: X/ Y/ Z/ W src2: 0x01248300 reg: 24t swiz: 0/ 0/ 0/ 0 27: op: 0x0030c004 dst: 6t op: VE_MULTIPLY_ADD src0: 0x00d100c0 reg: 6t swiz: X/ Y/ Z/ W src1: 0x00d10120 reg: 9t swiz: X/ Y/ Z/ W src2: 0x00010042 reg: 2c swiz: X/ Y/ X/ X 28: op: 0x0040c002 dst: 6t op: VE_MULTIPLY src0: 0x00492021 reg: 1i swiz: Y/ Y/ Y/ Y src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 29: op: 0x0040c006 dst: 6t op: VE_FRACTION src0: 0x00d100c0 reg: 6t swiz: X/ Y/ Z/ W src1: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 30: op: 0x0021400a dst: 10t op: VE_SET_LESS_THAN src0: 0x1e9240c0 reg: 6t swiz: -Z/-Z/-Z/-Z src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 31: op: 0x00216003 dst: 11t op: VE_ADD src0: 0x000000c0 reg: 6t swiz: X/ X/ X/ X src1: 0x1e4920c0 reg: 6t swiz: -Y/-Y/-Y/-Y src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 32: op: 0x0020c080 dst: 6t op: PVS_MACRO_OP_2CLK_MADD src0: 0x00d10140 reg: 10t swiz: X/ Y/ Z/ W src1: 0x00d10160 reg: 11t swiz: X/ Y/ Z/ W src2: 0x004920c0 reg: 6t swiz: Y/ Y/ Y/ Y 33: op: 0x0020e003 dst: 7t op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00d100c0 reg: 6t swiz: X/ Y/ Z/ W src2: 0x012480c0 reg: 6t swiz: 0/ 0/ 0/ 0 34: op: 0x0081000a dst: 8t op: VE_SET_LESS_THAN src0: 0x1e9240c0 reg: 6t swiz: -Z/-Z/-Z/-Z src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 35: op: 0x00818003 dst: 12t op: VE_ADD src0: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src1: 0x1e492002 reg: 0c swiz: -Y/-Y/-Y/-Y src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 36: op: 0x00810004 dst: 8t op: VE_MULTIPLY_ADD src0: 0x00d10100 reg: 8t swiz: X/ Y/ Z/ W src1: 0x00d10180 reg: 12t swiz: X/ Y/ Z/ W src2: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y 37: op: 0x00f26007 dst: 19t op: VE_MAXIMUM src0: 0x1e000080 reg: 4t swiz: -X/-X/-X/-X src1: 0x00000080 reg: 4t swiz: X/ X/ X/ X src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 38: op: 0x00f1a00a dst: 13t op: VE_SET_LESS_THAN src0: 0x00d10260 reg: 19t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 39: op: 0x00f1c003 dst: 14t op: VE_ADD src0: 0x00d10100 reg: 8t swiz: X/ Y/ Z/ W src1: 0x1ed100a0 reg: 5t swiz: -X/-Y/-Z/-W src2: 0x012480a0 reg: 5t swiz: 0/ 0/ 0/ 0 40: op: 0x00f0a080 dst: 5t op: PVS_MACRO_OP_2CLK_MADD src0: 0x00d101a0 reg: 13t swiz: X/ Y/ Z/ W src1: 0x00d101c0 reg: 14t swiz: X/ Y/ Z/ W src2: 0x00d100a0 reg: 5t swiz: X/ Y/ Z/ W 41: op: 0x00f28007 dst: 20t op: VE_MAXIMUM src0: 0x1e000080 reg: 4t swiz: -X/-X/-X/-X src1: 0x00000080 reg: 4t swiz: X/ X/ X/ X src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 42: op: 0x00f1e00a dst: 15t op: VE_SET_LESS_THAN src0: 0x00d10280 reg: 20t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 43: op: 0x00f20003 dst: 16t op: VE_ADD src0: 0x00d100e0 reg: 7t swiz: X/ Y/ Z/ W src1: 0x1ed10060 reg: 3t swiz: -X/-Y/-Z/-W src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 44: op: 0x00f06080 dst: 3t op: PVS_MACRO_OP_2CLK_MADD src0: 0x00d101e0 reg: 15t swiz: X/ Y/ Z/ W src1: 0x00d10200 reg: 16t swiz: X/ Y/ Z/ W src2: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W 45: op: 0x00f2a007 dst: 21t op: VE_MAXIMUM src0: 0x1e000080 reg: 4t swiz: -X/-X/-X/-X src1: 0x00000080 reg: 4t swiz: X/ X/ X/ X src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 46: op: 0x00f2200a dst: 17t op: VE_SET_LESS_THAN src0: 0x00d102a0 reg: 21t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 47: op: 0x00f24003 dst: 18t op: VE_ADD src0: 0x00d100c0 reg: 6t swiz: X/ Y/ Z/ W src1: 0x1ed10020 reg: 1t swiz: -X/-Y/-Z/-W src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 48: op: 0x00f02080 dst: 1t op: PVS_MACRO_OP_2CLK_MADD src0: 0x00d10220 reg: 17t swiz: X/ Y/ Z/ W src1: 0x00d10240 reg: 18t swiz: X/ Y/ Z/ W src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 49: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 50: op: 0x00f0c203 dst: 6o op: VE_ADD src0: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W src1: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 51: op: 0x00f02203 dst: 1o 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 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 52 Instructions ~ 0 Flow Control Instructions ~ 25 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL TEMP[0] IMM FLT32 { 0.0156, 1.0000, 0.0005, 0.2500} IMM FLT32 { 0.0005, 0.2500, 0.0039, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MAD OUT[1].xy, IMM[1].xxyz, IN[2], TEMP[0] 5: MUL OUT[1].zw, IMM[1].xxyz, IN[2] 6: MAD OUT[2].xy, IMM[1].xxyz, IN[3], TEMP[0] 7: MUL OUT[2].zw, IMM[1].xxyz, IN[3] 8: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 5: MUL output[1].zw, const[1].xxyz, input[2]; 6: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 7: MUL output[2].zw, const[1].xxyz, input[3]; 8: MOV output[0], temp[1]; 9: MOV output[3], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[2], input[0]; 1: ADD temp[0].xy, input[1], temp[2]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[1].xy, temp[0]; 4: MOV temp[1].zw, const[0].yyyy; 5: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 6: MUL output[1].zw, const[1].xxyz, input[2]; 7: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 8: MUL output[2].zw, const[1].xxyz, input[3]; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; CONST[0] = { 0.0156 1.0000 0.0005 0.2500 } CONST[1] = { 0.0005 0.2500 0.0039 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[2], input[0]; 1: ADD temp[0].xy, input[1], temp[2]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[1].xy, temp[0]; 4: MOV temp[1].zw, const[0].yyyy; 5: MAD output[1].xy, const[1].xxyz, input[2], temp[0]; 6: MUL output[1].zw, const[1].xxyz, input[2]; 7: MAD output[2].xy, const[1].xxyz, input[3], temp[0]; 8: MUL output[2].zw, const[1].xxyz, input[3]; 9: MOV output[0], temp[1]; 10: MOV output[3], temp[1]; Final vertex program code: 0: op: 0x00f04003 dst: 2t 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 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00d10040 reg: 2t swiz: X/ Y/ Z/ W src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00302003 dst: 1t 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 4: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00302204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x00880022 reg: 1c swiz: X/ X/ Y/ Z src1: 0x00d10041 reg: 2i swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 6: op: 0x00c02202 dst: 1o op: VE_MULTIPLY src0: 0x00880022 reg: 1c swiz: X/ X/ Y/ Z src1: 0x00d10041 reg: 2i swiz: X/ Y/ Z/ W src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 7: op: 0x00304204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x00880022 reg: 1c swiz: X/ X/ Y/ Z src1: 0x00d10061 reg: 3i swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 8: op: 0x00c04202 dst: 2o op: VE_MULTIPLY src0: 0x00880022 reg: 1c swiz: X/ X/ Y/ Z src1: 0x00d10061 reg: 3i swiz: X/ Y/ Z/ W src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 9: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 10: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W src1: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 src2: 0x01248020 reg: 1t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 11 Instructions ~ 0 Flow Control Instructions ~ 3 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL OUT[3], GENERIC[3] DCL OUT[4], GENERIC[4] DCL OUT[5], GENERIC[5] DCL TEMP[0..2] IMM FLT32 { 0.0156, 1.0000, 2.0000, 0.0000} IMM FLT32 { 0.5000, 0.0078, -1.0000, 0.0000} 0: ADD TEMP[0].xy, IN[1], IN[0] 1: MUL TEMP[0].xy, TEMP[0], IMM[0].xxxx 2: MOV OUT[0].xy, TEMP[0] 3: MOV OUT[0].zw, IMM[0].yyyy 4: MUL TEMP[0].z, IN[0].xxxx, IMM[0].zzzz 5: MUL TEMP[2].xy, IN[1], IMM[0].xxxx 6: MOV OUT[2].x, IMM[0].wwww 7: MOV OUT[2].y, IN[0].yyyy 8: ADD OUT[3].x, IMM[0].wwww, IMM[1].xxxx 9: MOV OUT[3].y, IN[0].yyyy 10: MOV OUT[4].y, TEMP[2].yyyy 11: MOV OUT[4].x, TEMP[0].xxxx 12: ADD OUT[5].y, TEMP[2].yyyy, IMM[1].yyyy 13: MOV OUT[5].x, TEMP[0].xxxx 14: MOV OUT[4].z, TEMP[0] 15: MOV OUT[5].z, TEMP[0] 16: MUL OUT[1].z, IN[1].zzzz, IMM[1].xxxx 17: MOV OUT[1].w, IMM[1].zzzz 18: END Vertex Program: before compilation # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[6], temp[1]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[6], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[6], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[6], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[6], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: ADD temp[0].xy, input[1], input[0]; 1: MUL temp[0].xy, temp[0], const[0].xxxx; 2: MOV temp[1].xy, temp[0]; 3: MOV temp[1].zw, const[0].yyyy; 4: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 5: MUL temp[2].xy, input[1], const[0].xxxx; 6: MOV output[2].x, const[0].wwww; 7: MOV output[2].y, input[0].yyyy; 8: ADD output[3].x, const[0].wwww, const[1].xxxx; 9: MOV output[3].y, input[0].yyyy; 10: MOV output[4].y, temp[2].yyyy; 11: MOV output[4].x, temp[0].xxxx; 12: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 13: MOV output[5].x, temp[0].xxxx; 14: MOV output[4].z, temp[0]; 15: MOV output[5].z, temp[0]; 16: MUL output[1].z, input[1].zzzz, const[1].xxxx; 17: MOV output[1].w, const[1].zzzz; 18: MOV output[0], temp[1]; 19: MOV output[6], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[1].xy, temp[0]; 4: MOV temp[1].zw, const[0].yyyy; 5: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 6: MUL temp[2].xy, input[1], const[0].xxxx; 7: MOV output[2].x, const[0].wwww; 8: MOV output[2].y, input[0].yyyy; 9: MOV temp[4], const[1].xxxx; 10: ADD output[3].x, const[0].wwww, temp[4]; 11: MOV output[3].y, input[0].yyyy; 12: MOV output[4].y, temp[2].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 15: MOV output[5].x, temp[0].xxxx; 16: MOV output[4].z, temp[0]; 17: MOV output[5].z, temp[0]; 18: MUL output[1].z, input[1].zzzz, const[1].xxxx; 19: MOV output[1].w, const[1].zzzz; 20: MOV output[0], temp[1]; 21: MOV output[6], temp[1]; CONST[0] = { 0.0156 1.0000 2.0000 0.0000 } CONST[1] = { 0.5000 0.0078 -1.0000 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[3], input[0]; 1: ADD temp[0].xy, input[1], temp[3]; 2: MUL temp[0].xy, temp[0], const[0].xxxx; 3: MOV temp[1].xy, temp[0]; 4: MOV temp[1].zw, const[0].yyyy; 5: MUL temp[0].z, input[0].xxxx, const[0].zzzz; 6: MUL temp[2].xy, input[1], const[0].xxxx; 7: MOV output[2].x, const[0].wwww; 8: MOV output[2].y, input[0].yyyy; 9: MOV temp[4], const[1].xxxx; 10: ADD output[3].x, const[0].wwww, temp[4]; 11: MOV output[3].y, input[0].yyyy; 12: MOV output[4].y, temp[2].yyyy; 13: MOV output[4].x, temp[0].xxxx; 14: ADD output[5].y, temp[2].yyyy, const[1].yyyy; 15: MOV output[5].x, temp[0].xxxx; 16: MOV output[4].z, temp[0]; 17: MOV output[5].z, temp[0]; 18: MUL output[1].z, input[1].zzzz, const[1].xxxx; 19: MOV output[1].w, const[1].zzzz; 20: MOV output[0], temp[1]; 21: MOV output[6], temp[1]; Final vertex program code: 0: op: 0x00f06003 dst: 3t 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 1: op: 0x00300003 dst: 0t op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00d10060 reg: 3t swiz: X/ Y/ Z/ W src2: 0x01248060 reg: 3t swiz: 0/ 0/ 0/ 0 2: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00302003 dst: 1t 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 4: op: 0x00c02003 dst: 1t op: VE_ADD src0: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 5: op: 0x00400002 dst: 0t op: VE_MULTIPLY src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 6: op: 0x00304002 dst: 2t op: VE_MULTIPLY src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 7: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src1: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 8: op: 0x00204203 dst: 2o op: VE_ADD src0: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 9: op: 0x00f08003 dst: 4t op: VE_ADD src0: 0x00000022 reg: 1c swiz: X/ X/ X/ X src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 10: op: 0x00106203 dst: 3o op: VE_ADD src0: 0x00db6002 reg: 0c swiz: W/ W/ W/ W src1: 0x00d10080 reg: 4t swiz: X/ Y/ Z/ W src2: 0x01248080 reg: 4t swiz: 0/ 0/ 0/ 0 11: op: 0x00206203 dst: 3o op: VE_ADD src0: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 12: op: 0x00208203 dst: 4o op: VE_ADD src0: 0x00492040 reg: 2t swiz: Y/ Y/ Y/ Y src1: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 src2: 0x01248040 reg: 2t swiz: 0/ 0/ 0/ 0 13: op: 0x00108203 dst: 4o 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 14: op: 0x0020a203 dst: 5o op: VE_ADD src0: 0x00492040 reg: 2t swiz: Y/ Y/ Y/ Y src1: 0x00492022 reg: 1c swiz: Y/ Y/ Y/ Y src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 15: op: 0x0010a203 dst: 5o 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 16: op: 0x00408203 dst: 4o 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 17: op: 0x0040a203 dst: 5o 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 18: op: 0x00402202 dst: 1o op: VE_MULTIPLY src0: 0x00924021 reg: 1i swiz: Z/ Z/ Z/ Z src1: 0x00000022 reg: 1c swiz: X/ X/ X/ X src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 19: op: 0x00802203 dst: 1o op: VE_ADD src0: 0x00924022 reg: 1c swiz: Z/ Z/ Z/ Z src1: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 src2: 0x01248022 reg: 1c swiz: 0/ 0/ 0/ 0 20: 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 21: 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 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 22 Instructions ~ 0 Flow Control Instructions ~ 5 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[1] DCL OUT[2], GENERIC[2] DCL OUT[3], GENERIC[3] DCL TEMP[0] IMM FLT32 { 0.5000, 0.2500, -0.2500, 0.0000} 0: MOV OUT[0], IN[0] 1: MOV OUT[1], IN[1] 2: MUL TEMP[0].x, IN[1].wwww, IMM[0].xxxx 3: MUL TEMP[0].y, IN[1].wwww, IMM[0].yyyy 4: MOV OUT[2].x, IN[1] 5: MAD OUT[2].y, IN[1].yyyy, TEMP[0].xxxx, IMM[0].yyyy 6: MAD OUT[2].z, IN[1].yyyy, TEMP[0].yyyy, IMM[0].yyyy 7: RCP OUT[2].w, TEMP[0].xxxx 8: MOV OUT[3].x, IN[1] 9: MAD OUT[3].y, IN[1].yyyy, TEMP[0].xxxx, IMM[0].zzzz 10: MAD OUT[3].z, IN[1].yyyy, TEMP[0].yyyy, IMM[0].zzzz 11: RCP OUT[3].w, TEMP[0].yyyy 12: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[1], input[1]; 2: MUL temp[0].x, input[1].wwww, const[0].xxxx; 3: MUL temp[0].y, input[1].wwww, const[0].yyyy; 4: MOV output[2].x, input[1]; 5: MAD output[2].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 6: MAD output[2].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 7: RCP output[2].w, temp[0].xxxx; 8: MOV output[3].x, input[1]; 9: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 10: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 11: RCP output[3].w, temp[0].yyyy; 12: MOV output[0], temp[1]; 13: MOV output[4], temp[1]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[1], input[1]; 2: MUL temp[0].x, input[1].wwww, const[0].xxxx; 3: MUL temp[0].y, input[1].wwww, const[0].yyyy; 4: MOV output[2].x, input[1]; 5: MAD output[2].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 6: MAD output[2].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 7: RCP output[2].w, temp[0].xxxx; 8: MOV output[3].x, input[1]; 9: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 10: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 11: RCP output[3].w, temp[0].yyyy; 12: MOV output[0], temp[1]; 13: MOV output[4], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[1], input[1]; 2: MUL temp[0].x, input[1].wwww, const[0].xxxx; 3: MUL temp[0].y, input[1].wwww, const[0].yyyy; 4: MOV output[2].x, input[1]; 5: MAD output[2].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 6: MAD output[2].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 7: RCP output[2].w, temp[0].xxxx; 8: MOV output[3].x, input[1]; 9: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 10: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 11: RCP output[3].w, temp[0].yyyy; 12: MOV output[0], temp[1]; 13: MOV output[4], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[1], input[1]; 2: MUL temp[0].x, input[1].wwww, const[0].xxxx; 3: MUL temp[0].y, input[1].wwww, const[0].yyyy; 4: MOV output[2].x, input[1]; 5: MAD output[2].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 6: MAD output[2].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 7: RCP output[2].w, temp[0].xxxx; 8: MOV output[3].x, input[1]; 9: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 10: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 11: RCP output[3].w, temp[0].yyyy; 12: MOV output[0], temp[1]; 13: MOV output[4], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[1], input[1]; 2: MUL temp[0].x, input[1].wwww, const[0].xxxx; 3: MUL temp[0].y, input[1].wwww, const[0].yyyy; 4: MOV output[2].x, input[1]; 5: MAD output[2].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 6: MAD output[2].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 7: RCP output[2].w, temp[0].xxxx; 8: MOV output[3].x, input[1]; 9: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 10: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 11: RCP output[3].w, temp[0].yyyy; 12: MOV output[0], temp[1]; 13: MOV output[4], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[1], input[1]; 2: MUL temp[0].x, input[1].wwww, const[0].xxxx; 3: MUL temp[0].y, input[1].wwww, const[0].yyyy; 4: MOV output[2].x, input[1]; 5: MAD output[2].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 6: MAD output[2].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 7: RCP output[2].w, temp[0].xxxx; 8: MOV output[3].x, input[1]; 9: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 10: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 11: RCP output[3].w, temp[0].yyyy; 12: MOV output[0], temp[1]; 13: MOV output[4], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[1], input[1]; 2: MUL temp[0].x, input[1].wwww, const[0].xxxx; 3: MUL temp[0].y, input[1].wwww, const[0].yyyy; 4: MOV output[2].x, input[1]; 5: MAD output[2].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 6: MAD output[2].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 7: RCP output[2].w, temp[0].xxxx; 8: MOV output[3].x, input[1]; 9: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 10: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 11: RCP output[3].w, temp[0].yyyy; 12: MOV output[0], temp[1]; 13: MOV output[4], temp[1]; CONST[0] = { 0.5000 0.2500 -0.2500 0.0000 } Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[1], input[0]; 1: MOV output[1], input[1]; 2: MUL temp[0].x, input[1].wwww, const[0].xxxx; 3: MUL temp[0].y, input[1].wwww, const[0].yyyy; 4: MOV output[2].x, input[1]; 5: MAD output[2].y, input[1].yyyy, temp[0].xxxx, const[0].yyyy; 6: MAD output[2].z, input[1].yyyy, temp[0].yyyy, const[0].yyyy; 7: RCP output[2].w, temp[0].xxxx; 8: MOV output[3].x, input[1]; 9: MAD output[3].y, input[1].yyyy, temp[0].xxxx, const[0].zzzz; 10: MAD output[3].z, input[1].yyyy, temp[0].yyyy, const[0].zzzz; 11: RCP output[3].w, temp[0].yyyy; 12: MOV output[0], temp[1]; 13: MOV output[4], temp[1]; Final vertex program code: 0: op: 0x00f02003 dst: 1t 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 1: 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 2: op: 0x00100002 dst: 0t op: VE_MULTIPLY src0: 0x00db6021 reg: 1i swiz: W/ W/ W/ W src1: 0x00000002 reg: 0c swiz: X/ X/ X/ X src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 3: op: 0x00200002 dst: 0t op: VE_MULTIPLY src0: 0x00db6021 reg: 1i swiz: W/ W/ W/ W src1: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 4: op: 0x00104203 dst: 2o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 5: op: 0x00204204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x00492021 reg: 1i swiz: Y/ Y/ Y/ Y src1: 0x00000000 reg: 0t swiz: X/ X/ X/ X src2: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y 6: op: 0x00404204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x00492021 reg: 1i swiz: Y/ Y/ Y/ Y src1: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src2: 0x00492002 reg: 0c swiz: Y/ Y/ Y/ Y 7: op: 0x00804246 dst: 2o op: ME_RECIP_DX src0: 0x00000000 reg: 0t swiz: X/ X/ X/ X src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 8: op: 0x00106203 dst: 3o 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 9: op: 0x00206204 dst: 3o op: VE_MULTIPLY_ADD src0: 0x00492021 reg: 1i swiz: Y/ Y/ Y/ Y src1: 0x00000000 reg: 0t swiz: X/ X/ X/ X src2: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z 10: op: 0x00406204 dst: 3o op: VE_MULTIPLY_ADD src0: 0x00492021 reg: 1i swiz: Y/ Y/ Y/ Y src1: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src2: 0x00924002 reg: 0c swiz: Z/ Z/ Z/ Z 11: op: 0x00806246 dst: 3o op: ME_RECIP_DX src0: 0x00492000 reg: 0t swiz: Y/ Y/ Y/ Y src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 12: op: 0x00f00203 dst: 0o op: VE_ADD src0: 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 13: op: 0x00f08203 dst: 4o 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 ~~~~~~~~~ VERTEX PROGRAM ~~~~~~~~ ~ 14 Instructions ~ 0 Flow Control Instructions ~ 2 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (1024x1024x1 px, pitch 1024 bytes) 1048576 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 1024, Dim: 1024x1024x1, LastLevel: 0, Size: 1048576, Format: r8_unorm r300: Making miptree for texture, format r8g8_unorm r300: Texture miptree: Level 0 (512x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 512, Dim: 512x512x1, LastLevel: 0, Size: 524288, Format: r8g8_unorm r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (1024x1024x1 px, pitch 1024 bytes) 1048576 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 1024, Dim: 1024x1024x1, LastLevel: 0, Size: 1048576, Format: r8_unorm r300: Making miptree for texture, format r8g8_unorm r300: Texture miptree: Level 0 (512x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 512, Dim: 512x512x1, LastLevel: 0, Size: 524288, Format: r8g8_unorm r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (1024x1024x1 px, pitch 1024 bytes) 1048576 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 1024, Dim: 1024x1024x1, LastLevel: 0, Size: 1048576, Format: r8_unorm r300: Making miptree for texture, format r8g8_unorm r300: Texture miptree: Level 0 (512x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 512, Dim: 512x512x1, LastLevel: 0, Size: 524288, Format: r8g8_unorm r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (1024x1024x1 px, pitch 1024 bytes) 1048576 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 1024, Dim: 1024x1024x1, LastLevel: 0, Size: 1048576, Format: r8_unorm r300: Making miptree for texture, format r8g8_unorm r300: Texture miptree: Level 0 (512x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 512, Dim: 512x512x1, LastLevel: 0, Size: 524288, Format: r8g8_unorm r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (1024x1024x1 px, pitch 1024 bytes) 1048576 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 1024, Dim: 1024x1024x1, LastLevel: 0, Size: 1048576, Format: r8_unorm r300: Making miptree for texture, format r8g8_unorm r300: Texture miptree: Level 0 (512x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 512, Dim: 512x512x1, LastLevel: 0, Size: 524288, Format: r8g8_unorm r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (1024x1024x1 px, pitch 1024 bytes) 1048576 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 1024, Dim: 1024x1024x1, LastLevel: 0, Size: 1048576, Format: r8_unorm r300: Making miptree for texture, format r8g8_unorm r300: Texture miptree: Level 0 (512x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 512, Dim: 512x512x1, LastLevel: 0, Size: 524288, Format: r8g8_unorm r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (1024x1024x1 px, pitch 1024 bytes) 1048576 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 1024, Dim: 1024x1024x1, LastLevel: 0, Size: 1048576, Format: r8_unorm r300: Making miptree for texture, format r8g8_unorm r300: Texture miptree: Level 0 (512x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 512, Dim: 512x512x1, LastLevel: 0, Size: 524288, Format: r8g8_unorm r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (1024x1024x1 px, pitch 1024 bytes) 1048576 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 1024, Dim: 1024x1024x1, LastLevel: 0, Size: 1048576, Format: r8_unorm r300: Making miptree for texture, format r8g8_unorm r300: Texture miptree: Level 0 (512x512x1 px, pitch 1024 bytes) 524288 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 512, Dim: 512x512x1, LastLevel: 0, Size: 524288, Format: r8g8_unorm CBZB Allowed: NO, Dim: 256x512, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 256x128, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 256x128, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 256x128, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 256x128, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x256, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x64, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x64, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x64, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x64, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x256, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x64, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x64, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x64, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x64, Misalignment: 0, Micro: NO, Macro: NO r300: Making miptree for texture, format r16_snorm r300: Texture miptree: Level 0 (1024x2048x1 px, pitch 2048 bytes) 4194304 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 1024, Dim: 1024x2048x1, LastLevel: 0, Size: 4194304, Format: r16_snorm CBZB Allowed: NO, Dim: 256x512, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x256, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 128x256, Misalignment: 0, Micro: NO, Macro: NO r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (128x8x2 px, pitch 128 bytes) 2048 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x8x2, LastLevel: 0, Size: 2048, Format: r8_unorm r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (128x8x2 px, pitch 128 bytes) 2048 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x8x2, LastLevel: 0, Size: 2048, Format: r8_unorm r300: Making miptree for texture, format r8_unorm r300: Texture miptree: Level 0 (128x8x2 px, pitch 128 bytes) 2048 bytes total, macrotiled FALSE r300: texture_desc_init: Macro: NO, Micro: NO, Pitch: 128, Dim: 128x8x2, LastLevel: 0, Size: 2048, Format: r8_unorm CBZB Allowed: NO, Dim: 1024x512, Misalignment: 0, Micro: NO, Macro: NO CBZB Allowed: NO, Dim: 512x256, Misalignment: 0, Micro: NO, Macro: NO r300: set_framebuffer_state: r300: CB[0] Dim: 256x1024, Firstlayer: 0, Lastlayer: 0, Level: 0, Format: r16g16b16a16_snorm r300: TEX: Macro: NO, Micro: NO, Dim: 256x1024x1, LastLevel: 0, Format: r16g16b16a16_snorm r300: Initial fragment program FRAG DCL IN[0], GENERIC[1], LINEAR DCL IN[1], GENERIC[2], LINEAR DCL IN[2], GENERIC[3], LINEAR DCL IN[3], GENERIC[4], LINEAR DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL TEMP[0..4] IMM FLT32 { 16.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0].x, IN[0], SAMP[1], 2D 1: TEX TEMP[1].x, IN[1], SAMP[1], 2D 2: TEX TEMP[2].x, IN[2], SAMP[1], 2D 3: TEX TEMP[3].x, IN[3], SAMP[1], 2D 4: MOV TEMP[0].y, IN[0].wwww 5: MOV TEMP[1].y, IN[1].wwww 6: MOV TEMP[2].y, IN[2].wwww 7: MOV TEMP[3].y, IN[3].wwww 8: TEX TEMP[0].x, TEMP[0], SAMP[0], 2D 9: TEX TEMP[4].x, IN[0], SAMP[2], 3D 10: TEX TEMP[0].y, TEMP[1], SAMP[0], 2D 11: TEX TEMP[4].y, IN[1], SAMP[2], 3D 12: TEX TEMP[0].z, TEMP[2], SAMP[0], 2D 13: TEX TEMP[4].z, IN[2], SAMP[2], 3D 14: TEX TEMP[0].w, TEMP[3], SAMP[0], 2D 15: TEX TEMP[4].w, IN[3], SAMP[2], 3D 16: MUL TEMP[4], TEMP[4], IMM[0].xxxx 17: MUL OUT[0], TEMP[0], TEMP[4] 18: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0].x, input[0], 2D[1]; 1: TEX temp[1].x, input[1], 2D[1]; 2: TEX temp[2].x, input[2], 2D[1]; 3: TEX temp[3].x, input[3], 2D[1]; 4: MOV temp[0].y, input[0].wwww; 5: MOV temp[1].y, input[1].wwww; 6: MOV temp[2].y, input[2].wwww; 7: MOV temp[3].y, input[3].wwww; 8: TEX temp[0].x, temp[0], 2D[0]; 9: TEX temp[4].x, input[0], 3D[2]; 10: TEX temp[0].y, temp[1], 2D[0]; 11: TEX temp[4].y, input[1], 3D[2]; 12: TEX temp[0].z, temp[2], 2D[0]; 13: TEX temp[4].z, input[2], 3D[2]; 14: TEX temp[0].w, temp[3], 2D[0]; 15: TEX temp[4].w, input[3], 3D[2]; 16: MUL temp[4], temp[4], const[0].xxxx; 17: MUL output[0], temp[0], temp[4]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[5], input[0], 2D[1]; 1: MOV temp[0].x, temp[5]; 2: TEX temp[6], input[1], 2D[1]; 3: MOV temp[1].x, temp[6]; 4: TEX temp[7], input[2], 2D[1]; 5: MOV temp[2].x, temp[7]; 6: TEX temp[8], input[3], 2D[1]; 7: MOV temp[3].x, temp[8]; 8: MOV temp[0].y, input[0].wwww; 9: MOV temp[1].y, input[1].wwww; 10: MOV temp[2].y, input[2].wwww; 11: MOV temp[3].y, input[3].wwww; 12: TEX temp[9], temp[0], 2D[0]; 13: MOV temp[0].x, temp[9]; 14: TEX temp[10], input[0], 3D[2]; 15: MOV temp[4].x, temp[10]; 16: TEX temp[11], temp[1], 2D[0]; 17: MOV temp[0].y, temp[11]; 18: TEX temp[12], input[1], 3D[2]; 19: MOV temp[4].y, temp[12]; 20: TEX temp[13], temp[2], 2D[0]; 21: MOV temp[0].z, temp[13]; 22: TEX temp[14], input[2], 3D[2]; 23: MOV temp[4].z, temp[14]; 24: TEX temp[15], temp[3], 2D[0]; 25: MOV temp[0].w, temp[15]; 26: TEX temp[16], input[3], 3D[2]; 27: MOV temp[4].w, temp[16]; 28: MUL temp[4], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[4]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[5], input[0], 2D[1]; 1: MOV temp[0].x, temp[5]; 2: TEX temp[6], input[1], 2D[1]; 3: MOV temp[1].x, temp[6]; 4: TEX temp[7], input[2], 2D[1]; 5: MOV temp[2].x, temp[7]; 6: TEX temp[8], input[3], 2D[1]; 7: MOV temp[3].x, temp[8]; 8: MOV temp[0].y, input[0].wwww; 9: MOV temp[1].y, input[1].wwww; 10: MOV temp[2].y, input[2].wwww; 11: MOV temp[3].y, input[3].wwww; 12: TEX temp[9], temp[0], 2D[0]; 13: MOV temp[0].x, temp[9]; 14: TEX temp[10], input[0], 3D[2]; 15: MOV temp[4].x, temp[10]; 16: TEX temp[11], temp[1], 2D[0]; 17: MOV temp[0].y, temp[11]; 18: TEX temp[12], input[1], 3D[2]; 19: MOV temp[4].y, temp[12]; 20: TEX temp[13], temp[2], 2D[0]; 21: MOV temp[0].z, temp[13]; 22: TEX temp[14], input[2], 3D[2]; 23: MOV temp[4].z, temp[14]; 24: TEX temp[15], temp[3], 2D[0]; 25: MOV temp[0].w, temp[15]; 26: TEX temp[16], input[3], 3D[2]; 27: MOV temp[4].w, temp[16]; 28: MUL temp[4], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[4]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[5], input[0], 2D[1]; 1: MOV temp[0].x, temp[5]; 2: TEX temp[6], input[1], 2D[1]; 3: MOV temp[1].x, temp[6]; 4: TEX temp[7], input[2], 2D[1]; 5: MOV temp[2].x, temp[7]; 6: TEX temp[8], input[3], 2D[1]; 7: MOV temp[3].x, temp[8]; 8: MOV temp[0].y, input[0].wwww; 9: MOV temp[1].y, input[1].wwww; 10: MOV temp[2].y, input[2].wwww; 11: MOV temp[3].y, input[3].wwww; 12: TEX temp[9], temp[0], 2D[0]; 13: MOV temp[0].x, temp[9]; 14: TEX temp[10], input[0], 3D[2]; 15: MOV temp[4].x, temp[10]; 16: TEX temp[11], temp[1], 2D[0]; 17: MOV temp[0].y, temp[11]; 18: TEX temp[12], input[1], 3D[2]; 19: MOV temp[4].y, temp[12]; 20: TEX temp[13], temp[2], 2D[0]; 21: MOV temp[0].z, temp[13]; 22: TEX temp[14], input[2], 3D[2]; 23: MOV temp[4].z, temp[14]; 24: TEX temp[15], temp[3], 2D[0]; 25: MOV temp[0].w, temp[15]; 26: TEX temp[16], input[3], 3D[2]; 27: MOV temp[4].w, temp[16]; 28: MUL temp[4], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[4]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[17], input[0], 2D[1]; 1: MOV temp[0].x, temp[17]; 2: TEX temp[18], input[1], 2D[1]; 3: MOV temp[1].x, temp[18]; 4: TEX temp[19], input[2], 2D[1]; 5: MOV temp[2].x, temp[19]; 6: TEX temp[20], input[3], 2D[1]; 7: MOV temp[3].x, temp[20]; 8: MOV temp[0].y, input[0].wwww; 9: MOV temp[1].y, input[1].wwww; 10: MOV temp[2].y, input[2].wwww; 11: MOV temp[3].y, input[3].wwww; 12: TEX temp[21], temp[0], 2D[0]; 13: MOV temp[0].x, temp[21]; 14: TEX temp[22], input[0], 3D[2]; 15: MOV temp[4].x, temp[22]; 16: TEX temp[23], temp[1], 2D[0]; 17: MOV temp[0].y, temp[23]; 18: TEX temp[24], input[1], 3D[2]; 19: MOV temp[4].y, temp[24]; 20: TEX temp[25], temp[2], 2D[0]; 21: MOV temp[0].z, temp[25]; 22: TEX temp[26], input[2], 3D[2]; 23: MOV temp[4].z, temp[26]; 24: TEX temp[27], temp[3], 2D[0]; 25: MOV temp[0].w, temp[27]; 26: TEX temp[28], input[3], 3D[2]; 27: MOV temp[4].w, temp[28]; 28: MUL temp[29], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[29]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[17], input[0], 2D[1]; 1: MOV temp[0].x, temp[17]; 2: TEX temp[18], input[1], 2D[1]; 3: MOV temp[1].x, temp[18]; 4: TEX temp[19], input[2], 2D[1]; 5: MOV temp[2].x, temp[19]; 6: TEX temp[20], input[3], 2D[1]; 7: MOV temp[3].x, temp[20]; 8: MOV temp[0].y, input[0].wwww; 9: MOV temp[1].y, input[1].wwww; 10: MOV temp[2].y, input[2].wwww; 11: MOV temp[3].y, input[3].wwww; 12: TEX temp[21], temp[0], 2D[0]; 13: MOV temp[0].x, temp[21]; 14: TEX temp[22], input[0], 3D[2]; 15: MOV temp[4].x, temp[22]; 16: TEX temp[23], temp[1], 2D[0]; 17: MOV temp[0].y, temp[23]; 18: TEX temp[24], input[1], 3D[2]; 19: MOV temp[4].y, temp[24]; 20: TEX temp[25], temp[2], 2D[0]; 21: MOV temp[0].z, temp[25]; 22: TEX temp[26], input[2], 3D[2]; 23: MOV temp[4].z, temp[26]; 24: TEX temp[27], temp[3], 2D[0]; 25: MOV temp[0].w, temp[27]; 26: TEX temp[28], input[3], 3D[2]; 27: MOV temp[4].w, temp[28]; 28: MUL temp[29], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[29]; CONST[0] = { 16.0000 0.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[17], input[0], 2D[1]; 1: MOV temp[0].x, temp[17]; 2: TEX temp[18], input[1], 2D[1]; 3: MOV temp[1].x, temp[18]; 4: TEX temp[19], input[2], 2D[1]; 5: MOV temp[2].x, temp[19]; 6: TEX temp[20], input[3], 2D[1]; 7: MOV temp[3].x, temp[20]; 8: MOV temp[0].y, input[0].wwww; 9: MOV temp[1].y, input[1].wwww; 10: MOV temp[2].y, input[2].wwww; 11: MOV temp[3].y, input[3].wwww; 12: TEX temp[21], temp[0], 2D[0]; 13: MOV temp[0].x, temp[21]; 14: TEX temp[22], input[0], 3D[2]; 15: MOV temp[4].x, temp[22]; 16: TEX temp[23], temp[1], 2D[0]; 17: MOV temp[0].y, temp[23]; 18: TEX temp[24], input[1], 3D[2]; 19: MOV temp[4].y, temp[24]; 20: TEX temp[25], temp[2], 2D[0]; 21: MOV temp[0].z, temp[25]; 22: TEX temp[26], input[2], 3D[2]; 23: MOV temp[4].z, temp[26]; 24: TEX temp[27], temp[3], 2D[0]; 25: MOV temp[0].w, temp[27]; 26: TEX temp[28], input[3], 3D[2]; 27: MOV temp[4].w, temp[28]; 28: MUL temp[29], temp[4], const[0].xxxx; 29: MUL output[0], temp[0], temp[29]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[17], input[0], 2D[1]; 1: src0.xyz = temp[17] MAD temp[0].x, src0.xyz, src0.111, src0.000 2: TEX temp[18], input[1], 2D[1]; 3: src0.xyz = temp[18] MAD temp[1].x, src0.xyz, src0.111, src0.000 4: TEX temp[19], input[2], 2D[1]; 5: src0.xyz = temp[19] MAD temp[2].x, src0.xyz, src0.111, src0.000 6: TEX temp[20], input[3], 2D[1]; 7: src0.xyz = temp[20] MAD temp[3].x, src0.xyz, src0.111, src0.000 8: src0.w = input[0] MAD temp[0].y, src0.www, src0.111, src0.000 9: src0.w = input[1] MAD temp[1].y, src0.www, src0.111, src0.000 10: src0.w = input[2] MAD temp[2].y, src0.www, src0.111, src0.000 11: src0.w = input[3] MAD temp[3].y, src0.www, src0.111, src0.000 12: TEX temp[21], temp[0], 2D[0]; 13: src0.xyz = temp[21] MAD temp[0].x, src0.xyz, src0.111, src0.000 14: TEX temp[22], input[0], 3D[2]; 15: src0.xyz = temp[22] MAD temp[4].x, src0.xyz, src0.111, src0.000 16: TEX temp[23], temp[1], 2D[0]; 17: src0.xyz = temp[23] MAD temp[0].y, src0.xyz, src0.111, src0.000 18: TEX temp[24], input[1], 3D[2]; 19: src0.xyz = temp[24] MAD temp[4].y, src0.xyz, src0.111, src0.000 20: TEX temp[25], temp[2], 2D[0]; 21: src0.xyz = temp[25] MAD temp[0].z, src0.xyz, src0.111, src0.000 22: TEX temp[26], input[2], 3D[2]; 23: src0.xyz = temp[26] MAD temp[4].z, src0.xyz, src0.111, src0.000 24: TEX temp[27], temp[3], 2D[0]; 25: src0.w = temp[27] MAD temp[0].w, src0.w, src0.1, src0.0 26: TEX temp[28], input[3], 3D[2]; 27: src0.w = temp[28] MAD temp[4].w, src0.w, src0.1, src0.0 28: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = const[0] MAD temp[29].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[29].w, src0.w, src1.x, src0.0 29: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[29], src1.w = temp[29] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[17], input[0], 2D[1]; 2: TEX temp[18], input[1], 2D[1]; 3: TEX temp[19], input[2], 2D[1]; 4: TEX temp[20], input[3], 2D[1]; 5: TEX temp[22], input[0], 3D[2]; 6: TEX temp[24], input[1], 3D[2]; 7: TEX temp[26], input[2], 3D[2]; 8: TEX temp[28], input[3], 3D[2] SEM_WAIT SEM_ACQUIRE; 9: src0.w = input[0], src1.w = temp[28] SEM_WAIT MAD temp[0].y, src0.www, src0.111, src0.000 MAD temp[4].w, src1.w, src0.1, src0.0 10: src0.w = input[1] MAD temp[1].y, src0.www, src0.111, src0.000 11: src0.w = input[2] MAD temp[2].y, src0.www, src0.111, src0.000 12: src0.w = input[3] MAD temp[3].y, src0.www, src0.111, src0.000 13: src0.xyz = temp[17] MAD temp[0].x, src0.xyz, src0.111, src0.000 14: src0.xyz = temp[18] MAD temp[1].x, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[19] MAD temp[2].x, src0.xyz, src0.111, src0.000 16: src0.xyz = temp[20] MAD temp[3].x, src0.xyz, src0.111, src0.000 17: src0.xyz = temp[22] MAD temp[4].x, src0.xyz, src0.111, src0.000 18: src0.xyz = temp[24] MAD temp[4].y, src0.xyz, src0.111, src0.000 19: src0.xyz = temp[26] MAD temp[4].z, src0.xyz, src0.111, src0.000 20: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = const[0] MAD temp[29].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[29].w, src0.w, src1.x, src0.0 21: BEGIN_TEX; 22: TEX temp[21], temp[0], 2D[0]; 23: TEX temp[23], temp[1], 2D[0]; 24: TEX temp[25], temp[2], 2D[0]; 25: TEX temp[27], temp[3], 2D[0] SEM_WAIT SEM_ACQUIRE; 26: src0.xyz = temp[21], src0.w = temp[27] SEM_WAIT MAD temp[0].x, src0.xyz, src0.111, src0.000 MAD temp[0].w, src0.w, src0.1, src0.0 27: src0.xyz = temp[23] MAD temp[0].y, src0.xyz, src0.111, src0.000 28: src0.xyz = temp[25] MAD temp[0].z, src0.xyz, src0.111, src0.000 29: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[29], src1.w = temp[29] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[17], input[0], 2D[1]; 2: TEX temp[18], input[1], 2D[1]; 3: TEX temp[19], input[2], 2D[1]; 4: TEX temp[20], input[3], 2D[1]; 5: TEX temp[22], input[0], 3D[2]; 6: TEX temp[24], input[1], 3D[2]; 7: TEX temp[26], input[2], 3D[2]; 8: TEX temp[28], input[3], 3D[2] SEM_WAIT SEM_ACQUIRE; 9: src0.w = input[0], src1.w = temp[28] SEM_WAIT MAD temp[0].y, src0.www, src0.111, src0.000 MAD temp[4].w, src1.w, src0.1, src0.0 10: src0.w = input[1] MAD temp[1].y, src0.www, src0.111, src0.000 11: src0.w = input[2] MAD temp[2].y, src0.www, src0.111, src0.000 12: src0.w = input[3] MAD temp[3].y, src0.www, src0.111, src0.000 13: src0.xyz = temp[17] MAD temp[0].x, src0.xyz, src0.111, src0.000 14: src0.xyz = temp[18] MAD temp[1].x, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[19] MAD temp[2].x, src0.xyz, src0.111, src0.000 16: src0.xyz = temp[20] MAD temp[3].x, src0.xyz, src0.111, src0.000 17: src0.xyz = temp[22] MAD temp[4].x, src0.xyz, src0.111, src0.000 18: src0.xyz = temp[24] MAD temp[4].y, src0.xyz, src0.111, src0.000 19: src0.xyz = temp[26] MAD temp[4].z, src0.xyz, src0.111, src0.000 20: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = const[0] MAD temp[29].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[29].w, src0.w, src1.x, src0.0 21: BEGIN_TEX; 22: TEX temp[21], temp[0], 2D[0]; 23: TEX temp[23], temp[1], 2D[0]; 24: TEX temp[25], temp[2], 2D[0]; 25: TEX temp[27], temp[3], 2D[0] SEM_WAIT SEM_ACQUIRE; 26: src0.xyz = temp[21], src0.w = temp[27] SEM_WAIT MAD temp[0].x, src0.xyz, src0.111, src0.000 MAD temp[0].w, src0.w, src0.1, src0.0 27: src0.xyz = temp[23] MAD temp[0].y, src0.xyz, src0.111, src0.000 28: src0.xyz = temp[25] MAD temp[0].z, src0.xyz, src0.111, src0.000 29: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[29], src1.w = temp[29] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[21], input[0], 2D[1]; 2: TEX temp[22], input[1], 2D[1]; 3: TEX temp[23], input[2], 2D[1]; 4: TEX temp[24], input[3], 2D[1]; 5: TEX temp[26], input[0], 3D[2]; 6: TEX temp[28], input[1], 3D[2]; 7: TEX temp[30], input[2], 3D[2]; 8: TEX temp[32], input[3], 3D[2] SEM_WAIT SEM_ACQUIRE; 9: src0.w = input[0], src1.w = temp[32] SEM_WAIT MAD temp[4].y, src0.www, src0.111, src0.000 MAD temp[8].w, src1.w, src0.1, src0.0 10: src0.w = input[1] MAD temp[5].y, src0.www, src0.111, src0.000 11: src0.w = input[2] MAD temp[6].y, src0.www, src0.111, src0.000 12: src0.w = input[3] MAD temp[7].y, src0.www, src0.111, src0.000 13: src0.xyz = temp[21] MAD temp[4].x, src0.xyz, src0.111, src0.000 14: src0.xyz = temp[22] MAD temp[5].x, src0.xyz, src0.111, src0.000 15: src0.xyz = temp[23] MAD temp[6].x, src0.xyz, src0.111, src0.000 16: src0.xyz = temp[24] MAD temp[7].x, src0.xyz, src0.111, src0.000 17: src0.xyz = temp[26] MAD temp[8].x, src0.xyz, src0.111, src0.000 18: src0.xyz = temp[28] MAD temp[8].y, src0.xyz, src0.111, src0.000 19: src0.xyz = temp[30] MAD temp[8].z, src0.xyz, src0.111, src0.000 20: src0.xyz = temp[8], src0.w = temp[8], src1.xyz = const[0] MAD temp[33].xyz, src0.xyz, src1.xxx, src0.000 MAD temp[33].w, src0.w, src1.x, src0.0 21: BEGIN_TEX; 22: TEX temp[25], temp[4], 2D[0]; 23: TEX temp[27], temp[5], 2D[0]; 24: TEX temp[29], temp[6], 2D[0]; 25: TEX temp[31], temp[7], 2D[0] SEM_WAIT SEM_ACQUIRE; 26: src0.xyz = temp[25], src0.w = temp[31] SEM_WAIT MAD temp[4].x, src0.xyz, src0.111, src0.000 MAD temp[4].w, src0.w, src0.1, src0.0 27: src0.xyz = temp[27] MAD temp[4].y, src0.xyz, src0.111, src0.000 28: src0.xyz = temp[29] MAD temp[4].z, src0.xyz, src0.111, src0.000 29: src0.xyz = temp[4], src0.w = temp[4], src1.xyz = temp[33], src1.w = temp[33] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 pc=0************************************* Hardware program ---------------- code_offset_ext: 00000000 NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 11, tex_end: 7 (code_addr: 000e02c0) TEX: TEX t21, t0, texture[1] (00008d40) TEX t22, t1, texture[1] (00008d81) TEX t23, t2, texture[1] (00008dc2) TEX t24, t3, texture[1] (00008e03) TEX t26, t0, texture[2] (00009680) TEX t28, t1, texture[2] (00009701) TEX t30, t2, texture[2] (00009782) TEX t0, t3, texture[2] (00109003) 0: xyz: t0 t0 t0 bias-> t4.y (01100000) w: t0 t32 t0 bias-> t8.w (00a00000) xyz: t0.www 1.0 0.0 op: 00050a8c w: t32.w 1.0 0.0 op: 0004088a 1: xyz: t0 t0 t0 bias-> t5.y (01140000) w: t1 t0 t0 bias-> (00000001) xyz: t1.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 2: xyz: t0 t0 t0 bias-> t6.y (01180000) w: t2 t0 t0 bias-> (00000002) xyz: t2.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 3: xyz: t0 t0 t0 bias-> t7.y (011c0000) w: t3 t0 t0 bias-> (00000003) xyz: t3.www 1.0 0.0 op: 00050a8c w: t0.x t0.x t0.x op: 00000000 4: xyz: t21 t0 t0 bias-> t4.x (00900015) w: t0 t0 t0 bias-> (00000000) xyz: t21.xyz 1.0 0.0 op: 00050a80 w: t21.x t21.x t21.x op: 00000000 5: xyz: t22 t0 t0 bias-> t5.x (00940016) w: t0 t0 t0 bias-> (00000000) xyz: t22.xyz 1.0 0.0 op: 00050a80 w: t22.x t22.x t22.x op: 00000000 6: xyz: t23 t0 t0 bias-> t6.x (00980017) w: t0 t0 t0 bias-> (00000000) xyz: t23.xyz 1.0 0.0 op: 00050a80 w: t23.x t23.x t23.x op: 00000000 7: xyz: t24 t0 t0 bias-> t7.x (009c0018) w: t0 t0 t0 bias-> (00000000) xyz: t24.xyz 1.0 0.0 op: 00050a80 w: t24.x t24.x t24.x op: 00000000 8: xyz: t26 t0 t0 bias-> t8.x (00a0001a) w: t0 t0 t0 bias-> (00000000) xyz: t26.xyz 1.0 0.0 op: 00050a80 w: t26.x t26.x t26.x op: 00000000 9: xyz: t28 t0 t0 bias-> t8.y (0120001c) w: t0 t0 t0 bias-> (00000000) xyz: t28.xyz 1.0 0.0 op: 00050a80 w: t28.x t28.x t28.x op: 00000000 10: xyz: t30 t0 t0 bias-> t8.z (0220001e) w: t0 t0 t0 bias-> (00000000) xyz: t30.xyz 1.0 0.0 op: 00050a80 w: t30.x t30.x t30.x op: 00000000 11: xyz: t8 c0 t0 bias-> t33.xyz (03840808) w: t8 t0 t0 bias-> t33.w (00840008) xyz: t8.xyz c0.xxx 0.0 op: 00050280 w: t8.w c0.x 0.0 op: 00040189 NODE 1: alu_offset: 12, tex_offset: 8, alu_end: 3, tex_end: 3 (code_addr: 004680cc) TEX: TEX t25, t4, texture[0] (00008644) TEX t27, t5, texture[0] (000086c5) TEX t29, t6, texture[0] (00008746) TEX t31, t7, texture[0] (000087c7) 12: xyz: t25 t0 t0 bias-> t4.x (00900019) w: t31 t0 t0 bias-> t4.w (0090001f) xyz: t25.xyz 1.0 0.0 op: 00050a80 w: t31.w 1.0 0.0 op: 00040889 13: xyz: t27 t0 t0 bias-> t4.y (0110001b) w: t0 t0 t0 bias-> (00000000) xyz: t27.xyz 1.0 0.0 op: 00050a80 w: t27.x t27.x t27.x op: 00000000 14: xyz: t29 t0 t0 bias-> t4.z (0210001d) w: t0 t0 t0 bias-> (00000000) xyz: t29.xyz 1.0 0.0 op: 00050a80 w: t29.x t29.x t29.x op: 00000000 15: xyz: t4 t33 t0 bias-> o0.xyz (1c000044) w: t4 t33 t0 bias-> o0.w (01000044) xyz: t4.xyz t33.xyz 0.0 op: 00050200 w: t4.w t33.w 0.0 op: 00040509 ~~~~~~~~ FRAGMENT PROGRAM ~~~~~~~ ~ 28 Instructions ~ 16 Vector Instructions (RGB) ~ 4 Scalar Instructions (Alpha) ~ 0 Flow Control Instructions ~ 12 Texture Instructions ~ 0 Presub Operations ~ 0 OMOD Operations ~ 34 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Rasterized generic 1 written to FS in texcoord 0. r300: Rasterized generic 2 written to FS in texcoord 1. r300: Rasterized generic 3 written to FS in texcoord 2. r300: Rasterized generic 4 written to FS in texcoord 3. r300: --- Rasterizer status ---: colors: 0, generics: 4. r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 16 texcoords (linear), 0 colors (perspective) 4 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : ip 2: 0x00d10008 : ip 3: 0x00d1000c : inst 0: 0x00000008 : inst 1: 0x00000049 : inst 2: 0x0000008a : inst 3: 0x000000cb : count: 0x00040010 inst_count: 0x00000003 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 16 texcoords (linear), 0 colors (perspective) 4 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : ip 2: 0x00d10008 : ip 3: 0x00d1000c : inst 0: 0x00000008 : inst 1: 0x00000049 : inst 2: 0x0000008a : inst 3: 0x000000cb : count: 0x00040010 inst_count: 0x00000003 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 16 texcoords (linear), 0 colors (perspective) 4 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : ip 2: 0x00d10008 : ip 3: 0x00d1000c : inst 0: 0x00000008 : inst 1: 0x00000049 : inst 2: 0x0000008a : inst 3: 0x000000cb : count: 0x00040010 inst_count: 0x00000003 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 16 texcoords (linear), 0 colors (perspective) 4 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : ip 2: 0x00d10008 : ip 3: 0x00d1000c : inst 0: 0x00000008 : inst 1: 0x00000049 : inst 2: 0x0000008a : inst 3: 0x000000cb : count: 0x00040010 inst_count: 0x00000003 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 16 texcoords (linear), 0 colors (perspective) 4 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : ip 2: 0x00d10008 : ip 3: 0x00d1000c : inst 0: 0x00000008 : inst 1: 0x00000049 : inst 2: 0x0000008a : inst 3: 0x000000cb : count: 0x00040010 inst_count: 0x00000003 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 16 texcoords (linear), 0 colors (perspective) 4 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : ip 2: 0x00d10008 : ip 3: 0x00d1000c : inst 0: 0x00000008 : inst 1: 0x00000049 : inst 2: 0x0000008a : inst 3: 0x000000cb : count: 0x00040010 inst_count: 0x00000003 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 16 texcoords (linear), 0 colors (perspective) 4 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : ip 2: 0x00d10008 : ip 3: 0x00d1000c : inst 0: 0x00000008 : inst 1: 0x00000049 : inst 2: 0x0000008a : inst 3: 0x000000cb : count: 0x00040010 inst_count: 0x00000003 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 16 texcoords (linear), 0 colors (perspective) 4 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : ip 2: 0x00d10008 : ip 3: 0x00d1000c : inst 0: 0x00000008 : inst 1: 0x00000049 : inst 2: 0x0000008a : inst 3: 0x000000cb : count: 0x00040010 inst_count: 0x00000003 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 16 texcoords (linear), 0 colors (perspective) 4 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : ip 2: 0x00d10008 : ip 3: 0x00d1000c : inst 0: 0x00000008 : inst 1: 0x00000049 : inst 2: 0x0000008a : inst 3: 0x000000cb : count: 0x00040010 inst_count: 0x00000003 r300: set_framebuffer_state: r300: CB[0] Dim: 256x1024, Firstlayer: 0, Lastlayer: 0, Level: 0, Format: r16g16b16a16_snorm r300: TEX: Macro: NO, Micro: NO, Dim: 256x1024x1, LastLevel: 0, Format: r16g16b16a16_snorm r300: Initial fragment program FRAG DCL IN[0], GENERIC[1], LINEAR DCL IN[1], GENERIC[2], LINEAR DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0..15] IMM FLT32 { 0.0000, 0.0010, 0.0020, 0.0029} IMM FLT32 { 0.0039, 0.0049, 0.0059, 0.0068} IMM FLT32 {16384.0000, 0.5000, -0.0000, 0.0000} 0: MOV TEMP[0].x, IN[0] 1: ADD TEMP[0].y, IN[0], IMM[0].xxxx 2: MOV TEMP[1].x, IN[1] 3: ADD TEMP[1].y, IN[1], IMM[0].xxxx 4: MOV TEMP[2].x, IN[0] 5: ADD TEMP[2].y, IN[0], IMM[0].yyyy 6: MOV TEMP[3].x, IN[1] 7: ADD TEMP[3].y, IN[1], IMM[0].yyyy 8: MOV TEMP[4].x, IN[0] 9: ADD TEMP[4].y, IN[0], IMM[0].zzzz 10: MOV TEMP[5].x, IN[1] 11: ADD TEMP[5].y, IN[1], IMM[0].zzzz 12: MOV TEMP[6].x, IN[0] 13: ADD TEMP[6].y, IN[0], IMM[0].wwww 14: MOV TEMP[7].x, IN[1] 15: ADD TEMP[7].y, IN[1], IMM[0].wwww 16: MOV TEMP[8].x, IN[0] 17: ADD TEMP[8].y, IN[0], IMM[1].xxxx 18: MOV TEMP[9].x, IN[1] 19: ADD TEMP[9].y, IN[1], IMM[1].xxxx 20: MOV TEMP[10].x, IN[0] 21: ADD TEMP[10].y, IN[0], IMM[1].yyyy 22: MOV TEMP[11].x, IN[1] 23: ADD TEMP[11].y, IN[1], IMM[1].yyyy 24: MOV TEMP[12].x, IN[0] 25: ADD TEMP[12].y, IN[0], IMM[1].zzzz 26: MOV TEMP[13].x, IN[1] 27: ADD TEMP[13].y, IN[1], IMM[1].zzzz 28: MOV TEMP[14].x, IN[0] 29: ADD TEMP[14].y, IN[0], IMM[1].wwww 30: MOV TEMP[15].x, IN[1] 31: ADD TEMP[15].y, IN[1], IMM[1].wwww 32: TEX TEMP[0], TEMP[0], SAMP[0], 2D 33: TEX TEMP[1], TEMP[1], SAMP[0], 2D 34: TEX TEMP[2], TEMP[2], SAMP[0], 2D 35: TEX TEMP[3], TEMP[3], SAMP[0], 2D 36: TEX TEMP[4], TEMP[4], SAMP[0], 2D 37: TEX TEMP[5], TEMP[5], SAMP[0], 2D 38: TEX TEMP[6], TEMP[6], SAMP[0], 2D 39: TEX TEMP[7], TEMP[7], SAMP[0], 2D 40: TEX TEMP[8], TEMP[8], SAMP[0], 2D 41: TEX TEMP[9], TEMP[9], SAMP[0], 2D 42: TEX TEMP[10], TEMP[10], SAMP[0], 2D 43: TEX TEMP[11], TEMP[11], SAMP[0], 2D 44: TEX TEMP[12], TEMP[12], SAMP[0], 2D 45: TEX TEMP[13], TEMP[13], SAMP[0], 2D 46: TEX TEMP[14], TEMP[14], SAMP[0], 2D 47: TEX TEMP[15], TEMP[15], SAMP[0], 2D 48: ADD TEMP[0], TEMP[0], TEMP[2] 49: ADD TEMP[1], TEMP[1], TEMP[3] 50: ADD TEMP[0], TEMP[0], TEMP[4] 51: ADD TEMP[1], TEMP[1], TEMP[5] 52: ADD TEMP[0], TEMP[0], TEMP[6] 53: ADD TEMP[1], TEMP[1], TEMP[7] 54: ADD TEMP[0], TEMP[0], TEMP[8] 55: ADD TEMP[1], TEMP[1], TEMP[9] 56: ADD TEMP[0], TEMP[0], TEMP[10] 57: ADD TEMP[1], TEMP[1], TEMP[11] 58: ADD TEMP[0], TEMP[0], TEMP[12] 59: ADD TEMP[1], TEMP[1], TEMP[13] 60: ADD TEMP[0], TEMP[0], TEMP[14] 61: ADD TEMP[1], TEMP[1], TEMP[15] 62: ADD TEMP[0], TEMP[0], TEMP[1] 63: DP4 TEMP[0], |TEMP[0]|, IMM[2].xxxx 64: MUL TEMP[0].w, |TEMP[15]|, IMM[2].xxxx 65: FRC TEMP[0], TEMP[0] 66: SGT TEMP[0], IMM[2].yyyy, |TEMP[0]| 67: CMP TEMP[0].w, -TEMP[0], IMM[2].wwww, IMM[2].zzzz 68: MUL TEMP[0].w, TEMP[0], TEMP[0].xxxx 69: MOV OUT[0].xyz, TEMP[15] 70: ADD OUT[0].w, TEMP[0], TEMP[15] 71: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: SGT temp[0], const[2].yyyy, |temp[0]|; 67: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 68: MUL temp[0].w, temp[0], temp[0].xxxx; 69: MOV output[0].xyz, temp[15]; 70: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: ADD temp[16], -const[2].yyyy, |temp[0]|; 67: CMP temp[0], temp[16], none.1111, none.0000; 68: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 69: MUL temp[0].w, temp[0], temp[0].xxxx; 70: MOV output[0].xyz, temp[15]; 71: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[0], temp[0], 2D[0]; 33: TEX temp[1], temp[1], 2D[0]; 34: TEX temp[2], temp[2], 2D[0]; 35: TEX temp[3], temp[3], 2D[0]; 36: TEX temp[4], temp[4], 2D[0]; 37: TEX temp[5], temp[5], 2D[0]; 38: TEX temp[6], temp[6], 2D[0]; 39: TEX temp[7], temp[7], 2D[0]; 40: TEX temp[8], temp[8], 2D[0]; 41: TEX temp[9], temp[9], 2D[0]; 42: TEX temp[10], temp[10], 2D[0]; 43: TEX temp[11], temp[11], 2D[0]; 44: TEX temp[12], temp[12], 2D[0]; 45: TEX temp[13], temp[13], 2D[0]; 46: TEX temp[14], temp[14], 2D[0]; 47: TEX temp[15], temp[15], 2D[0]; 48: ADD temp[0], temp[0], temp[2]; 49: ADD temp[1], temp[1], temp[3]; 50: ADD temp[0], temp[0], temp[4]; 51: ADD temp[1], temp[1], temp[5]; 52: ADD temp[0], temp[0], temp[6]; 53: ADD temp[1], temp[1], temp[7]; 54: ADD temp[0], temp[0], temp[8]; 55: ADD temp[1], temp[1], temp[9]; 56: ADD temp[0], temp[0], temp[10]; 57: ADD temp[1], temp[1], temp[11]; 58: ADD temp[0], temp[0], temp[12]; 59: ADD temp[1], temp[1], temp[13]; 60: ADD temp[0], temp[0], temp[14]; 61: ADD temp[1], temp[1], temp[15]; 62: ADD temp[0], temp[0], temp[1]; 63: DP4 temp[0], |temp[0]|, const[2].xxxx; 64: MUL temp[0].w, |temp[15]|, const[2].xxxx; 65: FRC temp[0], temp[0]; 66: ADD temp[16], -const[2].yyyy, |temp[0]|; 67: CMP temp[0], temp[16], none.1111, none.0000; 68: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 69: MUL temp[0].w, temp[0], temp[0].xxxx; 70: MOV output[0].xyz, temp[15]; 71: ADD output[0].w, temp[0], temp[15]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[17], temp[0], 2D[0]; 33: TEX temp[18], temp[1], 2D[0]; 34: TEX temp[19], temp[2], 2D[0]; 35: TEX temp[20], temp[3], 2D[0]; 36: TEX temp[21], temp[4], 2D[0]; 37: TEX temp[22], temp[5], 2D[0]; 38: TEX temp[23], temp[6], 2D[0]; 39: TEX temp[24], temp[7], 2D[0]; 40: TEX temp[25], temp[8], 2D[0]; 41: TEX temp[26], temp[9], 2D[0]; 42: TEX temp[27], temp[10], 2D[0]; 43: TEX temp[28], temp[11], 2D[0]; 44: TEX temp[29], temp[12], 2D[0]; 45: TEX temp[30], temp[13], 2D[0]; 46: TEX temp[31], temp[14], 2D[0]; 47: TEX temp[32], temp[15], 2D[0]; 48: ADD temp[33], temp[17], temp[19]; 49: ADD temp[34], temp[18], temp[20]; 50: ADD temp[35], temp[33], temp[21]; 51: ADD temp[36], temp[34], temp[22]; 52: ADD temp[37], temp[35], temp[23]; 53: ADD temp[38], temp[36], temp[24]; 54: ADD temp[39], temp[37], temp[25]; 55: ADD temp[40], temp[38], temp[26]; 56: ADD temp[41], temp[39], temp[27]; 57: ADD temp[42], temp[40], temp[28]; 58: ADD temp[43], temp[41], temp[29]; 59: ADD temp[44], temp[42], temp[30]; 60: ADD temp[45], temp[43], temp[31]; 61: ADD temp[46], temp[44], temp[32]; 62: ADD temp[47], temp[45], temp[46]; 63: DP4 temp[0], |temp[47]|, const[2].xxxx; 64: MUL temp[0].w, |temp[32]|, const[2].xxxx; 65: FRC temp[48], temp[0]; 66: ADD temp[49], -const[2].yyyy, |temp[48]|; 67: CMP temp[0], temp[49], none.1111, none.0000; 68: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 69: MUL temp[0].w, temp[0], temp[0].xxxx; 70: MOV output[0].xyz, temp[32]; 71: ADD output[0].w, temp[0], temp[32]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[17], temp[0], 2D[0]; 33: TEX temp[18], temp[1], 2D[0]; 34: TEX temp[19], temp[2], 2D[0]; 35: TEX temp[20], temp[3], 2D[0]; 36: TEX temp[21], temp[4], 2D[0]; 37: TEX temp[22], temp[5], 2D[0]; 38: TEX temp[23], temp[6], 2D[0]; 39: TEX temp[24], temp[7], 2D[0]; 40: TEX temp[25], temp[8], 2D[0]; 41: TEX temp[26], temp[9], 2D[0]; 42: TEX temp[27], temp[10], 2D[0]; 43: TEX temp[28], temp[11], 2D[0]; 44: TEX temp[29], temp[12], 2D[0]; 45: TEX temp[30], temp[13], 2D[0]; 46: TEX temp[31], temp[14], 2D[0]; 47: TEX temp[32], temp[15], 2D[0]; 48: ADD temp[33], temp[17], temp[19]; 49: ADD temp[34], temp[18], temp[20]; 50: ADD temp[35], temp[33], temp[21]; 51: ADD temp[36], temp[34], temp[22]; 52: ADD temp[37], temp[35], temp[23]; 53: ADD temp[38], temp[36], temp[24]; 54: ADD temp[39], temp[37], temp[25]; 55: ADD temp[40], temp[38], temp[26]; 56: ADD temp[41], temp[39], temp[27]; 57: ADD temp[42], temp[40], temp[28]; 58: ADD temp[43], temp[41], temp[29]; 59: ADD temp[44], temp[42], temp[30]; 60: ADD temp[45], temp[43], temp[31]; 61: ADD temp[46], temp[44], temp[32]; 62: ADD temp[47], temp[45], temp[46]; 63: DP4 temp[0], |temp[47]|, const[2].xxxx; 64: MUL temp[0].w, |temp[32]|, const[2].xxxx; 65: FRC temp[48], temp[0]; 66: ADD temp[49], -const[2].yyyy, |temp[48]|; 67: CMP temp[0], temp[49], none.1111, none.0000; 68: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 69: MUL temp[0].w, temp[0], temp[0].xxxx; 70: MOV output[0].xyz, temp[32]; 71: ADD output[0].w, temp[0], temp[32]; CONST[0] = { 0.0000 0.0010 0.0020 0.0029 } CONST[1] = { 0.0039 0.0049 0.0059 0.0068 } CONST[2] = { 16384.0000 0.5000 -0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: MOV temp[8].x, input[0]; 17: ADD temp[8].y, input[0], const[1].xxxx; 18: MOV temp[9].x, input[1]; 19: ADD temp[9].y, input[1], const[1].xxxx; 20: MOV temp[10].x, input[0]; 21: ADD temp[10].y, input[0], const[1].yyyy; 22: MOV temp[11].x, input[1]; 23: ADD temp[11].y, input[1], const[1].yyyy; 24: MOV temp[12].x, input[0]; 25: ADD temp[12].y, input[0], const[1].zzzz; 26: MOV temp[13].x, input[1]; 27: ADD temp[13].y, input[1], const[1].zzzz; 28: MOV temp[14].x, input[0]; 29: ADD temp[14].y, input[0], const[1].wwww; 30: MOV temp[15].x, input[1]; 31: ADD temp[15].y, input[1], const[1].wwww; 32: TEX temp[17], temp[0], 2D[0]; 33: TEX temp[18], temp[1], 2D[0]; 34: TEX temp[19], temp[2], 2D[0]; 35: TEX temp[20], temp[3], 2D[0]; 36: TEX temp[21], temp[4], 2D[0]; 37: TEX temp[22], temp[5], 2D[0]; 38: TEX temp[23], temp[6], 2D[0]; 39: TEX temp[24], temp[7], 2D[0]; 40: TEX temp[25], temp[8], 2D[0]; 41: TEX temp[26], temp[9], 2D[0]; 42: TEX temp[27], temp[10], 2D[0]; 43: TEX temp[28], temp[11], 2D[0]; 44: TEX temp[29], temp[12], 2D[0]; 45: TEX temp[30], temp[13], 2D[0]; 46: TEX temp[31], temp[14], 2D[0]; 47: TEX temp[32], temp[15], 2D[0]; 48: ADD temp[33], temp[17], temp[19]; 49: ADD temp[34], temp[18], temp[20]; 50: ADD temp[35], temp[33], temp[21]; 51: ADD temp[36], temp[34], temp[22]; 52: ADD temp[37], temp[35], temp[23]; 53: ADD temp[38], temp[36], temp[24]; 54: ADD temp[39], temp[37], temp[25]; 55: ADD temp[40], temp[38], temp[26]; 56: ADD temp[41], temp[39], temp[27]; 57: ADD temp[42], temp[40], temp[28]; 58: ADD temp[43], temp[41], temp[29]; 59: ADD temp[44], temp[42], temp[30]; 60: ADD temp[45], temp[43], temp[31]; 61: ADD temp[46], temp[44], temp[32]; 62: ADD temp[47], temp[45], temp[46]; 63: DP4 temp[0], |temp[47]|, const[2].xxxx; 64: MUL temp[0].w, |temp[32]|, const[2].xxxx; 65: FRC temp[48], temp[0]; 66: ADD temp[49], -const[2].yyyy, |temp[48]|; 67: CMP temp[0], temp[49], none.1111, none.0000; 68: CMP temp[0].w, -temp[0], const[2].wwww, const[2].zzzz; 69: MUL temp[0].w, temp[0], temp[0].xxxx; 70: MOV output[0].xyz, temp[32]; 71: ADD output[0].w, temp[0], temp[32]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[0].x, src0.xyz, src0.111, src0.000 1: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].y, src0.xyz, src0.111, src1.xxx 2: src0.xyz = input[1] MAD temp[1].x, src0.xyz, src0.111, src0.000 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].y, src0.xyz, src0.111, src1.xxx 4: src0.xyz = input[0] MAD temp[2].x, src0.xyz, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0.xyz, src0.111, src1.yyy 6: src0.xyz = input[1] MAD temp[3].x, src0.xyz, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0.xyz, src0.111, src1.yyy 8: src0.xyz = input[0] MAD temp[4].x, src0.xyz, src0.111, src0.000 9: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0.xyz, src0.111, src1.zzz 10: src0.xyz = input[1] MAD temp[5].x, src0.xyz, src0.111, src0.000 11: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0.xyz, src0.111, src1.zzz 12: src0.xyz = input[0] MAD temp[6].x, src0.xyz, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0.xyz, src0.111, src0.www 14: src0.xyz = input[1] MAD temp[7].x, src0.xyz, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0.xyz, src0.111, src0.www 16: src0.xyz = input[0] MAD temp[8].x, src0.xyz, src0.111, src0.000 17: src0.xyz = input[0], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.xxx 18: src0.xyz = input[1] MAD temp[9].x, src0.xyz, src0.111, src0.000 19: src0.xyz = input[1], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.xxx 20: src0.xyz = input[0] MAD temp[10].x, src0.xyz, src0.111, src0.000 21: src0.xyz = input[0], src1.xyz = const[1] MAD temp[10].y, src0.xyz, src0.111, src1.yyy 22: src0.xyz = input[1] MAD temp[11].x, src0.xyz, src0.111, src0.000 23: src0.xyz = input[1], src1.xyz = const[1] MAD temp[11].y, src0.xyz, src0.111, src1.yyy 24: src0.xyz = input[0] MAD temp[12].x, src0.xyz, src0.111, src0.000 25: src0.xyz = input[0], src1.xyz = const[1] MAD temp[12].y, src0.xyz, src0.111, src1.zzz 26: src0.xyz = input[1] MAD temp[13].x, src0.xyz, src0.111, src0.000 27: src0.xyz = input[1], src1.xyz = const[1] MAD temp[13].y, src0.xyz, src0.111, src1.zzz 28: src0.xyz = input[0] MAD temp[14].x, src0.xyz, src0.111, src0.000 29: src0.xyz = input[0], src0.w = const[1] MAD temp[14].y, src0.xyz, src0.111, src0.www 30: src0.xyz = input[1] MAD temp[15].x, src0.xyz, src0.111, src0.000 31: src0.xyz = input[1], src0.w = const[1] MAD temp[15].y, src0.xyz, src0.111, src0.www 32: TEX temp[17], temp[0], 2D[0]; 33: TEX temp[18], temp[1], 2D[0]; 34: TEX temp[19], temp[2], 2D[0]; 35: TEX temp[20], temp[3], 2D[0]; 36: TEX temp[21], temp[4], 2D[0]; 37: TEX temp[22], temp[5], 2D[0]; 38: TEX temp[23], temp[6], 2D[0]; 39: TEX temp[24], temp[7], 2D[0]; 40: TEX temp[25], temp[8], 2D[0]; 41: TEX temp[26], temp[9], 2D[0]; 42: TEX temp[27], temp[10], 2D[0]; 43: TEX temp[28], temp[11], 2D[0]; 44: TEX temp[29], temp[12], 2D[0]; 45: TEX temp[30], temp[13], 2D[0]; 46: TEX temp[31], temp[14], 2D[0]; 47: TEX temp[32], temp[15], 2D[0]; 48: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[19], src1.w = temp[19] MAD temp[33].xyz, src0.xyz, src0.111, src1.xyz MAD temp[33].w, src0.w, src0.1, src1.w 49: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[20], src1.w = temp[20] MAD temp[34].xyz, src0.xyz, src0.111, src1.xyz MAD temp[34].w, src0.w, src0.1, src1.w 50: src0.xyz = temp[33], src0.w = temp[33], src1.xyz = temp[21], src1.w = temp[21] MAD temp[35].xyz, src0.xyz, src0.111, src1.xyz MAD temp[35].w, src0.w, src0.1, src1.w 51: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[22], src1.w = temp[22] MAD temp[36].xyz, src0.xyz, src0.111, src1.xyz MAD temp[36].w, src0.w, src0.1, src1.w 52: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[23], src1.w = temp[23] MAD temp[37].xyz, src0.xyz, src0.111, src1.xyz MAD temp[37].w, src0.w, src0.1, src1.w 53: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[24], src1.w = temp[24] MAD temp[38].xyz, src0.xyz, src0.111, src1.xyz MAD temp[38].w, src0.w, src0.1, src1.w 54: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[25], src1.w = temp[25] MAD temp[39].xyz, src0.xyz, src0.111, src1.xyz MAD temp[39].w, src0.w, src0.1, src1.w 55: src0.xyz = temp[38], src0.w = temp[38], src1.xyz = temp[26], src1.w = temp[26] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz MAD temp[40].w, src0.w, src0.1, src1.w 56: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[27], src1.w = temp[27] MAD temp[41].xyz, src0.xyz, src0.111, src1.xyz MAD temp[41].w, src0.w, src0.1, src1.w 57: src0.xyz = temp[40], src0.w = temp[40], src1.xyz = temp[28], src1.w = temp[28] MAD temp[42].xyz, src0.xyz, src0.111, src1.xyz MAD temp[42].w, src0.w, src0.1, src1.w 58: src0.xyz = temp[41], src0.w = temp[41], src1.xyz = temp[29], src1.w = temp[29] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz MAD temp[43].w, src0.w, src0.1, src1.w 59: src0.xyz = temp[42], src0.w = temp[42], src1.xyz = temp[30], src1.w = temp[30] MAD temp[44].xyz, src0.xyz, src0.111, src1.xyz MAD temp[44].w, src0.w, src0.1, src1.w 60: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = temp[31], src1.w = temp[31] MAD temp[45].xyz, src0.xyz, src0.111, src1.xyz MAD temp[45].w, src0.w, src0.1, src1.w 61: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[32], src1.w = temp[32] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz MAD temp[46].w, src0.w, src0.1, src1.w 62: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[46], src1.w = temp[46] MAD temp[47].xyz, src0.xyz, src0.111, src1.xyz MAD temp[47].w, src0.w, src0.1, src1.w 63: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = const[2] DP4 temp[0].xyz, |src0.xyz|, src1.xxx DP4 temp[0].w, |src0.w|, src1.x 64: src0.xyz = const[2], src0.w = temp[32] MAD temp[0].w, |src0.w|, src0.x, src0.0 65: src0.xyz = temp[0], src0.w = temp[0] FRC temp[48].xyz, src0.xyz FRC temp[48].w, src0.w 66: src0.xyz = const[2], src0.w = temp[48], src1.xyz = temp[48] MAD temp[49].xyz, -src0.yyy, |src0.111|, |src1.xyz| MAD temp[49].w, -src0.y, |src0.1|, |src0.w| 67: src0.xyz = temp[49], src0.w = temp[49] CMP temp[0].xyz, src0.000, src0.111, src0.xyz CMP temp[0].w, src0.0, src0.1, src0.w 68: src0.xyz = const[2], src0.w = const[2], src1.w = temp[0] CMP temp[0].w, src0.z, src0.w, -src1.w 69: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 70: src0.xyz = temp[32] MAD color[0].xyz, src0.xyz, src0.111, src0.000 71: src0.w = temp[0], src1.w = temp[32] MAD color[0].w, src0.w, src0.1, src1.w Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[0].x, src0.xyz, src0.111, src0.000 1: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].y, src0.xyz, src0.111, src1.xxx 2: src0.xyz = input[1] MAD temp[1].x, src0.xyz, src0.111, src0.000 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].y, src0.xyz, src0.111, src1.xxx 4: src0.xyz = input[0] MAD temp[2].x, src0.xyz, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0.xyz, src0.111, src1.yyy 6: src0.xyz = input[1] MAD temp[3].x, src0.xyz, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0.xyz, src0.111, src1.yyy 8: src0.xyz = input[0] MAD temp[4].x, src0.xyz, src0.111, src0.000 9: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0.xyz, src0.111, src1.zzz 10: src0.xyz = input[1] MAD temp[5].x, src0.xyz, src0.111, src0.000 11: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0.xyz, src0.111, src1.zzz 12: src0.xyz = input[0] MAD temp[6].x, src0.xyz, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0.xyz, src0.111, src0.www 14: src0.xyz = input[1] MAD temp[7].x, src0.xyz, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0.xyz, src0.111, src0.www 16: src0.xyz = input[0] MAD temp[8].x, src0.xyz, src0.111, src0.000 17: src0.xyz = input[0], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.xxx 18: src0.xyz = input[1] MAD temp[9].x, src0.xyz, src0.111, src0.000 19: src0.xyz = input[1], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.xxx 20: src0.xyz = input[0] MAD temp[10].x, src0.xyz, src0.111, src0.000 21: src0.xyz = input[0], src1.xyz = const[1] MAD temp[10].y, src0.xyz, src0.111, src1.yyy 22: src0.xyz = input[1] MAD temp[11].x, src0.xyz, src0.111, src0.000 23: src0.xyz = input[1], src1.xyz = const[1] MAD temp[11].y, src0.xyz, src0.111, src1.yyy 24: src0.xyz = input[0] MAD temp[12].x, src0.xyz, src0.111, src0.000 25: src0.xyz = input[0], src1.xyz = const[1] MAD temp[12].y, src0.xyz, src0.111, src1.zzz 26: src0.xyz = input[1] MAD temp[13].x, src0.xyz, src0.111, src0.000 27: src0.xyz = input[1], src1.xyz = const[1] MAD temp[13].y, src0.xyz, src0.111, src1.zzz 28: src0.xyz = input[0] MAD temp[14].x, src0.xyz, src0.111, src0.000 29: src0.xyz = input[0], src0.w = const[1] MAD temp[14].y, src0.xyz, src0.111, src0.www 30: src0.xyz = input[1] MAD temp[15].x, src0.xyz, src0.111, src0.000 31: src0.xyz = input[1], src0.w = const[1] MAD temp[15].y, src0.xyz, src0.111, src0.www 32: BEGIN_TEX; 33: TEX temp[17], temp[0], 2D[0]; 34: TEX temp[18], temp[1], 2D[0]; 35: TEX temp[19], temp[2], 2D[0]; 36: TEX temp[20], temp[3], 2D[0]; 37: TEX temp[21], temp[4], 2D[0]; 38: TEX temp[22], temp[5], 2D[0]; 39: TEX temp[23], temp[6], 2D[0]; 40: TEX temp[24], temp[7], 2D[0]; 41: TEX temp[25], temp[8], 2D[0]; 42: TEX temp[26], temp[9], 2D[0]; 43: TEX temp[27], temp[10], 2D[0]; 44: TEX temp[28], temp[11], 2D[0]; 45: TEX temp[29], temp[12], 2D[0]; 46: TEX temp[30], temp[13], 2D[0]; 47: TEX temp[31], temp[14], 2D[0]; 48: TEX temp[32], temp[15], 2D[0] SEM_WAIT SEM_ACQUIRE; 49: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[19], src1.w = temp[19] SEM_WAIT MAD temp[33].xyz, src0.xyz, src0.111, src1.xyz MAD temp[33].w, src0.w, src0.1, src1.w 50: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[20], src1.w = temp[20] MAD temp[34].xyz, src0.xyz, src0.111, src1.xyz MAD temp[34].w, src0.w, src0.1, src1.w 51: src0.xyz = temp[33], src0.w = temp[33], src1.xyz = temp[21], src1.w = temp[21] MAD temp[35].xyz, src0.xyz, src0.111, src1.xyz MAD temp[35].w, src0.w, src0.1, src1.w 52: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[22], src1.w = temp[22] MAD temp[36].xyz, src0.xyz, src0.111, src1.xyz MAD temp[36].w, src0.w, src0.1, src1.w 53: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[23], src1.w = temp[23] MAD temp[37].xyz, src0.xyz, src0.111, src1.xyz MAD temp[37].w, src0.w, src0.1, src1.w 54: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[24], src1.w = temp[24] MAD temp[38].xyz, src0.xyz, src0.111, src1.xyz MAD temp[38].w, src0.w, src0.1, src1.w 55: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[25], src1.w = temp[25] MAD temp[39].xyz, src0.xyz, src0.111, src1.xyz MAD temp[39].w, src0.w, src0.1, src1.w 56: src0.xyz = temp[38], src0.w = temp[38], src1.xyz = temp[26], src1.w = temp[26] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz MAD temp[40].w, src0.w, src0.1, src1.w 57: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[27], src1.w = temp[27] MAD temp[41].xyz, src0.xyz, src0.111, src1.xyz MAD temp[41].w, src0.w, src0.1, src1.w 58: src0.xyz = temp[40], src0.w = temp[40], src1.xyz = temp[28], src1.w = temp[28] MAD temp[42].xyz, src0.xyz, src0.111, src1.xyz MAD temp[42].w, src0.w, src0.1, src1.w 59: src0.xyz = temp[41], src0.w = temp[41], src1.xyz = temp[29], src1.w = temp[29] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz MAD temp[43].w, src0.w, src0.1, src1.w 60: src0.xyz = temp[42], src0.w = temp[42], src1.xyz = temp[30], src1.w = temp[30] MAD temp[44].xyz, src0.xyz, src0.111, src1.xyz MAD temp[44].w, src0.w, src0.1, src1.w 61: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = temp[31], src1.w = temp[31] MAD temp[45].xyz, src0.xyz, src0.111, src1.xyz MAD temp[45].w, src0.w, src0.1, src1.w 62: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[32], src1.w = temp[32] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz MAD temp[46].w, src0.w, src0.1, src1.w 63: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[46], src1.w = temp[46] MAD temp[47].xyz, src0.xyz, src0.111, src1.xyz MAD temp[47].w, src0.w, src0.1, src1.w 64: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = const[2] DP4 temp[0].xyz, |src0.xyz|, src1.xxx DP4 temp[0].w, |src0.w|, src1.x 65: src0.xyz = const[2], src0.w = temp[32] MAD temp[0].w, |src0.w|, src0.x, src0.0 66: src0.xyz = temp[0], src0.w = temp[0] FRC temp[48].xyz, src0.xyz FRC temp[48].w, src0.w 67: src0.xyz = const[2], src0.w = temp[48], src1.xyz = temp[48] MAD temp[49].xyz, -src0.yyy, |src0.111|, |src1.xyz| MAD temp[49].w, -src0.y, |src0.1|, |src0.w| 68: src0.xyz = temp[49], src0.w = temp[49] CMP temp[0].xyz, src0.000, src0.111, src0.xyz CMP temp[0].w, src0.0, src0.1, src0.w 69: src0.xyz = const[2], src0.w = const[2], src1.w = temp[0] CMP temp[0].w, src0.z, src0.w, -src1.w 70: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 71: src0.xyz = temp[32], src0.w = temp[0], src1.w = temp[32] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src1.w Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[0].x, src0.xyz, src0.111, src0.000 1: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].y, src0.xyz, src0.111, src1.xxx 2: src0.xyz = input[1] MAD temp[1].x, src0.xyz, src0.111, src0.000 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].y, src0.xyz, src0.111, src1.xxx 4: src0.xyz = input[0] MAD temp[2].x, src0.xyz, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0.xyz, src0.111, src1.yyy 6: src0.xyz = input[1] MAD temp[3].x, src0.xyz, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0.xyz, src0.111, src1.yyy 8: src0.xyz = input[0] MAD temp[4].x, src0.xyz, src0.111, src0.000 9: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0.xyz, src0.111, src1.zzz 10: src0.xyz = input[1] MAD temp[5].x, src0.xyz, src0.111, src0.000 11: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0.xyz, src0.111, src1.zzz 12: src0.xyz = input[0] MAD temp[6].x, src0.xyz, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0.xyz, src0.111, src0.www 14: src0.xyz = input[1] MAD temp[7].x, src0.xyz, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0.xyz, src0.111, src0.www 16: src0.xyz = input[0] MAD temp[8].x, src0.xyz, src0.111, src0.000 17: src0.xyz = input[0], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.xxx 18: src0.xyz = input[1] MAD temp[9].x, src0.xyz, src0.111, src0.000 19: src0.xyz = input[1], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.xxx 20: src0.xyz = input[0] MAD temp[10].x, src0.xyz, src0.111, src0.000 21: src0.xyz = input[0], src1.xyz = const[1] MAD temp[10].y, src0.xyz, src0.111, src1.yyy 22: src0.xyz = input[1] MAD temp[11].x, src0.xyz, src0.111, src0.000 23: src0.xyz = input[1], src1.xyz = const[1] MAD temp[11].y, src0.xyz, src0.111, src1.yyy 24: src0.xyz = input[0] MAD temp[12].x, src0.xyz, src0.111, src0.000 25: src0.xyz = input[0], src1.xyz = const[1] MAD temp[12].y, src0.xyz, src0.111, src1.zzz 26: src0.xyz = input[1] MAD temp[13].x, src0.xyz, src0.111, src0.000 27: src0.xyz = input[1], src1.xyz = const[1] MAD temp[13].y, src0.xyz, src0.111, src1.zzz 28: src0.xyz = input[0] MAD temp[14].x, src0.xyz, src0.111, src0.000 29: src0.xyz = input[0], src0.w = const[1] MAD temp[14].y, src0.xyz, src0.111, src0.www 30: src0.xyz = input[1] MAD temp[15].x, src0.xyz, src0.111, src0.000 31: src0.xyz = input[1], src0.w = const[1] MAD temp[15].y, src0.xyz, src0.111, src0.www 32: BEGIN_TEX; 33: TEX temp[17], temp[0], 2D[0]; 34: TEX temp[18], temp[1], 2D[0]; 35: TEX temp[19], temp[2], 2D[0]; 36: TEX temp[20], temp[3], 2D[0]; 37: TEX temp[21], temp[4], 2D[0]; 38: TEX temp[22], temp[5], 2D[0]; 39: TEX temp[23], temp[6], 2D[0]; 40: TEX temp[24], temp[7], 2D[0]; 41: TEX temp[25], temp[8], 2D[0]; 42: TEX temp[26], temp[9], 2D[0]; 43: TEX temp[27], temp[10], 2D[0]; 44: TEX temp[28], temp[11], 2D[0]; 45: TEX temp[29], temp[12], 2D[0]; 46: TEX temp[30], temp[13], 2D[0]; 47: TEX temp[31], temp[14], 2D[0]; 48: TEX temp[32], temp[15], 2D[0] SEM_WAIT SEM_ACQUIRE; 49: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[19], src1.w = temp[19] SEM_WAIT MAD temp[33].xyz, src0.xyz, src0.111, src1.xyz MAD temp[33].w, src0.w, src0.1, src1.w 50: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[20], src1.w = temp[20] MAD temp[34].xyz, src0.xyz, src0.111, src1.xyz MAD temp[34].w, src0.w, src0.1, src1.w 51: src0.xyz = temp[33], src0.w = temp[33], src1.xyz = temp[21], src1.w = temp[21] MAD temp[35].xyz, src0.xyz, src0.111, src1.xyz MAD temp[35].w, src0.w, src0.1, src1.w 52: src0.xyz = temp[34], src0.w = temp[34], src1.xyz = temp[22], src1.w = temp[22] MAD temp[36].xyz, src0.xyz, src0.111, src1.xyz MAD temp[36].w, src0.w, src0.1, src1.w 53: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[23], src1.w = temp[23] MAD temp[37].xyz, src0.xyz, src0.111, src1.xyz MAD temp[37].w, src0.w, src0.1, src1.w 54: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[24], src1.w = temp[24] MAD temp[38].xyz, src0.xyz, src0.111, src1.xyz MAD temp[38].w, src0.w, src0.1, src1.w 55: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[25], src1.w = temp[25] MAD temp[39].xyz, src0.xyz, src0.111, src1.xyz MAD temp[39].w, src0.w, src0.1, src1.w 56: src0.xyz = temp[38], src0.w = temp[38], src1.xyz = temp[26], src1.w = temp[26] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz MAD temp[40].w, src0.w, src0.1, src1.w 57: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[27], src1.w = temp[27] MAD temp[41].xyz, src0.xyz, src0.111, src1.xyz MAD temp[41].w, src0.w, src0.1, src1.w 58: src0.xyz = temp[40], src0.w = temp[40], src1.xyz = temp[28], src1.w = temp[28] MAD temp[42].xyz, src0.xyz, src0.111, src1.xyz MAD temp[42].w, src0.w, src0.1, src1.w 59: src0.xyz = temp[41], src0.w = temp[41], src1.xyz = temp[29], src1.w = temp[29] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz MAD temp[43].w, src0.w, src0.1, src1.w 60: src0.xyz = temp[42], src0.w = temp[42], src1.xyz = temp[30], src1.w = temp[30] MAD temp[44].xyz, src0.xyz, src0.111, src1.xyz MAD temp[44].w, src0.w, src0.1, src1.w 61: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = temp[31], src1.w = temp[31] MAD temp[45].xyz, src0.xyz, src0.111, src1.xyz MAD temp[45].w, src0.w, src0.1, src1.w 62: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[32], src1.w = temp[32] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz MAD temp[46].w, src0.w, src0.1, src1.w 63: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[46], src1.w = temp[46] MAD temp[47].xyz, src0.xyz, src0.111, src1.xyz MAD temp[47].w, src0.w, src0.1, src1.w 64: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = const[2] DP4 temp[0].xyz, |src0.xyz|, src1.xxx DP4 temp[0].w, |src0.w|, src1.x 65: src0.xyz = const[2], src0.w = temp[32] MAD temp[0].w, |src0.w|, src0.x, src0.0 66: src0.xyz = temp[0], src0.w = temp[0] FRC temp[48].xyz, src0.xyz FRC temp[48].w, src0.w 67: src0.xyz = const[2], src0.w = temp[48], src1.xyz = temp[48] MAD temp[49].xyz, -src0.yyy, |src0.111|, |src1.xyz| MAD temp[49].w, -src0.y, |src0.1|, |src0.w| 68: src0.xyz = temp[49], src0.w = temp[49] CMP temp[0].xyz, src0.000, src0.111, src0.xyz CMP temp[0].w, src0.0, src0.1, src0.w 69: src0.xyz = const[2], src0.w = const[2], src1.w = temp[0] CMP temp[0].w, src0.z, src0.w, -src1.w 70: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 71: src0.xyz = temp[32], src0.w = temp[0], src1.w = temp[32] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src1.w Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[2].x, src0.xyz, src0.111, src0.000 1: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0.xyz, src0.111, src1.xxx 2: src0.xyz = input[1] MAD temp[3].x, src0.xyz, src0.111, src0.000 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0.xyz, src0.111, src1.xxx 4: src0.xyz = input[0] MAD temp[4].x, src0.xyz, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0.xyz, src0.111, src1.yyy 6: src0.xyz = input[1] MAD temp[5].x, src0.xyz, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0.xyz, src0.111, src1.yyy 8: src0.xyz = input[0] MAD temp[6].x, src0.xyz, src0.111, src0.000 9: src0.xyz = input[0], src1.xyz = const[0] MAD temp[6].y, src0.xyz, src0.111, src1.zzz 10: src0.xyz = input[1] MAD temp[7].x, src0.xyz, src0.111, src0.000 11: src0.xyz = input[1], src1.xyz = const[0] MAD temp[7].y, src0.xyz, src0.111, src1.zzz 12: src0.xyz = input[0] MAD temp[8].x, src0.xyz, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[8].y, src0.xyz, src0.111, src0.www 14: src0.xyz = input[1] MAD temp[9].x, src0.xyz, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[9].y, src0.xyz, src0.111, src0.www 16: src0.xyz = input[0] MAD temp[10].x, src0.xyz, src0.111, src0.000 17: src0.xyz = input[0], src1.xyz = const[1] MAD temp[10].y, src0.xyz, src0.111, src1.xxx 18: src0.xyz = input[1] MAD temp[11].x, src0.xyz, src0.111, src0.000 19: src0.xyz = input[1], src1.xyz = const[1] MAD temp[11].y, src0.xyz, src0.111, src1.xxx 20: src0.xyz = input[0] MAD temp[12].x, src0.xyz, src0.111, src0.000 21: src0.xyz = input[0], src1.xyz = const[1] MAD temp[12].y, src0.xyz, src0.111, src1.yyy 22: src0.xyz = input[1] MAD temp[13].x, src0.xyz, src0.111, src0.000 23: src0.xyz = input[1], src1.xyz = const[1] MAD temp[13].y, src0.xyz, src0.111, src1.yyy 24: src0.xyz = input[0] MAD temp[14].x, src0.xyz, src0.111, src0.000 25: src0.xyz = input[0], src1.xyz = const[1] MAD temp[14].y, src0.xyz, src0.111, src1.zzz 26: src0.xyz = input[1] MAD temp[15].x, src0.xyz, src0.111, src0.000 27: src0.xyz = input[1], src1.xyz = const[1] MAD temp[15].y, src0.xyz, src0.111, src1.zzz 28: src0.xyz = input[0] MAD temp[16].x, src0.xyz, src0.111, src0.000 29: src0.xyz = input[0], src0.w = const[1] MAD temp[16].y, src0.xyz, src0.111, src0.www 30: src0.xyz = input[1] MAD temp[17].x, src0.xyz, src0.111, src0.000 31: src0.xyz = input[1], src0.w = const[1] MAD temp[17].y, src0.xyz, src0.111, src0.www 32: BEGIN_TEX; 33: TEX temp[19], temp[2], 2D[0]; 34: TEX temp[20], temp[3], 2D[0]; 35: TEX temp[21], temp[4], 2D[0]; 36: TEX temp[22], temp[5], 2D[0]; 37: TEX temp[23], temp[6], 2D[0]; 38: TEX temp[24], temp[7], 2D[0]; 39: TEX temp[25], temp[8], 2D[0]; 40: TEX temp[26], temp[9], 2D[0]; 41: TEX temp[27], temp[10], 2D[0]; 42: TEX temp[28], temp[11], 2D[0]; 43: TEX temp[29], temp[12], 2D[0]; 44: TEX temp[30], temp[13], 2D[0]; 45: TEX temp[31], temp[14], 2D[0]; 46: TEX temp[32], temp[15], 2D[0]; 47: TEX temp[33], temp[16], 2D[0]; 48: TEX temp[34], temp[17], 2D[0] SEM_WAIT SEM_ACQUIRE; 49: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[21], src1.w = temp[21] SEM_WAIT MAD temp[35].xyz, src0.xyz, src0.111, src1.xyz MAD temp[35].w, src0.w, src0.1, src1.w 50: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = temp[22], src1.w = temp[22] MAD temp[36].xyz, src0.xyz, src0.111, src1.xyz MAD temp[36].w, src0.w, src0.1, src1.w 51: src0.xyz = temp[35], src0.w = temp[35], src1.xyz = temp[23], src1.w = temp[23] MAD temp[37].xyz, src0.xyz, src0.111, src1.xyz MAD temp[37].w, src0.w, src0.1, src1.w 52: src0.xyz = temp[36], src0.w = temp[36], src1.xyz = temp[24], src1.w = temp[24] MAD temp[38].xyz, src0.xyz, src0.111, src1.xyz MAD temp[38].w, src0.w, src0.1, src1.w 53: src0.xyz = temp[37], src0.w = temp[37], src1.xyz = temp[25], src1.w = temp[25] MAD temp[39].xyz, src0.xyz, src0.111, src1.xyz MAD temp[39].w, src0.w, src0.1, src1.w 54: src0.xyz = temp[38], src0.w = temp[38], src1.xyz = temp[26], src1.w = temp[26] MAD temp[40].xyz, src0.xyz, src0.111, src1.xyz MAD temp[40].w, src0.w, src0.1, src1.w 55: src0.xyz = temp[39], src0.w = temp[39], src1.xyz = temp[27], src1.w = temp[27] MAD temp[41].xyz, src0.xyz, src0.111, src1.xyz MAD temp[41].w, src0.w, src0.1, src1.w 56: src0.xyz = temp[40], src0.w = temp[40], src1.xyz = temp[28], src1.w = temp[28] MAD temp[42].xyz, src0.xyz, src0.111, src1.xyz MAD temp[42].w, src0.w, src0.1, src1.w 57: src0.xyz = temp[41], src0.w = temp[41], src1.xyz = temp[29], src1.w = temp[29] MAD temp[43].xyz, src0.xyz, src0.111, src1.xyz MAD temp[43].w, src0.w, src0.1, src1.w 58: src0.xyz = temp[42], src0.w = temp[42], src1.xyz = temp[30], src1.w = temp[30] MAD temp[44].xyz, src0.xyz, src0.111, src1.xyz MAD temp[44].w, src0.w, src0.1, src1.w 59: src0.xyz = temp[43], src0.w = temp[43], src1.xyz = temp[31], src1.w = temp[31] MAD temp[45].xyz, src0.xyz, src0.111, src1.xyz MAD temp[45].w, src0.w, src0.1, src1.w 60: src0.xyz = temp[44], src0.w = temp[44], src1.xyz = temp[32], src1.w = temp[32] MAD temp[46].xyz, src0.xyz, src0.111, src1.xyz MAD temp[46].w, src0.w, src0.1, src1.w 61: src0.xyz = temp[45], src0.w = temp[45], src1.xyz = temp[33], src1.w = temp[33] MAD temp[47].xyz, src0.xyz, src0.111, src1.xyz MAD temp[47].w, src0.w, src0.1, src1.w 62: src0.xyz = temp[46], src0.w = temp[46], src1.xyz = temp[34], src1.w = temp[34] MAD temp[48].xyz, src0.xyz, src0.111, src1.xyz MAD temp[48].w, src0.w, src0.1, src1.w 63: src0.xyz = temp[47], src0.w = temp[47], src1.xyz = temp[48], src1.w = temp[48] MAD temp[49].xyz, src0.xyz, src0.111, src1.xyz MAD temp[49].w, src0.w, src0.1, src1.w 64: src0.xyz = temp[49], src0.w = temp[49], src1.xyz = const[2] DP4 temp[2].xyz, |src0.xyz|, src1.xxx DP4 temp[2].w, |src0.w|, src1.x 65: src0.xyz = const[2], src0.w = temp[34] MAD temp[2].w, |src0.w|, src0.x, src0.0 66: src0.xyz = temp[2], src0.w = temp[2] FRC temp[50].xyz, src0.xyz FRC temp[50].w, src0.w 67: src0.xyz = const[2], src0.w = temp[50], src1.xyz = temp[50] MAD temp[51].xyz, -src0.yyy, |src0.111|, |src1.xyz| MAD temp[51].w, -src0.y, |src0.1|, |src0.w| 68: src0.xyz = temp[51], src0.w = temp[51] CMP temp[2].xyz, src0.000, src0.111, src0.xyz CMP temp[2].w, src0.0, src0.1, src0.w 69: src0.xyz = const[2], src0.w = const[2], src1.w = temp[2] CMP temp[2].w, src0.z, src0.w, -src1.w 70: src0.xyz = temp[2], src0.w = temp[2] MAD temp[2].w, src0.w, src0.x, src0.0 71: src0.xyz = temp[34], src0.w = temp[2], src1.w = temp[34] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src1.w pc=1************************************* Hardware program ---------------- code_offset_ext: 00000000 NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 31, tex_end: 0 (code_addr: 000007c0) 0: 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 1: xyz: t0 c0 t0 bias-> t2.y (01080800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c0.xxx op: 00014a80 w: t0.x t0.x t0.x op: 00000000 2: xyz: t1 t0 t0 bias-> t3.x (008c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 3: xyz: t1 c0 t0 bias-> t3.y (010c0801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c0.xxx op: 00014a80 w: t1.x t1.x t1.x op: 00000000 4: xyz: t0 t0 t0 bias-> t4.x (00900000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 c0 t0 bias-> t4.y (01100800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c0.yyy op: 00018a80 w: t0.x t0.x t0.x op: 00000000 6: xyz: t1 t0 t0 bias-> t5.x (00940001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 7: xyz: t1 c0 t0 bias-> t5.y (01140801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c0.yyy op: 00018a80 w: t1.x t1.x t1.x op: 00000000 8: xyz: t0 t0 t0 bias-> t6.x (00980000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 9: xyz: t0 c0 t0 bias-> t6.y (01180800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c0.zzz op: 0001ca80 w: t0.x t0.x t0.x op: 00000000 10: xyz: t1 t0 t0 bias-> t7.x (009c0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 11: xyz: t1 c0 t0 bias-> t7.y (011c0801) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c0.zzz op: 0001ca80 w: t1.x t1.x t1.x op: 00000000 12: xyz: t0 t0 t0 bias-> t8.x (00a00000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 13: xyz: t0 t0 t0 bias-> t8.y (01200000) w: c0 t0 t0 bias-> (00000020) xyz: t0.xyz 1.0 c0.www op: 00030a80 w: t0.x t0.x t0.x op: 00000000 14: xyz: t1 t0 t0 bias-> t9.x (00a40001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 15: xyz: t1 t0 t0 bias-> t9.y (01240001) w: c0 t0 t0 bias-> (00000020) xyz: t1.xyz 1.0 c0.www op: 00030a80 w: t1.x t1.x t1.x op: 00000000 16: xyz: t0 t0 t0 bias-> t10.x (00a80000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 17: xyz: t0 c1 t0 bias-> t10.y (01280840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c1.xxx op: 00014a80 w: t0.x t0.x t0.x op: 00000000 18: xyz: t1 t0 t0 bias-> t11.x (00ac0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 19: xyz: t1 c1 t0 bias-> t11.y (012c0841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c1.xxx op: 00014a80 w: t1.x t1.x t1.x op: 00000000 20: xyz: t0 t0 t0 bias-> t12.x (00b00000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 21: xyz: t0 c1 t0 bias-> t12.y (01300840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c1.yyy op: 00018a80 w: t0.x t0.x t0.x op: 00000000 22: xyz: t1 t0 t0 bias-> t13.x (00b40001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 23: xyz: t1 c1 t0 bias-> t13.y (01340841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c1.yyy op: 00018a80 w: t1.x t1.x t1.x op: 00000000 24: xyz: t0 t0 t0 bias-> t14.x (00b80000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 25: xyz: t0 c1 t0 bias-> t14.y (01380840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 c1.zzz op: 0001ca80 w: t0.x t0.x t0.x op: 00000000 26: xyz: t1 t0 t0 bias-> t15.x (00bc0001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 27: xyz: t1 c1 t0 bias-> t15.y (013c0841) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 c1.zzz op: 0001ca80 w: t1.x t1.x t1.x op: 00000000 28: xyz: t0 t0 t0 bias-> t16.x (00c00000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.x t0.x t0.x op: 00000000 29: xyz: t0 t0 t0 bias-> t16.y (01400000) w: c1 t0 t0 bias-> (00000021) xyz: t0.xyz 1.0 c1.www op: 00030a80 w: t0.x t0.x t0.x op: 00000000 30: xyz: t1 t0 t0 bias-> t17.x (00c40001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.x t1.x t1.x op: 00000000 31: xyz: t1 t0 t0 bias-> t17.y (01440001) w: c1 t0 t0 bias-> (00000021) xyz: t1.xyz 1.0 c1.www op: 00030a80 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 32, tex_offset: 0, alu_end: 22, tex_end: 15 (code_addr: 005e05a0) TEX: TEX t19, t2, texture[0] (000084c2) TEX t20, t3, texture[0] (00008503) TEX t21, t4, texture[0] (00008544) TEX t22, t5, texture[0] (00008585) TEX t23, t6, texture[0] (000085c6) TEX t24, t7, texture[0] (00008607) TEX t25, t8, texture[0] (00008648) TEX t26, t9, texture[0] (00008689) TEX t27, t10, texture[0] (000086ca) TEX t28, t11, texture[0] (0000870b) TEX t29, t12, texture[0] (0000874c) TEX t30, t13, texture[0] (0000878d) TEX t31, t14, texture[0] (000087ce) TEX t0, t15, texture[0] (0010800f) TEX t1, t16, texture[0] (00108050) TEX t2, t17, texture[0] (00108091) 32: xyz: t19 t21 t0 bias-> t35.xyz (038c0553) w: t19 t21 t0 bias-> t35.w (008c0553) xyz: t19.xyz 1.0 t21.xyz op: 00010a80 w: t19.w 1.0 t21.w op: 00028889 33: xyz: t20 t22 t0 bias-> t36.xyz (03900594) w: t20 t22 t0 bias-> t36.w (00900594) xyz: t20.xyz 1.0 t22.xyz op: 00010a80 w: t20.w 1.0 t22.w op: 00028889 34: xyz: t35 t23 t0 bias-> t37.xyz (039405c3) w: t35 t23 t0 bias-> t37.w (009405c3) xyz: t35.xyz 1.0 t23.xyz op: 00010a80 w: t35.w 1.0 t23.w op: 00028889 35: xyz: t36 t24 t0 bias-> t38.xyz (03980604) w: t36 t24 t0 bias-> t38.w (00980604) xyz: t36.xyz 1.0 t24.xyz op: 00010a80 w: t36.w 1.0 t24.w op: 00028889 36: xyz: t37 t25 t0 bias-> t39.xyz (039c0645) w: t37 t25 t0 bias-> t39.w (009c0645) xyz: t37.xyz 1.0 t25.xyz op: 00010a80 w: t37.w 1.0 t25.w op: 00028889 37: xyz: t38 t26 t0 bias-> t40.xyz (03a00686) w: t38 t26 t0 bias-> t40.w (00a00686) xyz: t38.xyz 1.0 t26.xyz op: 00010a80 w: t38.w 1.0 t26.w op: 00028889 38: xyz: t39 t27 t0 bias-> t41.xyz (03a406c7) w: t39 t27 t0 bias-> t41.w (00a406c7) xyz: t39.xyz 1.0 t27.xyz op: 00010a80 w: t39.w 1.0 t27.w op: 00028889 39: xyz: t40 t28 t0 bias-> t42.xyz (03a80708) w: t40 t28 t0 bias-> t42.w (00a80708) xyz: t40.xyz 1.0 t28.xyz op: 00010a80 w: t40.w 1.0 t28.w op: 00028889 40: xyz: t41 t29 t0 bias-> t43.xyz (03ac0749) w: t41 t29 t0 bias-> t43.w (00ac0749) xyz: t41.xyz 1.0 t29.xyz op: 00010a80 w: t41.w 1.0 t29.w op: 00028889 41: xyz: t42 t30 t0 bias-> t44.xyz (03b0078a) w: t42 t30 t0 bias-> t44.w (00b0078a) xyz: t42.xyz 1.0 t30.xyz op: 00010a80 w: t42.w 1.0 t30.w op: 00028889 42: xyz: t43 t31 t0 bias-> t45.xyz (03b407cb) w: t43 t31 t0 bias-> t45.w (00b407cb) xyz: t43.xyz 1.0 t31.xyz op: 00010a80 w: t43.w 1.0 t31.w op: 00028889 43: xyz: t44 t32 t0 bias-> t46.xyz (03b8000c) w: t44 t32 t0 bias-> t46.w (00b8000c) xyz: t44.xyz 1.0 t32.xyz op: 00010a80 w: t44.w 1.0 t32.w op: 00028889 44: xyz: t45 t33 t0 bias-> t47.xyz (03bc004d) w: t45 t33 t0 bias-> t47.w (00bc004d) xyz: t45.xyz 1.0 t33.xyz op: 00010a80 w: t45.w 1.0 t33.w op: 00028889 45: xyz: t46 t34 t0 bias-> t48.xyz (03c0008e) w: t46 t34 t0 bias-> t48.w (00c0008e) xyz: t46.xyz 1.0 t34.xyz op: 00010a80 w: t46.w 1.0 t34.w op: 00028889 46: xyz: t47 t48 t0 bias-> t49.xyz (03c4040f) w: t47 t48 t0 bias-> t49.w (00c4040f) xyz: t47.xyz 1.0 t48.xyz op: 00010a80 w: t47.w 1.0 t48.w op: 00028889 47: xyz: t49 c2 t0 bias-> t2.xyz (03880891) w: t49 t0 t0 bias-> t2.w (00880011) xyz: |t49.xyz| c2.xxx t49.xxx op: 010042c0 w: |t49.w| c2.x t49.x op: 008001c9 48: xyz: c2 t0 t0 bias-> (00000022) w: t34 t0 t0 bias-> t2.w (00880002) xyz: c2.xxx c2.xxx c2.xxx op: 00004081 w: |t34.w| c2.x 0.0 op: 00040049 49: xyz: t2 t0 t0 bias-> t50.xyz (03c80002) w: t2 t0 t0 bias-> t50.w (00c80002) xyz: t2.xyz t2.xxx t2.xxx op: 04804080 w: t2.w t2.x t2.x op: 03800009 50: xyz: c2 t50 t0 bias-> t51.xyz (03cc04a2) w: t50 t0 t0 bias-> t51.w (00cc0012) xyz: -c2.yyy |1.0| |t50.xyz| op: 00112aa2 w: -c2.y |1.0| |t50.w| op: 001268a1 51: xyz: t51 t0 t0 bias-> t2.xyz (03880013) w: t51 t0 t0 bias-> t2.w (00880013) xyz: 0.0 1.0 t51.xyz op: 04000a94 w: 0.0 1.0 t51.w op: 03024890 52: xyz: c2 t0 t0 bias-> (00000022) w: c2 t2 t0 bias-> t2.w (008800a2) xyz: c2.xxx c2.xxx c2.xxx op: 00004081 w: c2.z c2.w -t2.w op: 030a8482 53: xyz: t2 t0 t0 bias-> (00000002) w: t2 t0 t0 bias-> t2.w (00880002) xyz: t2.xxx t2.xxx t2.xxx op: 00004081 w: t2.w t2.x 0.0 op: 00040009 54: xyz: t34 t0 t0 bias-> o0.xyz (1c000002) w: t2 t34 t0 bias-> o0.w (01000082) xyz: t34.xyz 1.0 0.0 op: 00050a80 w: t2.w 1.0 t34.w op: 00028889 ~~~~~~~~ FRAGMENT PROGRAM ~~~~~~~ ~ 71 Instructions ~ 52 Vector Instructions (RGB) ~ 23 Scalar Instructions (Alpha) ~ 0 Flow Control Instructions ~ 16 Texture Instructions ~ 0 Presub Operations ~ 0 OMOD Operations ~ 52 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300: Rasterized generic 1 written to FS in texcoord 0. r300: Rasterized generic 2 written to FS in texcoord 1. r300: --- Rasterizer status ---: colors: 0, generics: 2. r300: Scissor width: 256, height: 1024, CBZB clear: NO RS Block: 8 texcoords (linear), 0 colors (perspective) 2 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : inst 0: 0x00000008 : inst 1: 0x00000049 : count: 0x00040008 inst_count: 0x00000001 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 8 texcoords (linear), 0 colors (perspective) 2 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : inst 0: 0x00000008 : inst 1: 0x00000049 : count: 0x00040008 inst_count: 0x00000001 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 8 texcoords (linear), 0 colors (perspective) 2 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : inst 0: 0x00000008 : inst 1: 0x00000049 : count: 0x00040008 inst_count: 0x00000001 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 8 texcoords (linear), 0 colors (perspective) 2 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : inst 0: 0x00000008 : inst 1: 0x00000049 : count: 0x00040008 inst_count: 0x00000001 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 8 texcoords (linear), 0 colors (perspective) 2 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : inst 0: 0x00000008 : inst 1: 0x00000049 : count: 0x00040008 inst_count: 0x00000001 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 8 texcoords (linear), 0 colors (perspective) 2 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : inst 0: 0x00000008 : inst 1: 0x00000049 : count: 0x00040008 inst_count: 0x00000001 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 8 texcoords (linear), 0 colors (perspective) 2 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : inst 0: 0x00000008 : inst 1: 0x00000049 : count: 0x00040008 inst_count: 0x00000001 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 8 texcoords (linear), 0 colors (perspective) 2 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : inst 0: 0x00000008 : inst 1: 0x00000049 : count: 0x00040008 inst_count: 0x00000001 r300: Scissor width: 256, height: 1024, CBZB clear: NO r300: PSC emit: : prog_stream_cntl0: 0x01040001 : prog_stream_cntl1: 0x00002200 : prog_stream_cntl_ext0: 0xf688fb08 : prog_stream_cntl_ext1: 0x0000fb20 RS Block: 8 texcoords (linear), 0 colors (perspective) 2 instructions r300: RS emit: : ip 0: 0x00d10000 : ip 1: 0x00d10004 : inst 0: 0x00000008 : inst 1: 0x00000049 : count: 0x00040008 inst_count: 0x00000001 r300: set_framebuffer_state: r300: CB[0] Dim: 256x256, Firstlayer: 0, Lastlayer: 0, Level: 0, Format: r16g16b16a16_float r300: TEX: Macro: NO, Micro: NO, Dim: 256x256x4, LastLevel: 0, Format: r16g16b16a16_float r300: CB[1] Dim: 256x256, Firstlayer: 1, Lastlayer: 1, Level: 0, Format: r16g16b16a16_float r300: TEX: Macro: NO, Micro: NO, Dim: 256x256x4, LastLevel: 0, Format: r16g16b16a16_float r300: CB[2] Dim: 256x256, Firstlayer: 2, Lastlayer: 2, Level: 0, Format: r16g16b16a16_float r300: TEX: Macro: NO, Micro: NO, Dim: 256x256x4, LastLevel: 0, Format: r16g16b16a16_float r300: CB[3] Dim: 256x256, Firstlayer: 3, Lastlayer: 3, Level: 0, Format: r16g16b16a16_float r300: TEX: Macro: NO, Micro: NO, Dim: 256x256x4, LastLevel: 0, Format: r16g16b16a16_float r300: Initial fragment program FRAG DCL IN[0], GENERIC[1], LINEAR DCL IN[1], GENERIC[2], LINEAR DCL IN[2], GENERIC[3], LINEAR DCL IN[3], GENERIC[4], LINEAR DCL OUT[0], COLOR DCL OUT[1], COLOR[1] DCL OUT[2], COLOR[2] DCL OUT[3], COLOR[3] DCL SAMP[0] DCL SAMP[1] DCL TEMP[0..10] IMM FLT32 { -0.0020, -0.0010, 0.0000, 0.0010} IMM FLT32 { -0.2500, -0.1250, 0.1250, 0.0000} 0: MOV TEMP[0].x, IN[0] 1: ADD TEMP[0].y, IN[0], IMM[0].xxxx 2: MOV TEMP[1].x, IN[1] 3: ADD TEMP[1].y, IN[1], IMM[0].xxxx 4: MOV TEMP[2].x, IN[0] 5: ADD TEMP[2].y, IN[0], IMM[0].yyyy 6: MOV TEMP[3].x, IN[1] 7: ADD TEMP[3].y, IN[1], IMM[0].yyyy 8: MOV TEMP[4].x, IN[0] 9: ADD TEMP[4].y, IN[0], IMM[0].zzzz 10: MOV TEMP[5].x, IN[1] 11: ADD TEMP[5].y, IN[1], IMM[0].zzzz 12: MOV TEMP[6].x, IN[0] 13: ADD TEMP[6].y, IN[0], IMM[0].wwww 14: MOV TEMP[7].x, IN[1] 15: ADD TEMP[7].y, IN[1], IMM[0].wwww 16: TEX TEMP[0], TEMP[0], SAMP[0], 2D 17: TEX TEMP[1], TEMP[1], SAMP[0], 2D 18: TEX TEMP[2], TEMP[2], SAMP[0], 2D 19: TEX TEMP[3], TEMP[3], SAMP[0], 2D 20: TEX TEMP[4], TEMP[4], SAMP[0], 2D 21: TEX TEMP[5], TEMP[5], SAMP[0], 2D 22: TEX TEMP[6], TEMP[6], SAMP[0], 2D 23: TEX TEMP[7], TEMP[7], SAMP[0], 2D 24: MOV TEMP[8].x, IN[2] 25: ADD TEMP[8].y, IN[2], IMM[1].xxxx 26: MOV TEMP[9].x, IN[3] 27: ADD TEMP[9].y, IN[3], IMM[1].xxxx 28: TEX TEMP[8], TEMP[8], SAMP[1], 2D 29: TEX TEMP[9], TEMP[9], SAMP[1], 2D 30: DP4 TEMP[10].x, TEMP[0], TEMP[8] 31: DP4 TEMP[10].y, TEMP[1], TEMP[9] 32: ADD OUT[0].x, TEMP[10].xxxx, TEMP[10].yyyy 33: DP4 TEMP[10].x, TEMP[2], TEMP[8] 34: DP4 TEMP[10].y, TEMP[3], TEMP[9] 35: ADD OUT[0].y, TEMP[10].xxxx, TEMP[10].yyyy 36: DP4 TEMP[10].x, TEMP[4], TEMP[8] 37: DP4 TEMP[10].y, TEMP[5], TEMP[9] 38: ADD OUT[0].z, TEMP[10].xxxx, TEMP[10].yyyy 39: DP4 TEMP[10].x, TEMP[6], TEMP[8] 40: DP4 TEMP[10].y, TEMP[7], TEMP[9] 41: ADD OUT[0].w, TEMP[10].xxxx, TEMP[10].yyyy 42: MOV TEMP[8].x, IN[2] 43: ADD TEMP[8].y, IN[2], IMM[1].yyyy 44: MOV TEMP[9].x, IN[3] 45: ADD TEMP[9].y, IN[3], IMM[1].yyyy 46: TEX TEMP[8], TEMP[8], SAMP[1], 2D 47: TEX TEMP[9], TEMP[9], SAMP[1], 2D 48: DP4 TEMP[10].x, TEMP[0], TEMP[8] 49: DP4 TEMP[10].y, TEMP[1], TEMP[9] 50: ADD OUT[1].x, TEMP[10].xxxx, TEMP[10].yyyy 51: DP4 TEMP[10].x, TEMP[2], TEMP[8] 52: DP4 TEMP[10].y, TEMP[3], TEMP[9] 53: ADD OUT[1].y, TEMP[10].xxxx, TEMP[10].yyyy 54: DP4 TEMP[10].x, TEMP[4], TEMP[8] 55: DP4 TEMP[10].y, TEMP[5], TEMP[9] 56: ADD OUT[1].z, TEMP[10].xxxx, TEMP[10].yyyy 57: DP4 TEMP[10].x, TEMP[6], TEMP[8] 58: DP4 TEMP[10].y, TEMP[7], TEMP[9] 59: ADD OUT[1].w, TEMP[10].xxxx, TEMP[10].yyyy 60: MOV TEMP[8].x, IN[2] 61: ADD TEMP[8].y, IN[2], IMM[0].zzzz 62: MOV TEMP[9].x, IN[3] 63: ADD TEMP[9].y, IN[3], IMM[0].zzzz 64: TEX TEMP[8], TEMP[8], SAMP[1], 2D 65: TEX TEMP[9], TEMP[9], SAMP[1], 2D 66: DP4 TEMP[10].x, TEMP[0], TEMP[8] 67: DP4 TEMP[10].y, TEMP[1], TEMP[9] 68: ADD OUT[2].x, TEMP[10].xxxx, TEMP[10].yyyy 69: DP4 TEMP[10].x, TEMP[2], TEMP[8] 70: DP4 TEMP[10].y, TEMP[3], TEMP[9] 71: ADD OUT[2].y, TEMP[10].xxxx, TEMP[10].yyyy 72: DP4 TEMP[10].x, TEMP[4], TEMP[8] 73: DP4 TEMP[10].y, TEMP[5], TEMP[9] 74: ADD OUT[2].z, TEMP[10].xxxx, TEMP[10].yyyy 75: DP4 TEMP[10].x, TEMP[6], TEMP[8] 76: DP4 TEMP[10].y, TEMP[7], TEMP[9] 77: ADD OUT[2].w, TEMP[10].xxxx, TEMP[10].yyyy 78: MOV TEMP[8].x, IN[2] 79: ADD TEMP[8].y, IN[2], IMM[1].zzzz 80: MOV TEMP[9].x, IN[3] 81: ADD TEMP[9].y, IN[3], IMM[1].zzzz 82: TEX TEMP[8], TEMP[8], SAMP[1], 2D 83: TEX TEMP[9], TEMP[9], SAMP[1], 2D 84: DP4 TEMP[10].x, TEMP[0], TEMP[8] 85: DP4 TEMP[10].y, TEMP[1], TEMP[9] 86: ADD OUT[3].x, TEMP[10].xxxx, TEMP[10].yyyy 87: DP4 TEMP[10].x, TEMP[2], TEMP[8] 88: DP4 TEMP[10].y, TEMP[3], TEMP[9] 89: ADD OUT[3].y, TEMP[10].xxxx, TEMP[10].yyyy 90: DP4 TEMP[10].x, TEMP[4], TEMP[8] 91: DP4 TEMP[10].y, TEMP[5], TEMP[9] 92: ADD OUT[3].z, TEMP[10].xxxx, TEMP[10].yyyy 93: DP4 TEMP[10].x, TEMP[6], TEMP[8] 94: DP4 TEMP[10].y, TEMP[7], TEMP[9] 95: ADD OUT[3].w, TEMP[10].xxxx, TEMP[10].yyyy 96: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[0], temp[0], 2D[0]; 17: TEX temp[1], temp[1], 2D[0]; 18: TEX temp[2], temp[2], 2D[0]; 19: TEX temp[3], temp[3], 2D[0]; 20: TEX temp[4], temp[4], 2D[0]; 21: TEX temp[5], temp[5], 2D[0]; 22: TEX temp[6], temp[6], 2D[0]; 23: TEX temp[7], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[10].x, temp[0], temp[8]; 31: DP4 temp[10].y, temp[1], temp[9]; 32: ADD output[0].x, temp[10].xxxx, temp[10].yyyy; 33: DP4 temp[10].x, temp[2], temp[8]; 34: DP4 temp[10].y, temp[3], temp[9]; 35: ADD output[0].y, temp[10].xxxx, temp[10].yyyy; 36: DP4 temp[10].x, temp[4], temp[8]; 37: DP4 temp[10].y, temp[5], temp[9]; 38: ADD output[0].z, temp[10].xxxx, temp[10].yyyy; 39: DP4 temp[10].x, temp[6], temp[8]; 40: DP4 temp[10].y, temp[7], temp[9]; 41: ADD output[0].w, temp[10].xxxx, temp[10].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[10].x, temp[0], temp[8]; 49: DP4 temp[10].y, temp[1], temp[9]; 50: ADD output[1].x, temp[10].xxxx, temp[10].yyyy; 51: DP4 temp[10].x, temp[2], temp[8]; 52: DP4 temp[10].y, temp[3], temp[9]; 53: ADD output[1].y, temp[10].xxxx, temp[10].yyyy; 54: DP4 temp[10].x, temp[4], temp[8]; 55: DP4 temp[10].y, temp[5], temp[9]; 56: ADD output[1].z, temp[10].xxxx, temp[10].yyyy; 57: DP4 temp[10].x, temp[6], temp[8]; 58: DP4 temp[10].y, temp[7], temp[9]; 59: ADD output[1].w, temp[10].xxxx, temp[10].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[10].x, temp[0], temp[8]; 67: DP4 temp[10].y, temp[1], temp[9]; 68: ADD output[2].x, temp[10].xxxx, temp[10].yyyy; 69: DP4 temp[10].x, temp[2], temp[8]; 70: DP4 temp[10].y, temp[3], temp[9]; 71: ADD output[2].y, temp[10].xxxx, temp[10].yyyy; 72: DP4 temp[10].x, temp[4], temp[8]; 73: DP4 temp[10].y, temp[5], temp[9]; 74: ADD output[2].z, temp[10].xxxx, temp[10].yyyy; 75: DP4 temp[10].x, temp[6], temp[8]; 76: DP4 temp[10].y, temp[7], temp[9]; 77: ADD output[2].w, temp[10].xxxx, temp[10].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[8], temp[8], 2D[1]; 83: TEX temp[9], temp[9], 2D[1]; 84: DP4 temp[10].x, temp[0], temp[8]; 85: DP4 temp[10].y, temp[1], temp[9]; 86: ADD output[3].x, temp[10].xxxx, temp[10].yyyy; 87: DP4 temp[10].x, temp[2], temp[8]; 88: DP4 temp[10].y, temp[3], temp[9]; 89: ADD output[3].y, temp[10].xxxx, temp[10].yyyy; 90: DP4 temp[10].x, temp[4], temp[8]; 91: DP4 temp[10].y, temp[5], temp[9]; 92: ADD output[3].z, temp[10].xxxx, temp[10].yyyy; 93: DP4 temp[10].x, temp[6], temp[8]; 94: DP4 temp[10].y, temp[7], temp[9]; 95: ADD output[3].w, temp[10].xxxx, temp[10].yyyy; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[11], temp[0], 2D[0]; 17: TEX temp[12], temp[1], 2D[0]; 18: TEX temp[13], temp[2], 2D[0]; 19: TEX temp[14], temp[3], 2D[0]; 20: TEX temp[15], temp[4], 2D[0]; 21: TEX temp[16], temp[5], 2D[0]; 22: TEX temp[17], temp[6], 2D[0]; 23: TEX temp[18], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[19].x, temp[11], temp[8]; 31: DP4 temp[20].y, temp[12], temp[9]; 32: ADD output[0].x, temp[19].xxxx, temp[20].yyyy; 33: DP4 temp[21].x, temp[13], temp[8]; 34: DP4 temp[22].y, temp[14], temp[9]; 35: ADD output[0].y, temp[21].xxxx, temp[22].yyyy; 36: DP4 temp[23].x, temp[15], temp[8]; 37: DP4 temp[24].y, temp[16], temp[9]; 38: ADD output[0].z, temp[23].xxxx, temp[24].yyyy; 39: DP4 temp[25].x, temp[17], temp[8]; 40: DP4 temp[26].y, temp[18], temp[9]; 41: ADD output[0].w, temp[25].xxxx, temp[26].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[27].x, temp[11], temp[8]; 49: DP4 temp[28].y, temp[12], temp[9]; 50: ADD output[1].x, temp[27].xxxx, temp[28].yyyy; 51: DP4 temp[29].x, temp[13], temp[8]; 52: DP4 temp[30].y, temp[14], temp[9]; 53: ADD output[1].y, temp[29].xxxx, temp[30].yyyy; 54: DP4 temp[31].x, temp[15], temp[8]; 55: DP4 temp[32].y, temp[16], temp[9]; 56: ADD output[1].z, temp[31].xxxx, temp[32].yyyy; 57: DP4 temp[33].x, temp[17], temp[8]; 58: DP4 temp[34].y, temp[18], temp[9]; 59: ADD output[1].w, temp[33].xxxx, temp[34].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[35].x, temp[11], temp[8]; 67: DP4 temp[36].y, temp[12], temp[9]; 68: ADD output[2].x, temp[35].xxxx, temp[36].yyyy; 69: DP4 temp[37].x, temp[13], temp[8]; 70: DP4 temp[38].y, temp[14], temp[9]; 71: ADD output[2].y, temp[37].xxxx, temp[38].yyyy; 72: DP4 temp[39].x, temp[15], temp[8]; 73: DP4 temp[40].y, temp[16], temp[9]; 74: ADD output[2].z, temp[39].xxxx, temp[40].yyyy; 75: DP4 temp[41].x, temp[17], temp[8]; 76: DP4 temp[42].y, temp[18], temp[9]; 77: ADD output[2].w, temp[41].xxxx, temp[42].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[43], temp[8], 2D[1]; 83: TEX temp[44], temp[9], 2D[1]; 84: DP4 temp[45].x, temp[11], temp[43]; 85: DP4 temp[46].y, temp[12], temp[44]; 86: ADD output[3].x, temp[45].xxxx, temp[46].yyyy; 87: DP4 temp[47].x, temp[13], temp[43]; 88: DP4 temp[48].y, temp[14], temp[44]; 89: ADD output[3].y, temp[47].xxxx, temp[48].yyyy; 90: DP4 temp[49].x, temp[15], temp[43]; 91: DP4 temp[50].y, temp[16], temp[44]; 92: ADD output[3].z, temp[49].xxxx, temp[50].yyyy; 93: DP4 temp[51].x, temp[17], temp[43]; 94: DP4 temp[52].y, temp[18], temp[44]; 95: ADD output[3].w, temp[51].xxxx, temp[52].yyyy; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[11], temp[0], 2D[0]; 17: TEX temp[12], temp[1], 2D[0]; 18: TEX temp[13], temp[2], 2D[0]; 19: TEX temp[14], temp[3], 2D[0]; 20: TEX temp[15], temp[4], 2D[0]; 21: TEX temp[16], temp[5], 2D[0]; 22: TEX temp[17], temp[6], 2D[0]; 23: TEX temp[18], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[19].x, temp[11], temp[8]; 31: DP4 temp[20].y, temp[12], temp[9]; 32: ADD output[0].x, temp[19].xxxx, temp[20].yyyy; 33: DP4 temp[21].x, temp[13], temp[8]; 34: DP4 temp[22].y, temp[14], temp[9]; 35: ADD output[0].y, temp[21].xxxx, temp[22].yyyy; 36: DP4 temp[23].x, temp[15], temp[8]; 37: DP4 temp[24].y, temp[16], temp[9]; 38: ADD output[0].z, temp[23].xxxx, temp[24].yyyy; 39: DP4 temp[25].x, temp[17], temp[8]; 40: DP4 temp[26].y, temp[18], temp[9]; 41: ADD output[0].w, temp[25].xxxx, temp[26].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[27].x, temp[11], temp[8]; 49: DP4 temp[28].y, temp[12], temp[9]; 50: ADD output[1].x, temp[27].xxxx, temp[28].yyyy; 51: DP4 temp[29].x, temp[13], temp[8]; 52: DP4 temp[30].y, temp[14], temp[9]; 53: ADD output[1].y, temp[29].xxxx, temp[30].yyyy; 54: DP4 temp[31].x, temp[15], temp[8]; 55: DP4 temp[32].y, temp[16], temp[9]; 56: ADD output[1].z, temp[31].xxxx, temp[32].yyyy; 57: DP4 temp[33].x, temp[17], temp[8]; 58: DP4 temp[34].y, temp[18], temp[9]; 59: ADD output[1].w, temp[33].xxxx, temp[34].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[35].x, temp[11], temp[8]; 67: DP4 temp[36].y, temp[12], temp[9]; 68: ADD output[2].x, temp[35].xxxx, temp[36].yyyy; 69: DP4 temp[37].x, temp[13], temp[8]; 70: DP4 temp[38].y, temp[14], temp[9]; 71: ADD output[2].y, temp[37].xxxx, temp[38].yyyy; 72: DP4 temp[39].x, temp[15], temp[8]; 73: DP4 temp[40].y, temp[16], temp[9]; 74: ADD output[2].z, temp[39].xxxx, temp[40].yyyy; 75: DP4 temp[41].x, temp[17], temp[8]; 76: DP4 temp[42].y, temp[18], temp[9]; 77: ADD output[2].w, temp[41].xxxx, temp[42].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[43], temp[8], 2D[1]; 83: TEX temp[44], temp[9], 2D[1]; 84: DP4 temp[45].x, temp[11], temp[43]; 85: DP4 temp[46].y, temp[12], temp[44]; 86: ADD output[3].x, temp[45].xxxx, temp[46].yyyy; 87: DP4 temp[47].x, temp[13], temp[43]; 88: DP4 temp[48].y, temp[14], temp[44]; 89: ADD output[3].y, temp[47].xxxx, temp[48].yyyy; 90: DP4 temp[49].x, temp[15], temp[43]; 91: DP4 temp[50].y, temp[16], temp[44]; 92: ADD output[3].z, temp[49].xxxx, temp[50].yyyy; 93: DP4 temp[51].x, temp[17], temp[43]; 94: DP4 temp[52].y, temp[18], temp[44]; 95: ADD output[3].w, temp[51].xxxx, temp[52].yyyy; CONST[0] = { -0.0020 -0.0010 0.0000 0.0010 } CONST[1] = { -0.2500 -0.1250 0.1250 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV temp[0].x, input[0]; 1: ADD temp[0].y, input[0], const[0].xxxx; 2: MOV temp[1].x, input[1]; 3: ADD temp[1].y, input[1], const[0].xxxx; 4: MOV temp[2].x, input[0]; 5: ADD temp[2].y, input[0], const[0].yyyy; 6: MOV temp[3].x, input[1]; 7: ADD temp[3].y, input[1], const[0].yyyy; 8: MOV temp[4].x, input[0]; 9: ADD temp[4].y, input[0], const[0].zzzz; 10: MOV temp[5].x, input[1]; 11: ADD temp[5].y, input[1], const[0].zzzz; 12: MOV temp[6].x, input[0]; 13: ADD temp[6].y, input[0], const[0].wwww; 14: MOV temp[7].x, input[1]; 15: ADD temp[7].y, input[1], const[0].wwww; 16: TEX temp[11], temp[0], 2D[0]; 17: TEX temp[12], temp[1], 2D[0]; 18: TEX temp[13], temp[2], 2D[0]; 19: TEX temp[14], temp[3], 2D[0]; 20: TEX temp[15], temp[4], 2D[0]; 21: TEX temp[16], temp[5], 2D[0]; 22: TEX temp[17], temp[6], 2D[0]; 23: TEX temp[18], temp[7], 2D[0]; 24: MOV temp[8].x, input[2]; 25: ADD temp[8].y, input[2], const[1].xxxx; 26: MOV temp[9].x, input[3]; 27: ADD temp[9].y, input[3], const[1].xxxx; 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: DP4 temp[19].x, temp[11], temp[8]; 31: DP4 temp[20].y, temp[12], temp[9]; 32: ADD output[0].x, temp[19].xxxx, temp[20].yyyy; 33: DP4 temp[21].x, temp[13], temp[8]; 34: DP4 temp[22].y, temp[14], temp[9]; 35: ADD output[0].y, temp[21].xxxx, temp[22].yyyy; 36: DP4 temp[23].x, temp[15], temp[8]; 37: DP4 temp[24].y, temp[16], temp[9]; 38: ADD output[0].z, temp[23].xxxx, temp[24].yyyy; 39: DP4 temp[25].x, temp[17], temp[8]; 40: DP4 temp[26].y, temp[18], temp[9]; 41: ADD output[0].w, temp[25].xxxx, temp[26].yyyy; 42: MOV temp[8].x, input[2]; 43: ADD temp[8].y, input[2], const[1].yyyy; 44: MOV temp[9].x, input[3]; 45: ADD temp[9].y, input[3], const[1].yyyy; 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: DP4 temp[27].x, temp[11], temp[8]; 49: DP4 temp[28].y, temp[12], temp[9]; 50: ADD output[1].x, temp[27].xxxx, temp[28].yyyy; 51: DP4 temp[29].x, temp[13], temp[8]; 52: DP4 temp[30].y, temp[14], temp[9]; 53: ADD output[1].y, temp[29].xxxx, temp[30].yyyy; 54: DP4 temp[31].x, temp[15], temp[8]; 55: DP4 temp[32].y, temp[16], temp[9]; 56: ADD output[1].z, temp[31].xxxx, temp[32].yyyy; 57: DP4 temp[33].x, temp[17], temp[8]; 58: DP4 temp[34].y, temp[18], temp[9]; 59: ADD output[1].w, temp[33].xxxx, temp[34].yyyy; 60: MOV temp[8].x, input[2]; 61: ADD temp[8].y, input[2], const[0].zzzz; 62: MOV temp[9].x, input[3]; 63: ADD temp[9].y, input[3], const[0].zzzz; 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: DP4 temp[35].x, temp[11], temp[8]; 67: DP4 temp[36].y, temp[12], temp[9]; 68: ADD output[2].x, temp[35].xxxx, temp[36].yyyy; 69: DP4 temp[37].x, temp[13], temp[8]; 70: DP4 temp[38].y, temp[14], temp[9]; 71: ADD output[2].y, temp[37].xxxx, temp[38].yyyy; 72: DP4 temp[39].x, temp[15], temp[8]; 73: DP4 temp[40].y, temp[16], temp[9]; 74: ADD output[2].z, temp[39].xxxx, temp[40].yyyy; 75: DP4 temp[41].x, temp[17], temp[8]; 76: DP4 temp[42].y, temp[18], temp[9]; 77: ADD output[2].w, temp[41].xxxx, temp[42].yyyy; 78: MOV temp[8].x, input[2]; 79: ADD temp[8].y, input[2], const[1].zzzz; 80: MOV temp[9].x, input[3]; 81: ADD temp[9].y, input[3], const[1].zzzz; 82: TEX temp[43], temp[8], 2D[1]; 83: TEX temp[44], temp[9], 2D[1]; 84: DP4 temp[45].x, temp[11], temp[43]; 85: DP4 temp[46].y, temp[12], temp[44]; 86: ADD output[3].x, temp[45].xxxx, temp[46].yyyy; 87: DP4 temp[47].x, temp[13], temp[43]; 88: DP4 temp[48].y, temp[14], temp[44]; 89: ADD output[3].y, temp[47].xxxx, temp[48].yyyy; 90: DP4 temp[49].x, temp[15], temp[43]; 91: DP4 temp[50].y, temp[16], temp[44]; 92: ADD output[3].z, temp[49].xxxx, temp[50].yyyy; 93: DP4 temp[51].x, temp[17], temp[43]; 94: DP4 temp[52].y, temp[18], temp[44]; 95: ADD output[3].w, temp[51].xxxx, temp[52].yyyy; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[0].x, src0.xyz, src0.111, src0.000 1: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].y, src0.xyz, src0.111, src1.xxx 2: src0.xyz = input[1] MAD temp[1].x, src0.xyz, src0.111, src0.000 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].y, src0.xyz, src0.111, src1.xxx 4: src0.xyz = input[0] MAD temp[2].x, src0.xyz, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0.xyz, src0.111, src1.yyy 6: src0.xyz = input[1] MAD temp[3].x, src0.xyz, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0.xyz, src0.111, src1.yyy 8: src0.xyz = input[0] MAD temp[4].x, src0.xyz, src0.111, src0.000 9: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0.xyz, src0.111, src1.zzz 10: src0.xyz = input[1] MAD temp[5].x, src0.xyz, src0.111, src0.000 11: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0.xyz, src0.111, src1.zzz 12: src0.xyz = input[0] MAD temp[6].x, src0.xyz, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0.xyz, src0.111, src0.www 14: src0.xyz = input[1] MAD temp[7].x, src0.xyz, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0.xyz, src0.111, src0.www 16: TEX temp[11], temp[0], 2D[0]; 17: TEX temp[12], temp[1], 2D[0]; 18: TEX temp[13], temp[2], 2D[0]; 19: TEX temp[14], temp[3], 2D[0]; 20: TEX temp[15], temp[4], 2D[0]; 21: TEX temp[16], temp[5], 2D[0]; 22: TEX temp[17], temp[6], 2D[0]; 23: TEX temp[18], temp[7], 2D[0]; 24: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 25: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.xxx 26: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 27: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.xxx 28: TEX temp[8], temp[8], 2D[1]; 29: TEX temp[9], temp[9], 2D[1]; 30: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[19].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 31: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[20].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 32: src0.xyz = temp[19], src1.xyz = temp[20] MAD color[0].x, src0.xxx, src0.111, src1.yyy 33: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[21].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 34: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[22].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 35: src0.xyz = temp[21], src1.xyz = temp[22] MAD color[0].y, src0.xxx, src0.111, src1.yyy 36: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[23].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 37: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[24].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 38: src0.xyz = temp[23], src1.xyz = temp[24] MAD color[0].z, src0.xxx, src0.111, src1.yyy 39: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[25].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 40: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[26].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 41: src0.xyz = temp[25], src1.xyz = temp[26] MAD color[0].w, src0.x, src0.1, src1.y 42: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 43: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.yyy 44: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 45: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.yyy 46: TEX temp[8], temp[8], 2D[1]; 47: TEX temp[9], temp[9], 2D[1]; 48: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[27].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 49: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[28].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 50: src0.xyz = temp[27], src1.xyz = temp[28] MAD color[1].x, src0.xxx, src0.111, src1.yyy 51: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[29].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 52: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[30].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 53: src0.xyz = temp[29], src1.xyz = temp[30] MAD color[1].y, src0.xxx, src0.111, src1.yyy 54: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[31].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 55: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[32].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 56: src0.xyz = temp[31], src1.xyz = temp[32] MAD color[1].z, src0.xxx, src0.111, src1.yyy 57: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[33].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 58: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[34].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 59: src0.xyz = temp[33], src1.xyz = temp[34] MAD color[1].w, src0.x, src0.1, src1.y 60: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 61: src0.xyz = input[2], src1.xyz = const[0] MAD temp[8].y, src0.xyz, src0.111, src1.zzz 62: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 63: src0.xyz = input[3], src1.xyz = const[0] MAD temp[9].y, src0.xyz, src0.111, src1.zzz 64: TEX temp[8], temp[8], 2D[1]; 65: TEX temp[9], temp[9], 2D[1]; 66: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[35].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 67: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[36].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 68: src0.xyz = temp[35], src1.xyz = temp[36] MAD color[2].x, src0.xxx, src0.111, src1.yyy 69: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[37].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 70: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[38].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 71: src0.xyz = temp[37], src1.xyz = temp[38] MAD color[2].y, src0.xxx, src0.111, src1.yyy 72: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[39].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 73: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[40].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 74: src0.xyz = temp[39], src1.xyz = temp[40] MAD color[2].z, src0.xxx, src0.111, src1.yyy 75: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[41].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 76: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[42].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 77: src0.xyz = temp[41], src1.xyz = temp[42] MAD color[2].w, src0.x, src0.1, src1.y 78: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 79: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.zzz 80: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 81: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.zzz 82: TEX temp[43], temp[8], 2D[1]; 83: TEX temp[44], temp[9], 2D[1]; 84: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[45].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 85: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[46].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 86: src0.xyz = temp[45], src1.xyz = temp[46] MAD color[3].x, src0.xxx, src0.111, src1.yyy 87: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[47].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 88: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[48].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 89: src0.xyz = temp[47], src1.xyz = temp[48] MAD color[3].y, src0.xxx, src0.111, src1.yyy 90: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[49].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 91: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[50].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 92: src0.xyz = temp[49], src1.xyz = temp[50] MAD color[3].z, src0.xxx, src0.111, src1.yyy 93: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[51].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 94: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[52].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 95: src0.xyz = temp[51], src1.xyz = temp[52] MAD color[3].w, src0.x, src0.1, src1.y Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[0].x, src0.xyz, src0.111, src0.000 1: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].y, src0.xyz, src0.111, src1.xxx 2: src0.xyz = input[1] MAD temp[1].x, src0.xyz, src0.111, src0.000 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].y, src0.xyz, src0.111, src1.xxx 4: src0.xyz = input[0] MAD temp[2].x, src0.xyz, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0.xyz, src0.111, src1.yyy 6: src0.xyz = input[1] MAD temp[3].x, src0.xyz, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0.xyz, src0.111, src1.yyy 8: src0.xyz = input[0] MAD temp[4].x, src0.xyz, src0.111, src0.000 9: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0.xyz, src0.111, src1.zzz 10: src0.xyz = input[1] MAD temp[5].x, src0.xyz, src0.111, src0.000 11: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0.xyz, src0.111, src1.zzz 12: src0.xyz = input[0] MAD temp[6].x, src0.xyz, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0.xyz, src0.111, src0.www 14: src0.xyz = input[1] MAD temp[7].x, src0.xyz, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0.xyz, src0.111, src0.www 16: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 17: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.xxx 18: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 19: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.xxx 20: BEGIN_TEX; 21: TEX temp[11], temp[0], 2D[0]; 22: TEX temp[12], temp[1], 2D[0]; 23: TEX temp[13], temp[2], 2D[0]; 24: TEX temp[14], temp[3], 2D[0]; 25: TEX temp[15], temp[4], 2D[0]; 26: TEX temp[16], temp[5], 2D[0]; 27: TEX temp[17], temp[6], 2D[0]; 28: TEX temp[18], temp[7], 2D[0]; 29: TEX temp[8], temp[8], 2D[1]; 30: TEX temp[9], temp[9], 2D[1] SEM_WAIT SEM_ACQUIRE; 31: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[8], src1.w = temp[8] SEM_WAIT DP4 temp[25].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 32: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[23].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 33: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[21].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 34: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[19].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 35: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[26].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 36: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[24].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 37: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[22].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 38: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[20].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 39: src0.xyz = temp[25], src1.xyz = temp[26] MAD color[0].w, src0.x, src0.1, src1.y 40: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 41: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.yyy 42: src0.xyz = temp[23], src1.xyz = temp[24] MAD color[0].z, src0.xxx, src0.111, src1.yyy 43: src0.xyz = temp[21], src1.xyz = temp[22] MAD color[0].y, src0.xxx, src0.111, src1.yyy 44: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 45: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.yyy 46: src0.xyz = temp[19], src1.xyz = temp[20] MAD color[0].x, src0.xxx, src0.111, src1.yyy 47: BEGIN_TEX; 48: TEX temp[8], temp[8], 2D[1]; 49: TEX temp[9], temp[9], 2D[1] SEM_WAIT SEM_ACQUIRE; 50: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[8], src1.w = temp[8] SEM_WAIT DP4 temp[33].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 51: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[31].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 52: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[29].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 53: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[27].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 54: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[34].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 55: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[32].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 56: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[30].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 57: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[28].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 58: src0.xyz = temp[33], src1.xyz = temp[34] MAD color[1].w, src0.x, src0.1, src1.y 59: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 60: src0.xyz = input[2], src1.xyz = const[0] MAD temp[8].y, src0.xyz, src0.111, src1.zzz 61: src0.xyz = temp[31], src1.xyz = temp[32] MAD color[1].z, src0.xxx, src0.111, src1.yyy 62: src0.xyz = temp[29], src1.xyz = temp[30] MAD color[1].y, src0.xxx, src0.111, src1.yyy 63: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 64: src0.xyz = input[3], src1.xyz = const[0] MAD temp[9].y, src0.xyz, src0.111, src1.zzz 65: src0.xyz = temp[27], src1.xyz = temp[28] MAD color[1].x, src0.xxx, src0.111, src1.yyy 66: BEGIN_TEX; 67: TEX temp[8], temp[8], 2D[1]; 68: TEX temp[9], temp[9], 2D[1] SEM_WAIT SEM_ACQUIRE; 69: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[8], src1.w = temp[8] SEM_WAIT DP4 temp[41].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 70: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[39].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 71: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[37].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 72: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[35].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 73: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[42].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 74: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[40].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 75: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[38].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 76: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[36].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 77: src0.xyz = temp[41], src1.xyz = temp[42] MAD color[2].w, src0.x, src0.1, src1.y 78: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 79: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.zzz 80: src0.xyz = temp[39], src1.xyz = temp[40] MAD color[2].z, src0.xxx, src0.111, src1.yyy 81: src0.xyz = temp[37], src1.xyz = temp[38] MAD color[2].y, src0.xxx, src0.111, src1.yyy 82: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 83: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.zzz 84: src0.xyz = temp[35], src1.xyz = temp[36] MAD color[2].x, src0.xxx, src0.111, src1.yyy 85: BEGIN_TEX; 86: TEX temp[43], temp[8], 2D[1]; 87: TEX temp[44], temp[9], 2D[1] SEM_WAIT SEM_ACQUIRE; 88: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[43], src1.w = temp[43] SEM_WAIT DP4 temp[51].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 89: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[49].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 90: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[47].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 91: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[45].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 92: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[52].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 93: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[50].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 94: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[48].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 95: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[46].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 96: src0.xyz = temp[51], src1.xyz = temp[52] MAD color[3].w, src0.x, src0.1, src1.y 97: src0.xyz = temp[49], src1.xyz = temp[50] MAD color[3].z, src0.xxx, src0.111, src1.yyy 98: src0.xyz = temp[47], src1.xyz = temp[48] MAD color[3].y, src0.xxx, src0.111, src1.yyy 99: src0.xyz = temp[45], src1.xyz = temp[46] MAD color[3].x, src0.xxx, src0.111, src1.yyy Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[0].x, src0.xyz, src0.111, src0.000 1: src0.xyz = input[0], src1.xyz = const[0] MAD temp[0].y, src0.xyz, src0.111, src1.xxx 2: src0.xyz = input[1] MAD temp[1].x, src0.xyz, src0.111, src0.000 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[1].y, src0.xyz, src0.111, src1.xxx 4: src0.xyz = input[0] MAD temp[2].x, src0.xyz, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[2].y, src0.xyz, src0.111, src1.yyy 6: src0.xyz = input[1] MAD temp[3].x, src0.xyz, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[3].y, src0.xyz, src0.111, src1.yyy 8: src0.xyz = input[0] MAD temp[4].x, src0.xyz, src0.111, src0.000 9: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0.xyz, src0.111, src1.zzz 10: src0.xyz = input[1] MAD temp[5].x, src0.xyz, src0.111, src0.000 11: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0.xyz, src0.111, src1.zzz 12: src0.xyz = input[0] MAD temp[6].x, src0.xyz, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[6].y, src0.xyz, src0.111, src0.www 14: src0.xyz = input[1] MAD temp[7].x, src0.xyz, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[7].y, src0.xyz, src0.111, src0.www 16: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 17: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.xxx 18: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 19: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.xxx 20: BEGIN_TEX; 21: TEX temp[11], temp[0], 2D[0]; 22: TEX temp[12], temp[1], 2D[0]; 23: TEX temp[13], temp[2], 2D[0]; 24: TEX temp[14], temp[3], 2D[0]; 25: TEX temp[15], temp[4], 2D[0]; 26: TEX temp[16], temp[5], 2D[0]; 27: TEX temp[17], temp[6], 2D[0]; 28: TEX temp[18], temp[7], 2D[0]; 29: TEX temp[8], temp[8], 2D[1]; 30: TEX temp[9], temp[9], 2D[1] SEM_WAIT SEM_ACQUIRE; 31: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[8], src1.w = temp[8] SEM_WAIT DP4 temp[25].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 32: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[23].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 33: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[21].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 34: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[19].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 35: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[26].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 36: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[24].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 37: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[22].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 38: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[20].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 39: src0.xyz = temp[25], src1.xyz = temp[26] MAD color[0].w, src0.x, src0.1, src1.y 40: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 41: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.yyy 42: src0.xyz = temp[23], src1.xyz = temp[24] MAD color[0].z, src0.xxx, src0.111, src1.yyy 43: src0.xyz = temp[21], src1.xyz = temp[22] MAD color[0].y, src0.xxx, src0.111, src1.yyy 44: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 45: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.yyy 46: src0.xyz = temp[19], src1.xyz = temp[20] MAD color[0].x, src0.xxx, src0.111, src1.yyy 47: BEGIN_TEX; 48: TEX temp[8], temp[8], 2D[1]; 49: TEX temp[9], temp[9], 2D[1] SEM_WAIT SEM_ACQUIRE; 50: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[8], src1.w = temp[8] SEM_WAIT DP4 temp[33].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 51: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[31].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 52: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[29].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 53: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[27].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 54: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[34].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 55: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[32].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 56: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[30].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 57: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[28].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 58: src0.xyz = temp[33], src1.xyz = temp[34] MAD color[1].w, src0.x, src0.1, src1.y 59: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 60: src0.xyz = input[2], src1.xyz = const[0] MAD temp[8].y, src0.xyz, src0.111, src1.zzz 61: src0.xyz = temp[31], src1.xyz = temp[32] MAD color[1].z, src0.xxx, src0.111, src1.yyy 62: src0.xyz = temp[29], src1.xyz = temp[30] MAD color[1].y, src0.xxx, src0.111, src1.yyy 63: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 64: src0.xyz = input[3], src1.xyz = const[0] MAD temp[9].y, src0.xyz, src0.111, src1.zzz 65: src0.xyz = temp[27], src1.xyz = temp[28] MAD color[1].x, src0.xxx, src0.111, src1.yyy 66: BEGIN_TEX; 67: TEX temp[8], temp[8], 2D[1]; 68: TEX temp[9], temp[9], 2D[1] SEM_WAIT SEM_ACQUIRE; 69: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[8], src1.w = temp[8] SEM_WAIT DP4 temp[41].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 70: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[39].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 71: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[37].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 72: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[8], src1.w = temp[8] DP4 temp[35].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 73: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[42].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 74: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[40].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 75: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[38].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 76: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[9], src1.w = temp[9] DP4 temp[36].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 77: src0.xyz = temp[41], src1.xyz = temp[42] MAD color[2].w, src0.x, src0.1, src1.y 78: src0.xyz = input[2] MAD temp[8].x, src0.xyz, src0.111, src0.000 79: src0.xyz = input[2], src1.xyz = const[1] MAD temp[8].y, src0.xyz, src0.111, src1.zzz 80: src0.xyz = temp[39], src1.xyz = temp[40] MAD color[2].z, src0.xxx, src0.111, src1.yyy 81: src0.xyz = temp[37], src1.xyz = temp[38] MAD color[2].y, src0.xxx, src0.111, src1.yyy 82: src0.xyz = input[3] MAD temp[9].x, src0.xyz, src0.111, src0.000 83: src0.xyz = input[3], src1.xyz = const[1] MAD temp[9].y, src0.xyz, src0.111, src1.zzz 84: src0.xyz = temp[35], src1.xyz = temp[36] MAD color[2].x, src0.xxx, src0.111, src1.yyy 85: BEGIN_TEX; 86: TEX temp[43], temp[8], 2D[1]; 87: TEX temp[44], temp[9], 2D[1] SEM_WAIT SEM_ACQUIRE; 88: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[43], src1.w = temp[43] SEM_WAIT DP4 temp[51].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 89: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[49].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 90: src0.xyz = temp[13], src0.w = temp[13], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[47].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 91: src0.xyz = temp[11], src0.w = temp[11], src1.xyz = temp[43], src1.w = temp[43] DP4 temp[45].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 92: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[52].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 93: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[50].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 94: src0.xyz = temp[14], src0.w = temp[14], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[48].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 95: src0.xyz = temp[12], src0.w = temp[12], src1.xyz = temp[44], src1.w = temp[44] DP4 temp[46].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 96: src0.xyz = temp[51], src1.xyz = temp[52] MAD color[3].w, src0.x, src0.1, src1.y 97: src0.xyz = temp[49], src1.xyz = temp[50] MAD color[3].z, src0.xxx, src0.111, src1.yyy 98: src0.xyz = temp[47], src1.xyz = temp[48] MAD color[3].y, src0.xxx, src0.111, src1.yyy 99: src0.xyz = temp[45], src1.xyz = temp[46] MAD color[3].x, src0.xxx, src0.111, src1.yyy Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0] MAD temp[4].x, src0.xyz, src0.111, src0.000 1: src0.xyz = input[0], src1.xyz = const[0] MAD temp[4].y, src0.xyz, src0.111, src1.xxx 2: src0.xyz = input[1] MAD temp[5].x, src0.xyz, src0.111, src0.000 3: src0.xyz = input[1], src1.xyz = const[0] MAD temp[5].y, src0.xyz, src0.111, src1.xxx 4: src0.xyz = input[0] MAD temp[6].x, src0.xyz, src0.111, src0.000 5: src0.xyz = input[0], src1.xyz = const[0] MAD temp[6].y, src0.xyz, src0.111, src1.yyy 6: src0.xyz = input[1] MAD temp[7].x, src0.xyz, src0.111, src0.000 7: src0.xyz = input[1], src1.xyz = const[0] MAD temp[7].y, src0.xyz, src0.111, src1.yyy 8: src0.xyz = input[0] MAD temp[8].x, src0.xyz, src0.111, src0.000 9: src0.xyz = input[0], src1.xyz = const[0] MAD temp[8].y, src0.xyz, src0.111, src1.zzz 10: src0.xyz = input[1] MAD temp[9].x, src0.xyz, src0.111, src0.000 11: src0.xyz = input[1], src1.xyz = const[0] MAD temp[9].y, src0.xyz, src0.111, src1.zzz 12: src0.xyz = input[0] MAD temp[10].x, src0.xyz, src0.111, src0.000 13: src0.xyz = input[0], src0.w = const[0] MAD temp[10].y, src0.xyz, src0.111, src0.www 14: src0.xyz = input[1] MAD temp[11].x, src0.xyz, src0.111, src0.000 15: src0.xyz = input[1], src0.w = const[0] MAD temp[11].y, src0.xyz, src0.111, src0.www 16: src0.xyz = input[2] MAD temp[12].x, src0.xyz, src0.111, src0.000 17: src0.xyz = input[2], src1.xyz = const[1] MAD temp[12].y, src0.xyz, src0.111, src1.xxx 18: src0.xyz = input[3] MAD temp[13].x, src0.xyz, src0.111, src0.000 19: src0.xyz = input[3], src1.xyz = const[1] MAD temp[13].y, src0.xyz, src0.111, src1.xxx 20: BEGIN_TEX; 21: TEX temp[15], temp[4], 2D[0]; 22: TEX temp[16], temp[5], 2D[0]; 23: TEX temp[17], temp[6], 2D[0]; 24: TEX temp[18], temp[7], 2D[0]; 25: TEX temp[19], temp[8], 2D[0]; 26: TEX temp[20], temp[9], 2D[0]; 27: TEX temp[21], temp[10], 2D[0]; 28: TEX temp[22], temp[11], 2D[0]; 29: TEX temp[12], temp[12], 2D[1]; 30: TEX temp[13], temp[13], 2D[1] SEM_WAIT SEM_ACQUIRE; 31: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[12], src1.w = temp[12] SEM_WAIT DP4 temp[29].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 32: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[12], src1.w = temp[12] DP4 temp[27].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 33: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[12], src1.w = temp[12] DP4 temp[25].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 34: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[12], src1.w = temp[12] DP4 temp[23].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 35: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[30].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 36: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[28].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 37: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[26].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 38: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[24].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 39: src0.xyz = temp[29], src1.xyz = temp[30] MAD color[0].w, src0.x, src0.1, src1.y 40: src0.xyz = input[2] MAD temp[12].x, src0.xyz, src0.111, src0.000 41: src0.xyz = input[2], src1.xyz = const[1] MAD temp[12].y, src0.xyz, src0.111, src1.yyy 42: src0.xyz = temp[27], src1.xyz = temp[28] MAD color[0].z, src0.xxx, src0.111, src1.yyy 43: src0.xyz = temp[25], src1.xyz = temp[26] MAD color[0].y, src0.xxx, src0.111, src1.yyy 44: src0.xyz = input[3] MAD temp[13].x, src0.xyz, src0.111, src0.000 45: src0.xyz = input[3], src1.xyz = const[1] MAD temp[13].y, src0.xyz, src0.111, src1.yyy 46: src0.xyz = temp[23], src1.xyz = temp[24] MAD color[0].x, src0.xxx, src0.111, src1.yyy 47: BEGIN_TEX; 48: TEX temp[12], temp[12], 2D[1]; 49: TEX temp[13], temp[13], 2D[1] SEM_WAIT SEM_ACQUIRE; 50: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[12], src1.w = temp[12] SEM_WAIT DP4 temp[37].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 51: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[12], src1.w = temp[12] DP4 temp[35].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 52: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[12], src1.w = temp[12] DP4 temp[33].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 53: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[12], src1.w = temp[12] DP4 temp[31].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 54: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[38].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 55: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[36].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 56: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[34].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 57: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[32].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 58: src0.xyz = temp[37], src1.xyz = temp[38] MAD color[1].w, src0.x, src0.1, src1.y 59: src0.xyz = input[2] MAD temp[12].x, src0.xyz, src0.111, src0.000 60: src0.xyz = input[2], src1.xyz = const[0] MAD temp[12].y, src0.xyz, src0.111, src1.zzz 61: src0.xyz = temp[35], src1.xyz = temp[36] MAD color[1].z, src0.xxx, src0.111, src1.yyy 62: src0.xyz = temp[33], src1.xyz = temp[34] MAD color[1].y, src0.xxx, src0.111, src1.yyy 63: src0.xyz = input[3] MAD temp[13].x, src0.xyz, src0.111, src0.000 64: src0.xyz = input[3], src1.xyz = const[0] MAD temp[13].y, src0.xyz, src0.111, src1.zzz 65: src0.xyz = temp[31], src1.xyz = temp[32] MAD color[1].x, src0.xxx, src0.111, src1.yyy 66: BEGIN_TEX; 67: TEX temp[12], temp[12], 2D[1]; 68: TEX temp[13], temp[13], 2D[1] SEM_WAIT SEM_ACQUIRE; 69: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[12], src1.w = temp[12] SEM_WAIT DP4 temp[45].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 70: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[12], src1.w = temp[12] DP4 temp[43].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 71: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[12], src1.w = temp[12] DP4 temp[41].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 72: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[12], src1.w = temp[12] DP4 temp[39].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 73: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[46].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 74: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[44].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 75: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[42].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 76: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[13], src1.w = temp[13] DP4 temp[40].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 77: src0.xyz = temp[45], src1.xyz = temp[46] MAD color[2].w, src0.x, src0.1, src1.y 78: src0.xyz = input[2] MAD temp[12].x, src0.xyz, src0.111, src0.000 79: src0.xyz = input[2], src1.xyz = const[1] MAD temp[12].y, src0.xyz, src0.111, src1.zzz 80: src0.xyz = temp[43], src1.xyz = temp[44] MAD color[2].z, src0.xxx, src0.111, src1.yyy 81: src0.xyz = temp[41], src1.xyz = temp[42] MAD color[2].y, src0.xxx, src0.111, src1.yyy 82: src0.xyz = input[3] MAD temp[13].x, src0.xyz, src0.111, src0.000 83: src0.xyz = input[3], src1.xyz = const[1] MAD temp[13].y, src0.xyz, src0.111, src1.zzz 84: src0.xyz = temp[39], src1.xyz = temp[40] MAD color[2].x, src0.xxx, src0.111, src1.yyy 85: BEGIN_TEX; 86: TEX temp[47], temp[12], 2D[1]; 87: TEX temp[48], temp[13], 2D[1] SEM_WAIT SEM_ACQUIRE; 88: src0.xyz = temp[21], src0.w = temp[21], src1.xyz = temp[47], src1.w = temp[47] SEM_WAIT DP4 temp[55].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 89: src0.xyz = temp[19], src0.w = temp[19], src1.xyz = temp[47], src1.w = temp[47] DP4 temp[53].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 90: src0.xyz = temp[17], src0.w = temp[17], src1.xyz = temp[47], src1.w = temp[47] DP4 temp[51].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 91: src0.xyz = temp[15], src0.w = temp[15], src1.xyz = temp[47], src1.w = temp[47] DP4 temp[49].x, src0.xyz, src1.xyz DP4, src0.w, src1.w 92: src0.xyz = temp[22], src0.w = temp[22], src1.xyz = temp[48], src1.w = temp[48] DP4 temp[56].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 93: src0.xyz = temp[20], src0.w = temp[20], src1.xyz = temp[48], src1.w = temp[48] DP4 temp[54].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 94: src0.xyz = temp[18], src0.w = temp[18], src1.xyz = temp[48], src1.w = temp[48] DP4 temp[52].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 95: src0.xyz = temp[16], src0.w = temp[16], src1.xyz = temp[48], src1.w = temp[48] DP4 temp[50].y, src0.xyz, src1.xyz DP4, src0.w, src1.w 96: src0.xyz = temp[55], src1.xyz = temp[56] MAD color[3].w, src0.x, src0.1, src1.y 97: src0.xyz = temp[53], src1.xyz = temp[54] MAD color[3].z, src0.xxx, src0.111, src1.yyy 98: src0.xyz = temp[51], src1.xyz = temp[52] MAD color[3].y, src0.xxx, src0.111, src1.yyy 99: src0.xyz = temp[49], src1.xyz = temp[50] MAD color[3].x, src0.xxx, src0.111, src1.yyy r300compiler error: compiler/r300_fragprog_emit.c::begin_tex(): Too many texture indirections ~~~~~~~~ FRAGMENT PROGRAM ~~~~~~~ ~ 96 Instructions ~ 76 Vector Instructions (RGB) ~ 36 Scalar Instructions (Alpha) ~ 0 Flow Control Instructions ~ 16 Texture Instructions ~ 0 Presub Operations ~ 0 OMOD Operations ~ 57 Temporary Registers ~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~ r300 FP: Compiler Error: compiler/r300_fragprog_emit.c::begin_tex(): Too many texture indirections Using a dummy shader instead. ======CUT==========