From bfbb651ecdafaa1bee99856cb1896124f6c6a882 Mon Sep 17 00:00:00 2001 From: Ben Doherty Date: Thu, 16 Apr 2026 14:05:10 -0400 Subject: [PATCH] Metal: fix potential crash in when dynamic offsets are empty (#9908) --- filament/backend/src/metal/MetalDriver.mm | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/filament/backend/src/metal/MetalDriver.mm b/filament/backend/src/metal/MetalDriver.mm index 18d54e6ee6..b9ca89d8f6 100644 --- a/filament/backend/src/metal/MetalDriver.mm +++ b/filament/backend/src/metal/MetalDriver.mm @@ -2295,12 +2295,14 @@ void MetalDriver::draw2(uint32_t indexOffset, uint32_t indexCount, uint32_t inst // Bind the offset data. if (mContext->dynamicOffsets.isDirty()) { const auto [size, data] = mContext->dynamicOffsets.getOffsets(); - [mContext->currentRenderPassEncoder setFragmentBytes:data - length:size * sizeof(uint32_t) - atIndex:DYNAMIC_OFFSET_BINDING]; - [mContext->currentRenderPassEncoder setVertexBytes:data - length:size * sizeof(uint32_t) - atIndex:DYNAMIC_OFFSET_BINDING]; + if (size > 0) { + [mContext->currentRenderPassEncoder setFragmentBytes:data + length:size * sizeof(uint32_t) + atIndex:DYNAMIC_OFFSET_BINDING]; + [mContext->currentRenderPassEncoder setVertexBytes:data + length:size * sizeof(uint32_t) + atIndex:DYNAMIC_OFFSET_BINDING]; + } mContext->dynamicOffsets.setDirty(false); }