コード例 #1
0
        private void Execute(NvGpuVmm Vmm, int[] Arguments)
        {
            StructUnpacker Unpacker = new StructUnpacker(Vmm, ConfigStructAddress + 0x20);

            SurfacePixelFormat PixelFormat = (SurfacePixelFormat)Unpacker.Read(7);

            int ChromaLocHoriz = Unpacker.Read(2);
            int ChromaLocVert  = Unpacker.Read(2);

            int BlockLinearKind       = Unpacker.Read(4);
            int BlockLinearHeightLog2 = Unpacker.Read(4);

            int Reserved0 = Unpacker.Read(3);
            int Reserved1 = Unpacker.Read(10);

            int SurfaceWidthMinus1  = Unpacker.Read(14);
            int SurfaceHeightMinus1 = Unpacker.Read(14);

            int GobBlockHeight = 1 << BlockLinearHeightLog2;

            int SurfaceWidth  = SurfaceWidthMinus1 + 1;
            int SurfaceHeight = SurfaceHeightMinus1 + 1;

            SurfaceOutputConfig OutputConfig = new SurfaceOutputConfig(
                PixelFormat,
                SurfaceWidth,
                SurfaceHeight,
                GobBlockHeight,
                OutputSurfaceLumaAddress,
                OutputSurfaceChromaUAddress,
                OutputSurfaceChromaVAddress);

            Gpu.VideoDecoder.CopyPlanes(Vmm, OutputConfig);
        }
コード例 #2
0
        private void Execute(NvGpuVmm vmm, int[] arguments)
        {
            StructUnpacker unpacker = new StructUnpacker(vmm, _configStructAddress + 0x20);

            SurfacePixelFormat pixelFormat = (SurfacePixelFormat)unpacker.Read(7);

            int chromaLocHoriz = unpacker.Read(2);
            int chromaLocVert  = unpacker.Read(2);

            int blockLinearKind       = unpacker.Read(4);
            int blockLinearHeightLog2 = unpacker.Read(4);

            int reserved0 = unpacker.Read(3);
            int reserved1 = unpacker.Read(10);

            int surfaceWidthMinus1  = unpacker.Read(14);
            int surfaceHeightMinus1 = unpacker.Read(14);

            int gobBlockHeight = 1 << blockLinearHeightLog2;

            int surfaceWidth  = surfaceWidthMinus1 + 1;
            int surfaceHeight = surfaceHeightMinus1 + 1;

            SurfaceOutputConfig outputConfig = new SurfaceOutputConfig(
                pixelFormat,
                surfaceWidth,
                surfaceHeight,
                gobBlockHeight,
                _outputSurfaceLumaAddress,
                _outputSurfaceChromaUAddress,
                _outputSurfaceChromaVAddress);

            _gpu.VideoDecoder.CopyPlanes(vmm, outputConfig);
        }
コード例 #3
0
        private void Execute(GpuContext gpu)
        {
            StructUnpacker unpacker = new StructUnpacker(gpu.MemoryAccessor, _configStructAddress + 0x20);

            SurfacePixelFormat pixelFormat = (SurfacePixelFormat)unpacker.Read(7);

            int chromaLocHoriz = unpacker.Read(2);
            int chromaLocVert  = unpacker.Read(2);

            int blockLinearKind       = unpacker.Read(4);
            int blockLinearHeightLog2 = unpacker.Read(4);

            int reserved0 = unpacker.Read(3);
            int reserved1 = unpacker.Read(10);

            int surfaceWidthMinus1  = unpacker.Read(14);
            int surfaceHeightMinus1 = unpacker.Read(14);

            int gobBlockHeight = 1 << blockLinearHeightLog2;

            int surfaceWidth  = surfaceWidthMinus1 + 1;
            int surfaceHeight = surfaceHeightMinus1 + 1;

            SurfaceOutputConfig outputConfig = new SurfaceOutputConfig(
                pixelFormat,
                surfaceWidth,
                surfaceHeight,
                gobBlockHeight,
                _outputSurfaceLumaAddress,
                _outputSurfaceChromaUAddress,
                _outputSurfaceChromaVAddress);

            _vdec.CopyPlanes(gpu, outputConfig);
        }
コード例 #4
0
ファイル: ImgTex.cs プロジェクト: jacobtipp/trACE
        public static ImgTex AllocateTempBuffer(uint _width, uint _height, SurfacePixelFormat _image_type)
        {
            var tempBuffer = new ImgTex();  // 0x88 / 136

            tempBuffer.ImageData = new RenderSurface();
            tempBuffer.ImageData.Create(_width, _height, _image_type, true);
            CustomTextureTable.Add(tempBuffer);
            return(tempBuffer);
        }
