diff --git a/third_party/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp b/third_party/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp index 1111111111..2222222222 100644 --- a/third_party/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp +++ b/third_party/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp @@ -7468,6 +7468,21 @@ angle::Result ContextVk::flushAndSubmitCommands(const vk::Semaphore *signalSemap } ANGLE_TRACE_EVENT0("gpu.angle", "ContextVk::flushAndSubmitCommands"); + + // ---- POC fault injection ------------------------------------------------- + // Simulates VK_ERROR_OUT_OF_DEVICE_MEMORY returned from one of the + // ANGLE_TRY-wrapped Vulkan calls below (vkCreateRenderPass / + // vkCreateFramebuffer / vkAllocateCommandBuffers) when the foreign image + // is being released. The (void) cast at the call site in + // finalizeImageLayout() swallows this Stop result, leaving the dangling + // ImageHelper* in mForeignImagesInUse. + if (queueSubmitReason == QueueSubmitReason::ForeignImageRelease && + getenv("ANGLE_POC_FORCE_FOREIGN_FLUSH_OOM")) + { + handleError(VK_ERROR_OUT_OF_DEVICE_MEMORY, "POC", __FILE__, __FUNCTION__, __LINE__); + return angle::Result::Stop; + } + // ------------------------------------------------------------------------- if (someCommandsNeedFlush) { // If any of secondary command buffer not empty, we need to do flush