diff --git a/src/libANGLE/renderer/vulkan/vk_ref_counted_event.h b/src/libANGLE/renderer/vulkan/vk_ref_counted_event.h index 4a0b011a33..638f706e02 100644 --- a/src/libANGLE/renderer/vulkan/vk_ref_counted_event.h +++ b/src/libANGLE/renderer/vulkan/vk_ref_counted_event.h @@ -281,6 +281,19 @@ class RefCountedEventArrayWithAccessFlags final : public RefCountedEventArray { public: RefCountedEventArrayWithAccessFlags() { mAccessFlags.fill(0); } + // Shadow the inherited non-virtual release() so mAccessFlags is cleared whenever + // mBitMask is. Otherwise stale mAccessFlags survive BufferHelper reinit and + // hasEventAndAccess() can falsely report a barrier that was never emitted. + void release(Renderer *renderer) + { + RefCountedEventArray::release(renderer); + mAccessFlags.fill(0); + } + void release(Context *context) + { + RefCountedEventArray::release(context); + mAccessFlags.fill(0); + } void replaceEventAtStage(Context *context, EventStage eventStage, const RefCountedEvent &event,