xref: /aosp_15_r20/external/vulkan-validation-layers/tests/vktestframework.h (revision b7893ccf7851cd6a48cc5a1e965257d8a5cdcc70)
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