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/gles2_cmd_format.h" | 8 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
10 #include "gpu/command_buffer/common/gl_mock.h" | 10 #include "gpu/command_buffer/common/gl_mock.h" |
(...skipping 6565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6576 false, // request depth | 6576 false, // request depth |
6577 false, // request stencil | 6577 false, // request stencil |
6578 true); // bind generates resource | 6578 true); // bind generates resource |
6579 | 6579 |
6580 // Test end fails if no begin. | 6580 // Test end fails if no begin. |
6581 EndQueryEXT end_cmd; | 6581 EndQueryEXT end_cmd; |
6582 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1); | 6582 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1); |
6583 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); | 6583 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
6584 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 6584 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
6585 | 6585 |
6586 // Test a non-generated id fails. | |
6587 BeginQueryEXT begin_cmd; | 6586 BeginQueryEXT begin_cmd; |
6588 begin_cmd.Init( | |
6589 GL_ANY_SAMPLES_PASSED_EXT, kInvalidClientId, | |
6590 kSharedMemoryId, kSharedMemoryOffset); | |
6591 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); | |
6592 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | |
6593 | 6587 |
6594 // Test id = 0 fails. | 6588 // Test id = 0 fails. |
6595 begin_cmd.Init( | 6589 begin_cmd.Init( |
6596 GL_ANY_SAMPLES_PASSED_EXT, 0, kSharedMemoryId, kSharedMemoryOffset); | 6590 GL_ANY_SAMPLES_PASSED_EXT, 0, kSharedMemoryId, kSharedMemoryOffset); |
6597 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); | 6591 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
6598 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 6592 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
6599 | 6593 |
| 6594 GenHelper<GenQueriesEXTImmediate>(kNewClientId); |
| 6595 |
| 6596 // Test valid parameters work. |
6600 EXPECT_CALL(*gl_, GenQueriesARB(1, _)) | 6597 EXPECT_CALL(*gl_, GenQueriesARB(1, _)) |
6601 .WillOnce(SetArgumentPointee<1>(kNewServiceId)) | 6598 .WillOnce(SetArgumentPointee<1>(kNewServiceId)) |
6602 .RetiresOnSaturation(); | 6599 .RetiresOnSaturation(); |
6603 GenHelper<GenQueriesEXTImmediate>(kNewClientId); | |
6604 | |
6605 // Test bad shared memory fails | |
6606 begin_cmd.Init( | |
6607 GL_ANY_SAMPLES_PASSED_EXT, kNewClientId, | |
6608 kInvalidSharedMemoryId, kSharedMemoryOffset); | |
6609 EXPECT_NE(error::kNoError, ExecuteCmd(begin_cmd)); | |
6610 begin_cmd.Init( | |
6611 GL_ANY_SAMPLES_PASSED_EXT, kNewClientId, | |
6612 kSharedMemoryId, kInvalidSharedMemoryOffset); | |
6613 EXPECT_NE(error::kNoError, ExecuteCmd(begin_cmd)); | |
6614 | |
6615 // Test valid parameters work. | |
6616 EXPECT_CALL(*gl_, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, kNewServiceId)) | 6600 EXPECT_CALL(*gl_, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, kNewServiceId)) |
6617 .Times(1) | 6601 .Times(1) |
6618 .RetiresOnSaturation(); | 6602 .RetiresOnSaturation(); |
6619 begin_cmd.Init( | 6603 begin_cmd.Init( |
6620 GL_ANY_SAMPLES_PASSED_EXT, kNewClientId, | 6604 GL_ANY_SAMPLES_PASSED_EXT, kNewClientId, |
6621 kSharedMemoryId, kSharedMemoryOffset); | 6605 kSharedMemoryId, kSharedMemoryOffset); |
6622 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); | 6606 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
6623 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 6607 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
6624 | 6608 |
6625 QueryManager* query_manager = decoder_->GetQueryManager(); | 6609 QueryManager* query_manager = decoder_->GetQueryManager(); |
(...skipping 18 matching lines...) Expand all Loading... |
6644 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1); | 6628 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1); |
6645 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); | 6629 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
6646 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 6630 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
6647 EXPECT_TRUE(query->pending()); | 6631 EXPECT_TRUE(query->pending()); |
6648 | 6632 |
6649 EXPECT_CALL(*gl_, DeleteQueriesARB(1, _)) | 6633 EXPECT_CALL(*gl_, DeleteQueriesARB(1, _)) |
6650 .Times(1) | 6634 .Times(1) |
6651 .RetiresOnSaturation(); | 6635 .RetiresOnSaturation(); |
6652 } | 6636 } |
6653 | 6637 |
| 6638 static void CheckBeginEndQueryBadMemoryFails( |
| 6639 GLES2DecoderTestBase* test, |
| 6640 GLuint client_id, |
| 6641 GLuint service_id, |
| 6642 int32 shm_id, |
| 6643 uint32 shm_offset) { |
| 6644 ::testing::StrictMock< ::gfx::MockGLInterface>* gl = test->GetGLMock(); |
| 6645 |
| 6646 BeginQueryEXT begin_cmd; |
| 6647 |
| 6648 test->GenHelper<GenQueriesEXTImmediate>(client_id); |
| 6649 |
| 6650 EXPECT_CALL(*gl, GenQueriesARB(1, _)) |
| 6651 .WillOnce(SetArgumentPointee<1>(service_id)) |
| 6652 .RetiresOnSaturation(); |
| 6653 EXPECT_CALL(*gl, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, service_id)) |
| 6654 .Times(1) |
| 6655 .RetiresOnSaturation(); |
| 6656 |
| 6657 // Test bad shared memory fails |
| 6658 begin_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, client_id, shm_id, shm_offset); |
| 6659 error::Error error1 = test->ExecuteCmd(begin_cmd); |
| 6660 |
| 6661 EXPECT_CALL(*gl, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT)) |
| 6662 .Times(1) |
| 6663 .RetiresOnSaturation(); |
| 6664 |
| 6665 EndQueryEXT end_cmd; |
| 6666 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1); |
| 6667 error::Error error2 = test->ExecuteCmd(end_cmd); |
| 6668 |
| 6669 EXPECT_CALL(*gl, |
| 6670 GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) |
| 6671 .WillOnce(SetArgumentPointee<2>(1)) |
| 6672 .RetiresOnSaturation(); |
| 6673 EXPECT_CALL(*gl, |
| 6674 GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_EXT, _)) |
| 6675 .WillOnce(SetArgumentPointee<2>(1)) |
| 6676 .RetiresOnSaturation(); |
| 6677 |
| 6678 QueryManager* query_manager = test->GetDecoder()->GetQueryManager(); |
| 6679 ASSERT_TRUE(query_manager != NULL); |
| 6680 bool process_success = query_manager->ProcessPendingQueries(); |
| 6681 |
| 6682 EXPECT_TRUE(error1 != error::kNoError || |
| 6683 error2 != error::kNoError || |
| 6684 !process_success); |
| 6685 |
| 6686 EXPECT_CALL(*gl, DeleteQueriesARB(1, _)) |
| 6687 .Times(1) |
| 6688 .RetiresOnSaturation(); |
| 6689 } |
| 6690 |
| 6691 TEST_F(GLES2DecoderManualInitTest, BeingEndQueryEXTBadMemoryIdFails) { |
| 6692 InitDecoder( |
| 6693 "GL_EXT_occlusion_query_boolean", // extensions |
| 6694 true, // has alpha |
| 6695 false, // has depth |
| 6696 false, // has stencil |
| 6697 true, // request alpha |
| 6698 false, // request depth |
| 6699 false, // request stencil |
| 6700 true); // bind generates resource |
| 6701 |
| 6702 CheckBeginEndQueryBadMemoryFails( |
| 6703 this, kNewClientId, kNewServiceId, |
| 6704 kInvalidSharedMemoryId, kSharedMemoryOffset); |
| 6705 } |
| 6706 |
| 6707 TEST_F(GLES2DecoderManualInitTest, BeingEndQueryEXTBadMemoryOffsetFails) { |
| 6708 InitDecoder( |
| 6709 "GL_EXT_occlusion_query_boolean", // extensions |
| 6710 true, // has alpha |
| 6711 false, // has depth |
| 6712 false, // has stencil |
| 6713 true, // request alpha |
| 6714 false, // request depth |
| 6715 false, // request stencil |
| 6716 true); // bind generates resource |
| 6717 |
| 6718 CheckBeginEndQueryBadMemoryFails( |
| 6719 this, kNewClientId, kNewServiceId, |
| 6720 kSharedMemoryId, kInvalidSharedMemoryOffset); |
| 6721 } |
| 6722 |
| 6723 TEST_F(GLES2DecoderTest, BeingEndQueryEXTCommandsIssuedCHROMIUM) { |
| 6724 BeginQueryEXT begin_cmd; |
| 6725 |
| 6726 GenHelper<GenQueriesEXTImmediate>(kNewClientId); |
| 6727 |
| 6728 // Test valid parameters work. |
| 6729 begin_cmd.Init( |
| 6730 GL_COMMANDS_ISSUED_CHROMIUM, kNewClientId, |
| 6731 kSharedMemoryId, kSharedMemoryOffset); |
| 6732 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
| 6733 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 6734 |
| 6735 QueryManager* query_manager = decoder_->GetQueryManager(); |
| 6736 ASSERT_TRUE(query_manager != NULL); |
| 6737 QueryManager::Query* query = query_manager->GetQuery(kNewClientId); |
| 6738 ASSERT_TRUE(query != NULL); |
| 6739 EXPECT_FALSE(query->pending()); |
| 6740 |
| 6741 // Test end succeeds |
| 6742 EndQueryEXT end_cmd; |
| 6743 end_cmd.Init(GL_COMMANDS_ISSUED_CHROMIUM, 1); |
| 6744 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
| 6745 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 6746 EXPECT_FALSE(query->pending()); |
| 6747 } |
| 6748 |
6654 | 6749 |
6655 // TODO(gman): Complete this test. | 6750 // TODO(gman): Complete this test. |
6656 // TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) { | 6751 // TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) { |
6657 // } | 6752 // } |
6658 | 6753 |
6659 // TODO(gman): BufferData | 6754 // TODO(gman): BufferData |
6660 | 6755 |
6661 // TODO(gman): BufferDataImmediate | 6756 // TODO(gman): BufferDataImmediate |
6662 | 6757 |
6663 // TODO(gman): BufferSubData | 6758 // TODO(gman): BufferSubData |
(...skipping 17 matching lines...) Expand all Loading... |
6681 // TODO(gman): TexImage2DImmediate | 6776 // TODO(gman): TexImage2DImmediate |
6682 | 6777 |
6683 // TODO(gman): TexSubImage2DImmediate | 6778 // TODO(gman): TexSubImage2DImmediate |
6684 | 6779 |
6685 // TODO(gman): UseProgram | 6780 // TODO(gman): UseProgram |
6686 | 6781 |
6687 // TODO(gman): SwapBuffers | 6782 // TODO(gman): SwapBuffers |
6688 | 6783 |
6689 } // namespace gles2 | 6784 } // namespace gles2 |
6690 } // namespace gpu | 6785 } // namespace gpu |
OLD | NEW |