Inheritance: Register
Example #1
0
 public UnaryOp(UnaryOpKind op, DestRegister dest, SrcRegister src)
 {
     this.op = op;
     this.dest = dest;
     this.src = src;
 }
Example #2
0
 public TernaryOp(TernaryOpKind op, DestRegister dest, SrcRegister src1, SrcRegister src2, SrcRegister src3)
 {
     this.op = op;
     this.dest = dest;
     this.src1 = src1;
     this.src2 = src2;
     this.src3 = src3;
 }
Example #3
0
 public TexLoad(DestRegister dest, SrcRegister sampler, SrcRegister tex)
 {
     this.dest = dest;
     this.sampler = sampler;
     this.tex = tex;
 }
Example #4
0
 public BinaryOp(BinOpKind op, DestRegister dest, SrcRegister src1, SrcRegister src2)
 {
     this.op = op;
     this.dest = dest;
     this.src1 = src1;
     this.src2 = src2;
 }
Example #5
0
 public Mov(DestRegister dest, SrcRegister src)
 {
     this.dest = dest;
     this.src = src;
 }
Example #6
0
        internal Vector4f ReadValue(SrcRegister src)
        {
            Vector4f val = GetReg (src);
            //if (Tracing.Enabled) Console.WriteLine ("\t {0} -> {1}", src, val);

            val = val.Shuffle ((ShuffleSel)src.Swizzle);
            switch (src.Modifier) {
            case SrcModifier.None:
                break;
            case SrcModifier.Negate:
                val = val * Vector4f.MinusOne;
                break;
            default:
                throw new Exception ("can't handle src reg modifier "+src.Modifier);
            }

            return val;
        }
Example #7
0
        internal void LoadValue(SrcRegister src)
        {
            ilgen.Emit (OpCodes.Ldloc, GetReg (src.Kind, src.Number));

            if (src.Swizzle != SrcRegister.MakeSwizzle (0, 1, 2, 3)) {
                ilgen.Emit (OpCodes.Ldc_I4, src.Swizzle);
                ilgen.Emit (OpCodes.Call, typeof (VectorOperations).GetMethod ("Shuffle", new Type[] { typeof (Vector4f), typeof (ShuffleSel)}));
            }

            switch (src.Modifier) {
            case SrcModifier.None:
                break;
            case SrcModifier.Negate:
                //FIXME We could be using a ^ (1 << 31) to negate (could we?)
                //FIXME Make The JIT intrinsify this
                ilgen.Emit (OpCodes.Call, typeof (Vector4f).GetMethod ("get_MinusOne"));
                ilgen.Emit (OpCodes.Call, typeof (Vector4f).GetMethod ("op_Multiply"));
                break;
            default:
                throw new Exception ("can't handle src reg modifier " + src.Modifier);
            }
        }
Example #8
0
 SrcRegister ParseSrcReg()
 {
     int val = 0;
     if (!Read (ref val))
         throw new Exception ("can't read src register");
     SrcRegister reg = new SrcRegister (val);
     if (reg.Number >= 32)
         throw new Exception ("Invalid src reg number " + reg.Number);
     return reg;
 }
Example #9
0
 void VisitSrcReg(SrcRegister src)
 {
     VisitReg (src);
 }
Example #10
0
 void LoadScalar(SrcRegister src)
 {
     ilgen.Emit (OpCodes.Ldloca, GetReg (src.Kind, src.Number));
     switch (src.Swizzle) {
     case 0: //R
         ilgen.Emit (OpCodes.Call, typeof (Vector4f).GetMethod ("get_X"));
         break;
     case (1 << 0) | (1 << 2)  | (1 << 4) | (1 << 6): //G
         ilgen.Emit (OpCodes.Call, typeof (Vector4f).GetMethod ("get_Y"));
         break;
     case (2 << 0) | (2 << 2)  | (2 << 4) | (2 << 6): //B
         ilgen.Emit (OpCodes.Call, typeof (Vector4f).GetMethod ("get_Z"));
         break;
     case (3 << 0) | (3 << 2)  | (3 << 4) | (3 << 6): //A
         ilgen.Emit (OpCodes.Call, typeof (Vector4f).GetMethod ("get_W"));
         break;
     default:
         throw new Exception ("Invalid swizzle for scalar " + src.Swizzle.ToString ("X"));
     }
 }
Example #11
0
 void ApplyMathScalarUnaryToElement(DestRegister dest, SrcRegister src, string func, string element)
 {
     ilgen.Emit (OpCodes.Ldloca, GetReg (dest.Kind, dest.Number));
     LoadScalar (src);
     ilgen.Emit (OpCodes.Call, typeof (Math).GetMethod (func));
     ilgen.Emit (OpCodes.Conv_R4);
     ilgen.Emit (OpCodes.Call, typeof (Vector4f).GetMethod ("set_" + element));
 }
Example #12
0
 internal void SampleTexture(int sampler, SrcRegister texReg)
 {
     ilgen.Emit (OpCodes.Ldloc, samplerMap [sampler]);
     LoadValue (texReg);
     ilgen.Emit (OpCodes.Call, typeof (Sampler).GetMethod ("Sample"));
 }