aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs')
-rw-r--r--Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs13
1 files changed, 10 insertions, 3 deletions
diff --git a/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs b/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs
index 29efd8e7..861155a3 100644
--- a/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs
+++ b/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs
@@ -12,6 +12,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries
private const int MaxQueryRetries = 5000;
private const long DefaultValue = -1;
private const long DefaultValueInt = 0xFFFFFFFF;
+ private const ulong HighMask = 0xFFFFFFFF00000000;
private readonly Vk _api;
private readonly Device _device;
@@ -125,6 +126,12 @@ namespace Ryujinx.Graphics.Vulkan.Queries
}
}
+ private bool WaitingForValue(long data)
+ {
+ return data == _defaultValue ||
+ (!_result32Bit && ((ulong)data & HighMask) == ((ulong)_defaultValue & HighMask));
+ }
+
public bool TryGetResult(out long result)
{
result = Marshal.ReadInt64(_bufferMap);
@@ -138,7 +145,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries
if (wakeSignal == null)
{
- while (data == _defaultValue)
+ while (WaitingForValue(data))
{
data = Marshal.ReadInt64(_bufferMap);
}
@@ -146,10 +153,10 @@ namespace Ryujinx.Graphics.Vulkan.Queries
else
{
int iterations = 0;
- while (data == _defaultValue && iterations++ < MaxQueryRetries)
+ while (WaitingForValue(data) && iterations++ < MaxQueryRetries)
{
data = Marshal.ReadInt64(_bufferMap);
- if (data == _defaultValue)
+ if (WaitingForValue(data))
{
wakeSignal.WaitOne(1);
}