private AttrInfo DecomposeAttrImpl( MidBuiltinApp app, DecomposeAttrContext context) { string template = app.Decl.GetTemplate("blend"); if (template == null) { throw OperationTooComplexError(app.Range); } var args = app.Args.ToArray(); switch (template) { case "AddFloat4": { var left = DecomposeAttr(args[0], context); var right = DecomposeAttr(args[1], context); return new OpInfo( app.Range, D3D11_BLEND_OP.D3D11_BLEND_OP_ADD, left, right); } case "MulFloat4": { var left = DecomposeAttr(args[0], context); var right = DecomposeAttr(args[1], context); return new TermInfo(app.Range, left, right); } case "MulFloat_Float4": { var left = DecomposeAttr(args[0], context.SwitchToAlpha()); var right = DecomposeAttr(args[1], context); return new TermInfo(app.Range, left, right); } case "MulFloat4_Float": { var left = DecomposeAttr(args[0], context); var right = DecomposeAttr(args[1], context.SwitchToAlpha()); return new TermInfo(app.Range, left, right); } case "GetAlpha": { var arg = DecomposeAttr(args[0], context.SwitchToAlpha()); return arg; } case "SubFloat": { var left = DecomposeAttr(args[0], context); var right = DecomposeAttr(args[1], context); return new SubInfo(app.Range, left, right); } case "IntToFloat": { var arg = DecomposeAttr(args[0], context); return arg; } default: throw OperationTooComplexError(app.Range); } }
private AttrInfo DecomposeAttrImpl( MidBuiltinApp app, DecomposeAttrContext context) { string template = app.Decl.GetTemplate("blend"); if (template == null) { throw OperationTooComplexError(app.Range); } var args = app.Args.ToArray(); switch (template) { case "AddFloat4": { var left = DecomposeAttr(args[0], context); var right = DecomposeAttr(args[1], context); return(new OpInfo( app.Range, D3D11_BLEND_OP.D3D11_BLEND_OP_ADD, left, right)); } case "MulFloat4": { var left = DecomposeAttr(args[0], context); var right = DecomposeAttr(args[1], context); return(new TermInfo(app.Range, left, right)); } case "MulFloat_Float4": { var left = DecomposeAttr(args[0], context.SwitchToAlpha()); var right = DecomposeAttr(args[1], context); return(new TermInfo(app.Range, left, right)); } case "MulFloat4_Float": { var left = DecomposeAttr(args[0], context); var right = DecomposeAttr(args[1], context.SwitchToAlpha()); return(new TermInfo(app.Range, left, right)); } case "GetAlpha": { var arg = DecomposeAttr(args[0], context.SwitchToAlpha()); return(arg); } case "SubFloat": { var left = DecomposeAttr(args[0], context); var right = DecomposeAttr(args[1], context); return(new SubInfo(app.Range, left, right)); } case "IntToFloat": { var arg = DecomposeAttr(args[0], context); return(arg); } default: throw OperationTooComplexError(app.Range); } }