示例#1
0
 public RayTracing(Memory insMem, Memory triangleMem, Memory dataMem)
 {
     ScalarRegisterFile = new RegisterFile <Scalar>(33);
     VectorRegisterFile = new RegisterFile <Vector4>(16);
     InstructionMemory  = insMem;
     DataMemory         = dataMem;
     IC      = new IntersectionCore(triangleMem);
     cache   = new Dictionary <int, RTInstruction>(insMem.Mem.Length / 4);
     decoder = new Decoder(File.OpenText("RT.isa"), 6);
 }
示例#2
0
 public RayTracing(Memory insMem, FileInfo triangle, Memory dataMem, FileStream constant)
 {
     ScalarRegisterFile = new RegisterFile <Scalar>(33);
     VectorRegisterFile = new RegisterFile <Vector4>(16);
     dataMem.LoadToMemory(constant, true);
     InstructionMemory = insMem;
     DataMemory        = dataMem;
     IC      = new IntersectionCore(triangle.OpenText());
     cache   = new Dictionary <int, RTInstruction>(insMem.Mem.Length / 4);
     decoder = new Decoder(File.OpenText("RT.isa"), 6);
 }
        internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
        {
            sRF[29] = sRF[29] + 4;
            var bytes = BitConverter.GetBytes(sRF[r0]);

            mem.Write(sRF[29] + sRF[28], bytes);
        }
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     sRF[r0] = (int)(sRF[r0].i & 0xffff0000 | (uint)imm);
 }
        internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
        {
            uint shift = (uint)imm << 16;

            sRF[r0] = (int)((uint)sRF[r0].i & 0x0000ffff | shift);
        }
示例#6
0
        internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
        {
            var result = ic.Process(vRF[14], vRF[15]);

            vRF[14] = result.point;
            vRF[15] = result.normal;
        }
示例#7
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     vRF[r0] = Vector4.Add(vRF[r1], vRF[r2]);
 }
        internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
        {
            if (sRF[29] == 0)
            {
                Console.Write("Tried to pop from empty stack!!!");
                return;
            }

            Vector4 vec = new Vector4(MemoryMarshal.Read <float>(mem.Read(sRF[29] + sRF[28] - 12)),
                                      MemoryMarshal.Read <float>(mem.Read(sRF[29] + sRF[28] - 8)),
                                      MemoryMarshal.Read <float>(mem.Read(sRF[29] + sRF[28] - 4)),
                                      MemoryMarshal.Read <float>(mem.Read(sRF[29] + sRF[28])));

            sRF[29] = sRF[29] - 16;
            vRF[r0] = vec;
        }
        internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
        {
            double x2 = Math.Pow(vRF[r1].X, 2);
            double y2 = Math.Pow(vRF[r1].Y, 2);
            double z2 = Math.Pow(vRF[r1].Z, 2);

            sRF[r0] = (float)Math.Sqrt(x2 + y2 + z2);
        }
示例#10
0
        internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
        {
            Vector4 vec = new Vector4(sRF[r2].f, sRF[r2].f, sRF[r2].f, sRF[r2].f);

            vRF[r0] = Vector4.Divide(vRF[r1], vec);
        }
 internal abstract void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore IC);
示例#12
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     if (sRF[r1] >= 0x20000000)
     {
         Vector4 vec = new Vector4(MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm, true)),
                                   MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 4, true)),
                                   MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 8, true)),
                                   MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 12, true)));
         vRF[r0] = vec;
     }
     else
     {
         Vector4 vec = new Vector4(MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm)),
                                   MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 4)),
                                   MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 8)),
                                   MemoryMarshal.Read <float>(mem.Read(sRF[r1].i + imm + 12)));
         vRF[r0] = vec;
     }
 }
示例#13
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     if (sRF[r1] >= 0x20000000)
     {
         sRF[r0] = MemoryMarshal.Read <int>(mem.Read(sRF[r1].i + imm, true));
     }
     else
     {
         sRF[r0] = MemoryMarshal.Read <int>(mem.Read(sRF[r1].i + imm));
     }
 }
