| Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
|
| index b5997f55089ae4d60305f622b2daa16f6be7fb90..823cc1a4003cf005dbf154db74577f79a1d587a0 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
|
| @@ -4288,6 +4288,203 @@ TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMInvalidArgs) {
|
| EXPECT_EQ(0u, info->num_uniforms);
|
| }
|
|
|
| +TEST_F(GLES2DecoderManualInitTest, EGLImageExternalBindTexture) {
|
| + InitDecoder(
|
| + "GL_OES_EGL_image_external", // extensions
|
| + false, // has alpha
|
| + false, // has depth
|
| + false, // has stencil
|
| + false, // request alpha
|
| + false, // request depth
|
| + false); // request stencil
|
| + EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kNewServiceId));
|
| + EXPECT_CALL(*gl_, GenTextures(1, _))
|
| + .WillOnce(SetArgumentPointee<1>(kNewServiceId));
|
| + BindTexture cmd;
|
| + cmd.Init(GL_TEXTURE_EXTERNAL_OES, kNewClientId);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + TextureManager::TextureInfo* info = GetTextureInfo(kNewClientId);
|
| + EXPECT_TRUE(info != NULL);
|
| + EXPECT_TRUE(info->target() == GL_TEXTURE_EXTERNAL_OES);
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderManualInitTest, EGLImageExternalGetBinding) {
|
| + InitDecoder(
|
| + "GL_OES_EGL_image_external", // extensions
|
| + false, // has alpha
|
| + false, // has depth
|
| + false, // has stencil
|
| + false, // request alpha
|
| + false, // request depth
|
| + false); // request stencil
|
| + DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
|
| +
|
| + EXPECT_CALL(*gl_, GetError())
|
| + .WillOnce(Return(GL_NO_ERROR))
|
| + .WillOnce(Return(GL_NO_ERROR))
|
| + .RetiresOnSaturation();
|
| + typedef GetIntegerv::Result Result;
|
| + Result* result = static_cast<Result*>(shared_memory_address_);
|
| + EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES,
|
| + result->GetData()))
|
| + .Times(0);
|
| + result->size = 0;
|
| + GetIntegerv cmd;
|
| + cmd.Init(GL_TEXTURE_BINDING_EXTERNAL_OES,
|
| + shared_memory_id_,
|
| + shared_memory_offset_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
|
| + GL_TEXTURE_BINDING_EXTERNAL_OES), result->GetNumResults());
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]);
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureDefaults) {
|
| + InitDecoder(
|
| + "GL_OES_EGL_image_external", // extensions
|
| + false, // has alpha
|
| + false, // has depth
|
| + false, // has stencil
|
| + false, // request alpha
|
| + false, // request depth
|
| + false); // request stencil
|
| + DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
|
| +
|
| + TextureManager::TextureInfo* info = GetTextureInfo(client_texture_id_);
|
| + EXPECT_TRUE(info != NULL);
|
| + EXPECT_TRUE(info->target() == GL_TEXTURE_EXTERNAL_OES);
|
| + EXPECT_TRUE(info->min_filter() == GL_LINEAR);
|
| + EXPECT_TRUE(info->wrap_s() == GL_CLAMP_TO_EDGE);
|
| + EXPECT_TRUE(info->wrap_t() == GL_CLAMP_TO_EDGE);
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParam) {
|
| + InitDecoder(
|
| + "GL_OES_EGL_image_external", // extensions
|
| + false, // has alpha
|
| + false, // has depth
|
| + false, // has stencil
|
| + false, // request alpha
|
| + false, // request depth
|
| + false); // request stencil
|
| +
|
| + DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
|
| +
|
| + EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_MIN_FILTER,
|
| + GL_NEAREST));
|
| + EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_MIN_FILTER,
|
| + GL_LINEAR));
|
| + EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_WRAP_S,
|
| + GL_CLAMP_TO_EDGE));
|
| + EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_WRAP_T,
|
| + GL_CLAMP_TO_EDGE));
|
| + TexParameteri cmd;
|
| + cmd.Init(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_MIN_FILTER,
|
| + GL_NEAREST);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| +
|
| + cmd.Init(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_MIN_FILTER,
|
| + GL_LINEAR);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| +
|
| + cmd.Init(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_WRAP_S,
|
| + GL_CLAMP_TO_EDGE);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| +
|
| + cmd.Init(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_WRAP_T,
|
| + GL_CLAMP_TO_EDGE);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| +
|
| + TextureManager::TextureInfo* info = GetTextureInfo(client_texture_id_);
|
| + EXPECT_TRUE(info != NULL);
|
| + EXPECT_TRUE(info->target() == GL_TEXTURE_EXTERNAL_OES);
|
| + EXPECT_TRUE(info->min_filter() == GL_LINEAR);
|
| + EXPECT_TRUE(info->wrap_s() == GL_CLAMP_TO_EDGE);
|
| + EXPECT_TRUE(info->wrap_t() == GL_CLAMP_TO_EDGE);
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParamInvalid) {
|
| + InitDecoder(
|
| + "GL_OES_EGL_image_external", // extensions
|
| + false, // has alpha
|
| + false, // has depth
|
| + false, // has stencil
|
| + false, // request alpha
|
| + false, // request depth
|
| + false); // request stencil
|
| +
|
| + DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
|
| +
|
| + TexParameteri cmd;
|
| + cmd.Init(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_MIN_FILTER,
|
| + GL_NEAREST_MIPMAP_NEAREST);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
|
| +
|
| + cmd.Init(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_WRAP_S,
|
| + GL_REPEAT);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
|
| +
|
| + cmd.Init(GL_TEXTURE_EXTERNAL_OES,
|
| + GL_TEXTURE_WRAP_T,
|
| + GL_REPEAT);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
|
| +
|
| + TextureManager::TextureInfo* info = GetTextureInfo(client_texture_id_);
|
| + EXPECT_TRUE(info != NULL);
|
| + EXPECT_TRUE(info->target() == GL_TEXTURE_EXTERNAL_OES);
|
| + EXPECT_TRUE(info->min_filter() == GL_LINEAR);
|
| + EXPECT_TRUE(info->wrap_s() == GL_CLAMP_TO_EDGE);
|
| + EXPECT_TRUE(info->wrap_t() == GL_CLAMP_TO_EDGE);
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTexImage2DError) {
|
| + InitDecoder(
|
| + "GL_OES_EGL_image_external", // extensions
|
| + false, // has alpha
|
| + false, // has depth
|
| + false, // has stencil
|
| + false, // request alpha
|
| + false, // request depth
|
| + false); // request stencil
|
| +
|
| + GLenum target = GL_TEXTURE_EXTERNAL_OES;
|
| + GLint level = 0;
|
| + GLenum internal_format = GL_RGBA;
|
| + GLsizei width = 2;
|
| + GLsizei height = 4;
|
| + GLint border = 0;
|
| + GLenum format = GL_RGBA;
|
| + GLenum type = GL_UNSIGNED_BYTE;
|
| + DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
|
| + ASSERT_TRUE(GetTextureInfo(client_texture_id_) != NULL);
|
| + TexImage2D cmd;
|
| + cmd.Init(target, level, internal_format, width, height, border, format,
|
| + type, kSharedMemoryId, kSharedMemoryOffset);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| +
|
| + // TexImage2D is not allowed with GL_TEXTURE_EXTERNAL_OES targets.
|
| + EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
|
| +}
|
| +
|
| // TODO(gman): Complete this test.
|
| // TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) {
|
| // }
|
|
|