diff --git a/filament/backend/src/opengl/GLDescriptorSet.cpp b/filament/backend/src/opengl/GLDescriptorSet.cpp index eb54fc90996..26dcdedb6e6 100644 --- a/filament/backend/src/opengl/GLDescriptorSet.cpp +++ b/filament/backend/src/opengl/GLDescriptorSet.cpp @@ -67,7 +67,9 @@ GLDescriptorSet::GLDescriptorSet(OpenGLContext& gl, DescriptorSetLayoutHandle ds bool const dynamicOffset = any(entry.flags & DescriptorFlags::DYNAMIC_OFFSET); dynamicBuffers.set(index, dynamicOffset); if (UTILS_UNLIKELY(gl.isES2())) { - dynamicBufferCount++; + if (dynamicOffset) { + dynamicBufferCount++; + } desc.emplace(dynamicOffset); } else { auto const type = GLUtils::getBufferBindingType(BufferObjectBinding::UNIFORM); diff --git a/filament/backend/src/opengl/OpenGLDriver.cpp b/filament/backend/src/opengl/OpenGLDriver.cpp index bfa04089ebb..20cd4f49c49 100644 --- a/filament/backend/src/opengl/OpenGLDriver.cpp +++ b/filament/backend/src/opengl/OpenGLDriver.cpp @@ -3892,6 +3892,7 @@ void OpenGLDriver::bindDescriptorSet( // `offsets` data's lifetime will end when this function returns. We have to make a copy. // (the data is allocated inside the CommandStream) mBoundDescriptorSets[set].dsh = dsh; + assert_invariant(offsets.data() != nullptr || ds->getDynamicBufferCount() == 0); std::copy_n(offsets.data(), ds->getDynamicBufferCount(), mBoundDescriptorSets[set].offsets.data()); }