MCPcopy Create free account
hub / github.com/KhronosGroup/glslang / TEST_P

Function TEST_P

gtests/LiveTraverser.FromFile.cpp:31–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29using LiveTraverserTest = GlslangTest<::testing::TestWithParam<LiveTraverserTestParams>>;
30
31TEST_P(LiveTraverserTest, FromFile)
32{
33 const auto& fileName = GetParam().fileName;
34 const auto& expectedLiveVars = GetParam().liveVars;
35 const EShMessages controls = DeriveOptions(Source::GLSL, Semantics::Vulkan, Target::AST);
36 GlslangResult result;
37 result.validationResult = true;
38
39 std::string contents;
40 tryLoadFile(GlobalTestSettings.testRoot + "/" + fileName, "input", &contents);
41 std::unique_ptr<glslang::TShader> shader = std::make_unique<glslang::TShader>(GetShaderStage(GetSuffix(fileName)));
42
43 bool success = compile(shader.get(), contents, "", controls);
44 result.shaderResults.push_back({fileName, shader->getInfoLog(), shader->getInfoDebugLog()});
45
46 std::ostringstream stream;
47 outputResultToStream(&stream, result, controls);
48
49 class TLiveSymbolTraverser : public glslang::TLiveTraverser {
50 public:
51 TLiveSymbolTraverser(const glslang::TIntermediate& i, std::vector<std::string>& liveVars)
52 : glslang::TLiveTraverser(i), liveVars(liveVars)
53 {
54 }
55
56 virtual void visitSymbol(glslang::TIntermSymbol* symbol)
57 {
58 if (symbol->getAsSymbolNode()->getAccessName().compare(0, 3, "gl_") == 0)
59 return;
60
61 if (symbol->getQualifier().storage == glslang::TStorageQualifier::EvqVaryingIn ||
62 symbol->getQualifier().storage == glslang::TStorageQualifier::EvqVaryingOut ||
63 symbol->getQualifier().storage == glslang::TStorageQualifier::EvqUniform ||
64 symbol->getQualifier().storage == glslang::TStorageQualifier::EvqBuffer) {
65 liveVars.push_back(symbol->getAccessName().c_str());
66 }
67 }
68
69 private:
70 std::vector<std::string>& liveVars;
71 };
72
73 if (success) {
74 std::vector<std::string> actualLiveVars;
75 TLiveSymbolTraverser liveTraverser(*shader->getIntermediate(), actualLiveVars);
76 liveTraverser.pushFunction(shader->getIntermediate()->getEntryPointMangledName().c_str());
77 while (!liveTraverser.destinations.empty()) {
78 TIntermNode* destination = liveTraverser.destinations.back();
79 liveTraverser.destinations.pop_back();
80 destination->traverse(&liveTraverser);
81 }
82
83 for (const auto& expectedVar : expectedLiveVars) {
84 auto it = std::find(actualLiveVars.begin(), actualLiveVars.end(), expectedVar);
85 EXPECT_NE(it, actualLiveVars.end());
86 if (it != actualLiveVars.end())
87 actualLiveVars.erase(it);
88 }

Callers

nothing calls this directly

Calls 15

DeriveOptionsFunction · 0.85
GetShaderStageFunction · 0.85
GetSuffixFunction · 0.85
getInfoLogMethod · 0.80
getInfoDebugLogMethod · 0.80
pushFunctionMethod · 0.80
c_strMethod · 0.80
pop_backMethod · 0.80
traverseMethod · 0.80
beginMethod · 0.80
endMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected