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 3 // found in the LICENSE file. 4 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 6 7 #include "gpu/command_buffer/common/gles2_cmd_format.h" 8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 9 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h" 10 #include "gpu/command_buffer/service/cmd_buffer_engine.h" 11 #include "gpu/command_buffer/service/context_group.h" 12 #include "gpu/command_buffer/service/program_manager.h" 13 #include "gpu/command_buffer/service/test_helper.h" 14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "ui/gl/gl_mock.h" 16 17 using ::gfx::MockGLInterface; 18 using ::testing::_; 19 using ::testing::AnyNumber; 20 using ::testing::DoAll; 21 using ::testing::InSequence; 22 using ::testing::MatcherCast; 23 using ::testing::Pointee; 24 using ::testing::Return; 25 using ::testing::SetArrayArgument; 26 using ::testing::SetArgumentPointee; 27 using ::testing::StrEq; 28 29 namespace gpu { 30 namespace gles2 { 31 32 class GLES2DecoderTest2 : public GLES2DecoderTestBase { 33 public: 34 GLES2DecoderTest2() { } 35 36 void TestAcceptedUniform(GLenum uniform_type, uint32 accepts_apis) { 37 SetupShaderForUniform(uniform_type); 38 bool valid_uniform = false; 39 40 EXPECT_CALL(*gl_, Uniform1i(1, _)).Times(AnyNumber()); 41 EXPECT_CALL(*gl_, Uniform1iv(1, _, _)).Times(AnyNumber()); 42 EXPECT_CALL(*gl_, Uniform2iv(1, _, _)).Times(AnyNumber()); 43 EXPECT_CALL(*gl_, Uniform3iv(1, _, _)).Times(AnyNumber()); 44 EXPECT_CALL(*gl_, Uniform4iv(1, _, _)).Times(AnyNumber()); 45 EXPECT_CALL(*gl_, Uniform1f(1, _)).Times(AnyNumber()); 46 EXPECT_CALL(*gl_, Uniform1fv(1, _, _)).Times(AnyNumber()); 47 EXPECT_CALL(*gl_, Uniform2fv(1, _, _)).Times(AnyNumber()); 48 EXPECT_CALL(*gl_, Uniform3fv(1, _, _)).Times(AnyNumber()); 49 EXPECT_CALL(*gl_, Uniform4fv(1, _, _)).Times(AnyNumber()); 50 EXPECT_CALL(*gl_, UniformMatrix2fv(1, _, _, _)).Times(AnyNumber()); 51 EXPECT_CALL(*gl_, UniformMatrix3fv(1, _, _, _)).Times(AnyNumber()); 52 EXPECT_CALL(*gl_, UniformMatrix4fv(1, _, _, _)).Times(AnyNumber()); 53 54 { 55 valid_uniform = accepts_apis & Program::kUniform1i; 56 cmds::Uniform1i cmd; 57 cmd.Init(1, 2); 58 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 59 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 60 GetGLError()); 61 } 62 63 { 64 valid_uniform = accepts_apis & Program::kUniform1i; 65 cmds::Uniform1ivImmediate& cmd = 66 *GetImmediateAs<cmds::Uniform1ivImmediate>(); 67 GLint data[2][1] = {{0}}; 68 cmd.Init(1, 2, &data[0][0]); 69 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 70 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 71 GetGLError()); 72 } 73 74 { 75 valid_uniform = accepts_apis & Program::kUniform2i; 76 cmds::Uniform2i cmd; 77 cmd.Init(1, 2, 3); 78 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 79 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 80 GetGLError()); 81 } 82 83 { 84 valid_uniform = accepts_apis & Program::kUniform2i; 85 cmds::Uniform2ivImmediate& cmd = 86 *GetImmediateAs<cmds::Uniform2ivImmediate>(); 87 GLint data[2][2] = {{0}}; 88 cmd.Init(1, 2, &data[0][0]); 89 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 90 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 91 GetGLError()); 92 } 93 94 { 95 valid_uniform = accepts_apis & Program::kUniform3i; 96 cmds::Uniform3i cmd; 97 cmd.Init(1, 2, 3, 4); 98 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 99 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 100 GetGLError()); 101 } 102 103 { 104 valid_uniform = accepts_apis & Program::kUniform3i; 105 cmds::Uniform3ivImmediate& cmd = 106 *GetImmediateAs<cmds::Uniform3ivImmediate>(); 107 GLint data[2][3] = {{0}}; 108 cmd.Init(1, 2, &data[0][0]); 109 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 110 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 111 GetGLError()); 112 } 113 114 { 115 valid_uniform = accepts_apis & Program::kUniform4i; 116 cmds::Uniform4i cmd; 117 cmd.Init(1, 2, 3, 4, 5); 118 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 119 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 120 GetGLError()); 121 } 122 123 { 124 valid_uniform = accepts_apis & Program::kUniform4i; 125 cmds::Uniform4ivImmediate& cmd = 126 *GetImmediateAs<cmds::Uniform4ivImmediate>(); 127 GLint data[2][4] = {{0}}; 128 cmd.Init(1, 2, &data[0][0]); 129 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 130 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 131 GetGLError()); 132 } 133 134 //////////////////// 135 136 { 137 valid_uniform = accepts_apis & Program::kUniform1f; 138 cmds::Uniform1f cmd; 139 cmd.Init(1, 2); 140 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 141 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 142 GetGLError()); 143 } 144 145 { 146 valid_uniform = accepts_apis & Program::kUniform1f; 147 cmds::Uniform1fvImmediate& cmd = 148 *GetImmediateAs<cmds::Uniform1fvImmediate>(); 149 GLfloat data[2][1] = {{0.0f}}; 150 cmd.Init(1, 2, &data[0][0]); 151 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 152 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 153 GetGLError()); 154 } 155 156 { 157 valid_uniform = accepts_apis & Program::kUniform2f; 158 cmds::Uniform2f cmd; 159 cmd.Init(1, 2, 3); 160 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 161 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 162 GetGLError()); 163 } 164 165 { 166 valid_uniform = accepts_apis & Program::kUniform2f; 167 cmds::Uniform2fvImmediate& cmd = 168 *GetImmediateAs<cmds::Uniform2fvImmediate>(); 169 GLfloat data[2][2] = {{0.0f}}; 170 cmd.Init(1, 2, &data[0][0]); 171 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 172 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 173 GetGLError()); 174 } 175 176 { 177 valid_uniform = accepts_apis & Program::kUniform3f; 178 cmds::Uniform3f cmd; 179 cmd.Init(1, 2, 3, 4); 180 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 181 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 182 GetGLError()); 183 } 184 185 { 186 valid_uniform = accepts_apis & Program::kUniform3f; 187 cmds::Uniform3fvImmediate& cmd = 188 *GetImmediateAs<cmds::Uniform3fvImmediate>(); 189 GLfloat data[2][3] = {{0.0f}}; 190 cmd.Init(1, 2, &data[0][0]); 191 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 192 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 193 GetGLError()); 194 } 195 196 { 197 valid_uniform = accepts_apis & Program::kUniform4f; 198 cmds::Uniform4f cmd; 199 cmd.Init(1, 2, 3, 4, 5); 200 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 201 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 202 GetGLError()); 203 } 204 205 { 206 valid_uniform = accepts_apis & Program::kUniform4f; 207 cmds::Uniform4fvImmediate& cmd = 208 *GetImmediateAs<cmds::Uniform4fvImmediate>(); 209 GLfloat data[2][4] = {{0.0f}}; 210 cmd.Init(1, 2, &data[0][0]); 211 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 212 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 213 GetGLError()); 214 } 215 216 { 217 valid_uniform = accepts_apis & Program::kUniformMatrix2f; 218 cmds::UniformMatrix2fvImmediate& cmd = 219 *GetImmediateAs<cmds::UniformMatrix2fvImmediate>(); 220 GLfloat data[2][2 * 2] = {{0.0f}}; 221 222 cmd.Init(1, 2, &data[0][0]); 223 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 224 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 225 GetGLError()); 226 } 227 228 { 229 valid_uniform = accepts_apis & Program::kUniformMatrix3f; 230 cmds::UniformMatrix3fvImmediate& cmd = 231 *GetImmediateAs<cmds::UniformMatrix3fvImmediate>(); 232 GLfloat data[2][3 * 3] = {{0.0f}}; 233 cmd.Init(1, 2, &data[0][0]); 234 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 235 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 236 GetGLError()); 237 } 238 239 { 240 valid_uniform = accepts_apis & Program::kUniformMatrix4f; 241 cmds::UniformMatrix4fvImmediate& cmd = 242 *GetImmediateAs<cmds::UniformMatrix4fvImmediate>(); 243 GLfloat data[2][4 * 4] = {{0.0f}}; 244 cmd.Init(1, 2, &data[0][0]); 245 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data))); 246 EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION, 247 GetGLError()); 248 } 249 } 250 }; 251 252 INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderTest2, ::testing::Bool()); 253 254 template <> 255 void GLES2DecoderTestBase::SpecializedSetup<cmds::GenQueriesEXTImmediate, 0>( 256 bool valid) { 257 if (!valid) { 258 // Make the client_query_id_ so that trying to make it again 259 // will fail. 260 cmds::GenQueriesEXTImmediate& cmd = 261 *GetImmediateAs<cmds::GenQueriesEXTImmediate>(); 262 cmd.Init(1, &client_query_id_); 263 EXPECT_EQ(error::kNoError, 264 ExecuteImmediateCmd(cmd, sizeof(client_query_id_))); 265 } 266 }; 267 268 template <> 269 void GLES2DecoderTestBase::SpecializedSetup<cmds::DeleteQueriesEXTImmediate, 0>( 270 bool valid) { 271 if (valid) { 272 // Make the client_query_id_ so that trying to delete it will succeed. 273 cmds::GenQueriesEXTImmediate& cmd = 274 *GetImmediateAs<cmds::GenQueriesEXTImmediate>(); 275 cmd.Init(1, &client_query_id_); 276 EXPECT_EQ(error::kNoError, 277 ExecuteImmediateCmd(cmd, sizeof(client_query_id_))); 278 } 279 }; 280 281 template <> 282 void GLES2DecoderTestBase::SpecializedSetup<cmds::LinkProgram, 0>( 283 bool /* valid */) { 284 const GLuint kClientVertexShaderId = 5001; 285 const GLuint kServiceVertexShaderId = 6001; 286 const GLuint kClientFragmentShaderId = 5002; 287 const GLuint kServiceFragmentShaderId = 6002; 288 DoCreateShader( 289 GL_VERTEX_SHADER, kClientVertexShaderId, kServiceVertexShaderId); 290 DoCreateShader( 291 GL_FRAGMENT_SHADER, kClientFragmentShaderId, kServiceFragmentShaderId); 292 293 TestHelper::SetShaderStates( 294 gl_.get(), GetShader(kClientVertexShaderId), true); 295 TestHelper::SetShaderStates( 296 gl_.get(), GetShader(kClientFragmentShaderId), true); 297 298 InSequence dummy; 299 EXPECT_CALL(*gl_, 300 AttachShader(kServiceProgramId, kServiceVertexShaderId)) 301 .Times(1) 302 .RetiresOnSaturation(); 303 EXPECT_CALL(*gl_, 304 AttachShader(kServiceProgramId, kServiceFragmentShaderId)) 305 .Times(1) 306 .RetiresOnSaturation(); 307 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) 308 .WillOnce(SetArgumentPointee<2>(1)); 309 EXPECT_CALL(*gl_, 310 GetProgramiv(kServiceProgramId, GL_INFO_LOG_LENGTH, _)) 311 .WillOnce(SetArgumentPointee<2>(0)) 312 .RetiresOnSaturation(); 313 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_ACTIVE_ATTRIBUTES, _)) 314 .WillOnce(SetArgumentPointee<2>(0)); 315 EXPECT_CALL( 316 *gl_, 317 GetProgramiv(kServiceProgramId, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, _)) 318 .WillOnce(SetArgumentPointee<2>(0)); 319 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORMS, _)) 320 .WillOnce(SetArgumentPointee<2>(0)); 321 EXPECT_CALL( 322 *gl_, 323 GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORM_MAX_LENGTH, _)) 324 .WillOnce(SetArgumentPointee<2>(0)); 325 326 cmds::AttachShader attach_cmd; 327 attach_cmd.Init(client_program_id_, kClientVertexShaderId); 328 EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd)); 329 330 attach_cmd.Init(client_program_id_, kClientFragmentShaderId); 331 EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd)); 332 }; 333 334 template <> 335 void GLES2DecoderTestBase::SpecializedSetup<cmds::UseProgram, 0>( 336 bool /* valid */) { 337 // Needs the same setup as LinkProgram. 338 SpecializedSetup<cmds::LinkProgram, 0>(false); 339 340 EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId)) 341 .Times(1) 342 .RetiresOnSaturation(); 343 344 cmds::LinkProgram link_cmd; 345 link_cmd.Init(client_program_id_); 346 EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd)); 347 }; 348 349 template <> 350 void GLES2DecoderTestBase::SpecializedSetup<cmds::ValidateProgram, 0>( 351 bool /* valid */) { 352 // Needs the same setup as LinkProgram. 353 SpecializedSetup<cmds::LinkProgram, 0>(false); 354 355 EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId)) 356 .Times(1) 357 .RetiresOnSaturation(); 358 359 cmds::LinkProgram link_cmd; 360 link_cmd.Init(client_program_id_); 361 EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd)); 362 363 EXPECT_CALL(*gl_, 364 GetProgramiv(kServiceProgramId, GL_INFO_LOG_LENGTH, _)) 365 .WillOnce(SetArgumentPointee<2>(0)) 366 .RetiresOnSaturation(); 367 }; 368 369 template <> 370 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1f, 0>( 371 bool /* valid */) { 372 SetupShaderForUniform(GL_FLOAT); 373 }; 374 375 template <> 376 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1fvImmediate, 0>( 377 bool /* valid */) { 378 SetupShaderForUniform(GL_FLOAT); 379 }; 380 381 template <> 382 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1ivImmediate, 0>( 383 bool /* valid */) { 384 SetupShaderForUniform(GL_INT); 385 }; 386 387 template <> 388 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2f, 0>( 389 bool /* valid */) { 390 SetupShaderForUniform(GL_FLOAT_VEC2); 391 }; 392 393 template <> 394 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2i, 0>( 395 bool /* valid */) { 396 SetupShaderForUniform(GL_INT_VEC2); 397 }; 398 399 template <> 400 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2fvImmediate, 0>( 401 bool /* valid */) { 402 SetupShaderForUniform(GL_FLOAT_VEC2); 403 }; 404 405 template <> 406 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2ivImmediate, 0>( 407 bool /* valid */) { 408 SetupShaderForUniform(GL_INT_VEC2); 409 }; 410 411 template <> 412 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3f, 0>( 413 bool /* valid */) { 414 SetupShaderForUniform(GL_FLOAT_VEC3); 415 }; 416 417 template <> 418 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3i, 0>( 419 bool /* valid */) { 420 SetupShaderForUniform(GL_INT_VEC3); 421 }; 422 423 template <> 424 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3fvImmediate, 0>( 425 bool /* valid */) { 426 SetupShaderForUniform(GL_FLOAT_VEC3); 427 }; 428 429 template <> 430 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3ivImmediate, 0>( 431 bool /* valid */) { 432 SetupShaderForUniform(GL_INT_VEC3); 433 }; 434 435 template <> 436 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4f, 0>( 437 bool /* valid */) { 438 SetupShaderForUniform(GL_FLOAT_VEC4); 439 }; 440 441 template <> 442 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4i, 0>( 443 bool /* valid */) { 444 SetupShaderForUniform(GL_INT_VEC4); 445 }; 446 447 template <> 448 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4fvImmediate, 0>( 449 bool /* valid */) { 450 SetupShaderForUniform(GL_FLOAT_VEC4); 451 }; 452 453 template <> 454 void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4ivImmediate, 0>( 455 bool /* valid */) { 456 SetupShaderForUniform(GL_INT_VEC4); 457 }; 458 459 template <> 460 void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix2fvImmediate, 0>( 461 bool /* valid */) { 462 SetupShaderForUniform(GL_FLOAT_MAT2); 463 }; 464 465 template <> 466 void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3fvImmediate, 0>( 467 bool /* valid */) { 468 SetupShaderForUniform(GL_FLOAT_MAT3); 469 }; 470 471 template <> 472 void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4fvImmediate, 0>( 473 bool /* valid */) { 474 SetupShaderForUniform(GL_FLOAT_MAT4); 475 }; 476 477 template <> 478 void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterf, 0>( 479 bool /* valid */) { 480 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 481 }; 482 483 template <> 484 void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameteri, 0>( 485 bool /* valid */) { 486 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 487 }; 488 489 template <> 490 void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterfvImmediate, 0>( 491 bool /* valid */) { 492 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 493 }; 494 495 template <> 496 void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterivImmediate, 0>( 497 bool /* valid */) { 498 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 499 }; 500 501 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h" 502 503 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT) { 504 TestAcceptedUniform(GL_INT, Program::kUniform1i); 505 } 506 507 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC2) { 508 TestAcceptedUniform(GL_INT_VEC2, Program::kUniform2i); 509 } 510 511 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC3) { 512 TestAcceptedUniform(GL_INT_VEC3, Program::kUniform3i); 513 } 514 515 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC4) { 516 TestAcceptedUniform(GL_INT_VEC4, Program::kUniform4i); 517 } 518 519 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL) { 520 TestAcceptedUniform(GL_BOOL, Program::kUniform1i | Program::kUniform1f); 521 } 522 523 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC2) { 524 TestAcceptedUniform(GL_BOOL_VEC2, Program::kUniform2i | Program::kUniform2f); 525 } 526 527 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC3) { 528 TestAcceptedUniform(GL_BOOL_VEC3, Program::kUniform3i | Program::kUniform3f); 529 } 530 531 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC4) { 532 TestAcceptedUniform(GL_BOOL_VEC4, Program::kUniform4i | Program::kUniform4f); 533 } 534 535 TEST_P(GLES2DecoderTest2, AcceptsUniformTypeFLOAT) { 536 TestAcceptedUniform(GL_FLOAT, Program::kUniform1f); 537 } 538 539 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC2) { 540 TestAcceptedUniform(GL_FLOAT_VEC2, Program::kUniform2f); 541 } 542 543 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC3) { 544 TestAcceptedUniform(GL_FLOAT_VEC3, Program::kUniform3f); 545 } 546 547 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC4) { 548 TestAcceptedUniform(GL_FLOAT_VEC4, Program::kUniform4f); 549 } 550 551 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT2) { 552 TestAcceptedUniform(GL_FLOAT_MAT2, Program::kUniformMatrix2f); 553 } 554 555 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT3) { 556 TestAcceptedUniform(GL_FLOAT_MAT3, Program::kUniformMatrix3f); 557 } 558 559 TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT4) { 560 TestAcceptedUniform(GL_FLOAT_MAT4, Program::kUniformMatrix4f); 561 } 562 563 } // namespace gles2 564 } // namespace gpu 565 566