public MidMemberBind( MidVal obj, MidMemberDecl decl) { _obj = obj; _decl = decl; }
public MidElementCtorArg( MidAttributeDecl attribute, MidVal val) { _attribute = attribute; _val = val; }
public MidBreakExp( SourceRange range, MidLabel label, MidVal value) : base(range, new MidVoidType()) { _label = label; _value = value; }
private int DecomposeVertexStream(MidVal bufferVal, MidVal offsetVal, MidVal strideVal) { int result = _vertexBuffers.Count; _vertexBuffers.Add(bufferVal); _vertexBufferOffsets.Add(offsetVal); _vertexBufferStrides.Add(strideVal); return(result); }
private EmitValHLSL EmitUniformRef(MidVal uniformVal, Span span) { var uniformType = uniformVal.Type; if (uniformType is MidBuiltinType) { var builtinType = (MidBuiltinType)uniformType; switch (builtinType.Name) { case "Buffer": case "Texture1D": case "Texture1DArray": case "Texture2D": case "Texture2DArray": case "Texture3D": case "Texture3DArray": case "TextureCube": case "TextureCubeArray": return EmitShaderResourceRef(builtinType, uniformVal, span); case "SamplerState": case "SamplerComparisonState": return EmitSamplerStateRef(builtinType, uniformVal, span); } } var uString = _shared.EmitUniformRef(uniformVal); var uType = EmitType(uniformVal.Type); return new SimpleValHLSL( uString, (RealTypeHLSL) uType); }
private EmitValHLSL EmitShaderResourceRef( MidBuiltinType type, MidVal uniformVal, Span span) { object key = GetUniformValKey(uniformVal); EmitValHLSL result = VoidVal; if (_uniformResourceCache.TryGetValue(key, out result)) { return result; } int index = _shaderResources.Count; string name = _shared.GenerateName(uniformVal.ToString()); DeclareFields( EmitType(type), _resourceHeaderSpan, name, suffix: string.Format(" : register(t{0})", index)); _shaderResources.Add(uniformVal); result = new SimpleValHLSL( name, (SimpleTypeHLSL)EmitType(uniformVal.Type)); _uniformResourceCache[key] = result; return result; }
private EmitValHLSL EmitExpImpl(MidVal val, Span span) { return EmitVal(val, span); }
// private EmitValHLSL EmitConstantRef(MidVal constantVal, Span span) { if (constantVal is MidLit) return EmitExp(constantVal, span); else if (constantVal is MidAttributeRef) { var attr = ((MidAttributeRef)constantVal); return EmitExp(attr.Decl.Exp, span); } else { Diagnostics.Add( Severity.Error, new SourceRange(), "Unacceptable constant expression in HLSL emit"); return new ErrorValHLSL(); } }
private EmitValHLSL EmitBuiltinAppArg( MidVal midVal, Span span) { var emitVal = EmitVal(midVal, span); // If passing a "connector" into // a builtin function, we need to // make sure to change from record // value to simple value if (emitVal is TupleValHLSL) { var tupleVal = (TupleValHLSL)emitVal; if (tupleVal.Type is RealTypeHLSL) { var realType = (RealTypeHLSL)tupleVal.Type; var newVal = realType.CreateVal(_shared.GenerateName("__record")); DeclareAndInitLocal(newVal, emitVal, span); return newVal; } } return emitVal; }
public string CreateUniform( string baseName, MidVal uniformVal) { var name = GenerateName(baseName); int slotSize = 16; int valSlot = _totalUniformSlots; int valSlotCount = CountSlots(uniformVal.Type); _totalUniformSlots += valSlotCount; _uniforms.Add(new UniformInfo { Name = name, Val = uniformVal, Slot = valSlot, ByteOffset = valSlot * slotSize, }); return name; }
public MidFieldMemberRef( MidVal obj, MidFieldDecl decl) { _obj = obj; _decl = decl; }
public void Insert( MidVar var, MidVal val ) { _vars[var] = val; }
private void TransformChildrenImpl( MidVal val) { }
public MidVal Transform(MidVal exp) { var e = (MidVal) PreTransform(exp); TransformChildren(e); e = (MidVal)PostTransform(e); return e; }
private MidVal Replace( MidVal val) { return ReplaceImpl((dynamic)val); }
// private EmitValHLSL EmitVal(MidVal val, Span span) { return EmitValImpl((dynamic)val, span); }
private object GetUniformValKey( MidVal val) { return GetUniformValKeyImpl((dynamic)val); }
public void PreEmitExpImpl( MidVal exp, Span span) { }
public string EmitUniformRef( MidVal uniformVal) { if (uniformVal is MidAttributeRef) { var attrDecl = ((MidAttributeRef)uniformVal).Decl; return _uniformAttributes.Cache(attrDecl, () => CreateUniform(attrDecl.Name.ToString(), uniformVal)); } return CreateUniform("u_", uniformVal); }
private int DecomposeVertexStream(MidVal bufferVal, MidVal offsetVal, MidVal strideVal ) { int result = _vertexBuffers.Count; _vertexBuffers.Add(bufferVal); _vertexBufferOffsets.Add(offsetVal); _vertexBufferStrides.Add(strideVal); return result; }