X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fgpu%2Fcommand_buffer%2Fservice%2Fgles2_cmd_decoder_unittest.cc;h=e7187d07e59a52242226f2fd55dca614301297b7;hb=ff3e2503a20db9193d323c1d19c38c68004dec4a;hp=dcfd228b040e22474a38ab51083647fb88cafecd;hpb=7338fba38ba696536d1cc9d389afd716a6ab2fe6;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/src/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc index dcfd228..e7187d0 100644 --- a/src/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc +++ b/src/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc @@ -5663,19 +5663,23 @@ TEST_F(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) { BindTexture cmd1; cmd1.Init(GL_TEXTURE_2D, kInvalidClientId); - EXPECT_NE(error::kNoError, ExecuteCmd(cmd1)); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); BindBuffer cmd2; cmd2.Init(GL_ARRAY_BUFFER, kInvalidClientId); - EXPECT_NE(error::kNoError, ExecuteCmd(cmd2)); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); BindFramebuffer cmd3; cmd3.Init(GL_FRAMEBUFFER, kInvalidClientId); - EXPECT_NE(error::kNoError, ExecuteCmd(cmd3)); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd3)); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); BindRenderbuffer cmd4; cmd4.Init(GL_RENDERBUFFER, kInvalidClientId); - EXPECT_NE(error::kNoError, ExecuteCmd(cmd4)); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd4)); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); } TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) { @@ -7067,11 +7071,9 @@ TEST_F(GLES2DecoderTest, BeginEndQueryEXTGetErrorQueryCHROMIUM) { } TEST_F(GLES2DecoderTest, ProduceAndConsumeTextureCHROMIUM) { - GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM]; - group().mailbox_manager()->GenerateMailboxName( - reinterpret_cast(mailbox)); + Mailbox mailbox = Mailbox::Generate(); - memcpy(shared_memory_address_, mailbox, sizeof(mailbox)); + memcpy(shared_memory_address_, mailbox.name, sizeof(mailbox.name)); DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, @@ -7126,7 +7128,7 @@ TEST_F(GLES2DecoderTest, ProduceAndConsumeTextureCHROMIUM) { .Times(1) .RetiresOnSaturation(); - memcpy(shared_memory_address_, mailbox, sizeof(mailbox)); + memcpy(shared_memory_address_, mailbox.name, sizeof(mailbox.name)); ConsumeTextureCHROMIUM consume_cmd; consume_cmd.Init(GL_TEXTURE_2D, kSharedMemoryId, kSharedMemoryOffset); EXPECT_EQ(error::kNoError, ExecuteCmd(consume_cmd)); @@ -7708,6 +7710,16 @@ TEST_F(GLES2DecoderTest, BindTexImage2DCHROMIUM) { EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); } +TEST_F(GLES2DecoderTest, BindTexImage2DCHROMIUMCubeMapNotAllowed) { + group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1); + DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId); + + BindTexImage2DCHROMIUM bind_tex_image_2d_cmd; + bind_tex_image_2d_cmd.Init(GL_TEXTURE_CUBE_MAP, 1); + EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); +} + TEST_F(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) { DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, @@ -8569,6 +8581,26 @@ TEST_F(GLES2DecoderTest, DrawBuffersEXTImmediateBackbuffer) { EXPECT_EQ(GL_NO_ERROR, GetGLError()); } +TEST_F(GLES2DecoderManualInitTest, InvalidateFramebufferBinding) { + InitDecoder("", // extensions + "opengl es 3.0", // gl version + false, // has alpha + false, // has depth + false, // has stencil + false, // request alpha + false, // request depth + false, // request stencil + false); // bind generates resource + + // EXPECT_EQ can't be used to compare function pointers + EXPECT_TRUE( + gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") == + gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn); + EXPECT_TRUE( + gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") != + gfx::MockGLInterface::GetGLProcAddress("glDiscardFramebufferEXT")); +} + TEST_F(GLES2DecoderManualInitTest, DiscardFramebufferEXT) { InitDecoder("GL_EXT_discard_framebuffer", // extensions "opengl es 2.0", // gl version @@ -8580,6 +8612,11 @@ TEST_F(GLES2DecoderManualInitTest, DiscardFramebufferEXT) { false, // request stencil false); // bind generates resource + // EXPECT_EQ can't be used to compare function pointers + EXPECT_TRUE( + gfx::MockGLInterface::GetGLProcAddress("glDiscardFramebufferEXT") == + gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn); + const GLenum target = GL_FRAMEBUFFER; const GLsizei count = 1; const GLenum attachments[] = { GL_COLOR_ATTACHMENT0 }; @@ -8814,6 +8851,129 @@ TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit1) { GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); } +TEST_F(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) { + CommandLine command_line(0, NULL); + command_line.AppendSwitchASCII( + switches::kGpuDriverBugWorkarounds, + base::IntToString(gpu::CLEAR_UNIFORMS_BEFORE_FIRST_PROGRAM_USE)); + InitDecoderWithCommandLine( + "", // extensions + "3.0", // gl version + true, // has alpha + false, // has depth + false, // has stencil + true, // request alpha + false, // request depth + false, // request stencil + true, // bind generates resource + &command_line); + { + static AttribInfo attribs[] = { + { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, + { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, + { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, + }; + static UniformInfo uniforms[] = { + { kUniform1Name, kUniform1Size, kUniform1Type, + kUniform1FakeLocation, kUniform1RealLocation, + kUniform1DesiredLocation }, + { kUniform2Name, kUniform2Size, kUniform2Type, + kUniform2FakeLocation, kUniform2RealLocation, + kUniform2DesiredLocation }, + { kUniform3Name, kUniform3Size, kUniform3Type, + kUniform3FakeLocation, kUniform3RealLocation, + kUniform3DesiredLocation }, + }; + SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms), + client_program_id_, kServiceProgramId, + client_vertex_shader_id_, kServiceVertexShaderId, + client_fragment_shader_id_, kServiceFragmentShaderId); + TestHelper::SetupExpectationsForClearingUniforms( + gl_.get(), uniforms, arraysize(uniforms)); + } + + { + EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) + .Times(1) + .RetiresOnSaturation(); + cmds::UseProgram cmd; + cmd.Init(client_program_id_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + } +} + +TEST_F(GLES2DecoderManualInitTest, TexImage2DFloatOnGLES2) { + InitDecoder("GL_OES_texture_float", // extensions + "opengl es 2.0", // gl version + false, // has alpha + false, // has depth + false, // has stencil + false, // request alpha + false, // request depth + false, // request stencil + false); // bind generates resource + DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, GL_LUMINANCE, + GL_FLOAT, 0, 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, GL_ALPHA, GL_FLOAT, + 0, 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 16, 17, 0, + GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0); +} + +TEST_F(GLES2DecoderManualInitTest, TexImage2DFloatOnGLES3) { + InitDecoder("GL_OES_texture_float GL_EXT_color_buffer_float", // extensions + "opengl es 3.0", // gl version + false, // has alpha + false, // has depth + false, // has stencil + false, // request alpha + false, // request depth + false, // request stencil + false); // bind generates resource + DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, + 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, GL_LUMINANCE, + GL_FLOAT, 0, 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, GL_ALPHA, GL_FLOAT, + 0, 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 16, 17, 0, + GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0); +} + +TEST_F(GLES2DecoderManualInitTest, TexImage2DFloatConvertsFormatDesktop) { + InitDecoder("GL_ARB_texture_float", // extensions + "2.1", // gl version + false, // has alpha + false, // has depth + false, // has stencil + false, // request alpha + false, // request depth + false, // request stencil + false); // bind generates resource + DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, + 0); + DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0); + DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, + GL_RGBA, GL_FLOAT, 0, 0, GL_RGBA32F_ARB); + DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, + GL_RGB, GL_FLOAT, 0, 0, GL_RGB32F_ARB); + DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, + GL_LUMINANCE, GL_FLOAT, 0, 0, + GL_LUMINANCE32F_ARB); + DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, + GL_ALPHA, GL_FLOAT, 0, 0, GL_ALPHA32F_ARB); + DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 16, + 17, 0, GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0, + GL_LUMINANCE_ALPHA32F_ARB); +} + // TODO(gman): Complete this test. // TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) { // }