BuiltInFunctionEmulator::TBuiltInFunction BuiltInFunctionEmulator::IdentifyFunction( TOperator op, const TType& param1, const TType& param2) { // Right now for all the emulated functions with two parameters, the two // parameters have the same type. if (param1.getNominalSize() != param2.getNominalSize() || param1.getSecondarySize() != param2.getSecondarySize() || param1.getNominalSize() > 4 || param1.getSecondarySize() > 4) return TFunctionUnknown; unsigned int function = TFunctionUnknown; switch (op) { case EOpDistance: function = TFunctionDistance1_1; break; case EOpDot: function = TFunctionDot1_1; break; case EOpReflect: function = TFunctionReflect1_1; break; default: break; } if (function == TFunctionUnknown) return TFunctionUnknown; if (param1.isVector()) function += param1.getNominalSize() - 1; return static_cast<TBuiltInFunction>(function); }
BuiltInFunctionEmulator::TBuiltInFunction BuiltInFunctionEmulator::IdentifyFunction( TOperator op, const TType& param) { if (param.getNominalSize() > 4 || param.getSecondarySize() > 4) return TFunctionUnknown; unsigned int function = TFunctionUnknown; switch (op) { case EOpCos: function = TFunctionCos1; break; case EOpLength: function = TFunctionLength1; break; case EOpNormalize: function = TFunctionNormalize1; break; default: break; } if (function == TFunctionUnknown) return TFunctionUnknown; if (param.isVector()) function += param.getNominalSize() - 1; return static_cast<TBuiltInFunction>(function); }
TString TOutputGLSLBase::getTypeName(const TType &type) { TInfoSinkBase out; if (type.isMatrix()) { out << "mat"; out << type.getNominalSize(); if (type.getSecondarySize() != type.getNominalSize()) { out << "x" << type.getSecondarySize(); } } else if (type.isVector()) { switch (type.getBasicType()) { case EbtFloat: out << "vec"; break; case EbtInt: out << "ivec"; break; case EbtBool: out << "bvec"; break; case EbtUInt: out << "uvec"; break; default: UNREACHABLE(); } out << type.getNominalSize(); } else { if (type.getBasicType() == EbtStruct) out << hashName(type.getStruct()->name()); else out << type.getBasicString(); } return TString(out.c_str()); }