1*b7893ccfSSadaf Ebrahimi /* 2*b7893ccfSSadaf Ebrahimi * Copyright (c) 2015-2019 The Khronos Group Inc. 3*b7893ccfSSadaf Ebrahimi * Copyright (c) 2015-2019 Valve Corporation 4*b7893ccfSSadaf Ebrahimi * Copyright (c) 2015-2019 LunarG, Inc. 5*b7893ccfSSadaf Ebrahimi * 6*b7893ccfSSadaf Ebrahimi * Licensed under the Apache License, Version 2.0 (the "License"); 7*b7893ccfSSadaf Ebrahimi * you may not use this file except in compliance with the License. 8*b7893ccfSSadaf Ebrahimi * You may obtain a copy of the License at 9*b7893ccfSSadaf Ebrahimi * 10*b7893ccfSSadaf Ebrahimi * http://www.apache.org/licenses/LICENSE-2.0 11*b7893ccfSSadaf Ebrahimi * 12*b7893ccfSSadaf Ebrahimi * Unless required by applicable law or agreed to in writing, software 13*b7893ccfSSadaf Ebrahimi * distributed under the License is distributed on an "AS IS" BASIS, 14*b7893ccfSSadaf Ebrahimi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15*b7893ccfSSadaf Ebrahimi * See the License for the specific language governing permissions and 16*b7893ccfSSadaf Ebrahimi * limitations under the License. 17*b7893ccfSSadaf Ebrahimi * 18*b7893ccfSSadaf Ebrahimi * Author: Courtney Goeltzenleuchter <[email protected]> 19*b7893ccfSSadaf Ebrahimi * Author: Tony Barbour <[email protected]> 20*b7893ccfSSadaf Ebrahimi */ 21*b7893ccfSSadaf Ebrahimi 22*b7893ccfSSadaf Ebrahimi #ifndef VKTESTFRAMEWORK_H 23*b7893ccfSSadaf Ebrahimi #define VKTESTFRAMEWORK_H 24*b7893ccfSSadaf Ebrahimi 25*b7893ccfSSadaf Ebrahimi #include "SPIRV/GLSL.std.450.h" 26*b7893ccfSSadaf Ebrahimi #include "spirv-tools/libspirv.h" 27*b7893ccfSSadaf Ebrahimi #include "glslang/Public/ShaderLang.h" 28*b7893ccfSSadaf Ebrahimi #include "icd-spv.h" 29*b7893ccfSSadaf Ebrahimi #include "test_common.h" 30*b7893ccfSSadaf Ebrahimi #include "test_environment.h" 31*b7893ccfSSadaf Ebrahimi 32*b7893ccfSSadaf Ebrahimi #include <fstream> 33*b7893ccfSSadaf Ebrahimi #include <iostream> 34*b7893ccfSSadaf Ebrahimi #include <list> 35*b7893ccfSSadaf Ebrahimi #include <stdbool.h> 36*b7893ccfSSadaf Ebrahimi #include <stdio.h> 37*b7893ccfSSadaf Ebrahimi #include <stdlib.h> 38*b7893ccfSSadaf Ebrahimi #include <string.h> 39*b7893ccfSSadaf Ebrahimi 40*b7893ccfSSadaf Ebrahimi #ifdef _WIN32 41*b7893ccfSSadaf Ebrahimi #ifndef WIN32_LEAN_AND_MEAN 42*b7893ccfSSadaf Ebrahimi #define WIN32_LEAN_AND_MEAN 43*b7893ccfSSadaf Ebrahimi #endif 44*b7893ccfSSadaf Ebrahimi #include <windows.h> 45*b7893ccfSSadaf Ebrahimi #endif 46*b7893ccfSSadaf Ebrahimi 47*b7893ccfSSadaf Ebrahimi #if defined(NDEBUG) && defined(__GNUC__) 48*b7893ccfSSadaf Ebrahimi #define U_ASSERT_ONLY __attribute__((unused)) 49*b7893ccfSSadaf Ebrahimi #else 50*b7893ccfSSadaf Ebrahimi #define U_ASSERT_ONLY 51*b7893ccfSSadaf Ebrahimi #endif 52*b7893ccfSSadaf Ebrahimi 53*b7893ccfSSadaf Ebrahimi // Can be used by tests to record additional details / description of test 54*b7893ccfSSadaf Ebrahimi #define TEST_DESCRIPTION(desc) RecordProperty("description", desc) 55*b7893ccfSSadaf Ebrahimi 56*b7893ccfSSadaf Ebrahimi using namespace std; 57*b7893ccfSSadaf Ebrahimi 58*b7893ccfSSadaf Ebrahimi class VkImageObj; 59*b7893ccfSSadaf Ebrahimi 60*b7893ccfSSadaf Ebrahimi class VkTestFramework : public ::testing::Test { 61*b7893ccfSSadaf Ebrahimi public: 62*b7893ccfSSadaf Ebrahimi VkFormat GetFormat(VkInstance instance, vk_testing::Device *device); 63*b7893ccfSSadaf Ebrahimi static bool optionMatch(const char *option, char *optionLine); 64*b7893ccfSSadaf Ebrahimi static void InitArgs(int *argc, char *argv[]); 65*b7893ccfSSadaf Ebrahimi static void Finish(); 66*b7893ccfSSadaf Ebrahimi 67*b7893ccfSSadaf Ebrahimi bool GLSLtoSPV(const VkShaderStageFlagBits shader_type, const char *pshader, std::vector<unsigned int> &spv, 68*b7893ccfSSadaf Ebrahimi bool debug = false); 69*b7893ccfSSadaf Ebrahimi bool ASMtoSPV(const spv_target_env target_env, const uint32_t options, const char *pasm, std::vector<unsigned int> &spv); 70*b7893ccfSSadaf Ebrahimi static bool m_canonicalize_spv; 71*b7893ccfSSadaf Ebrahimi static bool m_strip_spv; 72*b7893ccfSSadaf Ebrahimi static bool m_do_everything_spv; 73*b7893ccfSSadaf Ebrahimi static bool m_devsim_layer; 74*b7893ccfSSadaf Ebrahimi static bool m_khronos_layer_disable; 75*b7893ccfSSadaf Ebrahimi 76*b7893ccfSSadaf Ebrahimi char **ReadFileData(const char *fileName); 77*b7893ccfSSadaf Ebrahimi void FreeFileData(char **data); 78*b7893ccfSSadaf Ebrahimi 79*b7893ccfSSadaf Ebrahimi protected: 80*b7893ccfSSadaf Ebrahimi VkTestFramework(); 81*b7893ccfSSadaf Ebrahimi virtual ~VkTestFramework() = 0; 82*b7893ccfSSadaf Ebrahimi 83*b7893ccfSSadaf Ebrahimi private: 84*b7893ccfSSadaf Ebrahimi int m_compile_options; 85*b7893ccfSSadaf Ebrahimi int m_num_shader_strings; 86*b7893ccfSSadaf Ebrahimi TBuiltInResource Resources; 87*b7893ccfSSadaf Ebrahimi void SetMessageOptions(EShMessages &messages); 88*b7893ccfSSadaf Ebrahimi void ProcessConfigFile(); 89*b7893ccfSSadaf Ebrahimi EShLanguage FindLanguage(const std::string &name); 90*b7893ccfSSadaf Ebrahimi EShLanguage FindLanguage(const VkShaderStageFlagBits shader_type); 91*b7893ccfSSadaf Ebrahimi std::string ConfigFile; 92*b7893ccfSSadaf Ebrahimi bool SetConfigFile(const std::string &name); 93*b7893ccfSSadaf Ebrahimi static int m_width; 94*b7893ccfSSadaf Ebrahimi static int m_height; 95*b7893ccfSSadaf Ebrahimi string m_testName; 96*b7893ccfSSadaf Ebrahimi }; 97*b7893ccfSSadaf Ebrahimi 98*b7893ccfSSadaf Ebrahimi class TestEnvironment : public ::testing::Environment { 99*b7893ccfSSadaf Ebrahimi public: 100*b7893ccfSSadaf Ebrahimi void SetUp(); 101*b7893ccfSSadaf Ebrahimi 102*b7893ccfSSadaf Ebrahimi void TearDown(); 103*b7893ccfSSadaf Ebrahimi }; 104*b7893ccfSSadaf Ebrahimi 105*b7893ccfSSadaf Ebrahimi #endif // VKTESTFRAMEWORK_H 106