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/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
(...skipping 7131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7142 true, // has alpha | 7142 true, // has alpha |
7143 false, // has depth | 7143 false, // has depth |
7144 false, // has stencil | 7144 false, // has stencil |
7145 true, // request alpha | 7145 true, // request alpha |
7146 false, // request depth | 7146 false, // request depth |
7147 false, // request stencil | 7147 false, // request stencil |
7148 true); // bind generates resource | 7148 true); // bind generates resource |
7149 | 7149 |
7150 // Test end fails if no begin. | 7150 // Test end fails if no begin. |
7151 EndQueryEXT end_cmd; | 7151 EndQueryEXT end_cmd; |
7152 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1); | 7152 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, false, 1); |
7153 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); | 7153 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
7154 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 7154 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
7155 | 7155 |
7156 BeginQueryEXT begin_cmd; | 7156 BeginQueryEXT begin_cmd; |
7157 | 7157 |
7158 // Test id = 0 fails. | 7158 // Test id = 0 fails. |
7159 begin_cmd.Init( | 7159 begin_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, |
7160 GL_ANY_SAMPLES_PASSED_EXT, 0, kSharedMemoryId, kSharedMemoryOffset); | 7160 0, |
| 7161 false, |
| 7162 kSharedMemoryId, |
| 7163 kSharedMemoryOffset); |
7161 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); | 7164 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
7162 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 7165 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
7163 | 7166 |
7164 GenHelper<GenQueriesEXTImmediate>(kNewClientId); | 7167 GenHelper<GenQueriesEXTImmediate>(kNewClientId); |
7165 | 7168 |
7166 // Test valid parameters work. | 7169 // Test valid parameters work. |
7167 EXPECT_CALL(*gl_, GenQueriesARB(1, _)) | 7170 EXPECT_CALL(*gl_, GenQueriesARB(1, _)) |
7168 .WillOnce(SetArgumentPointee<1>(kNewServiceId)) | 7171 .WillOnce(SetArgumentPointee<1>(kNewServiceId)) |
7169 .RetiresOnSaturation(); | 7172 .RetiresOnSaturation(); |
7170 EXPECT_CALL(*gl_, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, kNewServiceId)) | 7173 EXPECT_CALL(*gl_, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, kNewServiceId)) |
7171 .Times(1) | 7174 .Times(1) |
7172 .RetiresOnSaturation(); | 7175 .RetiresOnSaturation(); |
7173 begin_cmd.Init( | 7176 begin_cmd.Init( |
7174 GL_ANY_SAMPLES_PASSED_EXT, kNewClientId, | 7177 GL_ANY_SAMPLES_PASSED_EXT, kNewClientId, |
| 7178 false, |
7175 kSharedMemoryId, kSharedMemoryOffset); | 7179 kSharedMemoryId, kSharedMemoryOffset); |
7176 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); | 7180 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
7177 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 7181 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
7178 | 7182 |
7179 QueryManager* query_manager = decoder_->GetQueryManager(); | 7183 QueryManager* query_manager = decoder_->GetQueryManager(); |
7180 ASSERT_TRUE(query_manager != NULL); | 7184 ASSERT_TRUE(query_manager != NULL); |
7181 QueryManager::Query* query = query_manager->GetQuery(kNewClientId); | 7185 QueryManager::Query* query = query_manager->GetQuery(kNewClientId); |
7182 ASSERT_TRUE(query != NULL); | 7186 ASSERT_TRUE(query != NULL); |
7183 EXPECT_FALSE(query->pending()); | 7187 EXPECT_FALSE(query->pending()); |
7184 | 7188 |
7185 // Test trying begin again fails | 7189 // Test trying begin again fails |
7186 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); | 7190 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
7187 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 7191 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
7188 | 7192 |
7189 // Test end fails with different target | 7193 // Test end fails with different target |
7190 end_cmd.Init(GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT, 1); | 7194 end_cmd.Init(GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT, false, 1); |
7191 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); | 7195 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
7192 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 7196 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
7193 | 7197 |
7194 // Test end succeeds | 7198 // Test end succeeds |
7195 EXPECT_CALL(*gl_, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT)) | 7199 EXPECT_CALL(*gl_, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT)) |
7196 .Times(1) | 7200 .Times(1) |
7197 .RetiresOnSaturation(); | 7201 .RetiresOnSaturation(); |
7198 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1); | 7202 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, false, 1); |
7199 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); | 7203 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
7200 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 7204 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
7201 EXPECT_TRUE(query->pending()); | 7205 EXPECT_TRUE(query->pending()); |
7202 | 7206 |
7203 EXPECT_CALL(*gl_, DeleteQueriesARB(1, _)) | 7207 EXPECT_CALL(*gl_, DeleteQueriesARB(1, _)) |
7204 .Times(1) | 7208 .Times(1) |
7205 .RetiresOnSaturation(); | 7209 .RetiresOnSaturation(); |
7206 } | 7210 } |
7207 | 7211 |
7208 static void CheckBeginEndQueryBadMemoryFails( | 7212 static void CheckBeginEndQueryBadMemoryFails( |
7209 GLES2DecoderTestBase* test, | 7213 GLES2DecoderTestBase* test, |
7210 GLuint client_id, | 7214 GLuint client_id, |
7211 GLuint service_id, | 7215 GLuint service_id, |
7212 int32 shm_id, | 7216 int32 shm_id, |
7213 uint32 shm_offset) { | 7217 uint32 shm_offset) { |
7214 ::testing::StrictMock< ::gfx::MockGLInterface>* gl = test->GetGLMock(); | 7218 ::testing::StrictMock< ::gfx::MockGLInterface>* gl = test->GetGLMock(); |
7215 | 7219 |
7216 BeginQueryEXT begin_cmd; | 7220 BeginQueryEXT begin_cmd; |
7217 | 7221 |
7218 test->GenHelper<GenQueriesEXTImmediate>(client_id); | 7222 test->GenHelper<GenQueriesEXTImmediate>(client_id); |
7219 | 7223 |
7220 EXPECT_CALL(*gl, GenQueriesARB(1, _)) | 7224 EXPECT_CALL(*gl, GenQueriesARB(1, _)) |
7221 .WillOnce(SetArgumentPointee<1>(service_id)) | 7225 .WillOnce(SetArgumentPointee<1>(service_id)) |
7222 .RetiresOnSaturation(); | 7226 .RetiresOnSaturation(); |
7223 EXPECT_CALL(*gl, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, service_id)) | 7227 EXPECT_CALL(*gl, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, service_id)) |
7224 .Times(1) | 7228 .Times(1) |
7225 .RetiresOnSaturation(); | 7229 .RetiresOnSaturation(); |
7226 | 7230 |
7227 // Test bad shared memory fails | 7231 // Test bad shared memory fails |
7228 begin_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, client_id, shm_id, shm_offset); | 7232 begin_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, client_id, |
| 7233 false, shm_id, shm_offset); |
7229 error::Error error1 = test->ExecuteCmd(begin_cmd); | 7234 error::Error error1 = test->ExecuteCmd(begin_cmd); |
7230 | 7235 |
7231 EXPECT_CALL(*gl, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT)) | 7236 EXPECT_CALL(*gl, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT)) |
7232 .Times(1) | 7237 .Times(1) |
7233 .RetiresOnSaturation(); | 7238 .RetiresOnSaturation(); |
7234 | 7239 |
7235 EndQueryEXT end_cmd; | 7240 EndQueryEXT end_cmd; |
7236 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1); | 7241 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, false, 1); |
7237 error::Error error2 = test->ExecuteCmd(end_cmd); | 7242 error::Error error2 = test->ExecuteCmd(end_cmd); |
7238 | 7243 |
7239 EXPECT_CALL(*gl, | 7244 EXPECT_CALL(*gl, |
7240 GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) | 7245 GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) |
7241 .WillOnce(SetArgumentPointee<2>(1)) | 7246 .WillOnce(SetArgumentPointee<2>(1)) |
7242 .RetiresOnSaturation(); | 7247 .RetiresOnSaturation(); |
7243 EXPECT_CALL(*gl, | 7248 EXPECT_CALL(*gl, |
7244 GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_EXT, _)) | 7249 GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_EXT, _)) |
7245 .WillOnce(SetArgumentPointee<2>(1)) | 7250 .WillOnce(SetArgumentPointee<2>(1)) |
7246 .RetiresOnSaturation(); | 7251 .RetiresOnSaturation(); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7291 } | 7296 } |
7292 | 7297 |
7293 TEST_F(GLES2DecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) { | 7298 TEST_F(GLES2DecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) { |
7294 BeginQueryEXT begin_cmd; | 7299 BeginQueryEXT begin_cmd; |
7295 | 7300 |
7296 GenHelper<GenQueriesEXTImmediate>(kNewClientId); | 7301 GenHelper<GenQueriesEXTImmediate>(kNewClientId); |
7297 | 7302 |
7298 // Test valid parameters work. | 7303 // Test valid parameters work. |
7299 begin_cmd.Init( | 7304 begin_cmd.Init( |
7300 GL_COMMANDS_ISSUED_CHROMIUM, kNewClientId, | 7305 GL_COMMANDS_ISSUED_CHROMIUM, kNewClientId, |
| 7306 false, |
7301 kSharedMemoryId, kSharedMemoryOffset); | 7307 kSharedMemoryId, kSharedMemoryOffset); |
7302 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); | 7308 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
7303 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 7309 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
7304 | 7310 |
7305 QueryManager* query_manager = decoder_->GetQueryManager(); | 7311 QueryManager* query_manager = decoder_->GetQueryManager(); |
7306 ASSERT_TRUE(query_manager != NULL); | 7312 ASSERT_TRUE(query_manager != NULL); |
7307 QueryManager::Query* query = query_manager->GetQuery(kNewClientId); | 7313 QueryManager::Query* query = query_manager->GetQuery(kNewClientId); |
7308 ASSERT_TRUE(query != NULL); | 7314 ASSERT_TRUE(query != NULL); |
7309 EXPECT_FALSE(query->pending()); | 7315 EXPECT_FALSE(query->pending()); |
7310 | 7316 |
7311 // Test end succeeds | 7317 // Test end succeeds |
7312 EndQueryEXT end_cmd; | 7318 EndQueryEXT end_cmd; |
7313 end_cmd.Init(GL_COMMANDS_ISSUED_CHROMIUM, 1); | 7319 end_cmd.Init(GL_COMMANDS_ISSUED_CHROMIUM, false, 1); |
7314 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); | 7320 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
7315 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 7321 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
7316 EXPECT_FALSE(query->pending()); | 7322 EXPECT_FALSE(query->pending()); |
7317 } | 7323 } |
7318 | 7324 |
7319 TEST_F(GLES2DecoderTest, BeginEndQueryEXTGetErrorQueryCHROMIUM) { | 7325 TEST_F(GLES2DecoderTest, BeginEndQueryEXTGetErrorQueryCHROMIUM) { |
7320 BeginQueryEXT begin_cmd; | 7326 BeginQueryEXT begin_cmd; |
7321 | 7327 |
7322 GenHelper<GenQueriesEXTImmediate>(kNewClientId); | 7328 GenHelper<GenQueriesEXTImmediate>(kNewClientId); |
7323 | 7329 |
7324 // Test valid parameters work. | 7330 // Test valid parameters work. |
7325 begin_cmd.Init( | 7331 begin_cmd.Init( |
7326 GL_GET_ERROR_QUERY_CHROMIUM, kNewClientId, | 7332 GL_GET_ERROR_QUERY_CHROMIUM, kNewClientId, |
| 7333 false, |
7327 kSharedMemoryId, kSharedMemoryOffset); | 7334 kSharedMemoryId, kSharedMemoryOffset); |
7328 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); | 7335 EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd)); |
7329 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 7336 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
7330 | 7337 |
7331 QueryManager* query_manager = decoder_->GetQueryManager(); | 7338 QueryManager* query_manager = decoder_->GetQueryManager(); |
7332 ASSERT_TRUE(query_manager != NULL); | 7339 ASSERT_TRUE(query_manager != NULL); |
7333 QueryManager::Query* query = query_manager->GetQuery(kNewClientId); | 7340 QueryManager::Query* query = query_manager->GetQuery(kNewClientId); |
7334 ASSERT_TRUE(query != NULL); | 7341 ASSERT_TRUE(query != NULL); |
7335 EXPECT_FALSE(query->pending()); | 7342 EXPECT_FALSE(query->pending()); |
7336 | 7343 |
7337 // Test end succeeds | 7344 // Test end succeeds |
7338 QuerySync* sync = static_cast<QuerySync*>(shared_memory_address_); | 7345 QuerySync* sync = static_cast<QuerySync*>(shared_memory_address_); |
7339 | 7346 |
7340 EXPECT_CALL(*gl_, GetError()) | 7347 EXPECT_CALL(*gl_, GetError()) |
7341 .WillOnce(Return(GL_INVALID_VALUE)) | 7348 .WillOnce(Return(GL_INVALID_VALUE)) |
7342 .RetiresOnSaturation(); | 7349 .RetiresOnSaturation(); |
7343 | 7350 |
7344 EndQueryEXT end_cmd; | 7351 EndQueryEXT end_cmd; |
7345 end_cmd.Init(GL_GET_ERROR_QUERY_CHROMIUM, 1); | 7352 end_cmd.Init(GL_GET_ERROR_QUERY_CHROMIUM, false, 1); |
7346 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); | 7353 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); |
7347 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 7354 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
7348 EXPECT_FALSE(query->pending()); | 7355 EXPECT_FALSE(query->pending()); |
7349 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), | 7356 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), |
7350 static_cast<GLenum>(sync->result)); | 7357 static_cast<GLenum>(sync->result)); |
7351 } | 7358 } |
7352 | 7359 |
7353 TEST_F(GLES2DecoderTest, ProduceAndConsumeTextureCHROMIUM) { | 7360 TEST_F(GLES2DecoderTest, ProduceAndConsumeTextureCHROMIUM) { |
7354 GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM]; | 7361 GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM]; |
7355 group().mailbox_manager()->GenerateMailboxName( | 7362 group().mailbox_manager()->GenerateMailboxName( |
(...skipping 1493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8849 // TODO(gman): TexImage2DImmediate | 8856 // TODO(gman): TexImage2DImmediate |
8850 | 8857 |
8851 // TODO(gman): TexSubImage2DImmediate | 8858 // TODO(gman): TexSubImage2DImmediate |
8852 | 8859 |
8853 // TODO(gman): UseProgram | 8860 // TODO(gman): UseProgram |
8854 | 8861 |
8855 // TODO(gman): SwapBuffers | 8862 // TODO(gman): SwapBuffers |
8856 | 8863 |
8857 } // namespace gles2 | 8864 } // namespace gles2 |
8858 } // namespace gpu | 8865 } // namespace gpu |
OLD | NEW |