yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
8da64950
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 "glslang/Public/ResourceLimits.h" 36#include "TestFixture.h" 37 38namespace glslangtest { 39namespace { 40 41struct TestCaseSpec { 42 std::string input ; 43 std::string config ; 44 std::string output ; 45EShMessages controls ; 46}; 47 48using ConfigTest = GlslangTest < ::testing::TestWithParam < TestCaseSpec >> ; 49 50TEST_P (ConfigTest ,FromFile ) 51{ 52TestCaseSpec testCase = GetParam (); 53GlslangResult result ; 54result .validationResult = true; 55 56// Get the contents for input shader and limit configurations. 57 std::string shaderContents ,configContents ; 58tryLoadFile (GlobalTestSettings .testRoot + "/" + testCase .input ,"input" ,& shaderContents ); 59tryLoadFile (GlobalTestSettings .testRoot + "/" + testCase .config ,"limits config" ,& configContents ); 60 61// Decode limit configurations. 62TBuiltInResource resources = {}; 63 { 64const size_t len = configContents .size (); 65char * configChars = new char [len + 1 ]; 66memcpy (configChars ,configContents .data (),len ); 67configChars [len ]= 0 ; 68DecodeResourceLimits (& resources ,configChars ); 69delete []configChars ; 70 } 71 72// Compile the shader. 73 glslang::TShader shader (GetShaderStage (GetSuffix (testCase .input ))); 74compile (& shader ,shaderContents ,"" ,testCase .controls ,& resources ); 75result .shaderResults .push_back ( 76 {testCase .input ,shader .getInfoLog (),shader .getInfoDebugLog ()}); 77 78// Link the shader. 79 glslang::TProgram program ; 80program .addShader (& shader ); 81program .link (testCase .controls ); 82result .linkingOutput = program .getInfoLog (); 83result .linkingError = program .getInfoDebugLog (); 84 85 std::ostringstream stream ; 86outputResultToStream (& stream ,result ,testCase .controls ); 87 88// Check with expected results. 89const std::string expectedOutputFname = 90GlobalTestSettings .testRoot + "/baseResults/" + testCase .output ; 91 std::string expectedOutput ; 92tryLoadFile (expectedOutputFname ,"expected output" ,& expectedOutput ); 93 94checkEqAndUpdateIfRequested (expectedOutput ,stream .str (),expectedOutputFname ); 95} 96 97// clang-format off 98INSTANTIATE_TEST_SUITE_P ( 99Glsl ,ConfigTest , 100 ::testing::ValuesIn (std::vector < TestCaseSpec > ({ 101 {"specExamples.vert" ,"baseResults/test.conf" ,"specExamplesConf.vert.out" , (EShMessages )(EShMsgAST |EShMsgCascadingErrors )}, 102 {"100Limits.vert" ,"100.conf" ,"100LimitsConf.vert.out" ,EShMsgCascadingErrors }, 103 })) 104); 105// clang-format on 106 107}// anonymous namespace 108}// namespace glslangtest