UI: Add progress bar for re-packaging shaders (#4805)
* feat: introduce new shader loading state for progress tracking when writing shaders to disk * fix: move translation to bottom of locale file * fix: change back to foreach and add requested spacing between lines * style: fix formatting Co-authored-by: gdkchan <gab.dark.100@gmail.com> --------- Co-authored-by: gdkchan <gab.dark.100@gmail.com>
This commit is contained in:
parent
fab11ba3f1
commit
4c3d2d5d75
4 changed files with 14 additions and 1 deletions
|
@ -644,5 +644,6 @@
|
||||||
"UserEditorTitleCreate" : "Create User",
|
"UserEditorTitleCreate" : "Create User",
|
||||||
"SettingsTabNetworkInterface": "Network Interface:",
|
"SettingsTabNetworkInterface": "Network Interface:",
|
||||||
"NetworkInterfaceTooltip": "The network interface used for LAN features",
|
"NetworkInterfaceTooltip": "The network interface used for LAN features",
|
||||||
"NetworkInterfaceDefault": "Default"
|
"NetworkInterfaceDefault": "Default",
|
||||||
|
"PackagingShaders": "Packaging Shaders"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1099,6 +1099,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
LoadHeading = LocaleManager.Instance[LocaleKeys.CompilingShaders];
|
LoadHeading = LocaleManager.Instance[LocaleKeys.CompilingShaders];
|
||||||
IsLoadingIndeterminate = false;
|
IsLoadingIndeterminate = false;
|
||||||
break;
|
break;
|
||||||
|
case ShaderCacheLoadingState.Packaging:
|
||||||
|
LoadHeading = LocaleManager.Instance[LocaleKeys.PackagingShaders];
|
||||||
|
IsLoadingIndeterminate = false;
|
||||||
|
break;
|
||||||
case ShaderCacheLoadingState.Loaded:
|
case ShaderCacheLoadingState.Loaded:
|
||||||
LoadHeading = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.LoadingHeading, TitleName);
|
LoadHeading = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.LoadingHeading, TitleName);
|
||||||
IsLoadingIndeterminate = true;
|
IsLoadingIndeterminate = true;
|
||||||
|
|
|
@ -299,10 +299,13 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
|
||||||
|
|
||||||
if (_programList.Count != 0)
|
if (_programList.Count != 0)
|
||||||
{
|
{
|
||||||
|
_stateChangeCallback(ShaderCacheState.Packaging, 0, _programList.Count);
|
||||||
|
|
||||||
Logger.Info?.Print(LogClass.Gpu, $"Rebuilding {_programList.Count} shaders...");
|
Logger.Info?.Print(LogClass.Gpu, $"Rebuilding {_programList.Count} shaders...");
|
||||||
|
|
||||||
using var streams = _hostStorage.GetOutputStreams(_context);
|
using var streams = _hostStorage.GetOutputStreams(_context);
|
||||||
|
|
||||||
|
int packagedShaders = 0;
|
||||||
foreach (var kv in _programList)
|
foreach (var kv in _programList)
|
||||||
{
|
{
|
||||||
if (!Active)
|
if (!Active)
|
||||||
|
@ -311,7 +314,10 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
|
||||||
}
|
}
|
||||||
|
|
||||||
(CachedShaderProgram program, byte[] binaryCode) = kv.Value;
|
(CachedShaderProgram program, byte[] binaryCode) = kv.Value;
|
||||||
|
|
||||||
_hostStorage.AddShader(_context, program, binaryCode, streams);
|
_hostStorage.AddShader(_context, program, binaryCode, streams);
|
||||||
|
|
||||||
|
_stateChangeCallback(ShaderCacheState.Packaging, ++packagedShaders, _programList.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Info?.Print(LogClass.Gpu, $"Rebuilt {_programList.Count} shaders successfully.");
|
Logger.Info?.Print(LogClass.Gpu, $"Rebuilt {_programList.Count} shaders successfully.");
|
||||||
|
|
|
@ -7,6 +7,8 @@ namespace Ryujinx.Graphics.Gpu.Shader
|
||||||
Start,
|
Start,
|
||||||
/// <summary>Shader cache is loading</summary>
|
/// <summary>Shader cache is loading</summary>
|
||||||
Loading,
|
Loading,
|
||||||
|
/// <summary>Shader cache is written to disk</summary>
|
||||||
|
Packaging,
|
||||||
/// <summary>Shader cache finished loading</summary>
|
/// <summary>Shader cache finished loading</summary>
|
||||||
Loaded
|
Loaded
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue