diff --git a/src/libANGLE/renderer/metal/TextureMtl.mm b/src/libANGLE/renderer/metal/TextureMtl.mm index 6f75fde508..36d5bb42ec 100644 --- a/src/libANGLE/renderer/metal/TextureMtl.mm +++ b/src/libANGLE/renderer/metal/TextureMtl.mm @@ -1012,6 +1012,15 @@ angle::Result TextureMtl::ensureNativeStorageCreated(const gl::Context *context) // view of the native texture at this index later. imageToTransfer = nullptr; } + else if (imageToTransfer) + { + // Image exists but doesn't match the new native storage in size, format, + // or array length. Invalidate it to prevent stale metadata from being used + // by later setPerSliceSubImage calls (which would use the wrong format + // converter or write to a mismatched texture allocation). + imageToTransfer = nullptr; + mTexImageDefs[face][imageMipLevel].formatID = angle::FormatID::NONE; + } } }