blob: 02fd1073be7d543f440a8a86502338ab1f92d45f [file] [log] [blame]
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001// VK tests
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -06002//
3// Copyright (C) 2014 LunarG, Inc.
4//
5// Permission is hereby granted, free of charge, to any person obtaining a
6// copy of this software and associated documentation files (the "Software"),
7// to deal in the Software without restriction, including without limitation
8// the rights to use, copy, modify, merge, publish, distribute, sublicense,
9// and/or sell copies of the Software, and to permit persons to whom the
10// Software is furnished to do so, subject to the following conditions:
11//
12// The above copyright notice and this permission notice shall be included
13// in all copies or substantial portions of the Software.
14//
15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21// DEALINGS IN THE SOFTWARE.
22
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060023#ifndef VKTESTFRAMEWORK_H
24#define VKTESTFRAMEWORK_H
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060025
26#include "gtest-1.7.0/include/gtest/gtest.h"
Courtney Goeltzenleuchter94192032014-10-03 09:53:32 -060027#include "ShaderLang.h"
28#include "GLSL450Lib.h"
Cody Northropd4e020a2015-03-17 14:54:35 -060029#include "icd-spv.h"
Chia-I Wu13ecdcd2014-12-29 14:38:28 +080030#include "test_common.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060031#include "vktestbinding.h"
Tony Barbouref20d322015-02-25 12:28:39 -070032#include "test_environment.h"
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060033
34#include <stdlib.h>
35#include <stdio.h>
36#include <stdbool.h>
37#include <string.h>
38#include <iostream>
39#include <fstream>
40#include <list>
Courtney Goeltzenleuchter28d33962014-10-27 13:04:37 -060041
42// Can be used by tests to record additional details / description of test
43#define TEST_DESCRIPTION(desc) RecordProperty("description", desc)
44
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060045using namespace std;
46
Tony Barbour01999182015-04-09 12:58:51 -060047class VkImageObj;
Chia-I Wu13ecdcd2014-12-29 14:38:28 +080048
Tony Barbouref20d322015-02-25 12:28:39 -070049
Tony Barbour01999182015-04-09 12:58:51 -060050class VkTestImageRecord
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060051{
52public:
Tony Barbour01999182015-04-09 12:58:51 -060053 VkTestImageRecord();
54 VkTestImageRecord(const VkTestImageRecord &);
55 ~VkTestImageRecord();
56 VkTestImageRecord &operator=(const VkTestImageRecord &rhs);
57 int operator==(const VkTestImageRecord &rhs) const;
58 int operator<(const VkTestImageRecord &rhs) const;
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060059
Tony Barbouref20d322015-02-25 12:28:39 -070060 string m_title;
61 int m_width;
62 int m_height;
63 void *m_data;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060064 VkImage m_presentableImage;
Tony Barbour8205d902015-04-16 15:59:00 -060065 VkDeviceMemory m_presentableMemory;
Tony Barbouref20d322015-02-25 12:28:39 -070066 unsigned m_data_size;
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060067};
68
Tony Barbour01999182015-04-09 12:58:51 -060069class VkTestFramework : public ::testing::Test
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060070{
71public:
Tony Barbour01999182015-04-09 12:58:51 -060072 VkTestFramework();
73 ~VkTestFramework();
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060074
75 static void InitArgs(int *argc, char *argv[]);
76 static void Finish();
77
Tony Barbour01999182015-04-09 12:58:51 -060078 void WritePPM( const char *basename, VkImageObj *image );
79 void Show(const char *comment, VkImageObj *image);
80 void Compare(const char *comment, VkImageObj *image);
81 void RecordImage(VkImageObj * image);
82 void RecordImages(vector<VkImageObj *> image);
Tony Barbour8205d902015-04-16 15:59:00 -060083 bool GLSLtoSPV(const VkShaderStage shader_type,
Courtney Goeltzenleuchter94192032014-10-03 09:53:32 -060084 const char *pshader,
Cody Northropacfb0492015-03-17 15:55:58 -060085 std::vector<unsigned int> &spv);
86 static bool m_use_spv;
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060087
Courtney Goeltzenleuchter5c25faa2014-10-21 15:24:51 -060088 char** ReadFileData(const char* fileName);
89 void FreeFileData(char** data);
90
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -060091private:
Courtney Goeltzenleuchter94192032014-10-03 09:53:32 -060092 int m_compile_options;
93 int m_num_shader_strings;
94 TBuiltInResource Resources;
Courtney Goeltzenleuchter94192032014-10-03 09:53:32 -060095 void SetMessageOptions(EShMessages& messages);
96 void ProcessConfigFile();
Courtney Goeltzenleuchter94192032014-10-03 09:53:32 -060097 EShLanguage FindLanguage(const std::string& name);
Tony Barbour8205d902015-04-16 15:59:00 -060098 EShLanguage FindLanguage(const VkShaderStage shader_type);
Courtney Goeltzenleuchter94192032014-10-03 09:53:32 -060099 std::string ConfigFile;
100 bool SetConfigFile(const std::string& name);
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -0600101
Tony Barbouref20d322015-02-25 12:28:39 -0700102 static bool m_show_images;
103 static bool m_save_images;
104 static bool m_compare_images;
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -0600105
Tony Barbour01999182015-04-09 12:58:51 -0600106 static std::list<VkTestImageRecord> m_images;
107 static std::list<VkTestImageRecord>::iterator m_display_image;
Tony Barbouref20d322015-02-25 12:28:39 -0700108 static int m_display_image_idx;
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -0600109
Tony Barbouref20d322015-02-25 12:28:39 -0700110 static int m_width; // Window width
111 static int m_height; // Window height
Tony Barbour32f368c2014-10-30 14:29:04 -0600112
Tony Barbouref20d322015-02-25 12:28:39 -0700113 int m_frameNum;
114 string m_testName;
Tony Barbour32f368c2014-10-30 14:29:04 -0600115
Courtney Goeltzenleuchterd0d7ccc2014-09-04 16:24:19 -0600116};
117
Courtney Goeltzenleuchterf12c7762014-10-08 08:46:51 -0600118class TestEnvironment : public ::testing::Environment
119{
120 public:
121 void SetUp();
122
123 void TearDown();
124};
125
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600126#endif // VKTESTFRAMEWORK_H