Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc |
=================================================================== |
--- gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc (revision 111321) |
+++ gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc (working copy) |
@@ -4874,6 +4874,214 @@ |
GetGLError(); // ignore internal error |
} |
+TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) { |
+ InitDecoder( |
+ "GL_ARB_texture_rectangle", // extensions |
+ false, // has alpha |
+ false, // has depth |
+ false, // has stencil |
+ false, // request alpha |
+ false, // request depth |
+ false, // request stencil |
+ true); // bind generates resource |
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_RECTANGLE_ARB, kNewServiceId)); |
+ EXPECT_CALL(*gl_, GenTextures(1, _)) |
+ .WillOnce(SetArgumentPointee<1>(kNewServiceId)); |
+ BindTexture cmd; |
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, 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_RECTANGLE_ARB); |
+} |
+ |
+TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleGetBinding) { |
+ InitDecoder( |
+ "GL_ARB_texture_rectangle", // extensions |
+ false, // has alpha |
+ false, // has depth |
+ false, // has stencil |
+ false, // request alpha |
+ false, // request depth |
+ false, // request stencil |
+ true); // bind generates resource |
+ DoBindTexture( |
+ GL_TEXTURE_RECTANGLE_ARB, 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_RECTANGLE_ARB, |
+ result->GetData())) |
+ .Times(0); |
+ result->size = 0; |
+ GetIntegerv cmd; |
+ cmd.Init(GL_TEXTURE_BINDING_RECTANGLE_ARB, |
+ shared_memory_id_, |
+ shared_memory_offset_); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned( |
+ GL_TEXTURE_BINDING_RECTANGLE_ARB), result->GetNumResults()); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+ EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]); |
+} |
+ |
+TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureDefaults) { |
+ InitDecoder( |
+ "GL_ARB_texture_rectangle", // extensions |
+ false, // has alpha |
+ false, // has depth |
+ false, // has stencil |
+ false, // request alpha |
+ false, // request depth |
+ false, // request stencil |
+ true); // bind generates resource |
+ DoBindTexture( |
+ GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId); |
+ |
+ TextureManager::TextureInfo* info = GetTextureInfo(client_texture_id_); |
+ EXPECT_TRUE(info != NULL); |
+ EXPECT_TRUE(info->target() == GL_TEXTURE_RECTANGLE_ARB); |
+ 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, ARBTextureRectangleTextureParam) { |
+ InitDecoder( |
+ "GL_ARB_texture_rectangle", // extensions |
+ false, // has alpha |
+ false, // has depth |
+ false, // has stencil |
+ false, // request alpha |
+ false, // request depth |
+ false, // request stencil |
+ true); // bind generates resource |
+ |
+ DoBindTexture( |
+ GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId); |
+ |
+ EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB, |
+ GL_TEXTURE_MIN_FILTER, |
+ GL_NEAREST)); |
+ EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB, |
+ GL_TEXTURE_MIN_FILTER, |
+ GL_LINEAR)); |
+ EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB, |
+ GL_TEXTURE_WRAP_S, |
+ GL_CLAMP_TO_EDGE)); |
+ EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB, |
+ GL_TEXTURE_WRAP_T, |
+ GL_CLAMP_TO_EDGE)); |
+ TexParameteri cmd; |
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, |
+ GL_TEXTURE_MIN_FILTER, |
+ GL_NEAREST); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+ |
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, |
+ GL_TEXTURE_MIN_FILTER, |
+ GL_LINEAR); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+ |
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, |
+ GL_TEXTURE_WRAP_S, |
+ GL_CLAMP_TO_EDGE); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+ |
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, |
+ 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_RECTANGLE_ARB); |
+ 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, ARBTextureRectangleTextureParamInvalid) { |
+ InitDecoder( |
+ "GL_ARB_texture_rectangle", // extensions |
+ false, // has alpha |
+ false, // has depth |
+ false, // has stencil |
+ false, // request alpha |
+ false, // request depth |
+ false, // request stencil |
+ true); // bind generates resource |
+ |
+ DoBindTexture( |
+ GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId); |
+ |
+ TexParameteri cmd; |
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, |
+ GL_TEXTURE_MIN_FILTER, |
+ GL_NEAREST_MIPMAP_NEAREST); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); |
+ |
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, |
+ GL_TEXTURE_WRAP_S, |
+ GL_REPEAT); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); |
+ |
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, |
+ 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_RECTANGLE_ARB); |
+ 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, ARBTextureRectangleTexImage2DError) { |
+ InitDecoder( |
+ "GL_ARB_texture_rectangle", // extensions |
+ false, // has alpha |
+ false, // has depth |
+ false, // has stencil |
+ false, // request alpha |
+ false, // request depth |
+ false, // request stencil |
+ true); // bind generates resource |
+ |
+ GLenum target = GL_TEXTURE_RECTANGLE_ARB; |
+ 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_RECTANGLE_ARB, 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_RECTANGLE_ARB targets. |
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); |
+} |
+ |
TEST_F(GLES2DecoderTest, EnableFeatureCHROMIUMBadBucket) { |
const uint32 kBadBucketId = 123; |
EnableFeatureCHROMIUM cmd; |