diff --git a/Ryujinx.Graphics.Gpu/Image/Texture.cs b/Ryujinx.Graphics.Gpu/Image/Texture.cs
index ca43c4300f..eacfa4f529 100644
--- a/Ryujinx.Graphics.Gpu/Image/Texture.cs
+++ b/Ryujinx.Graphics.Gpu/Image/Texture.cs
@@ -1382,9 +1382,16 @@ namespace Ryujinx.Graphics.Gpu.Image
         /// Determine if any of this texture's data overlaps with another.
         /// </summary>
         /// <param name="texture">The texture to check against</param>
+        /// <param name="compatibility">The view compatibility of the two textures</param>
         /// <returns>True if any slice of the textures overlap, false otherwise</returns>
-        public bool DataOverlaps(Texture texture)
+        public bool DataOverlaps(Texture texture, TextureViewCompatibility compatibility)
         {
+            if (compatibility == TextureViewCompatibility.LayoutIncompatible && Info.GobBlocksInZ > 1 && Info.GobBlocksInZ == texture.Info.GobBlocksInZ)
+            {
+                // Allow overlapping slices of layout compatible 3D textures with matching GobBlocksInZ, as they are interleaved.
+                return false;
+            }
+
             if (texture._sizeInfo.AllOffsets.Length == 1 && _sizeInfo.AllOffsets.Length == 1)
             {
                 return Range.OverlapsWith(texture.Range);
diff --git a/Ryujinx.Graphics.Gpu/Image/TextureCache.cs b/Ryujinx.Graphics.Gpu/Image/TextureCache.cs
index fab38e1468..fed89770ab 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureCache.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureCache.cs
@@ -582,7 +582,7 @@ namespace Ryujinx.Graphics.Gpu.Image
 
                     if (oInfo.Compatibility <= TextureViewCompatibility.LayoutIncompatible)
                     {
-                        if (!overlap.IsView && texture.DataOverlaps(overlap))
+                        if (!overlap.IsView && texture.DataOverlaps(overlap, oInfo.Compatibility))
                         {
                             texture.Group.RegisterIncompatibleOverlap(new TextureIncompatibleOverlap(overlap.Group, oInfo.Compatibility), true);
                         }
@@ -657,7 +657,7 @@ namespace Ryujinx.Graphics.Gpu.Image
                     }
                     else
                     {
-                        bool dataOverlaps = texture.DataOverlaps(overlap);
+                        bool dataOverlaps = texture.DataOverlaps(overlap, compatibility);
                         
                         if (!overlap.IsView && dataOverlaps && !incompatibleOverlaps.Exists(incompatible => incompatible.Group == overlap.Group))
                         {
@@ -676,12 +676,6 @@ namespace Ryujinx.Graphics.Gpu.Image
                                 continue;
                             }
 
-                            if (info.GobBlocksInZ > 1 && info.GobBlocksInZ == overlap.Info.GobBlocksInZ)
-                            {
-                                // Allow overlapping slices of 3D textures. Could be improved in future by making sure the textures don't overlap.
-                                continue;
-                            }
-
                             // The overlap texture is going to contain garbage data after we draw, or is generally incompatible.
                             // The texture group will obtain copy dependencies for any subresources that are compatible between the two textures,
                             // but sometimes its data must be flushed regardless.