| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 | 133 |
| 134 class GLES2DecoderManualInitTest : public GLES2DecoderWithShaderTest { | 134 class GLES2DecoderManualInitTest : public GLES2DecoderWithShaderTest { |
| 135 public: | 135 public: |
| 136 GLES2DecoderManualInitTest() { } | 136 GLES2DecoderManualInitTest() { } |
| 137 | 137 |
| 138 // Override default setup so nothing gets setup. | 138 // Override default setup so nothing gets setup. |
| 139 virtual void SetUp() { | 139 virtual void SetUp() { |
| 140 } | 140 } |
| 141 }; | 141 }; |
| 142 | 142 |
| 143 class GLES2DecoderCompressedFormatsTest : public GLES2DecoderManualInitTest { |
| 144 public: |
| 145 GLES2DecoderCompressedFormatsTest() { } |
| 146 |
| 147 static bool ValueInArray(GLint value, GLint* array, GLint count) { |
| 148 for (GLint ii = 0; ii < count; ++ii) { |
| 149 if (array[ii] == value) { |
| 150 return true; |
| 151 } |
| 152 } |
| 153 return false; |
| 154 } |
| 155 |
| 156 void CheckFormats(const char* extension, const GLenum* formats, int count) { |
| 157 InitState init; |
| 158 init.extensions = extension; |
| 159 init.gl_version = "3.0"; |
| 160 init.bind_generates_resource = true; |
| 161 InitDecoder(init); |
| 162 |
| 163 EXPECT_CALL(*gl_, GetError()) |
| 164 .WillOnce(Return(GL_NO_ERROR)) |
| 165 .WillOnce(Return(GL_NO_ERROR)) |
| 166 .WillOnce(Return(GL_NO_ERROR)) |
| 167 .WillOnce(Return(GL_NO_ERROR)) |
| 168 .RetiresOnSaturation(); |
| 169 |
| 170 typedef GetIntegerv::Result Result; |
| 171 Result* result = static_cast<Result*>(shared_memory_address_); |
| 172 GetIntegerv cmd; |
| 173 result->size = 0; |
| 174 EXPECT_CALL(*gl_, GetIntegerv(_, _)) |
| 175 .Times(0) |
| 176 .RetiresOnSaturation(); |
| 177 cmd.Init( |
| 178 GL_NUM_COMPRESSED_TEXTURE_FORMATS, |
| 179 shared_memory_id_, shared_memory_offset_); |
| 180 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 181 EXPECT_EQ(1, result->GetNumResults()); |
| 182 GLint num_formats = result->GetData()[0]; |
| 183 EXPECT_EQ(count, num_formats); |
| 184 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 185 |
| 186 result->size = 0; |
| 187 cmd.Init( |
| 188 GL_COMPRESSED_TEXTURE_FORMATS, |
| 189 shared_memory_id_, shared_memory_offset_); |
| 190 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 191 EXPECT_EQ(num_formats, result->GetNumResults()); |
| 192 |
| 193 for (int i = 0; i < count; ++i) { |
| 194 EXPECT_TRUE(ValueInArray( |
| 195 formats[i], |
| 196 result->GetData(), result->GetNumResults())); |
| 197 } |
| 198 |
| 199 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 200 } |
| 201 }; |
| 202 |
| 143 class GLES2DecoderRestoreStateTest : public GLES2DecoderManualInitTest { | 203 class GLES2DecoderRestoreStateTest : public GLES2DecoderManualInitTest { |
| 144 public: | 204 public: |
| 145 GLES2DecoderRestoreStateTest() { } | 205 GLES2DecoderRestoreStateTest() { } |
| 146 | 206 |
| 147 protected: | 207 protected: |
| 148 void AddExpectationsForActiveTexture(GLenum unit); | 208 void AddExpectationsForActiveTexture(GLenum unit); |
| 149 void AddExpectationsForBindTexture(GLenum target, GLuint id); | 209 void AddExpectationsForBindTexture(GLenum target, GLuint id); |
| 150 void InitializeContextState( | 210 void InitializeContextState( |
| 151 ContextState* state, uint32 non_default_unit, uint32 active_unit); | 211 ContextState* state, uint32 non_default_unit, uint32 active_unit); |
| 152 }; | 212 }; |
| (...skipping 4874 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5027 .RetiresOnSaturation(); | 5087 .RetiresOnSaturation(); |
| 5028 ReadPixels cmd; | 5088 ReadPixels cmd; |
| 5029 cmd.Init(x, y, width, height, kFormat, GL_UNSIGNED_BYTE, | 5089 cmd.Init(x, y, width, height, kFormat, GL_UNSIGNED_BYTE, |
| 5030 pixels_shm_id, pixels_shm_offset, | 5090 pixels_shm_id, pixels_shm_offset, |
| 5031 result_shm_id, result_shm_offset, | 5091 result_shm_id, result_shm_offset, |
| 5032 false); | 5092 false); |
| 5033 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 5093 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5034 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); | 5094 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); |
| 5035 } | 5095 } |
| 5036 | 5096 |
| 5037 static bool ValueInArray(GLint value, GLint* array, GLint count) { | 5097 TEST_F(GLES2DecoderCompressedFormatsTest, GetCompressedTextureFormatsS3TC) { |
| 5038 for (GLint ii = 0; ii < count; ++ii) { | 5098 const GLenum formats[] = { |
| 5039 if (array[ii] == value) { | 5099 GL_COMPRESSED_RGB_S3TC_DXT1_EXT, |
| 5040 return true; | 5100 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, |
| 5041 } | 5101 GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, |
| 5042 } | 5102 GL_COMPRESSED_RGBA_S3TC_DXT5_EXT |
| 5043 return false; | 5103 }; |
| 5104 CheckFormats("GL_EXT_texture_compression_s3tc", formats, 4); |
| 5044 } | 5105 } |
| 5045 | 5106 |
| 5046 TEST_F(GLES2DecoderManualInitTest, GetCompressedTextureFormats) { | 5107 TEST_F(GLES2DecoderCompressedFormatsTest, GetCompressedTextureFormatsATC) { |
| 5047 InitState init; | 5108 const GLenum formats[] = { |
| 5048 init.extensions = "GL_EXT_texture_compression_s3tc"; | 5109 GL_ATC_RGB_AMD, |
| 5049 init.gl_version = "3.0"; | 5110 GL_ATC_RGBA_EXPLICIT_ALPHA_AMD, |
| 5050 init.bind_generates_resource = true; | 5111 GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD |
| 5051 InitDecoder(init); | 5112 }; |
| 5113 CheckFormats("GL_AMD_compressed_ATC_texture", formats, 3); |
| 5114 } |
| 5052 | 5115 |
| 5053 EXPECT_CALL(*gl_, GetError()) | 5116 TEST_F(GLES2DecoderCompressedFormatsTest, GetCompressedTextureFormatsPVRTC) { |
| 5054 .WillOnce(Return(GL_NO_ERROR)) | 5117 const GLenum formats[] = { |
| 5055 .WillOnce(Return(GL_NO_ERROR)) | 5118 GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, |
| 5056 .WillOnce(Return(GL_NO_ERROR)) | 5119 GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, |
| 5057 .WillOnce(Return(GL_NO_ERROR)) | 5120 GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, |
| 5058 .RetiresOnSaturation(); | 5121 GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG |
| 5122 }; |
| 5123 CheckFormats("GL_IMG_texture_compression_pvrtc", formats, 4); |
| 5124 } |
| 5059 | 5125 |
| 5060 typedef GetIntegerv::Result Result; | 5126 TEST_F(GLES2DecoderCompressedFormatsTest, GetCompressedTextureFormatsETC1) { |
| 5061 Result* result = static_cast<Result*>(shared_memory_address_); | 5127 const GLenum formats[] = { |
| 5062 GetIntegerv cmd; | 5128 GL_ETC1_RGB8_OES |
| 5063 result->size = 0; | 5129 }; |
| 5064 EXPECT_CALL(*gl_, GetIntegerv(_, _)) | 5130 CheckFormats("GL_OES_compressed_ETC1_RGB8_texture", formats, 1); |
| 5065 .Times(0) | |
| 5066 .RetiresOnSaturation(); | |
| 5067 cmd.Init( | |
| 5068 GL_NUM_COMPRESSED_TEXTURE_FORMATS, | |
| 5069 shared_memory_id_, shared_memory_offset_); | |
| 5070 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
| 5071 EXPECT_EQ(1, result->GetNumResults()); | |
| 5072 GLint num_formats = result->GetData()[0]; | |
| 5073 EXPECT_EQ(4, num_formats); | |
| 5074 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | |
| 5075 | |
| 5076 result->size = 0; | |
| 5077 cmd.Init( | |
| 5078 GL_COMPRESSED_TEXTURE_FORMATS, | |
| 5079 shared_memory_id_, shared_memory_offset_); | |
| 5080 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
| 5081 EXPECT_EQ(num_formats, result->GetNumResults()); | |
| 5082 | |
| 5083 EXPECT_TRUE(ValueInArray( | |
| 5084 GL_COMPRESSED_RGB_S3TC_DXT1_EXT, | |
| 5085 result->GetData(), result->GetNumResults())); | |
| 5086 EXPECT_TRUE(ValueInArray( | |
| 5087 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, | |
| 5088 result->GetData(), result->GetNumResults())); | |
| 5089 EXPECT_TRUE(ValueInArray( | |
| 5090 GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, | |
| 5091 result->GetData(), result->GetNumResults())); | |
| 5092 EXPECT_TRUE(ValueInArray( | |
| 5093 GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, | |
| 5094 result->GetData(), result->GetNumResults())); | |
| 5095 | |
| 5096 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | |
| 5097 } | 5131 } |
| 5098 | 5132 |
| 5099 TEST_F(GLES2DecoderManualInitTest, GetNoCompressedTextureFormats) { | 5133 TEST_F(GLES2DecoderManualInitTest, GetNoCompressedTextureFormats) { |
| 5100 InitState init; | 5134 InitState init; |
| 5101 init.gl_version = "3.0"; | 5135 init.gl_version = "3.0"; |
| 5102 init.bind_generates_resource = true; | 5136 init.bind_generates_resource = true; |
| 5103 InitDecoder(init); | 5137 InitDecoder(init); |
| 5104 | 5138 |
| 5105 EXPECT_CALL(*gl_, GetError()) | 5139 EXPECT_CALL(*gl_, GetError()) |
| 5106 .WillOnce(Return(GL_NO_ERROR)) | 5140 .WillOnce(Return(GL_NO_ERROR)) |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5376 EXPECT_EQ(error::kNoError, ExecuteCmd(texsub_cmd)); | 5410 EXPECT_EQ(error::kNoError, ExecuteCmd(texsub_cmd)); |
| 5377 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 5411 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5378 | 5412 |
| 5379 // Test CopyTexSubImage not allowed for ETC1 compressed texture | 5413 // Test CopyTexSubImage not allowed for ETC1 compressed texture |
| 5380 CopyTexSubImage2D copy_cmd; | 5414 CopyTexSubImage2D copy_cmd; |
| 5381 copy_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4); | 5415 copy_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4); |
| 5382 EXPECT_EQ(error::kNoError, ExecuteCmd(copy_cmd)); | 5416 EXPECT_EQ(error::kNoError, ExecuteCmd(copy_cmd)); |
| 5383 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 5417 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5384 } | 5418 } |
| 5385 | 5419 |
| 5386 TEST_F(GLES2DecoderManualInitTest, GetCompressedTextureFormatsETC1) { | |
| 5387 InitState init; | |
| 5388 init.extensions = "GL_OES_compressed_ETC1_RGB8_texture"; | |
| 5389 init.gl_version = "opengl es 2.0"; | |
| 5390 init.bind_generates_resource = true; | |
| 5391 InitDecoder(init); | |
| 5392 | |
| 5393 EXPECT_CALL(*gl_, GetError()) | |
| 5394 .WillOnce(Return(GL_NO_ERROR)) | |
| 5395 .WillOnce(Return(GL_NO_ERROR)) | |
| 5396 .WillOnce(Return(GL_NO_ERROR)) | |
| 5397 .WillOnce(Return(GL_NO_ERROR)) | |
| 5398 .RetiresOnSaturation(); | |
| 5399 | |
| 5400 typedef GetIntegerv::Result Result; | |
| 5401 Result* result = static_cast<Result*>(shared_memory_address_); | |
| 5402 GetIntegerv cmd; | |
| 5403 result->size = 0; | |
| 5404 EXPECT_CALL(*gl_, GetIntegerv(_, _)) | |
| 5405 .Times(0) | |
| 5406 .RetiresOnSaturation(); | |
| 5407 cmd.Init( | |
| 5408 GL_NUM_COMPRESSED_TEXTURE_FORMATS, | |
| 5409 shared_memory_id_, shared_memory_offset_); | |
| 5410 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
| 5411 EXPECT_EQ(1, result->GetNumResults()); | |
| 5412 GLint num_formats = result->GetData()[0]; | |
| 5413 EXPECT_EQ(1, num_formats); | |
| 5414 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | |
| 5415 | |
| 5416 result->size = 0; | |
| 5417 cmd.Init( | |
| 5418 GL_COMPRESSED_TEXTURE_FORMATS, | |
| 5419 shared_memory_id_, shared_memory_offset_); | |
| 5420 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
| 5421 EXPECT_EQ(num_formats, result->GetNumResults()); | |
| 5422 | |
| 5423 EXPECT_TRUE(ValueInArray( | |
| 5424 GL_ETC1_RGB8_OES, | |
| 5425 result->GetData(), result->GetNumResults())); | |
| 5426 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | |
| 5427 } | |
| 5428 | |
| 5429 TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMValidArgs) { | 5420 TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMValidArgs) { |
| 5430 const uint32 kBucketId = 123; | 5421 const uint32 kBucketId = 123; |
| 5431 GetProgramInfoCHROMIUM cmd; | 5422 GetProgramInfoCHROMIUM cmd; |
| 5432 cmd.Init(client_program_id_, kBucketId); | 5423 cmd.Init(client_program_id_, kBucketId); |
| 5433 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 5424 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5434 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); | 5425 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); |
| 5435 EXPECT_GT(bucket->size(), 0u); | 5426 EXPECT_GT(bucket->size(), 0u); |
| 5436 } | 5427 } |
| 5437 | 5428 |
| 5438 TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMInvalidArgs) { | 5429 TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMInvalidArgs) { |
| (...skipping 4144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9583 // TODO(gman): TexImage2DImmediate | 9574 // TODO(gman): TexImage2DImmediate |
| 9584 | 9575 |
| 9585 // TODO(gman): TexSubImage2DImmediate | 9576 // TODO(gman): TexSubImage2DImmediate |
| 9586 | 9577 |
| 9587 // TODO(gman): UseProgram | 9578 // TODO(gman): UseProgram |
| 9588 | 9579 |
| 9589 // TODO(gman): SwapBuffers | 9580 // TODO(gman): SwapBuffers |
| 9590 | 9581 |
| 9591 } // namespace gles2 | 9582 } // namespace gles2 |
| 9592 } // namespace gpu | 9583 } // namespace gpu |
| OLD | NEW |