199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz/* 299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Copyright (c) 2015-2016 The Khronos Group Inc. 399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Copyright (c) 2015-2016 Valve Corporation 499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Copyright (c) 2015-2016 LunarG, Inc. 599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * 643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Licensed under the Apache License, Version 2.0 (the "License"); 743b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * you may not use this file except in compliance with the License. 843b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * You may obtain a copy of the License at 999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * 1043b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * http://www.apache.org/licenses/LICENSE-2.0 1199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * 1243b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Unless required by applicable law or agreed to in writing, software 1343b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * distributed under the License is distributed on an "AS IS" BASIS, 1443b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1543b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * See the License for the specific language governing permissions and 1643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * limitations under the License. 1799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * 1899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Courtney Goeltzenleuchter <courtney@LunarG.com> 1999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Tony Barbour <tony@LunarG.com> 2099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz */ 21d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter 229cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#ifndef VKTESTFRAMEWORK_H 239cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#define VKTESTFRAMEWORK_H 24d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter 250abdb66fa4e8e68904545af6df15cbe2116b6c43Courtney Goeltzenleuchter//#include "gtest-1.7.0/include/gtest/gtest.h" 26f4b83ed12f844daf00a29ceb003538c9c8ffbb11GregF#include "SPIRV/GLSL.std.450.h" 27af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#include "glslang/Public/ShaderLang.h" 28d4e020aa1921643b14a3a546f6807afbafa7629eCody Northrop#include "icd-spv.h" 2913ecdcd44b370d5f16c5977e902bed90b27f3669Chia-I Wu#include "test_common.h" 30ef20d32f44141f8bcee9a77a03100f2c33e7a71fTony Barbour#include "test_environment.h" 31af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#include "vktestbinding.h" 32d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter 33d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter#include <fstream> 34af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#include <iostream> 35d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter#include <list> 36af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#include <stdbool.h> 37af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#include <stdio.h> 38af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#include <stdlib.h> 39af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter#include <string.h> 4028d3396d74d859bed93a17b423514e1041148824Courtney Goeltzenleuchter 4125e3b839ae203c18a71ff950711137d9e753b2eeTony Barbour#ifdef _WIN32 423068b35b8b4fa868d049dee23a287eff7c059e28Courtney Goeltzenleuchter#ifndef WIN32_LEAN_AND_MEAN 4325e3b839ae203c18a71ff950711137d9e753b2eeTony Barbour#define WIN32_LEAN_AND_MEAN 443068b35b8b4fa868d049dee23a287eff7c059e28Courtney Goeltzenleuchter#endif 4525e3b839ae203c18a71ff950711137d9e753b2eeTony Barbour#include <windows.h> 4625e3b839ae203c18a71ff950711137d9e753b2eeTony Barbour#endif 4725e3b839ae203c18a71ff950711137d9e753b2eeTony Barbour 4822a30866de6210d780995dfaaae39f1a73115aa0Tony Barbour#if defined(NDEBUG) && defined(__GNUC__) 4922a30866de6210d780995dfaaae39f1a73115aa0Tony Barbour#define U_ASSERT_ONLY __attribute__((unused)) 5022a30866de6210d780995dfaaae39f1a73115aa0Tony Barbour#else 5122a30866de6210d780995dfaaae39f1a73115aa0Tony Barbour#define U_ASSERT_ONLY 5222a30866de6210d780995dfaaae39f1a73115aa0Tony Barbour#endif 5322a30866de6210d780995dfaaae39f1a73115aa0Tony Barbour 5428d3396d74d859bed93a17b423514e1041148824Courtney Goeltzenleuchter// Can be used by tests to record additional details / description of test 5528d3396d74d859bed93a17b423514e1041148824Courtney Goeltzenleuchter#define TEST_DESCRIPTION(desc) RecordProperty("description", desc) 5628d3396d74d859bed93a17b423514e1041148824Courtney Goeltzenleuchter 57d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchterusing namespace std; 58d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter 590199918cdd982ea192f737dc8660be1c33883e68Tony Barbourclass VkImageObj; 6013ecdcd44b370d5f16c5977e902bed90b27f3669Chia-I Wu 6199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzclass VkTestFramework : public ::testing::Test { 6299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 630199918cdd982ea192f737dc8660be1c33883e68Tony Barbour VkTestFramework(); 640199918cdd982ea192f737dc8660be1c33883e68Tony Barbour ~VkTestFramework(); 65d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter 6655e270ba35534b24f3fd60930f129c18ec9e430fTony Barbour VkFormat GetFormat(VkInstance instance, vk_testing::Device *device); 6799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static bool optionMatch(const char *option, char *optionLine); 68d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter static void InitArgs(int *argc, char *argv[]); 69d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter static void Finish(); 70d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter 71af4d398afbd91e28926089c5b8b4423d7a740ad5Courtney Goeltzenleuchter bool GLSLtoSPV(const VkShaderStageFlagBits shader_type, const char *pshader, std::vector<unsigned int> &spv); 7299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static bool m_use_glsl; 7399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static bool m_canonicalize_spv; 7499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static bool m_strip_spv; 7599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static bool m_do_everything_spv; 76d0d7ccc3f23046c7610a561e3eb99bb71eb5bd60Courtney Goeltzenleuchter 7799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz char **ReadFileData(const char *fileName); 7899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void FreeFileData(char **data); 795c25faa269dc9187e7a82bcb08f93d87e13a1c52Courtney Goeltzenleuchter 8099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz private: 81941920311fa71077ea5b2c2a3b3a05bc579f219bCourtney Goeltzenleuchter int m_compile_options; 82941920311fa71077ea5b2c2a3b3a05bc579f219bCourtney Goeltzenleuchter int m_num_shader_strings; 83941920311fa71077ea5b2c2a3b3a05bc579f219bCourtney Goeltzenleuchter TBuiltInResource Resources; 8499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void SetMessageOptions(EShMessages &messages); 85941920311fa71077ea5b2c2a3b3a05bc579f219bCourtney Goeltzenleuchter void ProcessConfigFile(); 8699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz EShLanguage FindLanguage(const std::string &name); 878e2f097c013646e6688ecd7041c6ebdd4372e5c2Courtney Goeltzenleuchter EShLanguage FindLanguage(const VkShaderStageFlagBits shader_type); 88941920311fa71077ea5b2c2a3b3a05bc579f219bCourtney Goeltzenleuchter std::string ConfigFile; 8999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz bool SetConfigFile(const std::string &name); 9099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static int m_width; 9199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz static int m_height; 9299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz string m_testName; 93ef20d32f44141f8bcee9a77a03100f2c33e7a71fTony Barbour}; 94ef20d32f44141f8bcee9a77a03100f2c33e7a71fTony Barbour 9599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultzclass TestEnvironment : public ::testing::Environment { 9699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz public: 9799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void SetUp(); 98f12c776b6a2a9d8b314e38a1dfab1b2441e32867Courtney Goeltzenleuchter 9999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz void TearDown(); 100f12c776b6a2a9d8b314e38a1dfab1b2441e32867Courtney Goeltzenleuchter}; 101f12c776b6a2a9d8b314e38a1dfab1b2441e32867Courtney Goeltzenleuchter 1029cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#endif // VKTESTFRAMEWORK_H 103