private ITypeHLSL EmitTypeImpl(MidBuiltinType type)
{
var template = type.GetTemplate("hlsl");
if (template == null)
{
Diagnostics.Add(
Severity.Error,
new SourceRange(),
"No HLSL equivalent for type {0}", type);
return new ErrorTypeHLSL();
}
if (type.Args == null)
return new ScalarTypeHLSL(template);
var args = (from a in type.Args
select EmitGenericArg(a)).Eager();
// I hate hacks... :(
if (template == "__Array")
{
var baseType = (EmitTypeHLSL)args[0];
var count = (EmitValHLSL)args[1];
return MakeArrayType(
baseType,
count);
}
return new ScalarTypeHLSL(string.Format(template, args));
}