namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { /// <summary> /// Result of a shader cache load operation. /// </summary> enum DiskCacheLoadResult { /// <summary> /// No error. /// </summary> Success, /// <summary> /// File can't be accessed. /// </summary> NoAccess, /// <summary> /// The constant buffer 1 data length is too low for the translation of the guest shader. /// </summary> InvalidCb1DataLength, /// <summary> /// The cache is missing the descriptor of a texture used by the shader. /// </summary> MissingTextureDescriptor, /// <summary> /// File is corrupted. /// </summary> FileCorruptedGeneric, /// <summary> /// File is corrupted, detected by magic value check. /// </summary> FileCorruptedInvalidMagic, /// <summary> /// File is corrupted, detected by length check. /// </summary> FileCorruptedInvalidLength, /// <summary> /// File might be valid, but is incompatible with the current emulator version. /// </summary> IncompatibleVersion } static class DiskCacheLoadResultExtensions { /// <summary> /// Gets an error message from a result code. /// </summary> /// <param name="result">Result code</param> /// <returns>Error message</returns> public static string GetMessage(this DiskCacheLoadResult result) { return result switch { DiskCacheLoadResult.Success => "No error.", DiskCacheLoadResult.NoAccess => "Could not access the cache file.", DiskCacheLoadResult.InvalidCb1DataLength => "Constant buffer 1 data length is too low.", DiskCacheLoadResult.MissingTextureDescriptor => "Texture descriptor missing from the cache file.", DiskCacheLoadResult.FileCorruptedGeneric => "The cache file is corrupted.", DiskCacheLoadResult.FileCorruptedInvalidMagic => "Magic check failed, the cache file is corrupted.", DiskCacheLoadResult.FileCorruptedInvalidLength => "Length check failed, the cache file is corrupted.", DiskCacheLoadResult.IncompatibleVersion => "The version of the disk cache is not compatible with this version of the emulator.", _ => "Unknown error." }; } } }