示例#14
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     sRF[r0] = MathF.Sqrt(sRF[r1]);
 }
示例#15
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     if (sRF[32] == 1)
     {
         sRF[31] = sRF[31] + imm;
     }
 }
        internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
        {
            if (sRF[29] == 0)
            {
                Console.Write("Tried to pop from empty stack!!!");
                return;
            }

            sRF[r0] = MemoryMarshal.Read <int>(mem.Read(sRF[29] + sRF[28]));
            sRF[29] = sRF[29] - 4;
        }
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     sRF[29] = sRF[29] + 4;
     mem.Write(sRF[29] + sRF[28], BitConverter.GetBytes(vRF[r0].X));
     sRF[29] = sRF[29] + 4;
     mem.Write(sRF[29] + sRF[28], BitConverter.GetBytes(vRF[r0].Y));
     sRF[29] = sRF[29] + 4;
     mem.Write(sRF[29] + sRF[28], BitConverter.GetBytes(vRF[r0].Z));
     sRF[29] = sRF[29] + 4;
     mem.Write(sRF[29] + sRF[28], BitConverter.GetBytes(vRF[r0].W));
 }
示例#18
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     mem.Write(sRF[r1].i + imm, BitConverter.GetBytes(vRF[r0].X));
     mem.Write(sRF[r1].i + imm + 4, BitConverter.GetBytes(vRF[r0].Y));
     mem.Write(sRF[r1].i + imm + 8, BitConverter.GetBytes(vRF[r0].Z));
     mem.Write(sRF[r1].i + imm + 12, BitConverter.GetBytes(vRF[r0].W));
 }
示例#19
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     sRF[r0] = sRF[r1].i - imm;
 }
示例#20
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     // flag register represented by 33rd register in scalar reg file
     // only for simulator representation
     if (Vector4.Equals(vRF[r0], vRF[r1]))
     {
         sRF[32] = 0; // 0 if equal
     }
     else
     {
         sRF[32] = 3; // anything else if not equal
     }
 }
示例#21
0
        internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
        {
            var bytes = BitConverter.GetBytes(sRF[r0].i);

            mem.Write(sRF[r1].i + imm, bytes);
        }
示例#22
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     // flag register represented by 33rd register in scalar reg file
     // only for simulator representation
     if (sRF[r0].f == sRF[r1].f)
     {
         sRF[32] = 0;
     }
     else if (sRF[r0].f < sRF[r1].f)
     {
         sRF[32] = 1;
     }
     else if (sRF[r0].f > sRF[r1].f)
     {
         sRF[32] = 2;
     }
 }
示例#23
0
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     if (index == 0)
     {
         sRF[r0] = vRF[r1].X;
     }
     else if (index == 1)
     {
         sRF[r0] = vRF[r1].Y;
     }
     else if (index == 2)
     {
         sRF[r0] = vRF[r1].Z;
     }
     else if (index == 3)
     {
         sRF[r0] = vRF[r1].W;
     }
 }
 internal override void Process(RegisterFile <Vector4> vRF, RegisterFile <Scalar> sRF, Memory mem, IntersectionCore ic)
 {
     if (index == 0)
     {
         vRF[r0] = new Vector4(sRF[r1].f, vRF[r0].Y, vRF[r0].Z, vRF[r0].W);
     }
     else if (index == 1)
     {
         vRF[r0] = new Vector4(vRF[r0].X, sRF[r1].f, vRF[r0].Z, vRF[r0].W);
     }
     else if (index == 2)
     {
         vRF[r0] = new Vector4(vRF[r0].X, vRF[r0].Y, sRF[r1].f, vRF[r0].W);
     }
     else if (index == 3)
     {
         vRF[r0] = new Vector4(vRF[r0].X, vRF[r0].Y, vRF[r0].Z, sRF[r1].f);
     }
 }