From 965c30956dd08bc610fbb3926e000148ed0256da Mon Sep 17 00:00:00 2001 From: nmzik Date: Sat, 15 Aug 2026 07:08:24 +0200 Subject: [PATCH] graphics: clamp storage buffers to committed memory --- src/graphics/host_gpu/renderer/pipeline/descriptors.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/graphics/host_gpu/renderer/pipeline/descriptors.cpp b/src/graphics/host_gpu/renderer/pipeline/descriptors.cpp index d3e695cdf..9033669ae 100644 --- a/src/graphics/host_gpu/renderer/pipeline/descriptors.cpp +++ b/src/graphics/host_gpu/renderer/pipeline/descriptors.cpp @@ -27,6 +27,7 @@ #include "graphics/shader/recompiler/ir/passes/BindingLayout.h" #include "graphics/shader/recompiler/ir/passes/ResourceMaterialization.h" #include "graphics/shader/shader.h" +#include "kernel/memory.h" #include #include @@ -91,11 +92,12 @@ static BufferView NativeStorageBuffer(RenderContext& context, CommandBuffer& com if (stride != 0 && records > UINT64_MAX / stride) { EXIT("storage buffer descriptor footprint overflow\n"); } - const auto size = stride != 0 ? static_cast(stride) * records : records; - if (address == 0 || size == 0) { + const auto requested_size = stride != 0 ? static_cast(stride) * records : records; + if (address == 0 || requested_size == 0) { BindNullStorageBuffer(context, result); return result; } + const auto size = Libs::LibKernel::Memory::ClampRangeSize(address, requested_size); const auto& graphics = context.GetGraphics(); const auto alignment = graphics.StorageMinAlignment(); if (alignment == 0 ||