From 312e6c8450c9174f2d087d51c10a5121395518ec Mon Sep 17 00:00:00 2001 From: Lody Date: Fri, 25 Feb 2022 14:01:58 +0800 Subject: [PATCH] BufferCache: Supports access to out-of-bounds storage buffers. BufferCache: Supports access to out-of-bounds SSBOs. --- src/video_core/buffer_cache/buffer_cache.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index fa26eb8b0e..98678201ee 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -1093,10 +1093,10 @@ void BufferCache

::BindHostGraphicsStorageBuffers(size_t stage) { const Binding& binding = storage_buffers[stage][index]; Buffer& buffer = slot_buffers[binding.buffer_id]; TouchBuffer(buffer, binding.buffer_id); - const u32 size = binding.size; + const u32 offset = buffer.Offset(binding.cpu_addr); + const u32 size = static_cast(buffer.SizeBytes()) - offset; SynchronizeBuffer(buffer, binding.cpu_addr, size); - const u32 offset = buffer.Offset(binding.cpu_addr); const bool is_written = ((written_storage_buffers[stage] >> index) & 1) != 0; if constexpr (NEEDS_BIND_STORAGE_INDEX) { runtime.BindStorageBuffer(stage, binding_index, buffer, offset, size, is_written); @@ -1178,10 +1178,10 @@ void BufferCache

::BindHostComputeStorageBuffers() { const Binding& binding = compute_storage_buffers[index]; Buffer& buffer = slot_buffers[binding.buffer_id]; TouchBuffer(buffer, binding.buffer_id); - const u32 size = binding.size; + const u32 offset = buffer.Offset(binding.cpu_addr); + const u32 size = static_cast(buffer.SizeBytes()) - offset; SynchronizeBuffer(buffer, binding.cpu_addr, size); - const u32 offset = buffer.Offset(binding.cpu_addr); const bool is_written = ((written_compute_storage_buffers >> index) & 1) != 0; if constexpr (NEEDS_BIND_STORAGE_INDEX) { runtime.BindComputeStorageBuffer(binding_index, buffer, offset, size, is_written);