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/atomicops.h" | 7 #include "base/atomicops.h" |
8 #include "gpu/command_buffer/common/gl_mock.h" | 8 #include "gpu/command_buffer/common/gl_mock.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 5069 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5080 GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 4, 4, 0, | 5080 GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 4, 4, 0, |
5081 kBadBucketId); | 5081 kBadBucketId); |
5082 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 5082 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
5083 CompressedTexSubImage2DBucket cmd2; | 5083 CompressedTexSubImage2DBucket cmd2; |
5084 cmd2.Init( | 5084 cmd2.Init( |
5085 GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, | 5085 GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, |
5086 kBadBucketId); | 5086 kBadBucketId); |
5087 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 5087 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
5088 } | 5088 } |
5089 | 5089 |
| 5090 namespace { |
| 5091 |
| 5092 struct S3TCTestData { |
| 5093 GLenum format; |
| 5094 size_t block_size; |
| 5095 }; |
| 5096 |
| 5097 } // anonymous namespace. |
| 5098 |
| 5099 TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DS3TC) { |
| 5100 InitDecoder( |
| 5101 "GL_EXT_texture_compression_s3tc", // extensions |
| 5102 false, // has alpha |
| 5103 false, // has depth |
| 5104 false, // has stencil |
| 5105 false, // request alpha |
| 5106 false, // request depth |
| 5107 false, // request stencil |
| 5108 true); // bind generates resource |
| 5109 const uint32 kBucketId = 123; |
| 5110 CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId); |
| 5111 ASSERT_TRUE(bucket != NULL); |
| 5112 |
| 5113 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
| 5114 |
| 5115 static const S3TCTestData test_data[] = { |
| 5116 { GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 8, }, |
| 5117 { GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 8, }, |
| 5118 { GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 16, }, |
| 5119 { GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 16, }, |
| 5120 }; |
| 5121 |
| 5122 for (size_t ii = 0; ii < arraysize(test_data); ++ii) { |
| 5123 const S3TCTestData& test = test_data[ii]; |
| 5124 CompressedTexImage2DBucket cmd; |
| 5125 // test too small width. |
| 5126 cmd.Init( |
| 5127 GL_TEXTURE_2D, 0, test.format, 2, 4, 0, |
| 5128 kBucketId); |
| 5129 bucket->SetSize(test.block_size); |
| 5130 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5131 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5132 |
| 5133 // test bad width. |
| 5134 cmd.Init( |
| 5135 GL_TEXTURE_2D, 0, test.format, 5, 4, 0, |
| 5136 kBucketId); |
| 5137 bucket->SetSize(test.block_size * 2); |
| 5138 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5139 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5140 |
| 5141 // test too small height. |
| 5142 cmd.Init( |
| 5143 GL_TEXTURE_2D, 0, test.format, 4, 2, 0, |
| 5144 kBucketId); |
| 5145 bucket->SetSize(test.block_size); |
| 5146 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5147 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5148 |
| 5149 // test too bad height. |
| 5150 cmd.Init( |
| 5151 GL_TEXTURE_2D, 0, test.format, 4, 5, 0, |
| 5152 kBucketId); |
| 5153 bucket->SetSize(test.block_size * 2); |
| 5154 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5155 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5156 |
| 5157 // test too small for level 0. |
| 5158 cmd.Init( |
| 5159 GL_TEXTURE_2D, 0, test.format, 1, 1, 0, |
| 5160 kBucketId); |
| 5161 bucket->SetSize(test.block_size); |
| 5162 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5163 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5164 |
| 5165 // test too small for level 0. |
| 5166 cmd.Init( |
| 5167 GL_TEXTURE_2D, 0, test.format, 2, 2, 0, |
| 5168 kBucketId); |
| 5169 bucket->SetSize(test.block_size); |
| 5170 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5171 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5172 |
| 5173 // test size too large. |
| 5174 cmd.Init( |
| 5175 GL_TEXTURE_2D, 0, test.format, 4, 4, 0, |
| 5176 kBucketId); |
| 5177 bucket->SetSize(test.block_size * 2); |
| 5178 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5179 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
| 5180 |
| 5181 // test size too small. |
| 5182 cmd.Init( |
| 5183 GL_TEXTURE_2D, 0, test.format, 4, 4, 0, |
| 5184 kBucketId); |
| 5185 bucket->SetSize(test.block_size / 2); |
| 5186 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 5187 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
| 5188 |
| 5189 // test with 3 mips. |
| 5190 DoCompressedTexImage2D( |
| 5191 GL_TEXTURE_2D, 0, test.format, 4, 4, 0, test.block_size, kBucketId); |
| 5192 DoCompressedTexImage2D( |
| 5193 GL_TEXTURE_2D, 1, test.format, 2, 2, 0, test.block_size, kBucketId); |
| 5194 DoCompressedTexImage2D( |
| 5195 GL_TEXTURE_2D, 2, test.format, 1, 1, 0, test.block_size, kBucketId); |
| 5196 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 5197 |
| 5198 // Test a 16x16 |
| 5199 DoCompressedTexImage2D( |
| 5200 GL_TEXTURE_2D, 0, test.format, 16, 16, 0, test.block_size * 4 * 4, |
| 5201 kBucketId); |
| 5202 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 5203 |
| 5204 CompressedTexSubImage2DBucket sub_cmd; |
| 5205 bucket->SetSize(test.block_size); |
| 5206 // Test sub image bad xoffset |
| 5207 sub_cmd.Init( |
| 5208 GL_TEXTURE_2D, 0, 1, 0, 4, 4, test.format, kBucketId); |
| 5209 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd)); |
| 5210 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5211 |
| 5212 // Test sub image bad yoffset |
| 5213 sub_cmd.Init( |
| 5214 GL_TEXTURE_2D, 0, 0, 2, 4, 4, test.format, kBucketId); |
| 5215 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd)); |
| 5216 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5217 |
| 5218 // Test sub image bad width |
| 5219 bucket->SetSize(test.block_size * 2); |
| 5220 sub_cmd.Init( |
| 5221 GL_TEXTURE_2D, 0, 0, 0, 5, 4, test.format, kBucketId); |
| 5222 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd)); |
| 5223 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5224 |
| 5225 // Test sub image bad height |
| 5226 sub_cmd.Init( |
| 5227 GL_TEXTURE_2D, 0, 0, 0, 4, 5, test.format, kBucketId); |
| 5228 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd)); |
| 5229 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 5230 |
| 5231 // Test sub image bad size |
| 5232 bucket->SetSize(test.block_size + 1); |
| 5233 sub_cmd.Init( |
| 5234 GL_TEXTURE_2D, 0, 0, 0, 4, 4, test.format, kBucketId); |
| 5235 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd)); |
| 5236 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
| 5237 |
| 5238 for (GLint yoffset = 0; yoffset <= 8; yoffset += 4) { |
| 5239 for (GLint xoffset = 0; xoffset <= 8; xoffset += 4) { |
| 5240 for (GLsizei height = 4; height <= 8; height +=4 ) { |
| 5241 for (GLsizei width = 4; width <= 8; width += 4) { |
| 5242 GLsizei size = test.block_size * (width / 4) * (height / 4); |
| 5243 bucket->SetSize(size); |
| 5244 EXPECT_CALL(*gl_, CompressedTexSubImage2D( |
| 5245 GL_TEXTURE_2D, 0, xoffset, yoffset, width, height, test.format, |
| 5246 size, _)) |
| 5247 .Times(1) |
| 5248 .RetiresOnSaturation(); |
| 5249 sub_cmd.Init( |
| 5250 GL_TEXTURE_2D, 0, xoffset, yoffset, width, height, test.format, |
| 5251 kBucketId); |
| 5252 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd)); |
| 5253 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 5254 } |
| 5255 } |
| 5256 } |
| 5257 } |
| 5258 } |
| 5259 } |
| 5260 |
5090 TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMValidArgs) { | 5261 TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMValidArgs) { |
5091 const uint32 kBucketId = 123; | 5262 const uint32 kBucketId = 123; |
5092 GetProgramInfoCHROMIUM cmd; | 5263 GetProgramInfoCHROMIUM cmd; |
5093 cmd.Init(client_program_id_, kBucketId); | 5264 cmd.Init(client_program_id_, kBucketId); |
5094 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 5265 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
5095 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); | 5266 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); |
5096 EXPECT_GT(bucket->size(), 0u); | 5267 EXPECT_GT(bucket->size(), 0u); |
5097 } | 5268 } |
5098 | 5269 |
5099 TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMInvalidArgs) { | 5270 TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMInvalidArgs) { |
(...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6133 false, // request alpha | 6304 false, // request alpha |
6134 false, // request depth | 6305 false, // request depth |
6135 false, // request stencil | 6306 false, // request stencil |
6136 true); // bind generates resource | 6307 true); // bind generates resource |
6137 | 6308 |
6138 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 6309 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
6139 EXPECT_CALL(*gl_, GetError()) | 6310 EXPECT_CALL(*gl_, GetError()) |
6140 .WillOnce(Return(GL_NO_ERROR)) | 6311 .WillOnce(Return(GL_NO_ERROR)) |
6141 .RetiresOnSaturation(); | 6312 .RetiresOnSaturation(); |
6142 EXPECT_CALL(*gl_, CompressedTexImage2D( | 6313 EXPECT_CALL(*gl_, CompressedTexImage2D( |
6143 GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, 16, _)) | 6314 GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, 8, _)) |
6144 .Times(1) | 6315 .Times(1) |
6145 .RetiresOnSaturation(); | 6316 .RetiresOnSaturation(); |
6146 EXPECT_CALL(*gl_, GetError()) | 6317 EXPECT_CALL(*gl_, GetError()) |
6147 .WillOnce(Return(GL_NO_ERROR)) | 6318 .WillOnce(Return(GL_NO_ERROR)) |
6148 .RetiresOnSaturation(); | 6319 .RetiresOnSaturation(); |
6149 CompressedTexImage2D cmd; | 6320 CompressedTexImage2D cmd; |
6150 cmd.Init(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, | 6321 cmd.Init(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, |
6151 16, kSharedMemoryId, kSharedMemoryOffset); | 6322 8, kSharedMemoryId, kSharedMemoryOffset); |
6152 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 6323 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
6153 TextureManager* manager = group().texture_manager(); | 6324 TextureManager* manager = group().texture_manager(); |
6154 TextureManager::TextureInfo* info = | 6325 TextureManager::TextureInfo* info = |
6155 manager->GetTextureInfo(client_texture_id_); | 6326 manager->GetTextureInfo(client_texture_id_); |
6156 EXPECT_TRUE(info->SafeToRenderFrom()); | 6327 EXPECT_TRUE(info->SafeToRenderFrom()); |
6157 } | 6328 } |
6158 | 6329 |
6159 TEST_F(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnClear) { | 6330 TEST_F(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnClear) { |
6160 const GLuint kFBOClientTextureId = 4100; | 6331 const GLuint kFBOClientTextureId = 4100; |
6161 const GLuint kFBOServiceTextureId = 4101; | 6332 const GLuint kFBOServiceTextureId = 4101; |
(...skipping 1073 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7235 // TODO(gman): TexImage2DImmediate | 7406 // TODO(gman): TexImage2DImmediate |
7236 | 7407 |
7237 // TODO(gman): TexSubImage2DImmediate | 7408 // TODO(gman): TexSubImage2DImmediate |
7238 | 7409 |
7239 // TODO(gman): UseProgram | 7410 // TODO(gman): UseProgram |
7240 | 7411 |
7241 // TODO(gman): SwapBuffers | 7412 // TODO(gman): SwapBuffers |
7242 | 7413 |
7243 } // namespace gles2 | 7414 } // namespace gles2 |
7244 } // namespace gpu | 7415 } // namespace gpu |
OLD | NEW |