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 // Tests for GLES2Implementation. | 5 // Tests for GLES2Implementation. |
6 | 6 |
7 #include "gpu/command_buffer/client/gles2_implementation.h" | 7 #include "gpu/command_buffer/client/gles2_implementation.h" |
8 | 8 |
9 #include <GLES2/gl2.h> | 9 #include <GLES2/gl2.h> |
10 #include <GLES2/gl2ext.h> | 10 #include <GLES2/gl2ext.h> |
(...skipping 4136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4147 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync2)) | 4147 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync2)) |
4148 .WillOnce(Return(true)); | 4148 .WillOnce(Return(true)); |
4149 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync2)) | 4149 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync2)) |
4150 .WillOnce(Return(true)); | 4150 .WillOnce(Return(true)); |
4151 gl_->GenUnverifiedSyncTokenCHROMIUM(kFenceSync2, sync_token2.GetData()); | 4151 gl_->GenUnverifiedSyncTokenCHROMIUM(kFenceSync2, sync_token2.GetData()); |
4152 ASSERT_TRUE(sync_token2.HasData()); | 4152 ASSERT_TRUE(sync_token2.HasData()); |
4153 ASSERT_FALSE(sync_token2.verified_flush()); | 4153 ASSERT_FALSE(sync_token2.verified_flush()); |
4154 | 4154 |
4155 // Ensure proper sequence of checking and validating. | 4155 // Ensure proper sequence of checking and validating. |
4156 Sequence sequence; | 4156 Sequence sequence; |
4157 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(Pointee(sync_token1))) | 4157 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token1)) |
4158 .InSequence(sequence) | 4158 .InSequence(sequence) |
4159 .WillOnce(Return(true)); | 4159 .WillOnce(Return(true)); |
4160 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(Pointee(sync_token2))) | 4160 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token2)) |
4161 .InSequence(sequence) | 4161 .InSequence(sequence) |
4162 .WillOnce(Return(true)); | 4162 .WillOnce(Return(true)); |
4163 EXPECT_CALL(*gpu_control_, EnsureWorkVisible()) | 4163 EXPECT_CALL(*gpu_control_, EnsureWorkVisible()) |
4164 .InSequence(sequence); | 4164 .InSequence(sequence); |
4165 gl_->VerifySyncTokensCHROMIUM(sync_token_datas, arraysize(sync_token_datas)); | 4165 gl_->VerifySyncTokensCHROMIUM(sync_token_datas, arraysize(sync_token_datas)); |
4166 EXPECT_TRUE(NoCommandsWritten()); | 4166 EXPECT_TRUE(NoCommandsWritten()); |
4167 EXPECT_EQ(GL_NO_ERROR, CheckError()); | 4167 EXPECT_EQ(GL_NO_ERROR, CheckError()); |
4168 | 4168 |
4169 EXPECT_TRUE(sync_token1.verified_flush()); | 4169 EXPECT_TRUE(sync_token1.verified_flush()); |
4170 EXPECT_TRUE(sync_token2.verified_flush()); | 4170 EXPECT_TRUE(sync_token2.verified_flush()); |
4171 } | 4171 } |
4172 | 4172 |
4173 TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUM) { | 4173 TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUM) { |
4174 const CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO; | 4174 CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO; |
4175 const CommandBufferId kCommandBufferId = | 4175 CommandBufferId kCommandBufferId = CommandBufferId::FromUnsafeValue(234u); |
4176 CommandBufferId::FromUnsafeValue(234u); | 4176 GLuint64 kFenceSync = 456u; |
4177 const GLuint64 kFenceSync = 456u; | 4177 |
4178 GLbyte sync_token[GL_SYNC_TOKEN_SIZE_CHROMIUM]; | 4178 gpu::SyncToken sync_token; |
| 4179 GLbyte* sync_token_data = sync_token.GetData(); |
4179 | 4180 |
4180 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync)) | 4181 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync)) |
4181 .WillOnce(Return(true)); | 4182 .WillOnce(Return(true)); |
4182 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushReceived(kFenceSync)) | 4183 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushReceived(kFenceSync)) |
4183 .WillOnce(Return(true)); | 4184 .WillOnce(Return(true)); |
4184 EXPECT_CALL(*gpu_control_, GetNamespaceID()).WillOnce(Return(kNamespaceId)); | 4185 EXPECT_CALL(*gpu_control_, GetNamespaceID()).WillOnce(Return(kNamespaceId)); |
4185 EXPECT_CALL(*gpu_control_, GetCommandBufferID()) | 4186 EXPECT_CALL(*gpu_control_, GetCommandBufferID()) |
4186 .WillOnce(Return(kCommandBufferId)); | 4187 .WillOnce(Return(kCommandBufferId)); |
4187 EXPECT_CALL(*gpu_control_, GetExtraCommandBufferData()).WillOnce(Return(0)); | 4188 EXPECT_CALL(*gpu_control_, GetExtraCommandBufferData()).WillOnce(Return(0)); |
4188 gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token); | 4189 gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token_data); |
4189 | 4190 |
4190 struct Cmds { | 4191 struct Cmds { |
4191 cmds::WaitSyncTokenCHROMIUM wait_sync_token; | 4192 cmds::WaitSyncTokenCHROMIUM wait_sync_token; |
4192 }; | 4193 }; |
4193 Cmds expected; | 4194 Cmds expected; |
4194 expected.wait_sync_token.Init(kNamespaceId, kCommandBufferId.GetUnsafeValue(), | 4195 expected.wait_sync_token.Init(kNamespaceId, kCommandBufferId.GetUnsafeValue(), |
4195 kFenceSync); | 4196 kFenceSync); |
4196 | 4197 |
4197 gl_->WaitSyncTokenCHROMIUM(sync_token); | 4198 EXPECT_CALL(*gpu_control_, WaitSyncToken(sync_token)); |
| 4199 gl_->WaitSyncTokenCHROMIUM(sync_token_data); |
4198 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 4200 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
4199 } | 4201 } |
4200 | 4202 |
4201 TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUMErrors) { | 4203 TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUMErrors) { |
4202 ExpectedMemoryInfo result = | 4204 ExpectedMemoryInfo result = |
4203 GetExpectedResultMemory(sizeof(cmds::GetError::Result)); | 4205 GetExpectedResultMemory(sizeof(cmds::GetError::Result)); |
4204 EXPECT_CALL(*command_buffer(), OnFlush()) | 4206 EXPECT_CALL(*command_buffer(), OnFlush()) |
4205 .WillRepeatedly(SetMemory(result.ptr, GLuint(GL_NO_ERROR))) | 4207 .WillRepeatedly(SetMemory(result.ptr, GLuint(GL_NO_ERROR))) |
4206 .RetiresOnSaturation(); | 4208 .RetiresOnSaturation(); |
4207 | 4209 |
4208 // Empty sync tokens should be produce no error and be a nop. | 4210 // Empty sync tokens should be produce no error and be a nop. |
4209 ClearCommands(); | 4211 ClearCommands(); |
4210 gl_->WaitSyncTokenCHROMIUM(nullptr); | 4212 gl_->WaitSyncTokenCHROMIUM(nullptr); |
4211 EXPECT_TRUE(NoCommandsWritten()); | 4213 EXPECT_TRUE(NoCommandsWritten()); |
4212 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError()); | 4214 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError()); |
4213 | 4215 |
4214 // Invalid sync tokens should produce no error and be a nop. | 4216 // Invalid sync tokens should produce no error and be a nop. |
4215 ClearCommands(); | 4217 ClearCommands(); |
4216 gpu::SyncToken invalid_sync_token; | 4218 gpu::SyncToken invalid_sync_token; |
4217 gl_->WaitSyncTokenCHROMIUM(invalid_sync_token.GetConstData()); | 4219 gl_->WaitSyncTokenCHROMIUM(invalid_sync_token.GetConstData()); |
4218 EXPECT_TRUE(NoCommandsWritten()); | 4220 EXPECT_TRUE(NoCommandsWritten()); |
4219 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError()); | 4221 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError()); |
4220 | 4222 |
4221 // Unverified sync token should produce INVALID_OPERATION. | 4223 // Unverified sync token should produce INVALID_OPERATION. |
4222 ClearCommands(); | 4224 ClearCommands(); |
4223 gpu::SyncToken unverified_sync_token(CommandBufferNamespace::GPU_IO, 0, | 4225 gpu::SyncToken unverified_sync_token(CommandBufferNamespace::GPU_IO, 0, |
4224 gpu::CommandBufferId(), 0); | 4226 gpu::CommandBufferId(), 0); |
4225 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_)) | 4227 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(unverified_sync_token)) |
4226 .WillOnce(Return(false)); | 4228 .WillOnce(Return(false)); |
4227 gl_->WaitSyncTokenCHROMIUM(unverified_sync_token.GetConstData()); | 4229 gl_->WaitSyncTokenCHROMIUM(unverified_sync_token.GetConstData()); |
4228 EXPECT_TRUE(NoCommandsWritten()); | 4230 EXPECT_TRUE(NoCommandsWritten()); |
4229 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); | 4231 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); |
4230 } | 4232 } |
4231 | 4233 |
4232 TEST_F(GLES2ImplementationTest, IsEnabled) { | 4234 TEST_F(GLES2ImplementationTest, IsEnabled) { |
4233 // If we use a valid enum, its state is cached on client side, so no command | 4235 // If we use a valid enum, its state is cached on client side, so no command |
4234 // is actually generated, and this test will fail. | 4236 // is actually generated, and this test will fail. |
4235 // TODO(zmo): it seems we never need the command. Maybe remove it. | 4237 // TODO(zmo): it seems we never need the command. Maybe remove it. |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4626 ContextInitOptions init_options; | 4628 ContextInitOptions init_options; |
4627 init_options.transfer_buffer_initialize_fail = true; | 4629 init_options.transfer_buffer_initialize_fail = true; |
4628 EXPECT_FALSE(Initialize(init_options)); | 4630 EXPECT_FALSE(Initialize(init_options)); |
4629 } | 4631 } |
4630 | 4632 |
4631 #include "base/macros.h" | 4633 #include "base/macros.h" |
4632 #include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h" | 4634 #include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h" |
4633 | 4635 |
4634 } // namespace gles2 | 4636 } // namespace gles2 |
4635 } // namespace gpu | 4637 } // namespace gpu |
OLD | NEW |