public MidMemberBind(
     MidVal obj,
     MidMemberDecl decl)
 {
     _obj = obj;
     _decl = decl;
 }
 public MidElementCtorArg(
     MidAttributeDecl attribute,
     MidVal val)
 {
     _attribute = attribute;
     _val = val;
 }
Example #3
0
 public MidBreakExp(
     SourceRange range,
     MidLabel label,
     MidVal value)
     : base(range, new MidVoidType())
 {
     _label = label;
     _value = value;
 }
Example #4
0
        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;
        }