yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
54947913
main
1// 2// Copyright (C) 2016 Google, Inc. 3// 4// All rights reserved. 5// 6// Redistribution and use in source and binary forms, with or without 7// modification, are permitted provided that the following conditions 8// are met: 9// 10// Redistributions of source code must retain the above copyright 11// notice, this list of conditions and the following disclaimer. 12// 13// Redistributions in binary form must reproduce the above 14// copyright notice, this list of conditions and the following 15// disclaimer in the documentation and/or other materials provided 16// with the distribution. 17// 18// Neither the name of Google Inc. nor the names of its 19// contributors may be used to endorse or promote products derived 20// from this software without specific prior written permission. 21// 22// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 25// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 27// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 28// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 30// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 32// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33// POSSIBILITY OF SUCH DAMAGE. 34 35#include <memory> 36 37#include <gtest/gtest.h> 38 39#include "TestFixture.h" 40 41namespace glslangtest { 42namespace { 43 44using LinkTest = GlslangTest < 45 ::testing::TestWithParam < std::vector < std::string >>> ; 46 47TEST_P (LinkTest ,FromFile ) 48{ 49const auto & fileNames = GetParam (); 50const size_t fileCount = fileNames .size (); 51const EShMessages controls = DeriveOptions (Source ::GLSL ,Semantics ::OpenGL ,Target ::AST ); 52GlslangResult result ; 53result .validationResult = true; 54 55// Compile each input shader file. 56 std::vector < std::unique_ptr < glslang::TShader >> shaders ; 57for (size_t i = 0 ;i < fileCount ;++ i ) { 58 std::string contents ; 59tryLoadFile (GlobalTestSettings .testRoot + "/" + fileNames [i ], 60"input" ,& contents ); 61shaders .emplace_back ( 62new glslang::TShader (GetShaderStage (GetSuffix (fileNames [i ])))); 63auto * shader = shaders .back ().get (); 64compile (shader ,contents ,"" ,controls ); 65result .shaderResults .push_back ( 66 {fileNames [i ],shader -> getInfoLog (),shader -> getInfoDebugLog ()}); 67 } 68 69// Link all of them. 70 glslang::TProgram program ; 71for (const auto & shader :shaders )program .addShader (shader .get ()); 72program .link (controls ); 73result .linkingOutput = program .getInfoLog (); 74result .linkingError = program .getInfoDebugLog (); 75 76 std::ostringstream stream ; 77outputResultToStream (& stream ,result ,controls ); 78 79// Check with expected results. 80const std::string expectedOutputFname = 81GlobalTestSettings .testRoot + "/baseResults/" + fileNames .front ()+ ".out" ; 82 std::string expectedOutput ; 83tryLoadFile (expectedOutputFname ,"expected output" ,& expectedOutput ); 84 85checkEqAndUpdateIfRequested (expectedOutput ,stream .str (),expectedOutputFname ); 86} 87 88// clang-format off 89INSTANTIATE_TEST_SUITE_P ( 90Glsl ,LinkTest , 91 ::testing::ValuesIn (std::vector < std::vector < std::string >> ({ 92 {"mains1.frag" ,"mains2.frag" ,"noMain1.geom" ,"noMain2.geom" }, 93 {"implicitArraySize.vert" ,"implicitArraySize.frag" }, 94 {"implicitArraySizeBuiltin.vert" ,"implicitArraySizeBuiltin.geom" }, 95 {"link.clipCullDistance.vert" ,"link.clipCullDistance.geom" }, 96 {"link.esClipCullDistance.vert" ,"link.esClipCullDistance.geom" }, 97 {"implicitArraySize1.geom" ,"implicitArraySize2.geom" }, 98 {"implicitArraySizeUniform.vert" ,"implicitArraySizeUniform.frag" }, 99 {"implicitArraySizeUniformContradict.vert" ,"implicitArraySizeUniformContradict.frag" }, 100 {"noMain.vert" ,"mains.frag" }, 101 {"link1.frag" ,"link2.frag" ,"link3.frag" }, 102 {"recurse1.vert" ,"recurse1.frag" ,"recurse2.frag" }, 103 {"300link.frag" }, 104 {"300link2.frag" }, 105 {"300link3.frag" }, 106 {"empty.frag" ,"empty2.frag" ,"empty3.frag" }, 107 {"150.tesc" ,"150.tese" ,"400.tesc" ,"400.tese" ,"410.tesc" ,"420.tesc" ,"420.tese" }, 108 {"max_vertices_0.geom" }, 109 {"contradict_0.geom" ,"contradict_1.geom" }, 110 {"es-link1.frag" ,"es-link2.frag" }, 111 {"missingBodies.vert" }, 112 {"link.multiAnonBlocksInvalid.0.0.vert" ,"link.multiAnonBlocksInvalid.0.1.vert" }, 113 {"link.multiAnonBlocksValid.0.0.vert" ,"link.multiAnonBlocksValid.0.1.vert" }, 114 {"link.multiBlocksInvalid.0.0.vert" ,"link.multiBlocksInvalid.0.1.vert" }, 115 {"link.multiBlocksValid.1.0.vert" ,"link.multiBlocksValid.1.1.vert" }, 116 {"link.multiUnitLayout.0.vert" ,"link.multiUnitLayout.1.vert" }, 117 {"link.multiUnitLayout.0.frag" ,"link.multiUnitLayout.1.frag" }, 118 {"link.multiUnitLayout.0.tese" ,"link.multiUnitLayout.1.tese" }, 119 {"link.multiUnitLayout.0.mesh" ,"link.multiUnitLayout.1.mesh" }, 120 {"link.multiUnitLayout.2.vert" ,"link.multiUnitLayout.0.vert" }, 121 {"link.multiUnitLayout.2.frag" ,"link.multiUnitLayout.0.frag" }, 122 {"link.multiUnitLayout.2.tese" ,"link.multiUnitLayout.0.tese" }, 123 {"link.multiUnitLayout.2.mesh" ,"link.multiUnitLayout.0.mesh" }, 124 {"link.tesselation.vert" ,"link.tesselation.frag" }, 125 {"link.tesselation.tese" ,"link.tesselation.tesc" }, 126 {"link.redeclareBuiltin.vert" ,"link.redeclareBuiltin.geom" }, 127 {"link.crossStageIO.0.vert" ,"link.crossStageIO.0.frag" }, 128 {"link.crossStageIO.1.vert" ,"link.crossStageIO.1.geom" ,"link.crossStageIO.1.frag" }, 129 {"link.missingCrossStageIO.0.vert" ,"link.missingCrossStageIO.0.frag" }, 130 })) 131); 132// clang-format on 133 134}// anonymous namespace 135}// namespace glslangtest