From d737b0a9671fe0c3fd96e0618b6bd7edbe84ddb2 Mon Sep 17 00:00:00 2001 From: Otozinclus <58051309+Otozinclus@users.noreply.github.com> Date: Mon, 30 Dec 2024 06:54:59 +0100 Subject: [PATCH 1/4] Add sleep when translating shaders --- .../Shader/DiskCache/ParallelDiskCacheLoader.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 74922d1e3..43d14a246 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -178,10 +178,13 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache int programIndex, bool isCompute) { + Thread.Sleep(shaderTranslationDelay); + GuestShaders = guestShaders; SpecializationState = specState; ProgramIndex = programIndex; - IsCompute = isCompute; + IsCompute = isCompute, + int = shaderTranslationDelay; } } @@ -366,7 +369,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { try { - AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute); + AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute, _context.DirtyHacks[DirtyHacks.ShaderCompilationThreadSleep); _asyncTranslationQueue.Add(asyncTranslation, _cancellationToken); } catch (OperationCanceledException) -- 2.47.1 From 12413925360f7d050e0a04d0bc62aec93c85edf3 Mon Sep 17 00:00:00 2001 From: Otozinclus <58051309+Otozinclus@users.noreply.github.com> Date: Mon, 30 Dec 2024 07:01:16 +0100 Subject: [PATCH 2/4] Fix stupidity --- .../Shader/DiskCache/ParallelDiskCacheLoader.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 43d14a246..251c53625 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -176,15 +176,15 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache GuestCodeAndCbData?[] guestShaders, ShaderSpecializationState specState, int programIndex, - bool isCompute) + bool isCompute, + int shaderTranslationDelay) { Thread.Sleep(shaderTranslationDelay); GuestShaders = guestShaders; SpecializationState = specState; ProgramIndex = programIndex; - IsCompute = isCompute, - int = shaderTranslationDelay; + IsCompute = isCompute; } } @@ -369,7 +369,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { try { - AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute, _context.DirtyHacks[DirtyHacks.ShaderCompilationThreadSleep); + AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute, _context.DirtyHacks[DirtyHacks.ShaderCompilationThreadSleep]); _asyncTranslationQueue.Add(asyncTranslation, _cancellationToken); } catch (OperationCanceledException) -- 2.47.1 From 493d0277810ee9f752c1c041e6bd94f5cb8749b2 Mon Sep 17 00:00:00 2001 From: Otozinclus <58051309+Otozinclus@users.noreply.github.com> Date: Mon, 30 Dec 2024 07:12:46 +0100 Subject: [PATCH 3/4] Last stupidity fix --- .../Shader/DiskCache/ParallelDiskCacheLoader.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 251c53625..35c56f061 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Shader; -- 2.47.1 From dfb9c7e691405a3146a32925c77847c62c752840 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 01:00:42 -0600 Subject: [PATCH 4/4] Optimize --- .../Shader/DiskCache/ParallelDiskCacheLoader.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 35c56f061..9aa96a76f 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -177,11 +177,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache GuestCodeAndCbData?[] guestShaders, ShaderSpecializationState specState, int programIndex, - bool isCompute, - int shaderTranslationDelay) + bool isCompute) { - Thread.Sleep(shaderTranslationDelay); - GuestShaders = guestShaders; SpecializationState = specState; ProgramIndex = programIndex; @@ -370,7 +367,10 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { try { - AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute, _context.DirtyHacks[DirtyHacks.ShaderCompilationThreadSleep]); + if (_context.DirtyHacks.IsEnabled(DirtyHacks.ShaderCompilationThreadSleep)) + Thread.Sleep(_context.DirtyHacks[DirtyHacks.ShaderCompilationThreadSleep]); + + AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute); _asyncTranslationQueue.Add(asyncTranslation, _cancellationToken); } catch (OperationCanceledException) -- 2.47.1