Generate errors when read buffers are missing in BlitFramebuffer.
The corresponding gl_tests has been updated too.
BUG=672719
Change-Id: Ief37bc397f7aa065bf99d6ebad0a1b50b1917dac
Reviewed-on: https://chromium-review.googlesource.com/420469
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/tests/gl_tests/BlitFramebufferANGLETest.cpp b/src/tests/gl_tests/BlitFramebufferANGLETest.cpp
index e40a411..4e2b506 100644
--- a/src/tests/gl_tests/BlitFramebufferANGLETest.cpp
+++ b/src/tests/gl_tests/BlitFramebufferANGLETest.cpp
@@ -678,29 +678,26 @@
glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- // depth blit request should be silently ignored, because the read FBO has no depth attachment
- glBlitFramebufferANGLE(0, 0, getWindowWidth(), getWindowHeight(), 0, 0, getWindowWidth(), getWindowHeight(),
- GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST);
+ // generate INVALID_OPERATION if the read FBO has no depth attachment
+ glBlitFramebufferANGLE(0, 0, getWindowWidth(), getWindowHeight(), 0, 0, getWindowWidth(),
+ getWindowHeight(), GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT,
+ GL_NEAREST);
- EXPECT_GL_NO_ERROR();
+ EXPECT_GL_ERROR(GL_INVALID_OPERATION);
- glBindFramebuffer(GL_FRAMEBUFFER, mOriginalFBO);
+ // generate INVALID_OPERATION if the read FBO has no stencil attachment
+ glBlitFramebufferANGLE(0, 0, getWindowWidth(), getWindowHeight(), 0, 0, getWindowWidth(),
+ getWindowHeight(), GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT,
+ GL_NEAREST);
- EXPECT_PIXEL_EQ( getWindowWidth() / 4, getWindowHeight() / 4, 255, 0, 0, 255);
- EXPECT_PIXEL_EQ(3 * getWindowWidth() / 4, getWindowHeight() / 4, 0, 255, 0, 255);
- EXPECT_PIXEL_EQ(3 * getWindowWidth() / 4, 3 * getWindowHeight() / 4, 255, 0, 0, 255);
- EXPECT_PIXEL_EQ( getWindowWidth() / 4, 3 * getWindowHeight() / 4, 0, 255, 0, 255);
+ EXPECT_GL_ERROR(GL_INVALID_OPERATION);
- // unlike in the depth blit tests, this *should* draw a blue quad, because depth info
- // has not been copied
- glEnable(GL_DEPTH_TEST);
- drawQuad(mBlueProgram, "position", 0.8f);
- glDisable(GL_DEPTH_TEST);
+ // generate INVALID_OPERATION if we read from a missing color attachment
+ glReadBuffer(GL_COLOR_ATTACHMENT1);
+ glBlitFramebufferANGLE(0, 0, getWindowWidth(), getWindowHeight(), 0, 0, getWindowWidth(),
+ getWindowHeight(), GL_COLOR_BUFFER_BIT, GL_NEAREST);
- EXPECT_PIXEL_EQ( getWindowWidth() / 4, getWindowHeight() / 4, 0, 0, 255, 255);
- EXPECT_PIXEL_EQ(3 * getWindowWidth() / 4, getWindowHeight() / 4, 0, 0, 255, 255);
- EXPECT_PIXEL_EQ(3 * getWindowWidth() / 4, 3 * getWindowHeight() / 4, 0, 0, 255, 255);
- EXPECT_PIXEL_EQ( getWindowWidth() / 4, 3 * getWindowHeight() / 4, 0, 0, 255, 255);
+ EXPECT_GL_ERROR(GL_INVALID_OPERATION);
}
TEST_P(BlitFramebufferANGLETest, BlitStencil)
@@ -1067,4 +1064,4 @@
ES2_D3D11(EGL_EXPERIMENTAL_PRESENT_PATH_COPY_ANGLE),
ES2_D3D11(EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE));
-ANGLE_INSTANTIATE_TEST(BlitFramebufferTest, ES3_D3D11());
\ No newline at end of file
+ANGLE_INSTANTIATE_TEST(BlitFramebufferTest, ES3_D3D11());