| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- using System;
- using System.Collections.ObjectModel;
- namespace Ryujinx.Graphics.GAL
- {
- public enum ResourceType : byte
- {
- UniformBuffer,
- StorageBuffer,
- Texture,
- Sampler,
- TextureAndSampler,
- Image,
- BufferTexture,
- BufferImage,
- }
- public enum ResourceAccess : byte
- {
- None = 0,
- Read = 1,
- Write = 2,
- ReadWrite = Read | Write,
- }
- [Flags]
- public enum ResourceStages : byte
- {
- None = 0,
- Compute = 1 << 0,
- Vertex = 1 << 1,
- TessellationControl = 1 << 2,
- TessellationEvaluation = 1 << 3,
- Geometry = 1 << 4,
- Fragment = 1 << 5,
- }
- public readonly struct ResourceDescriptor : IEquatable<ResourceDescriptor>
- {
- public int Binding { get; }
- public int Count { get; }
- public ResourceType Type { get; }
- public ResourceStages Stages { get; }
- public ResourceDescriptor(int binding, int count, ResourceType type, ResourceStages stages)
- {
- Binding = binding;
- Count = count;
- Type = type;
- Stages = stages;
- }
- public override int GetHashCode()
- {
- return HashCode.Combine(Binding, Count, Type, Stages);
- }
- public override bool Equals(object obj)
- {
- return obj is ResourceDescriptor other && Equals(other);
- }
- public bool Equals(ResourceDescriptor other)
- {
- return Binding == other.Binding && Count == other.Count && Type == other.Type && Stages == other.Stages;
- }
- public static bool operator ==(ResourceDescriptor left, ResourceDescriptor right)
- {
- return left.Equals(right);
- }
- public static bool operator !=(ResourceDescriptor left, ResourceDescriptor right)
- {
- return !(left == right);
- }
- }
- public readonly struct ResourceUsage : IEquatable<ResourceUsage>
- {
- public int Binding { get; }
- public ResourceType Type { get; }
- public ResourceStages Stages { get; }
- public ResourceAccess Access { get; }
- public ResourceUsage(int binding, ResourceType type, ResourceStages stages, ResourceAccess access)
- {
- Binding = binding;
- Type = type;
- Stages = stages;
- Access = access;
- }
- public override int GetHashCode()
- {
- return HashCode.Combine(Binding, Type, Stages, Access);
- }
- public override bool Equals(object obj)
- {
- return obj is ResourceUsage other && Equals(other);
- }
- public bool Equals(ResourceUsage other)
- {
- return Binding == other.Binding && Type == other.Type && Stages == other.Stages && Access == other.Access;
- }
- public static bool operator ==(ResourceUsage left, ResourceUsage right)
- {
- return left.Equals(right);
- }
- public static bool operator !=(ResourceUsage left, ResourceUsage right)
- {
- return !(left == right);
- }
- }
- public readonly struct ResourceDescriptorCollection
- {
- public ReadOnlyCollection<ResourceDescriptor> Descriptors { get; }
- public ResourceDescriptorCollection(ReadOnlyCollection<ResourceDescriptor> descriptors)
- {
- Descriptors = descriptors;
- }
- public override int GetHashCode()
- {
- HashCode hasher = new();
- if (Descriptors != null)
- {
- foreach (var descriptor in Descriptors)
- {
- hasher.Add(descriptor);
- }
- }
- return hasher.ToHashCode();
- }
- public override bool Equals(object obj)
- {
- return obj is ResourceDescriptorCollection other && Equals(other);
- }
- public bool Equals(ResourceDescriptorCollection other)
- {
- if ((Descriptors == null) != (other.Descriptors == null))
- {
- return false;
- }
- if (Descriptors != null)
- {
- if (Descriptors.Count != other.Descriptors.Count)
- {
- return false;
- }
- for (int index = 0; index < Descriptors.Count; index++)
- {
- if (!Descriptors[index].Equals(other.Descriptors[index]))
- {
- return false;
- }
- }
- }
- return true;
- }
- public static bool operator ==(ResourceDescriptorCollection left, ResourceDescriptorCollection right)
- {
- return left.Equals(right);
- }
- public static bool operator !=(ResourceDescriptorCollection left, ResourceDescriptorCollection right)
- {
- return !(left == right);
- }
- }
- public readonly struct ResourceUsageCollection
- {
- public ReadOnlyCollection<ResourceUsage> Usages { get; }
- public ResourceUsageCollection(ReadOnlyCollection<ResourceUsage> usages)
- {
- Usages = usages;
- }
- }
- public readonly struct ResourceLayout
- {
- public ReadOnlyCollection<ResourceDescriptorCollection> Sets { get; }
- public ReadOnlyCollection<ResourceUsageCollection> SetUsages { get; }
- public ResourceLayout(
- ReadOnlyCollection<ResourceDescriptorCollection> sets,
- ReadOnlyCollection<ResourceUsageCollection> setUsages)
- {
- Sets = sets;
- SetUsages = setUsages;
- }
- }
- }
|