WebGL: Add 3D tex copying feedback loop detection.

When copying to and from the same texture, we need to reject only
the feedback loops formed with the same levels of the texture -
copying between different unrelated layers and levels is fine.

This change also fixes a couple bugs in our D3D11 CopyTexSubImage3D
implementation. We were missing some "!" operators, and we actually
would hit an ASSERT when trying to blit from a level of a 3D texture.

BUG=angleproject:1685

Change-Id: Id715bebafe8336cf8bb95d0d06275a8b95e522e1
Reviewed-on: https://chromium-review.googlesource.com/425494
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 78073e4..e12f5c2 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -3195,7 +3195,7 @@
     // Detect texture copying feedback loops for WebGL.
     if (context->getExtensions().webglCompatibility)
     {
-        if (readFramebuffer->formsCopyingFeedbackLoopWith(texture->id(), level))
+        if (readFramebuffer->formsCopyingFeedbackLoopWith(texture->id(), level, zoffset))
         {
             context->handleError(Error(GL_INVALID_OPERATION,
                                        "Texture copying feedback loop formed between Framebuffer "