Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc

Issue 9694025: Add support for GL_COMMANDS_ISSUED_CHROMIUM fence like query. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add cast for std::min Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698