blob: 981dc0eb813683332094b6eb8022105f90b693e7 [file] [log] [blame]
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -06001// XGL tests
2//
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
23#ifndef XGLTESTFRAMEWORK_H
24#define XGLTESTFRAMEWORK_H
25
26#include "gtest-1.7.0/include/gtest/gtest.h"
Courtney Goeltzenleuchter9818f782014-10-03 09:53:32 -060027#include "ShaderLang.h"
28#include "GLSL450Lib.h"
Cody Northrop054a4702015-03-17 14:54:35 -060029#include "icd-spv.h"
Chia-I Wua6bc0ce2014-12-29 14:38:28 +080030#include "test_common.h"
Tony Barbour96db8822015-02-25 12:28:39 -070031#include "xgltestbinding.h"
32#include "test_environment.h"
Courtney Goeltzenleuchter30e9dc42014-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>
Tony Barbour96db8822015-02-25 12:28:39 -070041#include <xglWsiX11Ext.h>
Courtney Goeltzenleuchterc5e00a12014-10-27 13:04:37 -060042
43// Can be used by tests to record additional details / description of test
44#define TEST_DESCRIPTION(desc) RecordProperty("description", desc)
45
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -060046using namespace std;
47
Chia-I Wua6bc0ce2014-12-29 14:38:28 +080048class XglImage;
49
Tony Barbour96db8822015-02-25 12:28:39 -070050
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -060051class XglTestImageRecord
52{
53public:
54 XglTestImageRecord();
55 XglTestImageRecord(const XglTestImageRecord &);
56 ~XglTestImageRecord();
57 XglTestImageRecord &operator=(const XglTestImageRecord &rhs);
58 int operator==(const XglTestImageRecord &rhs) const;
59 int operator<(const XglTestImageRecord &rhs) const;
60
Tony Barbour96db8822015-02-25 12:28:39 -070061 string m_title;
62 int m_width;
63 int m_height;
64 void *m_data;
65 XGL_IMAGE m_presentableImage;
66 XGL_GPU_MEMORY m_presentableMemory;
67 unsigned m_data_size;
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -060068};
69
70class XglTestFramework : public ::testing::Test
71{
72public:
73 XglTestFramework();
Courtney Goeltzenleuchter9818f782014-10-03 09:53:32 -060074 ~XglTestFramework();
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -060075
76 static void InitArgs(int *argc, char *argv[]);
77 static void Finish();
78
79 void WritePPM( const char *basename, XglImage *image );
80 void Show(const char *comment, XglImage *image);
Tony Barbour247bf372014-10-30 14:29:04 -060081 void Compare(const char *comment, XglImage *image);
Courtney Goeltzenleuchtere5f0e6c2015-04-02 14:17:44 -060082 void RecordImage(XglImage * image);
83 void RecordImages(vector<XglImage *> image);
Cody Northrop3bfd27c2015-03-17 15:55:58 -060084 bool GLSLtoSPV(const XGL_PIPELINE_SHADER_STAGE shader_type,
Courtney Goeltzenleuchter9818f782014-10-03 09:53:32 -060085 const char *pshader,
Cody Northrop3bfd27c2015-03-17 15:55:58 -060086 std::vector<unsigned int> &spv);
87 static bool m_use_spv;
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -060088
Courtney Goeltzenleuchter8bc46f42014-10-21 15:24:51 -060089 char** ReadFileData(const char* fileName);
90 void FreeFileData(char** data);
91
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -060092private:
Courtney Goeltzenleuchter9818f782014-10-03 09:53:32 -060093 int m_compile_options;
94 int m_num_shader_strings;
95 TBuiltInResource Resources;
Courtney Goeltzenleuchter9818f782014-10-03 09:53:32 -060096 void SetMessageOptions(EShMessages& messages);
97 void ProcessConfigFile();
Courtney Goeltzenleuchter9818f782014-10-03 09:53:32 -060098 EShLanguage FindLanguage(const std::string& name);
99 EShLanguage FindLanguage(const XGL_PIPELINE_SHADER_STAGE shader_type);
100 std::string ConfigFile;
101 bool SetConfigFile(const std::string& name);
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -0600102
Tony Barbour96db8822015-02-25 12:28:39 -0700103 static bool m_show_images;
104 static bool m_save_images;
105 static bool m_compare_images;
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -0600106
Tony Barbour96db8822015-02-25 12:28:39 -0700107 static std::list<XglTestImageRecord> m_images;
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -0600108 static std::list<XglTestImageRecord>::iterator m_display_image;
Tony Barbour96db8822015-02-25 12:28:39 -0700109 static int m_display_image_idx;
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -0600110
Tony Barbour96db8822015-02-25 12:28:39 -0700111 static int m_width; // Window width
112 static int m_height; // Window height
Tony Barbour247bf372014-10-30 14:29:04 -0600113
Tony Barbour96db8822015-02-25 12:28:39 -0700114 int m_frameNum;
115 string m_testName;
Tony Barbour247bf372014-10-30 14:29:04 -0600116
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -0600117};
118
Tony Barbour96db8822015-02-25 12:28:39 -0700119
120class TestFrameworkXglPresent
121{
122public:
123 TestFrameworkXglPresent();
124
125 void Run();
126 void InitPresentFramework(std::list<XglTestImageRecord> &imagesIn);
Tony Barbour2b3ae0f2015-04-02 15:52:36 -0600127 void CreateMyWindow();
Tony Barbour96db8822015-02-25 12:28:39 -0700128 void CreatePresentableImages();
129 void TearDown();
130
131protected:
132 xgl_testing::Device &m_device;
133 xgl_testing::Queue &m_queue;
134 xgl_testing::CmdBuffer m_cmdbuf;
135
136private:
137 xcb_window_t m_window;
138 xcb_intern_atom_reply_t *m_atom_wm_delete_window;
139 std::list<XglTestImageRecord> m_images;
140
141 bool m_quit;
142 bool m_pause;
143
144 uint32_t m_width;
145 uint32_t m_height;
146
147 std::list<XglTestImageRecord>::iterator m_display_image;
148
149 void Display();
150 void HandleEvent(xcb_generic_event_t *event);
151};
152
Courtney Goeltzenleuchtera0f74c52014-10-08 08:46:51 -0600153class TestEnvironment : public ::testing::Environment
154{
155 public:
156 void SetUp();
157
158 void TearDown();
159};
160
Courtney Goeltzenleuchter30e9dc42014-09-04 16:24:19 -0600161#endif // XGLTESTFRAMEWORK_H