aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/RenderPassCacheKey.cs
blob: 7c57b8feb2474057a15e8ac721d6858c82675874 (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
using System;
using System.Linq;

namespace Ryujinx.Graphics.Vulkan
{
    internal readonly struct RenderPassCacheKey : IRefEquatable<RenderPassCacheKey>
    {
        private readonly TextureView _depthStencil;
        private readonly TextureView[] _colors;

        public RenderPassCacheKey(TextureView depthStencil, TextureView[] colors)
        {
            _depthStencil = depthStencil;
            _colors = colors;
        }

        public override int GetHashCode()
        {
            HashCode hc = new();

            hc.Add(_depthStencil);

            if (_colors != null)
            {
                foreach (var color in _colors)
                {
                    hc.Add(color);
                }
            }

            return hc.ToHashCode();
        }

        public bool Equals(ref RenderPassCacheKey other)
        {
            bool colorsNull = _colors == null;
            bool otherNull = other._colors == null;
            return other._depthStencil == _depthStencil &&
                colorsNull == otherNull &&
                (colorsNull || other._colors.SequenceEqual(_colors));
        }
    }
}