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

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

Issue 552013007: Remove outdated ANGLE_SH_VERSION if-def stuff. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
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/program_manager.h" 5 #include "gpu/command_buffer/service/program_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 13 matching lines...) Expand all
24 using ::testing::DoAll; 24 using ::testing::DoAll;
25 using ::testing::InSequence; 25 using ::testing::InSequence;
26 using ::testing::MatcherCast; 26 using ::testing::MatcherCast;
27 using ::testing::Pointee; 27 using ::testing::Pointee;
28 using ::testing::Return; 28 using ::testing::Return;
29 using ::testing::ReturnRef; 29 using ::testing::ReturnRef;
30 using ::testing::SetArrayArgument; 30 using ::testing::SetArrayArgument;
31 using ::testing::SetArgumentPointee; 31 using ::testing::SetArgumentPointee;
32 using ::testing::StrEq; 32 using ::testing::StrEq;
33 33
34 // ANGLE now uses GLenum values directory for types
35 // TODO(jmadill): Delete these defines when the ANGLE
36 // roll reliably passes translator version 126
37 #if (ANGLE_SH_VERSION >= 126)
38 #define SH_FLOAT GL_FLOAT
39 #define SH_FLOAT_VEC2 GL_FLOAT_VEC2
40 #define SH_FLOAT_VEC3 GL_FLOAT_VEC3
41 #define SH_FLOAT_VEC4 GL_FLOAT_VEC4
42 #endif
43
44 namespace gpu { 34 namespace gpu {
45 namespace gles2 { 35 namespace gles2 {
46 36
47 namespace { 37 namespace {
48 const uint32 kMaxVaryingVectors = 8; 38 const uint32 kMaxVaryingVectors = 8;
49 39
50 void ShaderCacheCb(const std::string& key, const std::string& shader) {} 40 void ShaderCacheCb(const std::string& key, const std::string& shader) {}
51 } // namespace anonymous 41 } // namespace anonymous
52 42
53 class ProgramManagerTest : public GpuServiceTest { 43 class ProgramManagerTest : public GpuServiceTest {
(...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1254 1244
1255 EXPECT_TRUE(program->DetectUniformsMismatch(&conflicting_name)); 1245 EXPECT_TRUE(program->DetectUniformsMismatch(&conflicting_name));
1256 EXPECT_EQ("a", conflicting_name); 1246 EXPECT_EQ("a", conflicting_name);
1257 EXPECT_TRUE(LinkAsExpected(program, false)); 1247 EXPECT_TRUE(LinkAsExpected(program, false));
1258 } 1248 }
1259 1249
1260 // If a varying has different type in the vertex and fragment 1250 // If a varying has different type in the vertex and fragment
1261 // shader, linking should fail. 1251 // shader, linking should fail.
1262 TEST_F(ProgramManagerWithShaderTest, VaryingTypeMismatch) { 1252 TEST_F(ProgramManagerWithShaderTest, VaryingTypeMismatch) {
1263 const VarInfo kVertexVarying = 1253 const VarInfo kVertexVarying =
1264 { SH_FLOAT_VEC3, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }; 1254 { GL_FLOAT_VEC3, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1265 const VarInfo kFragmentVarying = 1255 const VarInfo kFragmentVarying =
1266 { SH_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }; 1256 { GL_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1267 Program* program = SetupShaderVariableTest( 1257 Program* program = SetupShaderVariableTest(
1268 &kVertexVarying, 1, &kFragmentVarying, 1); 1258 &kVertexVarying, 1, &kFragmentVarying, 1);
1269 1259
1270 std::string conflicting_name; 1260 std::string conflicting_name;
1271 1261
1272 EXPECT_TRUE(program->DetectVaryingsMismatch(&conflicting_name)); 1262 EXPECT_TRUE(program->DetectVaryingsMismatch(&conflicting_name));
1273 EXPECT_EQ("a", conflicting_name); 1263 EXPECT_EQ("a", conflicting_name);
1274 EXPECT_TRUE(LinkAsExpected(program, false)); 1264 EXPECT_TRUE(LinkAsExpected(program, false));
1275 } 1265 }
1276 1266
1277 // If a varying has different array size in the vertex and fragment 1267 // If a varying has different array size in the vertex and fragment
1278 // shader, linking should fail. 1268 // shader, linking should fail.
1279 TEST_F(ProgramManagerWithShaderTest, VaryingArraySizeMismatch) { 1269 TEST_F(ProgramManagerWithShaderTest, VaryingArraySizeMismatch) {
1280 const VarInfo kVertexVarying = 1270 const VarInfo kVertexVarying =
1281 { SH_FLOAT, 2, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }; 1271 { GL_FLOAT, 2, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1282 const VarInfo kFragmentVarying = 1272 const VarInfo kFragmentVarying =
1283 { SH_FLOAT, 3, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }; 1273 { GL_FLOAT, 3, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1284 Program* program = SetupShaderVariableTest( 1274 Program* program = SetupShaderVariableTest(
1285 &kVertexVarying, 1, &kFragmentVarying, 1); 1275 &kVertexVarying, 1, &kFragmentVarying, 1);
1286 1276
1287 std::string conflicting_name; 1277 std::string conflicting_name;
1288 1278
1289 EXPECT_TRUE(program->DetectVaryingsMismatch(&conflicting_name)); 1279 EXPECT_TRUE(program->DetectVaryingsMismatch(&conflicting_name));
1290 EXPECT_EQ("a", conflicting_name); 1280 EXPECT_EQ("a", conflicting_name);
1291 EXPECT_TRUE(LinkAsExpected(program, false)); 1281 EXPECT_TRUE(LinkAsExpected(program, false));
1292 } 1282 }
1293 1283
1294 // If a varying has different precision in the vertex and fragment 1284 // If a varying has different precision in the vertex and fragment
1295 // shader, linking should succeed. 1285 // shader, linking should succeed.
1296 TEST_F(ProgramManagerWithShaderTest, VaryingPrecisionMismatch) { 1286 TEST_F(ProgramManagerWithShaderTest, VaryingPrecisionMismatch) {
1297 const VarInfo kVertexVarying = 1287 const VarInfo kVertexVarying =
1298 { SH_FLOAT, 2, SH_PRECISION_HIGHP, 1, "a", kVarVarying }; 1288 { GL_FLOAT, 2, SH_PRECISION_HIGHP, 1, "a", kVarVarying };
1299 const VarInfo kFragmentVarying = 1289 const VarInfo kFragmentVarying =
1300 { SH_FLOAT, 2, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }; 1290 { GL_FLOAT, 2, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1301 Program* program = SetupShaderVariableTest( 1291 Program* program = SetupShaderVariableTest(
1302 &kVertexVarying, 1, &kFragmentVarying, 1); 1292 &kVertexVarying, 1, &kFragmentVarying, 1);
1303 1293
1304 std::string conflicting_name; 1294 std::string conflicting_name;
1305 1295
1306 EXPECT_FALSE(program->DetectVaryingsMismatch(&conflicting_name)); 1296 EXPECT_FALSE(program->DetectVaryingsMismatch(&conflicting_name));
1307 EXPECT_TRUE(conflicting_name.empty()); 1297 EXPECT_TRUE(conflicting_name.empty());
1308 EXPECT_TRUE(LinkAsExpected(program, true)); 1298 EXPECT_TRUE(LinkAsExpected(program, true));
1309 } 1299 }
1310 1300
1311 // If a varying is statically used in fragment shader but not 1301 // If a varying is statically used in fragment shader but not
1312 // declared in vertex shader, link should fail. 1302 // declared in vertex shader, link should fail.
1313 TEST_F(ProgramManagerWithShaderTest, VaryingMissing) { 1303 TEST_F(ProgramManagerWithShaderTest, VaryingMissing) {
1314 const VarInfo kFragmentVarying = 1304 const VarInfo kFragmentVarying =
1315 { SH_FLOAT, 3, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }; 1305 { GL_FLOAT, 3, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying };
1316 Program* program = SetupShaderVariableTest( 1306 Program* program = SetupShaderVariableTest(
1317 NULL, 0, &kFragmentVarying, 1); 1307 NULL, 0, &kFragmentVarying, 1);
1318 1308
1319 std::string conflicting_name; 1309 std::string conflicting_name;
1320 1310
1321 EXPECT_TRUE(program->DetectVaryingsMismatch(&conflicting_name)); 1311 EXPECT_TRUE(program->DetectVaryingsMismatch(&conflicting_name));
1322 EXPECT_EQ("a", conflicting_name); 1312 EXPECT_EQ("a", conflicting_name);
1323 EXPECT_TRUE(LinkAsExpected(program, false)); 1313 EXPECT_TRUE(LinkAsExpected(program, false));
1324 } 1314 }
1325 1315
1326 // If a varying is declared but not statically used in fragment 1316 // If a varying is declared but not statically used in fragment
1327 // shader, even if it's not declared in vertex shader, link should 1317 // shader, even if it's not declared in vertex shader, link should
1328 // succeed. 1318 // succeed.
1329 TEST_F(ProgramManagerWithShaderTest, InactiveVarying) { 1319 TEST_F(ProgramManagerWithShaderTest, InactiveVarying) {
1330 const VarInfo kFragmentVarying = 1320 const VarInfo kFragmentVarying =
1331 { SH_FLOAT, 3, SH_PRECISION_MEDIUMP, 0, "a", kVarVarying }; 1321 { GL_FLOAT, 3, SH_PRECISION_MEDIUMP, 0, "a", kVarVarying };
1332 Program* program = SetupShaderVariableTest( 1322 Program* program = SetupShaderVariableTest(
1333 NULL, 0, &kFragmentVarying, 1); 1323 NULL, 0, &kFragmentVarying, 1);
1334 1324
1335 std::string conflicting_name; 1325 std::string conflicting_name;
1336 1326
1337 EXPECT_FALSE(program->DetectVaryingsMismatch(&conflicting_name)); 1327 EXPECT_FALSE(program->DetectVaryingsMismatch(&conflicting_name));
1338 EXPECT_TRUE(conflicting_name.empty()); 1328 EXPECT_TRUE(conflicting_name.empty());
1339 EXPECT_TRUE(LinkAsExpected(program, true)); 1329 EXPECT_TRUE(LinkAsExpected(program, true));
1340 } 1330 }
1341 1331
1342 // Uniforms and attributes are both global variables, thus sharing 1332 // Uniforms and attributes are both global variables, thus sharing
1343 // the same namespace. Any name conflicts should cause link 1333 // the same namespace. Any name conflicts should cause link
1344 // failure. 1334 // failure.
1345 TEST_F(ProgramManagerWithShaderTest, AttribUniformNameConflict) { 1335 TEST_F(ProgramManagerWithShaderTest, AttribUniformNameConflict) {
1346 const VarInfo kVertexAttribute = 1336 const VarInfo kVertexAttribute =
1347 { SH_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarAttribute }; 1337 { GL_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarAttribute };
1348 const VarInfo kFragmentUniform = 1338 const VarInfo kFragmentUniform =
1349 { SH_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarUniform }; 1339 { GL_FLOAT_VEC4, 1, SH_PRECISION_MEDIUMP, 1, "a", kVarUniform };
1350 Program* program = SetupShaderVariableTest( 1340 Program* program = SetupShaderVariableTest(
1351 &kVertexAttribute, 1, &kFragmentUniform, 1); 1341 &kVertexAttribute, 1, &kFragmentUniform, 1);
1352 1342
1353 std::string conflicting_name; 1343 std::string conflicting_name;
1354 1344
1355 EXPECT_TRUE(program->DetectGlobalNameConflicts(&conflicting_name)); 1345 EXPECT_TRUE(program->DetectGlobalNameConflicts(&conflicting_name));
1356 EXPECT_EQ("a", conflicting_name); 1346 EXPECT_EQ("a", conflicting_name);
1357 EXPECT_TRUE(LinkAsExpected(program, false)); 1347 EXPECT_TRUE(LinkAsExpected(program, false));
1358 } 1348 }
1359 1349
1360 // Varyings go over 8 rows. 1350 // Varyings go over 8 rows.
1361 TEST_F(ProgramManagerWithShaderTest, TooManyVaryings) { 1351 TEST_F(ProgramManagerWithShaderTest, TooManyVaryings) {
1362 const VarInfo kVertexVaryings[] = { 1352 const VarInfo kVertexVaryings[] = {
1363 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }, 1353 { GL_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying },
1364 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying } 1354 { GL_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1365 }; 1355 };
1366 const VarInfo kFragmentVaryings[] = { 1356 const VarInfo kFragmentVaryings[] = {
1367 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }, 1357 { GL_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying },
1368 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying } 1358 { GL_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1369 }; 1359 };
1370 Program* program = SetupShaderVariableTest( 1360 Program* program = SetupShaderVariableTest(
1371 kVertexVaryings, 2, kFragmentVaryings, 2); 1361 kVertexVaryings, 2, kFragmentVaryings, 2);
1372 1362
1373 EXPECT_FALSE( 1363 EXPECT_FALSE(
1374 program->CheckVaryingsPacking(Program::kCountOnlyStaticallyUsed)); 1364 program->CheckVaryingsPacking(Program::kCountOnlyStaticallyUsed));
1375 EXPECT_TRUE(LinkAsExpected(program, false)); 1365 EXPECT_TRUE(LinkAsExpected(program, false));
1376 } 1366 }
1377 1367
1378 // Varyings go over 8 rows but some are inactive 1368 // Varyings go over 8 rows but some are inactive
1379 TEST_F(ProgramManagerWithShaderTest, TooManyInactiveVaryings) { 1369 TEST_F(ProgramManagerWithShaderTest, TooManyInactiveVaryings) {
1380 const VarInfo kVertexVaryings[] = { 1370 const VarInfo kVertexVaryings[] = {
1381 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }, 1371 { GL_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying },
1382 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying } 1372 { GL_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1383 }; 1373 };
1384 const VarInfo kFragmentVaryings[] = { 1374 const VarInfo kFragmentVaryings[] = {
1385 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 0, "a", kVarVarying }, 1375 { GL_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 0, "a", kVarVarying },
1386 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying } 1376 { GL_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1387 }; 1377 };
1388 Program* program = SetupShaderVariableTest( 1378 Program* program = SetupShaderVariableTest(
1389 kVertexVaryings, 2, kFragmentVaryings, 2); 1379 kVertexVaryings, 2, kFragmentVaryings, 2);
1390 1380
1391 EXPECT_TRUE( 1381 EXPECT_TRUE(
1392 program->CheckVaryingsPacking(Program::kCountOnlyStaticallyUsed)); 1382 program->CheckVaryingsPacking(Program::kCountOnlyStaticallyUsed));
1393 EXPECT_TRUE(LinkAsExpected(program, true)); 1383 EXPECT_TRUE(LinkAsExpected(program, true));
1394 } 1384 }
1395 1385
1396 // Varyings go over 8 rows but some are inactive. 1386 // Varyings go over 8 rows but some are inactive.
1397 // However, we still fail the check if kCountAll option is used. 1387 // However, we still fail the check if kCountAll option is used.
1398 TEST_F(ProgramManagerWithShaderTest, CountAllVaryingsInPacking) { 1388 TEST_F(ProgramManagerWithShaderTest, CountAllVaryingsInPacking) {
1399 const VarInfo kVertexVaryings[] = { 1389 const VarInfo kVertexVaryings[] = {
1400 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying }, 1390 { GL_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 1, "a", kVarVarying },
1401 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying } 1391 { GL_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1402 }; 1392 };
1403 const VarInfo kFragmentVaryings[] = { 1393 const VarInfo kFragmentVaryings[] = {
1404 { SH_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 0, "a", kVarVarying }, 1394 { GL_FLOAT_VEC4, 4, SH_PRECISION_MEDIUMP, 0, "a", kVarVarying },
1405 { SH_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying } 1395 { GL_FLOAT_VEC4, 5, SH_PRECISION_MEDIUMP, 1, "b", kVarVarying }
1406 }; 1396 };
1407 Program* program = SetupShaderVariableTest( 1397 Program* program = SetupShaderVariableTest(
1408 kVertexVaryings, 2, kFragmentVaryings, 2); 1398 kVertexVaryings, 2, kFragmentVaryings, 2);
1409 1399
1410 EXPECT_FALSE(program->CheckVaryingsPacking(Program::kCountAll)); 1400 EXPECT_FALSE(program->CheckVaryingsPacking(Program::kCountAll));
1411 } 1401 }
1412 1402
1413 TEST_F(ProgramManagerWithShaderTest, ClearWithSamplerTypes) { 1403 TEST_F(ProgramManagerWithShaderTest, ClearWithSamplerTypes) {
1414 const GLuint kVShaderClientId = 2001; 1404 const GLuint kVShaderClientId = 2001;
1415 const GLuint kFShaderClientId = 2002; 1405 const GLuint kFShaderClientId = 2002;
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
1778 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); 1768 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS);
1779 SetExpectationsForNotCachingProgram(); 1769 SetExpectationsForNotCachingProgram();
1780 SetExpectationsForProgramLoadSuccess(); 1770 SetExpectationsForProgramLoadSuccess();
1781 1771
1782 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, 1772 EXPECT_TRUE(program_->Link(NULL, NULL, NULL,
1783 Program::kCountOnlyStaticallyUsed, base::Bind(&ShaderCacheCb))); 1773 Program::kCountOnlyStaticallyUsed, base::Bind(&ShaderCacheCb)));
1784 } 1774 }
1785 1775
1786 } // namespace gles2 1776 } // namespace gles2
1787 } // namespace gpu 1777 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | gpu/command_buffer/service/shader_translator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698