private void GetTextureValueAndScalarType(PredefinedObjectTypeSyntax node, out TypeSymbol valueType, out ScalarType scalarType)
{
if (node.TemplateArgumentList != null)
{
var valueTypeSyntax = (TypeSyntax) node.TemplateArgumentList.Arguments[0];
valueType = Bind(valueTypeSyntax, x => BindType(x, null)).TypeSymbol;
switch (valueTypeSyntax.Kind)
{
case SyntaxKind.PredefinedScalarType:
scalarType = TypeFacts.GetScalarType((ScalarTypeSyntax) valueTypeSyntax);
break;
case SyntaxKind.PredefinedVectorType:
scalarType = TypeFacts.GetVectorType(((VectorTypeSyntax) valueTypeSyntax).TypeToken.Kind).Item1;
break;
case SyntaxKind.PredefinedGenericVectorType:
scalarType = TypeFacts.GetScalarType(((GenericVectorTypeSyntax) valueTypeSyntax).ScalarType);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
else
{
valueType = IntrinsicTypes.Float4;
scalarType = ScalarType.Float;
}
}
}