Просмотр исходного кода

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>
Nico 2 лет назад
Родитель
Сommit
4c3d2d5d75

+ 2 - 1
src/Ryujinx.Ava/Assets/Locales/en_US.json

@@ -644,5 +644,6 @@
   "UserEditorTitleCreate" : "Create User",
   "SettingsTabNetworkInterface": "Network Interface:",
   "NetworkInterfaceTooltip": "The network interface used for LAN features",
-  "NetworkInterfaceDefault": "Default"
+  "NetworkInterfaceDefault": "Default",
+  "PackagingShaders": "Packaging Shaders"
 }

+ 4 - 0
src/Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs

@@ -1099,6 +1099,10 @@ namespace Ryujinx.Ava.UI.ViewModels
                                 LoadHeading = LocaleManager.Instance[LocaleKeys.CompilingShaders];
                                 IsLoadingIndeterminate = false;
                                 break;
+                            case ShaderCacheLoadingState.Packaging:
+                                LoadHeading = LocaleManager.Instance[LocaleKeys.PackagingShaders];
+                                IsLoadingIndeterminate = false;
+                                break;
                             case ShaderCacheLoadingState.Loaded:
                                 LoadHeading = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.LoadingHeading, TitleName);
                                 IsLoadingIndeterminate = true;

+ 6 - 0
src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs

@@ -299,10 +299,13 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
 
                     if (_programList.Count != 0)
                     {
+                        _stateChangeCallback(ShaderCacheState.Packaging, 0, _programList.Count);
+
                         Logger.Info?.Print(LogClass.Gpu, $"Rebuilding {_programList.Count} shaders...");
 
                         using var streams = _hostStorage.GetOutputStreams(_context);
 
+                        int packagedShaders = 0;
                         foreach (var kv in _programList)
                         {
                             if (!Active)
@@ -311,7 +314,10 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
                             }
 
                             (CachedShaderProgram program, byte[] binaryCode) = kv.Value;
+
                             _hostStorage.AddShader(_context, program, binaryCode, streams);
+
+                            _stateChangeCallback(ShaderCacheState.Packaging, ++packagedShaders, _programList.Count);
                         }
 
                         Logger.Info?.Print(LogClass.Gpu, $"Rebuilt {_programList.Count} shaders successfully.");

+ 2 - 0
src/Ryujinx.Graphics.Gpu/Shader/ShaderCacheState.cs

@@ -7,6 +7,8 @@ namespace Ryujinx.Graphics.Gpu.Shader
         Start,
         /// <summary>Shader cache is loading</summary>
         Loading,
+        /// <summary>Shader cache is written to disk</summary>
+        Packaging,
         /// <summary>Shader cache finished loading</summary>
         Loaded
     }