From 23c844b2aa84a65e573dcc023d19b8f5294a8baf Mon Sep 17 00:00:00 2001 From: jhorv <38920027+jhorv@users.noreply.github.com> Date: Sat, 11 Mar 2023 15:05:48 -0500 Subject: Misc performance tweaks (#4509) * use Array.Empty() where instead of allocating new zero-length arrays * structure for loops in a way that the JIT will elide array/Span bounds checking * avoiding function calls in for loop condition tests * avoid LINQ in a hot path * conform with code style * fix mistake in GetNextWaitingObject() * fix GetNextWaitingObject() possibility of returning null if all list items have TimePoint == long.MaxValue * make GetNextWaitingObject() behave FIFO behavior for multiple items with the same TimePoint --- Ryujinx.Graphics.Vulkan/Queries/Counters.cs | 2 +- Ryujinx.Graphics.Vulkan/SpecInfo.cs | 5 ++--- Ryujinx.Graphics.Vulkan/Window.cs | 5 ++--- 3 files changed, 5 insertions(+), 7 deletions(-) (limited to 'Ryujinx.Graphics.Vulkan') diff --git a/Ryujinx.Graphics.Vulkan/Queries/Counters.cs b/Ryujinx.Graphics.Vulkan/Queries/Counters.cs index 7113d060..d9d65062 100644 --- a/Ryujinx.Graphics.Vulkan/Queries/Counters.cs +++ b/Ryujinx.Graphics.Vulkan/Queries/Counters.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries _counterQueues = new CounterQueue[count]; - for (int index = 0; index < count; index++) + for (int index = 0; index < _counterQueues.Length; index++) { CounterType type = (CounterType)index; _counterQueues[index] = new CounterQueue(gd, device, pipeline, type); diff --git a/Ryujinx.Graphics.Vulkan/SpecInfo.cs b/Ryujinx.Graphics.Vulkan/SpecInfo.cs index 83a34cde..4d226f61 100644 --- a/Ryujinx.Graphics.Vulkan/SpecInfo.cs +++ b/Ryujinx.Graphics.Vulkan/SpecInfo.cs @@ -29,7 +29,7 @@ namespace Ryujinx.Graphics.Vulkan uint structSize = 0; - for (int i = 0; i < count; ++i) + for (int i = 0; i < Map.Length; ++i) { var typeSize = SizeOf(description[i].Type); Map[i] = new SpecializationMapEntry(description[i].Id, structSize, typeSize); @@ -46,11 +46,10 @@ namespace Ryujinx.Graphics.Vulkan // For advanced mapping with overlapping or staggered fields public SpecDescription(SpecializationMapEntry[] map) { - int count = map.Length; Map = map; uint structSize = 0; - for (int i = 0; i < count; ++i) + for (int i = 0; i < map.Length; ++i) { structSize = Math.Max(structSize, map[i].Offset + (uint)map[i].Size); } diff --git a/Ryujinx.Graphics.Vulkan/Window.cs b/Ryujinx.Graphics.Vulkan/Window.cs index 5d6def3a..075d1b30 100644 --- a/Ryujinx.Graphics.Vulkan/Window.cs +++ b/Ryujinx.Graphics.Vulkan/Window.cs @@ -60,10 +60,9 @@ namespace Ryujinx.Graphics.Vulkan private void RecreateSwapchain() { var oldSwapchain = _swapchain; - int imageCount = _swapchainImageViews.Length; _vsyncModeChanged = false; - for (int i = 0; i < imageCount; i++) + for (int i = 0; i < _swapchainImageViews.Length; i++) { _swapchainImageViews[i].Dispose(); } @@ -147,7 +146,7 @@ namespace Ryujinx.Graphics.Vulkan _swapchainImageViews = new Auto[imageCount]; - for (int i = 0; i < imageCount; i++) + for (int i = 0; i < _swapchainImageViews.Length; i++) { _swapchainImageViews[i] = CreateSwapchainImageView(_swapchainImages[i], surfaceFormat.Format); } -- cgit v1.2.3