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 981991b84698756c70a489ba941af7ad6f52ca5a..52b9a22eb35effc968e8af5af0b01bfead0fc972 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc |
@@ -4211,6 +4211,114 @@ TEST_F(GLES2DecoderTest, ReadPixelsGLError) { |
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); |
} |
+static bool ValueInArray(GLint value, GLint* array, GLint count) { |
+ for (GLint ii = 0; ii < count; ++ii) { |
+ if (array[ii] == value) { |
+ return true; |
+ } |
+ } |
+ return false; |
+} |
+ |
+TEST_F(GLES2DecoderManualInitTest, GetCompressedTextureFormats) { |
+ InitDecoder( |
+ "GL_EXT_texture_compression_s3tc", // extensions |
+ false, // has alpha |
+ false, // has depth |
+ false, // has stencil |
+ false, // request alpha |
+ false, // request depth |
+ false); // request stencil |
+ |
+ EXPECT_CALL(*gl_, GetError()) |
+ .WillOnce(Return(GL_NO_ERROR)) |
+ .WillOnce(Return(GL_NO_ERROR)) |
+ .WillOnce(Return(GL_NO_ERROR)) |
+ .WillOnce(Return(GL_NO_ERROR)) |
+ .RetiresOnSaturation(); |
+ |
+ typedef GetIntegerv::Result Result; |
+ Result* result = static_cast<Result*>(shared_memory_address_); |
+ GetIntegerv cmd; |
+ result->size = 0; |
+ EXPECT_CALL(*gl_, GetIntegerv(_, _)) |
+ .Times(0) |
+ .RetiresOnSaturation(); |
+ cmd.Init( |
+ GL_NUM_COMPRESSED_TEXTURE_FORMATS, |
+ shared_memory_id_, shared_memory_offset_); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(1, result->GetNumResults()); |
+ GLint num_formats = result->GetData()[0]; |
+ EXPECT_EQ(4, num_formats); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+ |
+ result->size = 0; |
+ cmd.Init( |
+ GL_COMPRESSED_TEXTURE_FORMATS, |
+ shared_memory_id_, shared_memory_offset_); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(num_formats, result->GetNumResults()); |
+ |
+ EXPECT_TRUE(ValueInArray( |
+ GL_COMPRESSED_RGB_S3TC_DXT1_EXT, |
+ result->GetData(), result->GetNumResults())); |
+ EXPECT_TRUE(ValueInArray( |
+ GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, |
+ result->GetData(), result->GetNumResults())); |
+ EXPECT_TRUE(ValueInArray( |
+ GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, |
+ result->GetData(), result->GetNumResults())); |
+ EXPECT_TRUE(ValueInArray( |
+ GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, |
+ result->GetData(), result->GetNumResults())); |
+ |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+} |
+ |
+TEST_F(GLES2DecoderManualInitTest, GetNoCompressedTextureFormats) { |
+ InitDecoder( |
+ "", // extensions |
+ false, // has alpha |
+ false, // has depth |
+ false, // has stencil |
+ false, // request alpha |
+ false, // request depth |
+ false); // request stencil |
+ |
+ EXPECT_CALL(*gl_, GetError()) |
+ .WillOnce(Return(GL_NO_ERROR)) |
+ .WillOnce(Return(GL_NO_ERROR)) |
+ .WillOnce(Return(GL_NO_ERROR)) |
+ .WillOnce(Return(GL_NO_ERROR)) |
+ .RetiresOnSaturation(); |
+ |
+ typedef GetIntegerv::Result Result; |
+ Result* result = static_cast<Result*>(shared_memory_address_); |
+ GetIntegerv cmd; |
+ result->size = 0; |
+ EXPECT_CALL(*gl_, GetIntegerv(_, _)) |
+ .Times(0) |
+ .RetiresOnSaturation(); |
+ cmd.Init( |
+ GL_NUM_COMPRESSED_TEXTURE_FORMATS, |
+ shared_memory_id_, shared_memory_offset_); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(1, result->GetNumResults()); |
+ GLint num_formats = result->GetData()[0]; |
+ EXPECT_EQ(0, num_formats); |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+ |
+ result->size = 0; |
+ cmd.Init( |
+ GL_COMPRESSED_TEXTURE_FORMATS, |
+ shared_memory_id_, shared_memory_offset_); |
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
+ EXPECT_EQ(num_formats, result->GetNumResults()); |
+ |
+ EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
+} |
+ |
// TODO(gman): Complete this test. |
// TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) { |
// } |