diff --git a/src/main/java/net/vulkanmod/render/engine/VkCommandEncoder.java b/src/main/java/net/vulkanmod/render/engine/VkCommandEncoder.java index f359265d0..adc78453b 100644 --- a/src/main/java/net/vulkanmod/render/engine/VkCommandEncoder.java +++ b/src/main/java/net/vulkanmod/render/engine/VkCommandEncoder.java @@ -290,6 +290,14 @@ public void writeToBuffer(GpuBufferSlice gpuBufferSlice, ByteBuffer byteBuffer) var commandBuffer = Renderer.getInstance().getTransferCb(); StagingBuffer stagingBuffer = Vulkan.getStagingBuffer(); + + // Large immediate batches (e.g. many entities sharing one RenderType) can + // exceed the default staging buffer; fall back to a one-shot oversized buffer. + if (size > stagingBuffer.getBufferSize()) { + stagingBuffer = new StagingBuffer(size); + stagingBuffer.scheduleFree(); + } + stagingBuffer.copyBuffer(size, byteBuffer); long srcOffset = stagingBuffer.getOffset();