case EOpFwidth: if(visit == PostVisit) emit(sw::Shader::OPCODE_FWIDTH, result, arg); break;\r
case EOpAny: if(visit == PostVisit) emit(sw::Shader::OPCODE_ANY, result, arg); break;\r
case EOpAll: if(visit == PostVisit) emit(sw::Shader::OPCODE_ALL, result, arg); break;\r
+ case EOpTranspose:\r
+ if(visit == PostVisit)\r
+ {\r
+ int numCols = arg->getNominalSize();\r
+ int numRows = arg->getSecondarySize();\r
+ for(int i = 0; i < numCols; ++i)\r
+ {\r
+ for(int j = 0; j < numRows; ++j)\r
+ {\r
+ Instruction *mov = emit(sw::Shader::OPCODE_MOV, result, arg);\r
+ mov->src[0].index += i;\r
+ mov->src[0].swizzle = 0x55 * j;\r
+ mov->dst.index += j;\r
+ mov->dst.mask = 1 << i;\r
+ }\r
+ }\r
+ }\r
+ break;\r
default: UNREACHABLE();\r
}\r
\r