D3D11: Fix blit from out-of-bounds.
Do not copy pixels in a negative read region. Also make sure we clamp
the boundaries so the dEQP tests are mostly pixel-perfect.
We can't yet fix some default framebuffer tests because of issues with
blitting RGBA8 (default FBO) to floating point framebuffers.
BUG=angleproject:1241
TEST=dEQP-GLES3.functional.fbo.blit.*
Change-Id: I16ee264b0b1a7e6b9121dde5ae4f96cfd27ea53e
Reviewed-on: https://chromium-review.googlesource.com/315670
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/gl/FramebufferGL.cpp b/src/libANGLE/renderer/gl/FramebufferGL.cpp
index 8881c01..a2c0784 100644
--- a/src/libANGLE/renderer/gl/FramebufferGL.cpp
+++ b/src/libANGLE/renderer/gl/FramebufferGL.cpp
@@ -286,9 +286,8 @@
mStateManager->bindFramebuffer(GL_READ_FRAMEBUFFER, sourceFramebufferGL->getFramebufferID());
mStateManager->bindFramebuffer(GL_DRAW_FRAMEBUFFER, mFramebufferID);
- mFunctions->blitFramebuffer(sourceArea.x, sourceArea.y, sourceArea.x + sourceArea.width, sourceArea.y + sourceArea.height,
- destArea.x, destArea.y, destArea.x + destArea.width, destArea.y + destArea.height,
- mask, filter);
+ mFunctions->blitFramebuffer(sourceArea.x, sourceArea.y, sourceArea.x1(), sourceArea.y1(),
+ destArea.x, destArea.y, destArea.x1(), destArea.y1(), mask, filter);
return gl::Error(GL_NO_ERROR);
}