| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <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 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 882 GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER, | 882 GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER, |
| 883 GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, | 883 GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, |
| 884 }; | 884 }; |
| 885 for (size_t ii = 0; ii < arraysize(kPname); ++ii) { | 885 for (size_t ii = 0; ii < arraysize(kPname); ++ii) { |
| 886 result->SetNumResults(0); | 886 result->SetNumResults(0); |
| 887 cmd.Init(client_program_id_, | 887 cmd.Init(client_program_id_, |
| 888 0, | 888 0, |
| 889 kPname[ii], | 889 kPname[ii], |
| 890 shared_memory_id_, | 890 shared_memory_id_, |
| 891 shared_memory_offset_); | 891 shared_memory_offset_); |
| 892 EXPECT_CALL(*gl_, GetError()) | |
| 893 .WillOnce(Return(GL_NO_ERROR)) | |
| 894 .WillOnce(Return(GL_NO_ERROR)) | |
| 895 .RetiresOnSaturation(); | |
| 896 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 892 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 897 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 893 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 898 .RetiresOnSaturation(); | 894 .RetiresOnSaturation(); |
| 899 if (kPname[ii] == GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) { | 895 if (kPname[ii] == GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) { |
| 900 EXPECT_CALL(*gl_, GetError()) | 896 EXPECT_CALL(*gl_, GetError()) |
| 901 .WillOnce(Return(GL_NO_ERROR)) | 897 .WillOnce(Return(GL_NO_ERROR)) |
| 902 .RetiresOnSaturation(); | 898 .RetiresOnSaturation(); |
| 903 EXPECT_CALL(*gl_, | 899 EXPECT_CALL(*gl_, |
| 904 GetActiveUniformBlockiv(kServiceProgramId, 0, | 900 GetActiveUniformBlockiv(kServiceProgramId, 0, |
| 905 GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS, _)) | 901 GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS, _)) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 924 typedef GetActiveUniformBlockiv::Result Result; | 920 typedef GetActiveUniformBlockiv::Result Result; |
| 925 Result* result = static_cast<Result*>(shared_memory_address_); | 921 Result* result = static_cast<Result*>(shared_memory_address_); |
| 926 result->SetNumResults(0); | 922 result->SetNumResults(0); |
| 927 cmd.Init(client_program_id_, | 923 cmd.Init(client_program_id_, |
| 928 0, | 924 0, |
| 929 GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES, | 925 GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES, |
| 930 shared_memory_id_, | 926 shared_memory_id_, |
| 931 shared_memory_offset_); | 927 shared_memory_offset_); |
| 932 EXPECT_CALL(*gl_, GetError()) | 928 EXPECT_CALL(*gl_, GetError()) |
| 933 .WillOnce(Return(GL_NO_ERROR)) | 929 .WillOnce(Return(GL_NO_ERROR)) |
| 934 .WillOnce(Return(GL_NO_ERROR)) | |
| 935 .WillOnce(Return(GL_NO_ERROR)) | |
| 936 .RetiresOnSaturation(); | 930 .RetiresOnSaturation(); |
| 937 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 931 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 938 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 932 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 939 .RetiresOnSaturation(); | 933 .RetiresOnSaturation(); |
| 940 EXPECT_CALL(*gl_, | 934 EXPECT_CALL(*gl_, |
| 941 GetActiveUniformBlockiv( | 935 GetActiveUniformBlockiv( |
| 942 kServiceProgramId, 0, GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS, _)) | 936 kServiceProgramId, 0, GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS, _)) |
| 943 .WillOnce(SetArgPointee<3>(0)) | 937 .WillOnce(SetArgPointee<3>(0)) |
| 944 .RetiresOnSaturation(); | 938 .RetiresOnSaturation(); |
| 945 EXPECT_CALL(*gl_, | 939 EXPECT_CALL(*gl_, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 977 Result* result = static_cast<Result*>(shared_memory_address_); | 971 Result* result = static_cast<Result*>(shared_memory_address_); |
| 978 result->SetNumResults(1); // Should be initialized to 0. | 972 result->SetNumResults(1); // Should be initialized to 0. |
| 979 cmd.Init(client_program_id_, | 973 cmd.Init(client_program_id_, |
| 980 0, | 974 0, |
| 981 GL_UNIFORM_BLOCK_BINDING, | 975 GL_UNIFORM_BLOCK_BINDING, |
| 982 shared_memory_id_, | 976 shared_memory_id_, |
| 983 shared_memory_offset_); | 977 shared_memory_offset_); |
| 984 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 978 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 985 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 979 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 986 .RetiresOnSaturation(); | 980 .RetiresOnSaturation(); |
| 987 EXPECT_CALL(*gl_, GetError()) | |
| 988 .WillOnce(Return(GL_NO_ERROR)) | |
| 989 .RetiresOnSaturation(); | |
| 990 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 981 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 991 } | 982 } |
| 992 | 983 |
| 993 TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockivBadProgramFails) { | 984 TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockivBadProgramFails) { |
| 994 GetActiveUniformBlockiv cmd; | 985 GetActiveUniformBlockiv cmd; |
| 995 typedef GetActiveUniformBlockiv::Result Result; | 986 typedef GetActiveUniformBlockiv::Result Result; |
| 996 Result* result = static_cast<Result*>(shared_memory_address_); | 987 Result* result = static_cast<Result*>(shared_memory_address_); |
| 997 result->SetNumResults(0); | 988 result->SetNumResults(0); |
| 998 cmd.Init(kInvalidClientId, | 989 cmd.Init(kInvalidClientId, |
| 999 0, | 990 0, |
| 1000 GL_UNIFORM_BLOCK_BINDING, | 991 GL_UNIFORM_BLOCK_BINDING, |
| 1001 shared_memory_id_, | 992 shared_memory_id_, |
| 1002 shared_memory_offset_); | 993 shared_memory_offset_); |
| 1003 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 994 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1004 EXPECT_EQ(0, result->GetNumResults()); | 995 EXPECT_EQ(0, result->GetNumResults()); |
| 1005 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 996 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
| 1006 } | 997 } |
| 1007 | 998 |
| 1008 TEST_P(GLES3DecoderWithShaderTest, | 999 TEST_P(GLES3DecoderWithShaderTest, |
| 1009 GetActiveUniformBlockivBadSharedMemoryFails) { | 1000 GetActiveUniformBlockivBadSharedMemoryFails) { |
| 1010 GetActiveUniformBlockiv cmd; | 1001 GetActiveUniformBlockiv cmd; |
| 1011 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 1002 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 1012 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 1003 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 1013 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 1004 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 1014 .RetiresOnSaturation(); | 1005 .RetiresOnSaturation(); |
| 1015 EXPECT_CALL(*gl_, GetError()) | |
| 1016 .WillOnce(Return(GL_NO_ERROR)) | |
| 1017 .WillOnce(Return(GL_NO_ERROR)) | |
| 1018 .RetiresOnSaturation(); | |
| 1019 cmd.Init(client_program_id_, | 1006 cmd.Init(client_program_id_, |
| 1020 0, | 1007 0, |
| 1021 GL_UNIFORM_BLOCK_BINDING, | 1008 GL_UNIFORM_BLOCK_BINDING, |
| 1022 kInvalidSharedMemoryId, | 1009 kInvalidSharedMemoryId, |
| 1023 shared_memory_offset_); | 1010 shared_memory_offset_); |
| 1024 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 1011 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 1025 cmd.Init(client_program_id_, | 1012 cmd.Init(client_program_id_, |
| 1026 0, | 1013 0, |
| 1027 GL_UNIFORM_BLOCK_BINDING, | 1014 GL_UNIFORM_BLOCK_BINDING, |
| 1028 shared_memory_id_, | 1015 shared_memory_id_, |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1291 kSharedMemoryId, | 1278 kSharedMemoryId, |
| 1292 kSharedMemoryOffset); | 1279 kSharedMemoryOffset); |
| 1293 EXPECT_CALL(*gl_, | 1280 EXPECT_CALL(*gl_, |
| 1294 GetActiveUniformsiv( | 1281 GetActiveUniformsiv( |
| 1295 kServiceProgramId, kCount, _, GL_UNIFORM_TYPE, _)) | 1282 kServiceProgramId, kCount, _, GL_UNIFORM_TYPE, _)) |
| 1296 .WillOnce(SetArrayArgument<4>(kResults, kResults + kCount)) | 1283 .WillOnce(SetArrayArgument<4>(kResults, kResults + kCount)) |
| 1297 .RetiresOnSaturation(); | 1284 .RetiresOnSaturation(); |
| 1298 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 1285 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 1299 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 1286 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 1300 .RetiresOnSaturation(); | 1287 .RetiresOnSaturation(); |
| 1301 EXPECT_CALL(*gl_, GetError()) | |
| 1302 .WillOnce(Return(GL_NO_ERROR)) | |
| 1303 .WillOnce(Return(GL_NO_ERROR)) | |
| 1304 .RetiresOnSaturation(); | |
| 1305 result->size = 0; | 1288 result->size = 0; |
| 1306 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1289 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1307 EXPECT_EQ(kCount, static_cast<size_t>(result->GetNumResults())); | 1290 EXPECT_EQ(kCount, static_cast<size_t>(result->GetNumResults())); |
| 1308 for (size_t ii = 0; ii < kCount; ++ii) { | 1291 for (size_t ii = 0; ii < kCount; ++ii) { |
| 1309 EXPECT_EQ(kResults[ii], result->GetData()[ii]); | 1292 EXPECT_EQ(kResults[ii], result->GetData()[ii]); |
| 1310 } | 1293 } |
| 1311 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 1294 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 1312 } | 1295 } |
| 1313 | 1296 |
| 1314 TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadProgramFails) { | 1297 TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadProgramFails) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1339 .WillOnce(SetArgPointee<2>(GL_FALSE)) | 1322 .WillOnce(SetArgPointee<2>(GL_FALSE)) |
| 1340 .RetiresOnSaturation(); | 1323 .RetiresOnSaturation(); |
| 1341 result->size = 0; | 1324 result->size = 0; |
| 1342 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1325 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1343 EXPECT_EQ(0, result->GetNumResults()); | 1326 EXPECT_EQ(0, result->GetNumResults()); |
| 1344 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 1327 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 1345 } | 1328 } |
| 1346 | 1329 |
| 1347 TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadParamsFails) { | 1330 TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadParamsFails) { |
| 1348 const uint32_t kBucketId = 123; | 1331 const uint32_t kBucketId = 123; |
| 1349 const GLuint kIndices[] = { 1, 2 }; | 1332 const GLuint kIndices[] = { 1, 100 }; |
| 1350 const GLint kResults[] = { 1976, 321 }; | |
| 1351 const size_t kCount = arraysize(kIndices); | 1333 const size_t kCount = arraysize(kIndices); |
| 1352 SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount); | 1334 SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount); |
| 1353 GetActiveUniformsiv::Result* result = | 1335 GetActiveUniformsiv::Result* result = |
| 1354 static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_); | 1336 static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_); |
| 1355 GetActiveUniformsiv cmd; | 1337 GetActiveUniformsiv cmd; |
| 1356 cmd.Init(client_program_id_, | 1338 cmd.Init(client_program_id_, |
| 1357 kBucketId, | 1339 kBucketId, |
| 1358 GL_UNIFORM_TYPE, | 1340 GL_UNIFORM_TYPE, |
| 1359 kSharedMemoryId, | 1341 kSharedMemoryId, |
| 1360 kSharedMemoryOffset); | 1342 kSharedMemoryOffset); |
| 1361 EXPECT_CALL(*gl_, | |
| 1362 GetActiveUniformsiv( | |
| 1363 kServiceProgramId, kCount, _, GL_UNIFORM_TYPE, _)) | |
| 1364 .WillOnce(SetArrayArgument<4>(kResults, kResults + kCount)) | |
| 1365 .RetiresOnSaturation(); | |
| 1366 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | |
| 1367 .WillOnce(SetArgPointee<2>(GL_TRUE)) | |
| 1368 .RetiresOnSaturation(); | |
| 1369 EXPECT_CALL(*gl_, GetError()) | |
| 1370 .WillOnce(Return(GL_NO_ERROR)) | |
| 1371 .WillOnce(Return(GL_INVALID_VALUE)) | |
| 1372 .RetiresOnSaturation(); | |
| 1373 result->size = 0; | 1343 result->size = 0; |
| 1374 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1344 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1375 EXPECT_EQ(0, result->GetNumResults()); | 1345 EXPECT_EQ(0, result->GetNumResults()); |
| 1376 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 1346 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
| 1377 } | 1347 } |
| 1378 | 1348 |
| 1379 TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadPnameFails) { | 1349 TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadPnameFails) { |
| 1380 const uint32_t kBucketId = 123; | 1350 const uint32_t kBucketId = 123; |
| 1381 const GLuint kIndices[] = { 1, 2 }; | 1351 const GLuint kIndices[] = { 1, 2 }; |
| 1382 const size_t kCount = arraysize(kIndices); | 1352 const size_t kCount = arraysize(kIndices); |
| (...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2266 } | 2236 } |
| 2267 | 2237 |
| 2268 // TODO(gman): DeleteProgram | 2238 // TODO(gman): DeleteProgram |
| 2269 | 2239 |
| 2270 // TODO(gman): UseProgram | 2240 // TODO(gman): UseProgram |
| 2271 | 2241 |
| 2272 // TODO(gman): DeleteShader | 2242 // TODO(gman): DeleteShader |
| 2273 | 2243 |
| 2274 } // namespace gles2 | 2244 } // namespace gles2 |
| 2275 } // namespace gpu | 2245 } // namespace gpu |
| OLD | NEW |