| 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_unittest.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 InitState init; | 96 InitState init; |
| 97 init.gl_version = "OpenGL ES 3.0"; | 97 init.gl_version = "OpenGL ES 3.0"; |
| 98 init.bind_generates_resource = true; | 98 init.bind_generates_resource = true; |
| 99 init.context_type = CONTEXT_TYPE_OPENGLES3; | 99 init.context_type = CONTEXT_TYPE_OPENGLES3; |
| 100 InitDecoderWithCommandLine(init, &command_line); | 100 InitDecoderWithCommandLine(init, &command_line); |
| 101 } | 101 } |
| 102 | 102 |
| 103 | 103 |
| 104 TEST_P(GLES3DecoderTest, Basic) { | 104 TEST_P(GLES3DecoderTest, Basic) { |
| 105 // Make sure the setup is correct for ES3. | 105 // Make sure the setup is correct for ES3. |
| 106 EXPECT_TRUE(decoder_->unsafe_es3_apis_enabled()); | 106 EXPECT_TRUE(decoder_->es3_apis_enabled()); |
| 107 EXPECT_TRUE(feature_info()->validators()->texture_bind_target.IsValid( | 107 EXPECT_TRUE(feature_info()->validators()->texture_bind_target.IsValid( |
| 108 GL_TEXTURE_3D)); | 108 GL_TEXTURE_3D)); |
| 109 } | 109 } |
| 110 | 110 |
| 111 TEST_P(GLES2DecoderTest, InvalidCommand) { | 111 TEST_P(GLES2DecoderTest, InvalidCommand) { |
| 112 cmd::Noop cmd; | 112 cmd::Noop cmd; |
| 113 cmd.header.Init(gles2::kNumCommands, 1); | 113 cmd.header.Init(gles2::kNumCommands, 1); |
| 114 EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, 0)); | 114 EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, 0)); |
| 115 } | 115 } |
| 116 | 116 |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 .RetiresOnSaturation(); | 299 .RetiresOnSaturation(); |
| 300 EXPECT_CALL(*gl_, GetInternalformativ(GL_RENDERBUFFER, GL_RGBA8, | 300 EXPECT_CALL(*gl_, GetInternalformativ(GL_RENDERBUFFER, GL_RGBA8, |
| 301 GL_SAMPLES, kNumSampleCounts, | 301 GL_SAMPLES, kNumSampleCounts, |
| 302 result->GetData())) | 302 result->GetData())) |
| 303 .Times(1) | 303 .Times(1) |
| 304 .RetiresOnSaturation(); | 304 .RetiresOnSaturation(); |
| 305 result->size = 0; | 305 result->size = 0; |
| 306 GetInternalformativ cmd; | 306 GetInternalformativ cmd; |
| 307 cmd.Init(GL_RENDERBUFFER, GL_RGBA8, GL_SAMPLES, | 307 cmd.Init(GL_RENDERBUFFER, GL_RGBA8, GL_SAMPLES, |
| 308 shared_memory_id_, shared_memory_offset_); | 308 shared_memory_id_, shared_memory_offset_); |
| 309 decoder_->set_unsafe_es3_apis_enabled(true); | 309 decoder_->set_es3_apis_enabled(true); |
| 310 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 310 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 311 EXPECT_EQ(kNumSampleCounts, result->GetNumResults()); | 311 EXPECT_EQ(kNumSampleCounts, result->GetNumResults()); |
| 312 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 312 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 313 decoder_->set_unsafe_es3_apis_enabled(false); | 313 decoder_->set_es3_apis_enabled(false); |
| 314 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); | 314 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 315 } | 315 } |
| 316 | 316 |
| 317 TEST_P(GLES3DecoderTest, GetInternalformativValidArgsNumSampleCounts) { | 317 TEST_P(GLES3DecoderTest, GetInternalformativValidArgsNumSampleCounts) { |
| 318 const GLint kNumSampleCounts = 8; | 318 const GLint kNumSampleCounts = 8; |
| 319 typedef GetInternalformativ::Result Result; | 319 typedef GetInternalformativ::Result Result; |
| 320 Result* result = static_cast<Result*>(shared_memory_address_); | 320 Result* result = static_cast<Result*>(shared_memory_address_); |
| 321 EXPECT_CALL(*gl_, GetInternalformativ(GL_RENDERBUFFER, GL_RGBA8, | 321 EXPECT_CALL(*gl_, GetInternalformativ(GL_RENDERBUFFER, GL_RGBA8, |
| 322 GL_NUM_SAMPLE_COUNTS, 1, _)) | 322 GL_NUM_SAMPLE_COUNTS, 1, _)) |
| 323 .WillOnce(SetArgPointee<4>(kNumSampleCounts)) | 323 .WillOnce(SetArgPointee<4>(kNumSampleCounts)) |
| 324 .RetiresOnSaturation(); | 324 .RetiresOnSaturation(); |
| 325 result->size = 0; | 325 result->size = 0; |
| 326 GetInternalformativ cmd; | 326 GetInternalformativ cmd; |
| 327 cmd.Init(GL_RENDERBUFFER, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, | 327 cmd.Init(GL_RENDERBUFFER, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, |
| 328 shared_memory_id_, shared_memory_offset_); | 328 shared_memory_id_, shared_memory_offset_); |
| 329 decoder_->set_unsafe_es3_apis_enabled(true); | 329 decoder_->set_es3_apis_enabled(true); |
| 330 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 330 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 331 EXPECT_EQ(1, result->GetNumResults()); | 331 EXPECT_EQ(1, result->GetNumResults()); |
| 332 EXPECT_EQ(kNumSampleCounts, result->GetData()[0]); | 332 EXPECT_EQ(kNumSampleCounts, result->GetData()[0]); |
| 333 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 333 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 334 decoder_->set_unsafe_es3_apis_enabled(false); | 334 decoder_->set_es3_apis_enabled(false); |
| 335 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); | 335 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 336 } | 336 } |
| 337 | 337 |
| 338 TEST_P(GLES3DecoderTest, ClientWaitSyncValid) { | 338 TEST_P(GLES3DecoderTest, ClientWaitSyncValid) { |
| 339 typedef ClientWaitSync::Result Result; | 339 typedef ClientWaitSync::Result Result; |
| 340 Result* result = static_cast<Result*>(shared_memory_address_); | 340 Result* result = static_cast<Result*>(shared_memory_address_); |
| 341 ClientWaitSync cmd; | 341 ClientWaitSync cmd; |
| 342 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0, | 342 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0, |
| 343 shared_memory_id_, shared_memory_offset_); | 343 shared_memory_id_, shared_memory_offset_); |
| 344 EXPECT_CALL(*gl_, | 344 EXPECT_CALL(*gl_, |
| 345 ClientWaitSync(reinterpret_cast<GLsync>(kServiceSyncId), | 345 ClientWaitSync(reinterpret_cast<GLsync>(kServiceSyncId), |
| 346 GL_SYNC_FLUSH_COMMANDS_BIT, 0)) | 346 GL_SYNC_FLUSH_COMMANDS_BIT, 0)) |
| 347 .WillOnce(Return(GL_CONDITION_SATISFIED)) | 347 .WillOnce(Return(GL_CONDITION_SATISFIED)) |
| 348 .RetiresOnSaturation(); | 348 .RetiresOnSaturation(); |
| 349 *result = GL_WAIT_FAILED; | 349 *result = GL_WAIT_FAILED; |
| 350 decoder_->set_unsafe_es3_apis_enabled(true); | 350 decoder_->set_es3_apis_enabled(true); |
| 351 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 351 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 352 EXPECT_EQ(static_cast<GLenum>(GL_CONDITION_SATISFIED), *result); | 352 EXPECT_EQ(static_cast<GLenum>(GL_CONDITION_SATISFIED), *result); |
| 353 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 353 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 354 decoder_->set_unsafe_es3_apis_enabled(false); | 354 decoder_->set_es3_apis_enabled(false); |
| 355 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); | 355 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 356 } | 356 } |
| 357 | 357 |
| 358 TEST_P(GLES2DecoderTest, ClientWaitSyncNonZeroTimeoutValid) { | 358 TEST_P(GLES2DecoderTest, ClientWaitSyncNonZeroTimeoutValid) { |
| 359 typedef ClientWaitSync::Result Result; | 359 typedef ClientWaitSync::Result Result; |
| 360 Result* result = static_cast<Result*>(shared_memory_address_); | 360 Result* result = static_cast<Result*>(shared_memory_address_); |
| 361 ClientWaitSync cmd; | 361 ClientWaitSync cmd; |
| 362 const GLuint64 kTimeout = 0xABCDEF0123456789; | 362 const GLuint64 kTimeout = 0xABCDEF0123456789; |
| 363 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, kTimeout, | 363 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, kTimeout, |
| 364 shared_memory_id_, shared_memory_offset_); | 364 shared_memory_id_, shared_memory_offset_); |
| 365 EXPECT_CALL(*gl_, | 365 EXPECT_CALL(*gl_, |
| 366 ClientWaitSync(reinterpret_cast<GLsync>(kServiceSyncId), | 366 ClientWaitSync(reinterpret_cast<GLsync>(kServiceSyncId), |
| 367 GL_SYNC_FLUSH_COMMANDS_BIT, kTimeout)) | 367 GL_SYNC_FLUSH_COMMANDS_BIT, kTimeout)) |
| 368 .WillOnce(Return(GL_CONDITION_SATISFIED)) | 368 .WillOnce(Return(GL_CONDITION_SATISFIED)) |
| 369 .RetiresOnSaturation(); | 369 .RetiresOnSaturation(); |
| 370 *result = GL_WAIT_FAILED; | 370 *result = GL_WAIT_FAILED; |
| 371 decoder_->set_unsafe_es3_apis_enabled(true); | 371 decoder_->set_es3_apis_enabled(true); |
| 372 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 372 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 373 EXPECT_EQ(static_cast<GLenum>(GL_CONDITION_SATISFIED), *result); | 373 EXPECT_EQ(static_cast<GLenum>(GL_CONDITION_SATISFIED), *result); |
| 374 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 374 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 375 decoder_->set_unsafe_es3_apis_enabled(false); | 375 decoder_->set_es3_apis_enabled(false); |
| 376 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); | 376 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 377 } | 377 } |
| 378 | 378 |
| 379 TEST_P(GLES2DecoderTest, ClientWaitSyncInvalidSyncFails) { | 379 TEST_P(GLES2DecoderTest, ClientWaitSyncInvalidSyncFails) { |
| 380 typedef ClientWaitSync::Result Result; | 380 typedef ClientWaitSync::Result Result; |
| 381 Result* result = static_cast<Result*>(shared_memory_address_); | 381 Result* result = static_cast<Result*>(shared_memory_address_); |
| 382 ClientWaitSync cmd; | 382 ClientWaitSync cmd; |
| 383 decoder_->set_unsafe_es3_apis_enabled(true); | 383 decoder_->set_es3_apis_enabled(true); |
| 384 cmd.Init(kInvalidClientId, GL_SYNC_FLUSH_COMMANDS_BIT, 0, | 384 cmd.Init(kInvalidClientId, GL_SYNC_FLUSH_COMMANDS_BIT, 0, |
| 385 shared_memory_id_, shared_memory_offset_); | 385 shared_memory_id_, shared_memory_offset_); |
| 386 *result = GL_WAIT_FAILED; | 386 *result = GL_WAIT_FAILED; |
| 387 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 387 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 388 EXPECT_EQ(static_cast<GLenum>(GL_WAIT_FAILED), *result); | 388 EXPECT_EQ(static_cast<GLenum>(GL_WAIT_FAILED), *result); |
| 389 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 389 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
| 390 } | 390 } |
| 391 | 391 |
| 392 TEST_P(GLES2DecoderTest, ClientWaitSyncResultNotInitFails) { | 392 TEST_P(GLES2DecoderTest, ClientWaitSyncResultNotInitFails) { |
| 393 typedef ClientWaitSync::Result Result; | 393 typedef ClientWaitSync::Result Result; |
| 394 Result* result = static_cast<Result*>(shared_memory_address_); | 394 Result* result = static_cast<Result*>(shared_memory_address_); |
| 395 ClientWaitSync cmd; | 395 ClientWaitSync cmd; |
| 396 decoder_->set_unsafe_es3_apis_enabled(true); | 396 decoder_->set_es3_apis_enabled(true); |
| 397 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0, | 397 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0, |
| 398 shared_memory_id_, shared_memory_offset_); | 398 shared_memory_id_, shared_memory_offset_); |
| 399 *result = 1; // Any value other than GL_WAIT_FAILED | 399 *result = 1; // Any value other than GL_WAIT_FAILED |
| 400 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 400 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 401 } | 401 } |
| 402 | 402 |
| 403 TEST_P(GLES2DecoderTest, ClientWaitSyncBadSharedMemoryFails) { | 403 TEST_P(GLES2DecoderTest, ClientWaitSyncBadSharedMemoryFails) { |
| 404 typedef ClientWaitSync::Result Result; | 404 typedef ClientWaitSync::Result Result; |
| 405 Result* result = static_cast<Result*>(shared_memory_address_); | 405 Result* result = static_cast<Result*>(shared_memory_address_); |
| 406 ClientWaitSync cmd; | 406 ClientWaitSync cmd; |
| 407 decoder_->set_unsafe_es3_apis_enabled(true); | 407 decoder_->set_es3_apis_enabled(true); |
| 408 *result = GL_WAIT_FAILED; | 408 *result = GL_WAIT_FAILED; |
| 409 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0, | 409 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0, |
| 410 kInvalidSharedMemoryId, shared_memory_offset_); | 410 kInvalidSharedMemoryId, shared_memory_offset_); |
| 411 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 411 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 412 | 412 |
| 413 *result = GL_WAIT_FAILED; | 413 *result = GL_WAIT_FAILED; |
| 414 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0, | 414 cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0, |
| 415 shared_memory_id_, kInvalidSharedMemoryOffset); | 415 shared_memory_id_, kInvalidSharedMemoryOffset); |
| 416 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 416 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 417 } | 417 } |
| 418 | 418 |
| 419 TEST_P(GLES2DecoderTest, WaitSyncValidArgs) { | 419 TEST_P(GLES2DecoderTest, WaitSyncValidArgs) { |
| 420 const GLuint64 kTimeout = GL_TIMEOUT_IGNORED; | 420 const GLuint64 kTimeout = GL_TIMEOUT_IGNORED; |
| 421 EXPECT_CALL(*gl_, WaitSync(reinterpret_cast<GLsync>(kServiceSyncId), | 421 EXPECT_CALL(*gl_, WaitSync(reinterpret_cast<GLsync>(kServiceSyncId), |
| 422 0, kTimeout)) | 422 0, kTimeout)) |
| 423 .Times(1) | 423 .Times(1) |
| 424 .RetiresOnSaturation(); | 424 .RetiresOnSaturation(); |
| 425 | 425 |
| 426 WaitSync cmd; | 426 WaitSync cmd; |
| 427 cmd.Init(client_sync_id_, 0, kTimeout); | 427 cmd.Init(client_sync_id_, 0, kTimeout); |
| 428 decoder_->set_unsafe_es3_apis_enabled(true); | 428 decoder_->set_es3_apis_enabled(true); |
| 429 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 429 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 430 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 430 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 431 decoder_->set_unsafe_es3_apis_enabled(false); | 431 decoder_->set_es3_apis_enabled(false); |
| 432 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); | 432 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 433 } | 433 } |
| 434 | 434 |
| 435 TEST_P(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) { | 435 TEST_P(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) { |
| 436 InitState init; | 436 InitState init; |
| 437 InitDecoder(init); | 437 InitDecoder(init); |
| 438 | 438 |
| 439 BindTexture cmd1; | 439 BindTexture cmd1; |
| 440 cmd1.Init(GL_TEXTURE_2D, kInvalidClientId); | 440 cmd1.Init(GL_TEXTURE_2D, kInvalidClientId); |
| 441 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); | 441 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); |
| (...skipping 1305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1747 ::testing::Bool()); | 1747 ::testing::Bool()); |
| 1748 | 1748 |
| 1749 INSTANTIATE_TEST_CASE_P(Service, GLES3DecoderTest, ::testing::Bool()); | 1749 INSTANTIATE_TEST_CASE_P(Service, GLES3DecoderTest, ::testing::Bool()); |
| 1750 | 1750 |
| 1751 INSTANTIATE_TEST_CASE_P(Service, | 1751 INSTANTIATE_TEST_CASE_P(Service, |
| 1752 GLES3DecoderWithESSL3ShaderTest, | 1752 GLES3DecoderWithESSL3ShaderTest, |
| 1753 ::testing::Bool()); | 1753 ::testing::Bool()); |
| 1754 | 1754 |
| 1755 } // namespace gles2 | 1755 } // namespace gles2 |
| 1756 } // namespace gpu | 1756 } // namespace gpu |
| OLD | NEW |