Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Unified Diff: gpu/command_buffer/tests/gl_chromium_framebuffer_multisample_unittest.cc

Issue 47743008: Add a basic test for GL_CHROMIUM_framebuffer_multisample (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/tests/gl_chromium_framebuffer_multisample_unittest.cc
diff --git a/gpu/command_buffer/tests/gl_chromium_framebuffer_multisample_unittest.cc b/gpu/command_buffer/tests/gl_chromium_framebuffer_multisample_unittest.cc
index c1d3c9885c6a8e1da9a9ea78086ec546066fe88a..4ade1e411047b96946146fdcedf43b2b24bdbdbe 100644
--- a/gpu/command_buffer/tests/gl_chromium_framebuffer_multisample_unittest.cc
+++ b/gpu/command_buffer/tests/gl_chromium_framebuffer_multisample_unittest.cc
@@ -47,5 +47,115 @@ TEST_F(GLChromiumFramebufferMultisampleTest, CachedBindingsTest) {
GLTestHelper::CheckGLError("no errors", __LINE__);
}
+TEST_F(GLChromiumFramebufferMultisampleTest, DrawAndResolve) {
+ if (!GLTestHelper::HasExtension("GL_CHROMIUM_framebuffer_multisample")) {
+ return;
+ }
+
+ static const char* v_shader_str =
+ "attribute vec4 a_Position;\n"
+ "void main()\n"
+ "{\n"
+ " gl_Position = a_Position;\n"
+ "}\n";
+ static const char* f_shader_str =
+ "precision mediump float;\n"
+ "void main()\n"
+ "{\n"
+ " gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n"
+ "}\n";
+
+ GLuint program = GLTestHelper::LoadProgram(v_shader_str, f_shader_str);
+ glUseProgram(program);
+ GLuint position_loc = glGetAttribLocation(program, "a_Position");
+
+ GLTestHelper::SetupUnitQuad(position_loc);
+
+ const GLuint width = 100;
+ const GLuint height = 100;
+
+ // Create a sample buffer.
+ GLsizei num_samples = 4, max_samples = 0;
+ glGetIntegerv(GL_MAX_SAMPLES, &max_samples);
+ num_samples = std::min(num_samples, max_samples);
+
+ GLuint sample_fbo, sample_rb;
+ glGenRenderbuffers(1, &sample_rb);
+ glBindRenderbuffer(GL_RENDERBUFFER, sample_rb);
+ glRenderbufferStorageMultisampleEXT(
+ GL_RENDERBUFFER, num_samples, GL_RGBA8_OES, width, height);
+ GLint param = 0;
+ glGetRenderbufferParameteriv(
+ GL_RENDERBUFFER, GL_RENDERBUFFER_SAMPLES, &param);
+ EXPECT_GE(param, num_samples);
+
+ glGenFramebuffers(1, &sample_fbo);
+ glBindFramebuffer(GL_FRAMEBUFFER, sample_fbo);
+ glFramebufferRenderbuffer(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ sample_rb);
+ EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
+ glCheckFramebufferStatus(GL_FRAMEBUFFER));
+
+ // Create another FBO to resolve the multisample buffer into.
+ GLuint resolve_fbo, resolve_tex;
+ glGenTextures(1, &resolve_tex);
+ glBindTexture(GL_TEXTURE_2D, resolve_tex);
+ glTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ width,
+ height,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ NULL);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glGenFramebuffers(1, &resolve_fbo);
+ glBindFramebuffer(GL_FRAMEBUFFER, resolve_fbo);
+ glFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ resolve_tex,
+ 0);
+ EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
+ glCheckFramebufferStatus(GL_FRAMEBUFFER));
+
+ // Draw one triangle (bottom left half).
+ glViewport(0, 0, width, height);
+ glBindFramebuffer(GL_FRAMEBUFFER, sample_fbo);
+ glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glDrawArrays(GL_TRIANGLES, 0, 3);
+
+ // Resolve.
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, sample_fbo);
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, resolve_fbo);
+ glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glBlitFramebufferEXT(0,
+ 0,
+ width,
+ height,
+ 0,
+ 0,
+ width,
+ height,
+ GL_COLOR_BUFFER_BIT,
+ GL_NEAREST);
+
+ // Verify.
+ const uint8 green[] = {0, 255, 0, 255};
+ const uint8 black[] = {0, 0, 0, 0};
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, resolve_fbo);
+ EXPECT_TRUE(
+ GLTestHelper::CheckPixels(width / 4, (3 * height) / 4, 1, 1, 0, green));
+ EXPECT_TRUE(GLTestHelper::CheckPixels(width - 1, 0, 1, 1, 0, black));
+}
+
} // namespace gpu
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698