using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Shader; namespace Ryujinx.Graphics.Gpu.Image { /// /// Texture target. /// enum TextureTarget : byte { Texture1D, Texture2D, Texture3D, Cubemap, Texture1DArray, Texture2DArray, TextureBuffer, Texture2DRect, CubemapArray } static class TextureTargetConverter { /// /// Converts the texture target enum to a host compatible, Graphics Abstraction Layer enum. /// /// The target enum to convert /// True if the texture is a multisampled texture /// The host compatible texture target public static Target Convert(this TextureTarget target, bool isMultisample) { if (isMultisample) { switch (target) { case TextureTarget.Texture2D: return Target.Texture2DMultisample; case TextureTarget.Texture2DArray: return Target.Texture2DMultisampleArray; } } else { switch (target) { case TextureTarget.Texture1D: return Target.Texture1D; case TextureTarget.Texture2D: return Target.Texture2D; case TextureTarget.Texture2DRect: return Target.Texture2D; case TextureTarget.Texture3D: return Target.Texture3D; case TextureTarget.Texture1DArray: return Target.Texture1DArray; case TextureTarget.Texture2DArray: return Target.Texture2DArray; case TextureTarget.Cubemap: return Target.Cubemap; case TextureTarget.CubemapArray: return Target.CubemapArray; case TextureTarget.TextureBuffer: return Target.TextureBuffer; } } return Target.Texture1D; } /// /// Converts the texture target enum to a shader sampler type. /// /// The target enum to convert /// The shader sampler type public static SamplerType ConvertSamplerType(this TextureTarget target) { return target switch { TextureTarget.Texture1D => SamplerType.Texture1D, TextureTarget.Texture2D => SamplerType.Texture2D, TextureTarget.Texture3D => SamplerType.Texture3D, TextureTarget.Cubemap => SamplerType.TextureCube, TextureTarget.Texture1DArray => SamplerType.Texture1D | SamplerType.Array, TextureTarget.Texture2DArray => SamplerType.Texture2D | SamplerType.Array, TextureTarget.TextureBuffer => SamplerType.TextureBuffer, TextureTarget.Texture2DRect => SamplerType.Texture2D, TextureTarget.CubemapArray => SamplerType.TextureCube | SamplerType.Array, _ => SamplerType.Texture2D }; } } }