diff --git a/third_party/angle/src/libANGLE/renderer/vulkan/MemoryObjectVk.cpp b/third_party/angle/src/libANGLE/renderer/vulkan/MemoryObjectVk.cpp index 525598c69e..391b09ea15 100644 --- a/third_party/angle/src/libANGLE/renderer/vulkan/MemoryObjectVk.cpp +++ b/third_party/angle/src/libANGLE/renderer/vulkan/MemoryObjectVk.cpp @@ -221,6 +221,14 @@ angle::Result MemoryObjectVk::createImage( VkMemoryRequirements externalMemoryRequirements; image->getImage().getMemoryRequirements(renderer->getDevice(), &externalMemoryRequirements); + // The created image must fit in the imported allocation. Format fallback can + // otherwise widen the actual VkFormat (e.g. R4G4B4A4 -> R8G8B8A8 on drivers + // lacking FILTER_LINEAR for the intended format), causing vkBindImageMemory + // to bind past the end of the imported payload (VUID-01742 / VUID-01049). + ANGLE_VK_CHECK(contextVk, + offset <= mSize && externalMemoryRequirements.size <= mSize - offset, + VK_ERROR_OUT_OF_DEVICE_MEMORY); + const void *importMemoryInfo = nullptr; VkMemoryDedicatedAllocateInfo memoryDedicatedAllocateInfo = {}; if (mDedicatedMemory)