aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Gal/GalImage.cs
blob: 1345704d291348131df625ef9de7af74c6de7cc5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using Ryujinx.Graphics.Texture;

namespace Ryujinx.Graphics.Gal
{
    public struct GalImage
    {
        public int Width;
        public int Height;

        // FIXME: separate layer and depth
        public int Depth;
        public int LayerCount;
        public int TileWidth;
        public int GobBlockHeight;
        public int GobBlockDepth;
        public int Pitch;
        public int MaxMipmapLevel;

        public GalImageFormat   Format;
        public GalMemoryLayout  Layout;
        public GalTextureSource XSource;
        public GalTextureSource YSource;
        public GalTextureSource ZSource;
        public GalTextureSource WSource;
        public GalTextureTarget TextureTarget;

        public GalImage(
            int              width,
            int              height,
            int              depth,
            int              layerCount,
            int              tileWidth,
            int              gobBlockHeight,
            int              gobBlockDepth,
            GalMemoryLayout  layout,
            GalImageFormat   format,
            GalTextureTarget textureTarget,
            int              maxMipmapLevel = 1,
            GalTextureSource xSource        = GalTextureSource.Red,
            GalTextureSource ySource        = GalTextureSource.Green,
            GalTextureSource zSource        = GalTextureSource.Blue,
            GalTextureSource wSource        = GalTextureSource.Alpha)
        {
            Width          = width;
            Height         = height;
            LayerCount     = layerCount;
            Depth          = depth;
            TileWidth      = tileWidth;
            GobBlockHeight = gobBlockHeight;
            GobBlockDepth  = gobBlockDepth;
            Layout         = layout;
            Format         = format;
            MaxMipmapLevel = maxMipmapLevel;
            XSource        = xSource;
            YSource        = ySource;
            ZSource        = zSource;
            WSource        = wSource;
            TextureTarget  = textureTarget;

            Pitch = ImageUtils.GetPitch(format, width);
        }

        public bool SizeMatches(GalImage image, bool ignoreLayer = false)
        {
            if (ImageUtils.GetBytesPerPixel(Format) !=
                ImageUtils.GetBytesPerPixel(image.Format))
            {
                return false;
            }

            if (ImageUtils.GetAlignedWidth(this) !=
                ImageUtils.GetAlignedWidth(image))
            {
                return false;
            }

            bool result = Height == image.Height && Depth == image.Depth;

            if (!ignoreLayer)
            {
                result = result && LayerCount == image.LayerCount;
            }

            return result;
        }
    }
}