public void DeclareParamAndBind(
            MidAttributeWrapperDecl attr,
            ITypeHLSL attrType,
            string semantic,
            ref bool firstParam,
            Span span,
            string prefix = "")
        {
            var attrName = attr.Name.ToString();

            // \todo: Insist that the type
            // is a "real" type (rather than
            // a synthetic one that might be zero or more
            // real parameters...)

            var attrVal = DeclareParam(
                attrName,
                attrType,
                span,
                ref firstParam,
                semantic == null ? "" : ": " + semantic,
                prefix: prefix);

            BindAttr(attr, attrVal);
        }
 public void AddField(
     string name,
     ITypeHLSL type)
 {
     _fields.Add(new Field { Name = name, Type = type });
 }
        // Declaration helpers
        public void DeclareFields(
            ITypeHLSL type,
            Span span,
            string name,
            string prefix = "",
            string semantic = null,
            string suffix = "")
        {
            var val = type.CreateVal(name);

            var decls = DeclareBase(
                val,
                prefix,
                semantic,
                suffix + ";").ToArray();

            foreach (var d in decls)
            {
                span.WriteLine(d);
            }
        }
 public EmitValHLSL(
     ITypeHLSL type)
 {
     _type = type;
 }
 public PseudoArrayTypeHLSL(
     ITypeHLSL elementType,
     EmitValHLSL elementCount)
 {
     _elementType = elementType;
     _elementCount = elementCount;
 }
 private ITypeHLSL MakePseudoArrayElemType(
     ITypeHLSL type,
     EmitValHLSL count)
 {
     return MakePseudoArrayElemTypeImpl(
         (dynamic)type,
         count);
 }
 private EmitValHLSL GetField(
     EmitValHLSL objVal,
     ITypeHLSL fieldRep,
     string fieldName,
     int fieldIndex,
     Span span)
 {
     return GetFieldImpl(
         (dynamic)objVal,
         (dynamic)fieldRep,
         fieldName,
         fieldIndex,
         span);
 }
        private EmitValHLSL DeclareParam(
            string name,
            ITypeHLSL type,
            Span span,
            ref bool first,
            string semantic = null,
            string prefix = "")
        {
            var val = type.CreateVal(name);

            DeclareParam(
                val,
                prefix,
                semantic,
                ref first,
                span );

            return val;
        }
 private ITypeHLSL DeclareConnectorFields(
     ITypeHLSL rep,
     string name,
     string semantic,
     Span span,
     EmitValHLSL[] arrayDims = null)
 {
     DeclareFields(
         rep,
         span,
         name,
         semantic: semantic);
     return rep;
 }
 public ITypeHLSL MakeArrayType(
     ITypeHLSL elementType,
     EmitValHLSL elementCount)
 {
     if (elementType is RealTypeHLSL)
     {
         return new ArrayTypeHLSL(
             (RealTypeHLSL)elementType,
             elementCount);
     }
     else
     {
         return new PseudoArrayTypeHLSL(
             MakePseudoArrayElemType(elementType, elementCount),
             elementCount);
     }
 }