コード例 #5
0
        public RenderSurface(Texture texture)
        {
            _texture = texture;

            Width            = texture.Width;
            Height           = texture.Height;
            Format           = texture.Format;
            Length           = texture.Length;
            Data             = texture.SourceData;
            DefaultPaletteID = texture.DefaultPaletteId;
        }
コード例 #6
0
ファイル: RenderSurface.cs プロジェクト: havalina1/ACViewer
        public RenderSurface(DatLoader.FileTypes.Texture renderSurface)
        {
            _renderSurface = renderSurface;

            Width            = renderSurface.Width;
            Height           = renderSurface.Height;
            Format           = renderSurface.Format;
            Length           = renderSurface.Length;
            Data             = renderSurface.SourceData;
            DefaultPaletteID = renderSurface.DefaultPaletteId;
        }
コード例 #7
0
        // RenderSurfaceD3D.Create()
        public bool Create(uint width, uint height, SurfacePixelFormat format, bool localData)
        {
            Width  = (int)width;
            Height = (int)height;
            Format = format;

            // get bits per pixel in PFDesc
            var bitsPerPixel = 32;

            Length = (int)(width * height * (bitsPerPixel / 8));
            Data   = new byte[Length];
            return(true);
        }
コード例 #8
0
 public SurfaceOutputConfig(
     SurfacePixelFormat pixelFormat,
     int surfaceWidth,
     int surfaceHeight,
     int gobBlockHeight,
     ulong outputSurfaceLumaAddress,
     ulong outputSurfaceChromaUAddress,
     ulong outputSurfaceChromaVAddress)
 {
     PixelFormat           = pixelFormat;
     SurfaceWidth          = surfaceWidth;
     SurfaceHeight         = surfaceHeight;
     GobBlockHeight        = gobBlockHeight;
     SurfaceLumaAddress    = outputSurfaceLumaAddress;
     SurfaceChromaUAddress = outputSurfaceChromaUAddress;
     SurfaceChromaVAddress = outputSurfaceChromaVAddress;
 }
コード例 #9
0
ファイル: SurfaceOutputConfig.cs プロジェクト: solulu/Ryujinx
 public SurfaceOutputConfig(
     SurfacePixelFormat PixelFormat,
     int SurfaceWidth,
     int SurfaceHeight,
     int GobBlockHeight,
     long OutputSurfaceLumaAddress,
     long OutputSurfaceChromaUAddress,
     long OutputSurfaceChromaVAddress)
 {
     this.PixelFormat           = PixelFormat;
     this.SurfaceWidth          = SurfaceWidth;
     this.SurfaceHeight         = SurfaceHeight;
     this.GobBlockHeight        = GobBlockHeight;
     this.SurfaceLumaAddress    = OutputSurfaceLumaAddress;
     this.SurfaceChromaUAddress = OutputSurfaceChromaUAddress;
     this.SurfaceChromaVAddress = OutputSurfaceChromaVAddress;
 }
コード例 #10
0
        public static SurfaceFormat GetSurfaceFormat(SurfacePixelFormat spf)
        {
            switch (spf)
            {
            case SurfacePixelFormat.PFID_INDEX16:
                return(SurfaceFormat.Color);

            case SurfacePixelFormat.PFID_A8:
            case SurfacePixelFormat.PFID_L8:
                return(SurfaceFormat.Alpha8);

            case SurfacePixelFormat.PFID_DXT1:
                return(SurfaceFormat.Dxt1);

            case SurfacePixelFormat.PFID_DXT3:
                return(SurfaceFormat.Dxt3);

            case SurfacePixelFormat.PFID_DXT5:
                return(SurfaceFormat.Dxt5);

            default:
                return(SurfaceFormat.Color);
            }
        }
