diff --git a/src/SharpEmu.Libs/VideoOut/VulkanVideoPresenter.cs b/src/SharpEmu.Libs/VideoOut/VulkanVideoPresenter.cs index 62bb031c..968d3038 100644 --- a/src/SharpEmu.Libs/VideoOut/VulkanVideoPresenter.cs +++ b/src/SharpEmu.Libs/VideoOut/VulkanVideoPresenter.cs @@ -10179,7 +10179,12 @@ internal static unsafe class VulkanVideoPresenter } var size = (ulong)Math.Max(guestBuffer.Length, sizeof(uint)); - var endAddress = checked(guestBuffer.BaseAddress + size); + if (guestBuffer.BaseAddress > ulong.MaxValue - size) + { + return CreateTransientGlobalBufferResource(guestBuffer); + } + + var endAddress = guestBuffer.BaseAddress + size; GuestBufferAllocation? allocation = null; foreach (var candidate in _guestBufferAllocations) { @@ -10414,9 +10419,14 @@ internal static unsafe class VulkanVideoPresenter } var size = (ulong)Math.Max(buffer.Length, sizeof(uint)); + if (buffer.BaseAddress > ulong.MaxValue - size - 3) + { + continue; + } + var alignedStart = buffer.BaseAddress & ~(GuestStorageBufferOffsetAlignment - 1); - var paddedEnd = checked(buffer.BaseAddress + size + 3) & ~3UL; + var paddedEnd = (buffer.BaseAddress + size + 3) & ~3UL; ranges.Add(( alignedStart, paddedEnd));