13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Internal Test Module 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * --------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Miscellaneous framework tests. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "ditFrameworkTests.hpp" 25e2145884f87cdca749a754abfd246cdfe01ea2c1Pyry Haulos#include "ditTextureFormatTests.hpp" 26efb83e1354edd463650ad0404b18e9a7efc307e4Pyry Haulos#include "ditAstcTests.hpp" 270820e8d122596ff51f723f8a4f32fa755fbbda23Pyry Haulos#include "ditVulkanTests.hpp" 280820e8d122596ff51f723f8a4f32fa755fbbda23Pyry Haulos 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuFloatFormat.hpp" 30f824ffe1538233bb05416cb5c7bd7167756c7314Mika Isojärvi#include "tcuEither.hpp" 31ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos#include "tcuTestLog.hpp" 32ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos#include "tcuCommandLine.hpp" 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos#include "rrRenderer.hpp" 35f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos#include "tcuTextureUtil.hpp" 36f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos#include "tcuVectorUtil.hpp" 37f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos#include "tcuFloat.hpp" 38f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 39d6148171f88da1301f053e2e0236afc69416137cJarkko Pöyry#include "deRandom.hpp" 40d6148171f88da1301f053e2e0236afc69416137cJarkko Pöyry#include "deArrayUtil.hpp" 41d6148171f88da1301f053e2e0236afc69416137cJarkko Pöyry 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace dit 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosnamespace 46ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos{ 47ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 48ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosusing std::string; 49ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosusing std::vector; 50ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosusing tcu::TestLog; 51ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 52ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosstruct MatchCase 53ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos{ 54ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos enum Expected { NO_MATCH, MATCH_GROUP, MATCH_CASE, EXPECTED_LAST }; 55ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 56ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos const char* path; 57ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos Expected expected; 58ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos}; 59ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 60ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosconst char* getMatchCaseExpectedDesc (MatchCase::Expected expected) 61ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos{ 62ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* descs[] = 63ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 64ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "no match", 65ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "group to match", 66ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "case to match" 67ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 68ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos return de::getSizedArrayElement<MatchCase::EXPECTED_LAST>(descs, expected); 69ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos} 70ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 71ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosclass CaseListParserCase : public tcu::TestCase 72ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos{ 73ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulospublic: 74ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos CaseListParserCase (tcu::TestContext& testCtx, const char* name, const char* caseList, const MatchCase* subCases, int numSubCases) 75ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos : tcu::TestCase (testCtx, name, "") 76ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos , m_caseList (caseList) 77ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos , m_subCases (subCases) 78ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos , m_numSubCases (numSubCases) 79ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 80ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 81ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 82ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos IterateResult iterate (void) 83ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 84ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos TestLog& log = m_testCtx.getLog(); 85ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos tcu::CommandLine cmdLine; 86ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos int numPass = 0; 87ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 88ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos log << TestLog::Message << "Input:\n\"" << m_caseList << "\"" << TestLog::EndMessage; 89ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 90ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 91ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos const char* argv[] = 92ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 93ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "deqp", 94ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "--deqp-caselist", 95ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos m_caseList 96ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 97ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 98ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos if (!cmdLine.parse(DE_LENGTH_OF_ARRAY(argv), argv)) 99ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos TCU_FAIL("Failed to parse case list"); 100ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 101ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 102ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos for (int subCaseNdx = 0; subCaseNdx < m_numSubCases; subCaseNdx++) 103ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 104ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos const MatchCase& curCase = m_subCases[subCaseNdx]; 105ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos bool matchGroup; 106ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos bool matchCase; 107ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 108ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos log << TestLog::Message << "Checking \"" << curCase.path << "\"" 109ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos << ", expecting " << getMatchCaseExpectedDesc(curCase.expected) 110ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos << TestLog::EndMessage; 111ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 112ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos matchGroup = cmdLine.checkTestGroupName(curCase.path); 113ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos matchCase = cmdLine.checkTestCaseName(curCase.path); 114ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 115ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos if ((matchGroup == (curCase.expected == MatchCase::MATCH_GROUP)) && 116ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos (matchCase == (curCase.expected == MatchCase::MATCH_CASE))) 117ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 118ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos log << TestLog::Message << " pass" << TestLog::EndMessage; 119ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos numPass += 1; 120ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 121ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos else 122ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos log << TestLog::Message << " FAIL!" << TestLog::EndMessage; 123ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 124ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 125ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos m_testCtx.setTestResult((numPass == m_numSubCases) ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL, 126ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos (numPass == m_numSubCases) ? "All passed" : "Unexpected match result"); 127ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 128ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos return STOP; 129ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 130ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 131ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosprivate: 132ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos const char* const m_caseList; 133ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos const MatchCase* const m_subCases; 134ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos const int m_numSubCases; 135ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos}; 136ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 137ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosclass NegativeCaseListCase : public tcu::TestCase 138ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos{ 139ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulospublic: 140ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos NegativeCaseListCase (tcu::TestContext& testCtx, const char* name, const char* caseList) 141ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos : tcu::TestCase (testCtx, name, "") 142ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos , m_caseList (caseList) 143ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 144ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 145ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 146ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos IterateResult iterate (void) 147ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 148ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos TestLog& log = m_testCtx.getLog(); 149ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos tcu::CommandLine cmdLine; 150ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 151ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos log << TestLog::Message << "Input:\n\"" << m_caseList << "\"" << TestLog::EndMessage; 152ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 153ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 154ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos const char* argv[] = 155ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 156ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "deqp", 157ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "--deqp-caselist", 158ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos m_caseList 159ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 160ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 161ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos if (cmdLine.parse(DE_LENGTH_OF_ARRAY(argv), argv)) 162ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Parsing passed, should have failed"); 163ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos else 164ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Parsing failed as expected"); 165ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 166ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 167ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos return STOP; 168ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 169ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 170ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosprivate: 171ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos const char* const m_caseList; 172ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos}; 173ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 174ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosclass TrieParserTests : public tcu::TestCaseGroup 175ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos{ 176ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulospublic: 177ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos TrieParserTests (tcu::TestContext& testCtx) 178ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos : tcu::TestCaseGroup(testCtx, "trie", "Test case trie parser tests") 179ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 180ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 181ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 182ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos void init (void) 183ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 184ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 185ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "{test}"; 186ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 187ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 188ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "test", MatchCase::MATCH_CASE }, 189ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "test.cd", MatchCase::NO_MATCH }, 190ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 191ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "single_case", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 192ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 193ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 194ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "{a{b}}"; 195ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 196ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 197ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 198ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 199ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 200ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 201ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 202ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "simple_group_1", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 203ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 204ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 205ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "{a{b,c}}"; 206ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 207ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 208ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 209ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 210ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 211ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 212ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::MATCH_CASE }, 213ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 214ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "simple_group_2", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 215ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 216ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 217ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "{a{b},c{d,e}}"; 218ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 219ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 220ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 221ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 222ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 223ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::NO_MATCH }, 224ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.d", MatchCase::NO_MATCH }, 225ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.e", MatchCase::NO_MATCH }, 226ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c", MatchCase::MATCH_GROUP }, 227ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.b", MatchCase::NO_MATCH }, 228ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.d", MatchCase::MATCH_CASE }, 229ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.e", MatchCase::MATCH_CASE }, 230ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 231ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "two_groups", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 232ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 233ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 234ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "{a,c{d,e}}"; 235ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 236ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 237ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_CASE }, 238ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 239ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::NO_MATCH }, 240ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::NO_MATCH }, 241ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.d", MatchCase::NO_MATCH }, 242ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.e", MatchCase::NO_MATCH }, 243ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c", MatchCase::MATCH_GROUP }, 244ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.b", MatchCase::NO_MATCH }, 245ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.d", MatchCase::MATCH_CASE }, 246ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.e", MatchCase::MATCH_CASE }, 247ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 248ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "case_group", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 249ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 250ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 251ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "{c{d,e},a}"; 252ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 253ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 254ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_CASE }, 255ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 256ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::NO_MATCH }, 257ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::NO_MATCH }, 258ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.d", MatchCase::NO_MATCH }, 259ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.e", MatchCase::NO_MATCH }, 260ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c", MatchCase::MATCH_GROUP }, 261ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.b", MatchCase::NO_MATCH }, 262ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.d", MatchCase::MATCH_CASE }, 263ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.e", MatchCase::MATCH_CASE }, 264ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 265ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "group_case", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 266ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 267831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { 268831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry static const char* const caseList = "{test}\r"; 269831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry static const MatchCase subCases[] = 270831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { 271831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { "test", MatchCase::MATCH_CASE }, 272831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { "test.cd", MatchCase::NO_MATCH }, 273831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry }; 274831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry addChild(new CaseListParserCase(m_testCtx, "trailing_cr", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 275831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry } 276831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { 277831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry static const char* const caseList = "{test}\n"; 278831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry static const MatchCase subCases[] = 279831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { 280831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { "test", MatchCase::MATCH_CASE }, 281831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { "test.cd", MatchCase::NO_MATCH }, 282831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry }; 283831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry addChild(new CaseListParserCase(m_testCtx, "trailing_lf", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 284831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry } 285831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { 286831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry static const char* const caseList = "{test}\r\n"; 287831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry static const MatchCase subCases[] = 288831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { 289831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { "test", MatchCase::MATCH_CASE }, 290831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry { "test.cd", MatchCase::NO_MATCH }, 291831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry }; 292831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry addChild(new CaseListParserCase(m_testCtx, "trailing_crlf", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 293831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry } 294ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 295ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos // Negative tests 296ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_string", "")); 297831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry addChild(new NegativeCaseListCase(m_testCtx, "empty_line", "\n")); 298ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_root", "{}")); 299ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_group", "{test{}}")); 300ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_group_name_1", "{{}}")); 301ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_group_name_2", "{{test}}")); 302ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_1", "{")); 303ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_2", "{test")); 304ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_3", "{test,")); 305ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_4", "{test{a}")); 306ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_5", "{a,b")); 307ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "unterminated_group_1", "{test{")); 308ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "unterminated_group_2", "{test{a")); 309ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "unterminated_group_3", "{test{a,")); 310ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "unterminated_group_4", "{test{a,b")); 311ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_case_name_1", "{a,,b}")); 312ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_case_name_2", "{,b}")); 313ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_case_name_3", "{a,}")); 314ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "no_separator", "{a{b}c}")); 315ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "invalid_char_1", "{a.b}")); 316ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "invalid_char_2", "{a[]}")); 317ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "trailing_char_1", "{a}}")); 318ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "trailing_char_2", "{a}x")); 319831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_1", "{\na}")); 320831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_2", "{a\n,b}")); 321831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_3", "{a,\nb}")); 322831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_4", "{a{b\n}}")); 323831962c779a19a1822b0074012763b604ac42d24Jarkko Pöyry addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_5", "{a{b}\n}")); 324ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 325ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos}; 326ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 327ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosclass ListParserTests : public tcu::TestCaseGroup 328ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos{ 329ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulospublic: 330ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos ListParserTests (tcu::TestContext& testCtx) 331ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos : tcu::TestCaseGroup(testCtx, "list", "Test case list parser tests") 332ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 333ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 334ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 335ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos void init (void) 336ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 337ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 338ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "test"; 339ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 340ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 341ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "test", MatchCase::MATCH_CASE }, 342ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "test.cd", MatchCase::NO_MATCH }, 343ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 344ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "single_case", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 345ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 346ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 347ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b"; 348ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 349ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 350ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 351ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 352ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 353ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 354ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 355ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "simple_group_1", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 356ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 357ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 358ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b\na.c"; 359ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 360ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 361ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 362ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 363ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 364ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 365ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::MATCH_CASE }, 366ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 367ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "simple_group_2", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 368ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 369ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 370ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b\na.c"; 371ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 372ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 373ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 374ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 375ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 376ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 377ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::MATCH_CASE }, 378ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 379ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "separator_ln", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 380ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 381ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 382ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b\ra.c"; 383ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 384ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 385ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 386ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 387ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 388ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 389ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::MATCH_CASE }, 390ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 391ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "separator_cr", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 392ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 393ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 394ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b\r\na.c"; 395ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 396ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 397ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 398ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 399ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 400ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 401ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::MATCH_CASE }, 402ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 403ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "separator_crlf", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 404ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 405ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 406ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b\na.c\n"; 407ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 408ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 409ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 410ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 411ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 412ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 413ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::MATCH_CASE }, 414ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 415ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "end_ln", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 416ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 417ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 418ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b\na.c\r"; 419ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 420ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 421ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 422ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 423ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 424ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 425ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::MATCH_CASE }, 426ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 427ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "end_cr", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 428ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 429ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 430ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b\na.c\r\n"; 431ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 432ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 433ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 434ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 435ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 436ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::NO_MATCH }, 437ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::MATCH_CASE }, 438ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 439ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "end_crlf", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 440ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 441ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 442ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b\nc.d\nc.e"; 443ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 444ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 445ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 446ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 447ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_CASE }, 448ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::NO_MATCH }, 449ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.d", MatchCase::NO_MATCH }, 450ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.e", MatchCase::NO_MATCH }, 451ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c", MatchCase::MATCH_GROUP }, 452ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.b", MatchCase::NO_MATCH }, 453ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.d", MatchCase::MATCH_CASE }, 454ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.e", MatchCase::MATCH_CASE }, 455ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 456ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "two_groups", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 457ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 458ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 459ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a\nc.d\nc.e"; 460ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 461ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 462ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_CASE }, 463ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 464ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::NO_MATCH }, 465ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::NO_MATCH }, 466ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.d", MatchCase::NO_MATCH }, 467ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.e", MatchCase::NO_MATCH }, 468ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c", MatchCase::MATCH_GROUP }, 469ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.b", MatchCase::NO_MATCH }, 470ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.d", MatchCase::MATCH_CASE }, 471ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.e", MatchCase::MATCH_CASE }, 472ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 473ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "case_group", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 474ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 475ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 476ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "c.d\nc.e\na"; 477ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 478ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 479ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_CASE }, 480ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 481ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::NO_MATCH }, 482ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.c", MatchCase::NO_MATCH }, 483ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.d", MatchCase::NO_MATCH }, 484ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.e", MatchCase::NO_MATCH }, 485ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c", MatchCase::MATCH_GROUP }, 486ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.b", MatchCase::NO_MATCH }, 487ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.d", MatchCase::MATCH_CASE }, 488ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "c.e", MatchCase::MATCH_CASE }, 489ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 490ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "group_case", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 491ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 492ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 493ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.x"; 494ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 495ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 496ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 497ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "b", MatchCase::NO_MATCH }, 498ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_GROUP }, 499ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.x", MatchCase::MATCH_CASE }, 500ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 501ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "long_name", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 502ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 503ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 504ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = 505ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "a.b.c.d.e\n" 506ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "a.b.c.f\n" 507ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "x.y.z\n" 508ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "a.b.c.d.g\n" 509ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "a.b.c.x\n"; 510ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 511ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 512ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 513ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b", MatchCase::MATCH_GROUP }, 514ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b.c.d.e", MatchCase::MATCH_CASE }, 515ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b.c.d.g", MatchCase::MATCH_CASE }, 516ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "x.y", MatchCase::MATCH_GROUP }, 517ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "x.y.z", MatchCase::MATCH_CASE }, 518ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b.c.f", MatchCase::MATCH_CASE }, 519ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b.c.x", MatchCase::MATCH_CASE }, 520ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 521ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "partial_prefix", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 522ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 523ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 524ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const char* const caseList = 525ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "a.a.c.d\n" 526ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos "a.b.c.d\n"; 527ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos static const MatchCase subCases[] = 528ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 529ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a", MatchCase::MATCH_GROUP }, 530ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.a", MatchCase::MATCH_GROUP }, 531ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b.c.d", MatchCase::MATCH_CASE }, 532ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { "a.b.c.d", MatchCase::MATCH_CASE }, 533ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos }; 534ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new CaseListParserCase(m_testCtx, "reparenting", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 535ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 536ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 537ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos // Negative tests 538ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_string", "")); 539ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_line", "\n")); 540ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_group_name", ".test")); 541ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new NegativeCaseListCase(m_testCtx, "empty_case_name", "test.")); 542ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 543ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos}; 544ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 545ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulosclass CaseListParserTests : public tcu::TestCaseGroup 546ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos{ 547ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulospublic: 548ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos CaseListParserTests (tcu::TestContext& testCtx) 549ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos : tcu::TestCaseGroup(testCtx, "case_list_parser", "Test case list parser tests") 550ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 551ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 552ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 553ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos void init (void) 554ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos { 555ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new TrieParserTests(m_testCtx)); 556ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos addChild(new ListParserTests(m_testCtx)); 557ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos } 558ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos}; 559ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 560f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulosinline deUint32 ulpDiff (float a, float b) 561f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos{ 562f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const deUint32 ab = tcu::Float32(a).bits(); 563f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const deUint32 bb = tcu::Float32(b).bits(); 564f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos return de::max(ab, bb) - de::min(ab, bb); 565f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos} 566f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 567f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulostemplate<int Size> 568f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulosinline tcu::Vector<deUint32, Size> ulpDiff (const tcu::Vector<float, Size>& a, const tcu::Vector<float, Size>& b) 569f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos{ 570f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos tcu::Vector<deUint32, Size> res; 571f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int ndx = 0; ndx < Size; ndx++) 572f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos res[ndx] = ulpDiff(a[ndx], b[ndx]); 573f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos return res; 574f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos} 575f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 576f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulosclass ConstantInterpolationTest : public tcu::TestCase 577f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos{ 578f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulospublic: 579f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos ConstantInterpolationTest (tcu::TestContext& testCtx) 580f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos : tcu::TestCase(testCtx, "const_interpolation", "Constant value interpolation") 581f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 582f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const int supportedMsaaLevels[] = {1, 2, 4, 8, 16}; 583f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 584f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int msaaNdx = 0; msaaNdx < DE_LENGTH_OF_ARRAY(supportedMsaaLevels); msaaNdx++) 585f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 586f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const int numSamples = supportedMsaaLevels[msaaNdx]; 587f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 588f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos SubCase c; 589f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.rtSize = tcu::IVec3(128, 128, numSamples); 590f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[0] = tcu::Vec4(-1.0f, -1.0f, 0.5f, 1.0f); 591f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[1] = tcu::Vec4(-1.0f, +1.0f, 0.5f, 1.0f); 592f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[2] = tcu::Vec4(+1.0f, -1.0f, 0.5f, 1.0f); 593f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.varying = tcu::Vec4(0.0f, 1.0f, 8.0f, -8.0f); 594f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_cases.push_back(c); 595f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 596f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 597f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 598f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos SubCase c; 599f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.rtSize = tcu::IVec3(128, 128, numSamples); 600f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[0] = tcu::Vec4(-1.0f, +1.0f, 0.5f, 1.0f); 601f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[1] = tcu::Vec4(+1.0f, -1.0f, 0.5f, 1.0f); 602f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[2] = tcu::Vec4(+1.0f, +1.0f, 0.5f, 1.0f); 603f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.varying = tcu::Vec4(0.0f, 1.0f, 8.0f, -8.0f); 604f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_cases.push_back(c); 605f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 606f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 607f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos SubCase c; 608f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.rtSize = tcu::IVec3(129, 113, numSamples); 609f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[0] = tcu::Vec4(-1.0f, -1.0f, 0.5f, 1.0f); 610f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[1] = tcu::Vec4(-1.0f, +1.0f, 0.5f, 1.0f); 611f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[2] = tcu::Vec4(+1.0f, -1.0f, 0.5f, 1.0f); 612f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.varying = tcu::Vec4(0.0f, 1.0f, 8.0f, -8.0f); 613f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_cases.push_back(c); 614f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 615f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 616f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos SubCase c; 617f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.rtSize = tcu::IVec3(107, 131, numSamples); 618f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[0] = tcu::Vec4(-1.0f, +1.0f, 0.5f, 1.0f); 619f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[1] = tcu::Vec4(+1.0f, -1.0f, 0.5f, 1.0f); 620f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[2] = tcu::Vec4(+1.0f, +1.0f, 0.5f, 1.0f); 621f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.varying = tcu::Vec4(0.0f, 1.0f, 8.0f, -8.0f); 622f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_cases.push_back(c); 623f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 624f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 625f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 626f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 627f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos de::Random rnd(0x89423f); 628f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int ndx = 0; ndx < 25; ndx++) 629f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 630f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const float depth = rnd.getFloat()*2.0f - 1.0f; 631f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos SubCase c; 632f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 633f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.rtSize.x() = rnd.getInt(16, 256); 634f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.rtSize.y() = rnd.getInt(16, 256); 635f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.rtSize.z() = rnd.choose<int>(DE_ARRAY_BEGIN(supportedMsaaLevels), DE_ARRAY_END(supportedMsaaLevels)); 636f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 637f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int vtxNdx = 0; vtxNdx < DE_LENGTH_OF_ARRAY(c.vtx); vtxNdx++) 638f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 639f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[vtxNdx].x() = rnd.getFloat()*2.0f - 1.0f; 640f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[vtxNdx].y() = rnd.getFloat()*2.0f - 1.0f; 641f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[vtxNdx].z() = depth; 642f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.vtx[vtxNdx].w() = 1.0f; 643f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 644f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 645f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int compNdx = 0; compNdx < 4; compNdx++) 646f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 647f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos float v; 648f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos do 649f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 650f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos v = tcu::Float32(rnd.getUint32()).asFloat(); 651f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } while (deFloatIsInf(v) || deFloatIsNaN(v)); 652f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos c.varying[compNdx] = v; 653f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 654f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_cases.push_back(c); 655f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 656f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 657f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 658f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 659f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos void init (void) 660f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 661f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_caseIter = m_cases.begin(); 662f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "All iterations passed"); 663f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 664f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 665f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos IterateResult iterate (void) 666f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 667f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 668f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos tcu::ScopedLogSection section(m_testCtx.getLog(), "SubCase", ""); 669f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos runCase(*m_caseIter); 670f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 671f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos return (++m_caseIter != m_cases.end()) ? CONTINUE : STOP; 672f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 673f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 674f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulosprotected: 675f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos struct SubCase 676f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 677f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos tcu::IVec3 rtSize; // (width, height, samples) 678f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos tcu::Vec4 vtx[3]; 679f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos tcu::Vec4 varying; 680f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos }; 681f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 682f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos void runCase (const SubCase& subCase) 683f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 684f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos using namespace tcu; 685f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 686f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const deUint32 maxColorUlpDiff = 2; 687f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const deUint32 maxDepthUlpDiff = 0; 688f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 689f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const int width = subCase.rtSize.x(); 690f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const int height = subCase.rtSize.y(); 691f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const int numSamples = subCase.rtSize.z(); 692f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const float zn = 0.0f; 693f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const float zf = 1.0f; 694f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 695f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos TextureLevel interpolated (TextureFormat(TextureFormat::RGBA, TextureFormat::FLOAT), numSamples, width, height); 696f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos TextureLevel depthStencil (TextureFormat(TextureFormat::DS, TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV), numSamples, width, height); 697f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 698f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.getLog() << TestLog::Message 699f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << "RT size (w, h, #samples) = " << subCase.rtSize << "\n" 700f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << "vtx[0] = " << subCase.vtx[0] << "\n" 701f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << "vtx[1] = " << subCase.vtx[1] << "\n" 702f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << "vtx[2] = " << subCase.vtx[2] << "\n" 703f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << "color = " << subCase.varying 704f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << TestLog::EndMessage; 705f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 706f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos clear (interpolated.getAccess(), subCase.varying - Vec4(0.0f, 0.0f, 0.0f, 1.0f)); 707f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos clearDepth (depthStencil.getAccess(), 0.0f); 708f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos clearStencil (depthStencil.getAccess(), 0); 709f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 710f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 711f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos class VtxShader : public rr::VertexShader 712f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 713f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos public: 714f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos VtxShader (void) 715f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos : rr::VertexShader(2, 1) 716f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 717f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_inputs[0].type = rr::GENERICVECTYPE_FLOAT; 718f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_inputs[1].type = rr::GENERICVECTYPE_FLOAT; 719f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_outputs[0].type = rr::GENERICVECTYPE_FLOAT; 720f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 721f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 722f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos void shadeVertices (const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const 723f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 724f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int packetNdx = 0; packetNdx < numPackets; packetNdx++) 725f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 726f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos rr::readVertexAttrib(packets[packetNdx]->position, inputs[0], packets[packetNdx]->instanceNdx, packets[packetNdx]->vertexNdx); 727f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos packets[packetNdx]->outputs[0] = rr::readVertexAttribFloat(inputs[1], packets[packetNdx]->instanceNdx, packets[packetNdx]->vertexNdx); 728f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 729f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 730f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } vtxShader; 731f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 732f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos class FragShader : public rr::FragmentShader 733f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 734f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos public: 735f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos FragShader (void) 736f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos : rr::FragmentShader(1, 1) 737f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 738f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_inputs[0].type = rr::GENERICVECTYPE_FLOAT; 739f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_outputs[0].type = rr::GENERICVECTYPE_FLOAT; 740f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 741f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 742f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos void shadeFragments (rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const 743f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 744f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int packetNdx = 0; packetNdx < numPackets; packetNdx++) 745f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 746f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int fragNdx = 0; fragNdx < rr::NUM_FRAGMENTS_PER_PACKET; fragNdx++) 747f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 748f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const tcu::Vec4 interp = rr::readTriangleVarying<float>(packets[packetNdx], context, 0, fragNdx); 749f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos rr::writeFragmentOutput(context, packetNdx, fragNdx, 0, interp); 750f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 751f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 752f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 753f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } fragShader; 754f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 755f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const rr::Program program (&vtxShader, &fragShader); 756f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 757f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const rr::MultisamplePixelBufferAccess colorAccess = rr::MultisamplePixelBufferAccess::fromMultisampleAccess(interpolated.getAccess()); 758f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const rr::MultisamplePixelBufferAccess dsAccess = rr::MultisamplePixelBufferAccess::fromMultisampleAccess(depthStencil.getAccess()); 759f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const rr::RenderTarget renderTarget (colorAccess, dsAccess, dsAccess); 760f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const rr::VertexAttrib vertexAttribs[] = 761f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 762f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos rr::VertexAttrib(rr::VERTEXATTRIBTYPE_FLOAT, 4, 0, 0, subCase.vtx), 763f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos rr::VertexAttrib(subCase.varying) 764f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos }; 765f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos rr::ViewportState viewport (colorAccess); 766f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos rr::RenderState state (viewport); 767f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const rr::DrawCommand drawCmd (state, renderTarget, program, DE_LENGTH_OF_ARRAY(vertexAttribs), vertexAttribs, rr::PrimitiveList(rr::PRIMITIVETYPE_TRIANGLES, 3, 0)); 768f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const rr::Renderer renderer; 769f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 770f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos viewport.zn = zn; 771f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos viewport.zf = zf; 772f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 773f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos state.fragOps.depthTestEnabled = true; 774f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos state.fragOps.depthFunc = rr::TESTFUNC_ALWAYS; 775f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos state.fragOps.stencilTestEnabled = true; 776f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos state.fragOps.stencilStates[rr::FACETYPE_BACK].func = rr::TESTFUNC_ALWAYS; 777f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos state.fragOps.stencilStates[rr::FACETYPE_BACK].dpPass = rr::STENCILOP_INCR; 778f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos state.fragOps.stencilStates[rr::FACETYPE_FRONT] = state.fragOps.stencilStates[rr::FACETYPE_BACK]; 779f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 780f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos renderer.draw(drawCmd); 781f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 782f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 783f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos // Verify interpolated values 784f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 785f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos TextureLevel resolvedColor (interpolated.getFormat(), width, height); // For debugging 786f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos TextureLevel resolvedDepthStencil (depthStencil.getFormat(), width, height); // For debugging 787f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos TextureLevel errorMask (TextureFormat(TextureFormat::RGB, TextureFormat::UNORM_INT8), width, height); 788f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const ConstPixelBufferAccess interpAccess = interpolated.getAccess(); 789f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const ConstPixelBufferAccess dsAccess = depthStencil.getAccess(); 790f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const PixelBufferAccess errorAccess = errorMask.getAccess(); 791f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos int numCoveredSamples = 0; 792f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos int numFailedColorSamples = 0; 793f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos int numFailedDepthSamples = 0; 794f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const bool verifyDepth = (subCase.vtx[0].z() == subCase.vtx[1].z()) && 795f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos (subCase.vtx[1].z() == subCase.vtx[2].z()); 796f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const float refDepth = subCase.vtx[0].z()*(zf - zn)/2.0f + (zn + zf)/2.0f; 797f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 798fcbb91dc538f174f8798417e5a44f74ec2b092c0Jarkko Pöyry rr::resolveMultisampleBuffer(resolvedColor.getAccess(), rr::MultisampleConstPixelBufferAccess::fromMultisampleAccess(interpolated.getAccess())); 799fcbb91dc538f174f8798417e5a44f74ec2b092c0Jarkko Pöyry rr::resolveMultisampleBuffer(resolvedDepthStencil.getAccess(), rr::MultisampleConstPixelBufferAccess::fromMultisampleAccess(depthStencil.getAccess())); 800f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos clear(errorAccess, Vec4(0.0f, 1.0f, 0.0f, 1.0f)); 801f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 802f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int y = 0; y < height; y++) 803f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 804f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int x = 0; x < width; x++) 805f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 806f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos for (int sampleNdx = 0; sampleNdx < numSamples; sampleNdx++) 807f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 808f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos if (dsAccess.getPixStencil(sampleNdx, x, y) != 0) 809f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 810f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const Vec4 color = interpAccess.getPixel(sampleNdx, x, y); 811f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const UVec4 colorDiff = ulpDiff(color, subCase.varying); 812f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const bool colorOk = boolAll(lessThanEqual(colorDiff, tcu::UVec4(maxColorUlpDiff))); 813f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 814f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const float depth = dsAccess.getPixDepth(sampleNdx, x, y); 815f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const deUint32 depthDiff = ulpDiff(depth, refDepth); 816f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const bool depthOk = verifyDepth && (depthDiff <= maxDepthUlpDiff); 817f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 818f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos const int maxMsgs = 10; 819f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 820f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos numCoveredSamples += 1; 821f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 822f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos if (!colorOk) 823f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 824f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos numFailedColorSamples += 1; 825f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 826f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos if (numFailedColorSamples <= maxMsgs) 827f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.getLog() << TestLog::Message 828f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << "FAIL: " << tcu::IVec3(x, y, sampleNdx) 829f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << " color ulp diff = " << colorDiff 830f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << TestLog::EndMessage; 831f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 832f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 833f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos if (!depthOk) 834f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos numFailedDepthSamples += 1; 835f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 836f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos if (!colorOk || !depthOk) 837f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos errorAccess.setPixel(errorAccess.getPixel(x, y) + Vec4(1.0f, -1.0f, 0.0f, 0.0f) / float(numSamples-1), x, y); 838f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 839f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 840f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 841f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 842f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 843f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.getLog() << TestLog::Image("ResolvedColor", "Resolved colorbuffer", resolvedColor) 844f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos << TestLog::Image("ResolvedDepthStencil", "Resolved depth- & stencilbuffer", resolvedDepthStencil); 845f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 846f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos if (numFailedColorSamples != 0 || numFailedDepthSamples != 0) 847f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 848f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.getLog() << TestLog::Image("ErrorMask", "Error mask", errorMask); 849f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 850f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos if (numFailedColorSamples != 0) 851f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.getLog() << TestLog::Message << "FAIL: Found " << numFailedColorSamples << " invalid color samples!" << TestLog::EndMessage; 852f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 853f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos if (numFailedDepthSamples != 0) 854f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.getLog() << TestLog::Message << "FAIL: Found " << numFailedDepthSamples << " invalid depth samples!" << TestLog::EndMessage; 855f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 856f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos if (m_testCtx.getTestResult() == QP_TEST_RESULT_PASS) 857f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid samples found"); 858f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 859f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 860f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.getLog() << TestLog::Message << (numCoveredSamples-numFailedColorSamples) << " / " << numCoveredSamples << " color samples passed" << TestLog::EndMessage; 861f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos m_testCtx.getLog() << TestLog::Message << (numCoveredSamples-numFailedDepthSamples) << " / " << numCoveredSamples << " depth samples passed" << TestLog::EndMessage; 862f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 863f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 864f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 865f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos vector<SubCase> m_cases; 866f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos vector<SubCase>::const_iterator m_caseIter; 867f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos}; 868f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CommonFrameworkTests : public tcu::TestCaseGroup 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CommonFrameworkTests (tcu::TestContext& testCtx) 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::TestCaseGroup(testCtx, "common", "Tests for the common utility framework") 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void) 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new SelfCheckCase(m_testCtx, "float_format","tcu::FloatFormat_selfTest()", 8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::FloatFormat_selfTest)); 881f824ffe1538233bb05416cb5c7bd7167756c7314Mika Isojärvi addChild(new SelfCheckCase(m_testCtx, "either","tcu::Either_selfTest()", 882f824ffe1538233bb05416cb5c7bd7167756c7314Mika Isojärvi tcu::Either_selfTest)); 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 886f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulosclass ReferenceRendererTests : public tcu::TestCaseGroup 887f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos{ 888f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulospublic: 889f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos ReferenceRendererTests (tcu::TestContext& testCtx) 890f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos : tcu::TestCaseGroup(testCtx, "reference_renderer", "Reference renderer tests") 891f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 892f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 893f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 894f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos void init (void) 895f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos { 896f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos addChild(new ConstantInterpolationTest(m_testCtx)); 897f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos } 898f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos}; 899f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos 900ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos} // anonymous 901ee2e173d445e87e1f98245f4377f66b081cc320dPyry Haulos 9023c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFrameworkTests::FrameworkTests (tcu::TestContext& testCtx) 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::TestCaseGroup(testCtx, "framework", "Miscellaneous framework tests") 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9073c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFrameworkTests::~FrameworkTests (void) 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid FrameworkTests::init (void) 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 913ee2e92c10d529b2be9ef1279655f9b65a3f1a407Jarkko Pöyry addChild(new CommonFrameworkTests (m_testCtx)); 914ee2e92c10d529b2be9ef1279655f9b65a3f1a407Jarkko Pöyry addChild(new CaseListParserTests (m_testCtx)); 915f4238ec8ad0e9b0995142dc3b0b9a18de167ae3fPyry Haulos addChild(new ReferenceRendererTests (m_testCtx)); 916e2145884f87cdca749a754abfd246cdfe01ea2c1Pyry Haulos addChild(createTextureFormatTests (m_testCtx)); 917efb83e1354edd463650ad0404b18e9a7efc307e4Pyry Haulos addChild(createAstcTests (m_testCtx)); 9180820e8d122596ff51f723f8a4f32fa755fbbda23Pyry Haulos addChild(createVulkanTests (m_testCtx)); 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 921e2145884f87cdca749a754abfd246cdfe01ea2c1Pyry Haulos} // dit 922