aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Gpu/Image/Pool.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2024-04-07 18:25:55 -0300
committerGitHub <noreply@github.com>2024-04-07 18:25:55 -0300
commit3e6e0e4afaa3c3ffb118cb17b61feb16966a7eeb (patch)
treea4652499c089b0853e39c382cad82a9db4d6ad08 /src/Ryujinx.Graphics.Gpu/Image/Pool.cs
parent808803d97a0c06809bf000687c252f960048fcf0 (diff)
Add support for large sampler arrays on Vulkan (#6489)
* Add support for large sampler arrays on Vulkan * Shader cache version bump * Format whitespace * Move DescriptorSetManager to PipelineLayoutCacheEntry to allow different pool sizes per layout * Handle array textures with different types on the same buffer * Somewhat better caching system * Avoid useless buffer data modification checks * Move redundant bindings update checking to the backend * Fix an issue where texture arrays would get the same bindings across stages on Vulkan * Backport some fixes from part 2 * Fix typo * PR feedback * Format whitespace * Add some missing XML docs
Diffstat (limited to 'src/Ryujinx.Graphics.Gpu/Image/Pool.cs')
-rw-r--r--src/Ryujinx.Graphics.Gpu/Image/Pool.cs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Gpu/Image/Pool.cs b/src/Ryujinx.Graphics.Gpu/Image/Pool.cs
index 6ede0197..e12fedc7 100644
--- a/src/Ryujinx.Graphics.Gpu/Image/Pool.cs
+++ b/src/Ryujinx.Graphics.Gpu/Image/Pool.cs
@@ -112,6 +112,21 @@ namespace Ryujinx.Graphics.Gpu.Image
public abstract T1 Get(int id);
/// <summary>
+ /// Gets the cached item with the given ID, or null if there is no cached item for the specified ID.
+ /// </summary>
+ /// <param name="id">ID of the item. This is effectively a zero-based index</param>
+ /// <returns>The cached item with the given ID</returns>
+ public T1 GetCachedItem(int id)
+ {
+ if (!IsValidId(id))
+ {
+ return default;
+ }
+
+ return Items[id];
+ }
+
+ /// <summary>
/// Checks if a given ID is valid and inside the range of the pool.
/// </summary>
/// <param name="id">ID of the descriptor. This is effectively a zero-based index</param>
@@ -197,6 +212,23 @@ namespace Ryujinx.Graphics.Gpu.Image
return false;
}
+ /// <summary>
+ /// Checks if the pool was modified by comparing the current <seealso cref="ModifiedSequenceNumber"/> with a cached one.
+ /// </summary>
+ /// <param name="sequenceNumber">Cached modified sequence number</param>
+ /// <returns>True if the pool was modified, false otherwise</returns>
+ public bool WasModified(ref int sequenceNumber)
+ {
+ if (sequenceNumber != ModifiedSequenceNumber)
+ {
+ sequenceNumber = ModifiedSequenceNumber;
+
+ return true;
+ }
+
+ return false;
+ }
+
protected abstract void InvalidateRangeImpl(ulong address, ulong size);
protected abstract void Delete(T1 item);