public NvGpuEngine3d(NsGpu Gpu)
        {
            this.Gpu = Gpu;

            Registers = new int[0xe00];

            Methods = new Dictionary <int, NvGpuMethod>();

            void AddMethod(int Meth, int Count, int Stride, NvGpuMethod Method)
            {
                while (Count-- > 0)
                {
                    Methods.Add(Meth, Method);

                    Meth += Stride;
                }
            }

            AddMethod(0x585, 1, 1, VertexEndGl);
            AddMethod(0x674, 1, 1, ClearBuffers);
            AddMethod(0x6c3, 1, 1, QueryControl);
            AddMethod(0x8e4, 16, 1, CbData);
            AddMethod(0x904, 1, 1, CbBind);

            ConstBuffers = new ConstBuffer[18];

            FrameBuffers = new HashSet <long>();
        }
Exemple #2
0
        public static GalTextureSampler MakeSampler(NsGpu Gpu, AMemory Memory, long TscPosition)
        {
            int[] Tsc = ReadWords(Memory, TscPosition, 8);

            GalTextureWrap AddressU = (GalTextureWrap)((Tsc[0] >> 0) & 7);
            GalTextureWrap AddressV = (GalTextureWrap)((Tsc[0] >> 3) & 7);
            GalTextureWrap AddressP = (GalTextureWrap)((Tsc[0] >> 6) & 7);

            GalTextureFilter    MagFilter = (GalTextureFilter)((Tsc[1] >> 0) & 3);
            GalTextureFilter    MinFilter = (GalTextureFilter)((Tsc[1] >> 4) & 3);
            GalTextureMipFilter MipFilter = (GalTextureMipFilter)((Tsc[1] >> 6) & 3);

            GalColorF BorderColor = new GalColorF(
                BitConverter.Int32BitsToSingle(Tsc[4]),
                BitConverter.Int32BitsToSingle(Tsc[5]),
                BitConverter.Int32BitsToSingle(Tsc[6]),
                BitConverter.Int32BitsToSingle(Tsc[7]));

            return(new GalTextureSampler(
                       AddressU,
                       AddressV,
                       AddressP,
                       MinFilter,
                       MagFilter,
                       MipFilter,
                       BorderColor));
        }
Exemple #3
0
        public NsGpuPGraph(NsGpu Gpu)
        {
            this.Gpu = Gpu;

            Registers = new uint[0x1000];

            SubChannels = new NsGpuEngine[8];

            CurrentVertexBuffers = new Dictionary <long, int>();
        }
        public NvGpuEngine2d(NsGpu Gpu)
        {
            this.Gpu = Gpu;

            Registers = new int[0xe00];

            Methods = new Dictionary <int, NvGpuMethod>();

            void AddMethod(int Meth, int Count, int Stride, NvGpuMethod Method)
            {
                while (Count-- > 0)
                {
                    Methods.Add(Meth, Method);

                    Meth += Stride;
                }
            }

            AddMethod(0xb5, 1, 1, TextureCopy);
        }
Exemple #5
0
        public static GalTexture MakeTexture(NsGpu Gpu, AMemory Memory, long TicPosition)
        {
            int[] Tic = ReadWords(Memory, TicPosition, 8);

            GalTextureFormat Format = (GalTextureFormat)(Tic[0] & 0x7f);

            long TextureAddress = (uint)Tic[1];

            TextureAddress |= (long)((ushort)Tic[2]) << 32;

            TextureAddress = Gpu.GetCpuAddr(TextureAddress);

            TextureSwizzle Swizzle = (TextureSwizzle)((Tic[2] >> 21) & 7);

            int Pitch = (Tic[3] & 0xffff) << 5;

            int BlockHeightLog2 = (Tic[3] >> 3) & 7;

            int BlockHeight = 1 << BlockHeightLog2;

            int Width  = (Tic[4] & 0xffff) + 1;
            int Height = (Tic[5] & 0xffff) + 1;

            Texture Texture = new Texture(
                TextureAddress,
                Width,
                Height,
                Pitch,
                BlockHeight,
                Swizzle,
                Format);

            byte[] Data = TextureReader.Read(Memory, Texture);

            return(new GalTexture(Data, Width, Height, Format));
        }