コード例 #11
0
ファイル: PixelFormatDesc.cs プロジェクト: OptimShi/ACViewer
        public bool SetFormat(SurfacePixelFormat format)
        {
            if (format <= SurfacePixelFormat.PFID_P8)
            {
                if (format == SurfacePixelFormat.PFID_P8)
                {
                    Flags        = 64;
                    BitsPerPixel = 8;
                    CalcBitOffsets();
                    return(true);
                }
                switch (format)
                {
                case SurfacePixelFormat.PFID_A8R8G8B8:
                    Flags        = 3;
                    BitsPerPixel = 32;
                    AlphaBitMask = 0xFF000000;
                    RedBitMask   = 0xFF0000;
                    GreenBitMask = 0xFF00;
                    BlueBitMask  = 0xFF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_X8R8G8B8:
                    Flags        = 1;
                    BitsPerPixel = 32;
                    AlphaBitMask = 0xFF000000;
                    RedBitMask   = 0xFF0000;
                    GreenBitMask = 0xFF00;
                    BlueBitMask  = 0xFF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_R5G6B5:
                    Flags        = 1;
                    BitsPerPixel = 16;
                    RedBitMask   = 0xF800;
                    GreenBitMask = 0x7E0;
                    BlueBitMask  = 0x1F;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_X1R5G5B5:
                    Flags        = 1;
                    BitsPerPixel = 16;
                    RedBitMask   = 0x7C00;
                    GreenBitMask = 0x3E0;
                    BlueBitMask  = 0x1F;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_A1R5G5B5:
                    Flags        = 3;
                    BitsPerPixel = 16;
                    AlphaBitMask = 0x8000;
                    RedBitMask   = 0x7C00;
                    GreenBitMask = 0x3E0;
                    BlueBitMask  = 0x1F;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_A4R4G4B4:
                    Flags        = 3;
                    BitsPerPixel = 16;
                    AlphaBitMask = 0xF000;
                    RedBitMask   = 0xF00;
                    GreenBitMask = 0xF0;
                    BlueBitMask  = 0xF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_X4R4G4B4:
                    Flags        = 1;
                    BitsPerPixel = 16;
                    RedBitMask   = 0xF00;
                    GreenBitMask = 0xF0;
                    BlueBitMask  = 0xF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_A2B10G10R10:
                    Flags        = 3;
                    BitsPerPixel = 32;
                    AlphaBitMask = 0xC0000000;
                    BlueBitMask  = 0x3FF00000;
                    GreenBitMask = 0xFFC00;
                    RedBitMask   = 0x3FF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_A8B8G8R8:
                    Flags        = 3;
                    BitsPerPixel = 32;
                    AlphaBitMask = 0xFF000000;
                    BlueBitMask  = 0xFF0000;
                    GreenBitMask = 0xFF00;
                    RedBitMask   = 0xFF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_X8B8G8R8:
                    Flags        = 1;
                    BitsPerPixel = 32;
                    BlueBitMask  = 0xFF0000;
                    GreenBitMask = 0xFF00;
                    RedBitMask   = 0xFF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_A2R10G10B10:
                    Flags        = 3;
                    BitsPerPixel = 32;
                    AlphaBitMask = 0xC0000000;
                    RedBitMask   = 0x3FF00000;
                    GreenBitMask = 0xFFC00;
                    BlueBitMask  = 0x3FF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_R8G8B8:
                    Flags        = 1;
                    BitsPerPixel = 24;
                    RedBitMask   = 0xFF0000;
                    GreenBitMask = 0xFF00;
                    BlueBitMask  = 0xFF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_A8:
                    Flags        = 2;
                    BitsPerPixel = 8;
                    AlphaBitMask = 0xFF;
                    CalcBitOffsets();
                    return(true);

                default:
                    return(false);
                }
            }
            if (format > SurfacePixelFormat.PFID_CUSTOM_A8B8G8R8)
            {
                if (format <= SurfacePixelFormat.PFID_DXT1)
                {
                    if (format == SurfacePixelFormat.PFID_DXT1)
                    {
                        Flags        = 4;
                        FourCC       = (uint)SurfacePixelFormat.PFID_DXT1;
                        BitsPerPixel = 4;
                        CalcBitOffsets();
                        return(true);
                    }
                    if (format > SurfacePixelFormat.PFID_CUSTOM_LSCAPE_ALPHA)
                    {
                        if (format == SurfacePixelFormat.PFID_CUSTOM_RAW_JPEG)
                        {
                            Flags = 17;
                            CalcBitOffsets();
                            return(true);
                        }
                        return(false);
                    }
                    if (format == SurfacePixelFormat.PFID_CUSTOM_LSCAPE_ALPHA)
                    {
                        Flags        = 2;
                        AlphaBitMask = 0xFF;
                        BitsPerPixel = 8;
                        CalcBitOffsets();
                        return(true);
                    }
                    if (format == SurfacePixelFormat.PFID_CUSTOM_B8G8R8)
                    {
                        Flags        = 1;
                        BitsPerPixel = 24;
                        RedBitMask   = 0xFF;
                        GreenBitMask = 0xFF00;
                        BlueBitMask  = 0xFF0000;
                        CalcBitOffsets();
                        return(true);
                    }
                    if (format == SurfacePixelFormat.PFID_CUSTOM_LSCAPE_R8G8B8)
                    {
                        Flags        = 1;
                        BitsPerPixel = 24;
                        RedBitMask   = 0xFF0000;
                        GreenBitMask = 0xFF00;
                        BlueBitMask  = 0xFF;
                        CalcBitOffsets();
                        return(true);
                    }
                    return(false);
                }
                if (format > SurfacePixelFormat.PFID_DXT4)
                {
                    if (format != SurfacePixelFormat.PFID_DXT5)
                    {
                        return(false);
                    }

                    FourCC = (uint)SurfacePixelFormat.PFID_DXT5;
                }
                else if (format == SurfacePixelFormat.PFID_DXT4)
                {
                    FourCC = (uint)SurfacePixelFormat.PFID_DXT4;
                }
                else if (format == SurfacePixelFormat.PFID_DXT2)
                {
                    FourCC = (uint)SurfacePixelFormat.PFID_DXT2;
                }
                else
                {
                    if (format != SurfacePixelFormat.PFID_DXT3)
                    {
                        return(false);
                    }

                    FourCC = (uint)SurfacePixelFormat.PFID_DXT3;
                }
                Flags        = 4;
                BitsPerPixel = 8;
                CalcBitOffsets();
                return(true);
            }
            if (format == SurfacePixelFormat.PFID_CUSTOM_A8B8G8R8)
            {
                Flags        = 3;
                BitsPerPixel = 32;
                RedBitMask   = 0xFF;
                GreenBitMask = 0xFF00;
                BlueBitMask  = 0xFF0000;
                AlphaBitMask = 0xFF000000;
                CalcBitOffsets();
                return(true);
            }
            else
            {
                switch (format)
                {
                case SurfacePixelFormat.PFID_INDEX16:
                    Flags        = 64;
                    BitsPerPixel = 16;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_V8U8:
                    Flags        = 9;
                    BitsPerPixel = 16;
                    RedBitMask   = 0xFF00;
                    GreenBitMask = 0xFF;
                    BlueBitMask  = 0;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_D32:
                    Flags        = 2;
                    BitsPerPixel = 32;
                    AlphaBitMask = UInt32.MaxValue;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_D15S1:
                    Flags        = 2;
                    BitsPerPixel = 16;
                    AlphaBitMask = 0xFFFE;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_D16_LOCKABLE:
                case SurfacePixelFormat.PFID_D16:
                    Flags        = 2;
                    BitsPerPixel = 16;
                    AlphaBitMask = 0xFFFF;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_D24S8:
                case SurfacePixelFormat.PFID_D24X8:
                case SurfacePixelFormat.PFID_D24X4S4:
                    Flags        = 2;
                    BitsPerPixel = 32;
                    AlphaBitMask = 0xFFFFFF00;
                    CalcBitOffsets();
                    return(true);

                case SurfacePixelFormat.PFID_CUSTOM_R8G8B8A8:
                    Flags        = 3;
                    BitsPerPixel = 32;
                    RedBitMask   = 0xFF000000;
                    GreenBitMask = 0xFF0000;
                    BlueBitMask  = 0XFF00;
                    AlphaBitMask = 0xFF;
                    CalcBitOffsets();
                    return(true);

                default:
                    return(false);
                }
            }
        }
コード例 #12
0
ファイル: PixelFormatDesc.cs プロジェクト: OptimShi/ACViewer
 public PixelFormatDesc(SurfacePixelFormat format)
 {
     SetFormat(format);
 }
コード例 #13
0
ファイル: ImgTex.cs プロジェクト: jacobtipp/trACE
 public static ImgTex GetTempBuffer(uint _width, uint _height, SurfacePixelFormat _image_type)
 {
     // bunch of dictionary stuff
     return(AllocateTempBuffer(_width, _height, _image_type));
 }
コード例 #14
0
ファイル: VideoDecoder.cs プロジェクト: amaron2/Ryujinx
 private void ThrowUnimplementedPixelFormat(SurfacePixelFormat pixelFormat)
 {
     throw new NotImplementedException("Pixel format \"" + pixelFormat + "\" is not supported!");
 }