graphics: clamp storage buffers to committed memory

This commit is contained in:
nmzik
2026-08-15 07:08:24 +02:00
parent 09fec6815f
commit 965c30956d
@@ -27,6 +27,7 @@
#include "graphics/shader/recompiler/ir/passes/BindingLayout.h" #include "graphics/shader/recompiler/ir/passes/BindingLayout.h"
#include "graphics/shader/recompiler/ir/passes/ResourceMaterialization.h" #include "graphics/shader/recompiler/ir/passes/ResourceMaterialization.h"
#include "graphics/shader/shader.h" #include "graphics/shader/shader.h"
#include "kernel/memory.h"
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>
@@ -91,11 +92,12 @@ static BufferView NativeStorageBuffer(RenderContext& context, CommandBuffer& com
if (stride != 0 && records > UINT64_MAX / stride) { if (stride != 0 && records > UINT64_MAX / stride) {
EXIT("storage buffer descriptor footprint overflow\n"); EXIT("storage buffer descriptor footprint overflow\n");
} }
const auto size = stride != 0 ? static_cast<uint64_t>(stride) * records : records; const auto requested_size = stride != 0 ? static_cast<uint64_t>(stride) * records : records;
if (address == 0 || size == 0) { if (address == 0 || requested_size == 0) {
BindNullStorageBuffer(context, result); BindNullStorageBuffer(context, result);
return result; return result;
} }
const auto size = Libs::LibKernel::Memory::ClampRangeSize(address, requested_size);
const auto& graphics = context.GetGraphics(); const auto& graphics = context.GetGraphics();
const auto alignment = graphics.StorageMinAlignment(); const auto alignment = graphics.StorageMinAlignment();
if (alignment == 0 || if (alignment == 0 ||