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 59e82c9890bce6dee29a7c01d2e02288f0bb06d5..b698bf99e02dcb5c15a8d57e7358cd9a4641e9fe 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc |
@@ -13,6 +13,7 @@ |
#include "gpu/command_buffer/service/context_group.h" |
#include "gpu/command_buffer/service/gl_surface_mock.h" |
#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h" |
+#include "gpu/command_buffer/service/image_manager.h" |
#include "gpu/command_buffer/service/mailbox_manager.h" |
#include "gpu/command_buffer/service/program_manager.h" |
#include "gpu/command_buffer/service/stream_texture_manager_mock.h" |
@@ -7807,6 +7808,87 @@ TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, |
BindVertexArrayOESValidArgsNewId(); |
} |
+TEST_F(GLES2DecoderTest, BindTexImage2DCHROMIUM) { |
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
+ 0, 0); |
+ TextureManager::TextureInfo* info = |
+ group().texture_manager()->GetTextureInfo(client_texture_id_); |
+ EXPECT_EQ(kServiceTextureId, info->service_id()); |
+ |
+ group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0), 1); |
+ EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL); |
+ |
+ GLsizei width; |
+ GLsizei height; |
+ GLenum type; |
+ GLenum internal_format; |
+ |
+ EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
+ EXPECT_EQ(3, width); |
+ EXPECT_EQ(1, height); |
+ EXPECT_TRUE(info->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); |
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); |
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
+ EXPECT_TRUE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); |
+ |
+ // Bind image to texture. |
+ BindTexImage2DCHROMIUM bind_tex_image_2d_cmd; |
+ bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd)); |
+ EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
+ // Image should now be set. |
+ EXPECT_FALSE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); |
+ |
+ // Define new texture image. |
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
+ 0, 0); |
+ EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
+ // Image should no longer be set. |
+ EXPECT_TRUE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); |
+} |
+ |
+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, |
+ 0, 0); |
+ TextureManager::TextureInfo* info = |
+ group().texture_manager()->GetTextureInfo(client_texture_id_); |
+ EXPECT_EQ(kServiceTextureId, info->service_id()); |
+ |
+ group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0), 1); |
+ EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL); |
+ |
+ GLsizei width; |
+ GLsizei height; |
+ GLenum type; |
+ GLenum internal_format; |
+ |
+ EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
+ EXPECT_EQ(3, width); |
+ EXPECT_EQ(1, height); |
+ EXPECT_TRUE(info->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); |
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); |
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
+ EXPECT_TRUE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); |
+ |
+ // Bind image to texture. |
+ BindTexImage2DCHROMIUM bind_tex_image_2d_cmd; |
+ bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd)); |
+ EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
+ // Image should now be set. |
+ EXPECT_FALSE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); |
+ |
+ // Release image from texture. |
+ ReleaseTexImage2DCHROMIUM release_tex_image_2d_cmd; |
+ release_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(release_tex_image_2d_cmd)); |
+ EXPECT_TRUE(info->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
+ // Image should no longer be set. |
+ EXPECT_TRUE(info->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); |
+} |
+ |
// TODO(gman): Complete this test. |
// TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) { |
// } |