EGL: Add wide-color tests am: 6a26fb1fd0
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / modules / vulkan / shaderexecutor / vktShaderExecutor.hpp
1 #ifndef _VKTSHADEREXECUTOR_HPP
2 #define _VKTSHADEREXECUTOR_HPP
3 /*------------------------------------------------------------------------
4  * Vulkan Conformance Tests
5  * ------------------------
6  *
7  * Copyright (c) 2015 The Khronos Group Inc.
8  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
9  *
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *      http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  *
22  *//*!
23  * \file
24  * \brief Vulkan ShaderExecutor
25  *//*--------------------------------------------------------------------*/
26
27 #include "tcuDefs.hpp"
28 #include "vktTestCase.hpp"
29 #include "gluVarType.hpp"
30 #include "vkGlslProgram.hpp"
31
32 #include <vector>
33 #include <string>
34
35 namespace vkt
36 {
37 namespace shaderexecutor
38 {
39
40 //! Shader input / output variable declaration.
41 struct Symbol
42 {
43         std::string                             name;           //!< Symbol name.
44         glu::VarType                    varType;        //!< Symbol type.
45
46         Symbol (void) {}
47         Symbol (const std::string& name_, const glu::VarType& varType_) : name(name_), varType(varType_) {}
48 };
49
50 //! Complete shader specification.
51 struct ShaderSpec
52 {
53         std::vector<Symbol>             inputs;
54         std::vector<Symbol>             outputs;
55         std::string                             globalDeclarations;     //!< These are placed into global scope. Can contain uniform declarations for example.
56         std::string                             source;                         //!< Source snippet to be executed.
57         vk::GlslBuildOptions    buildOptions;
58
59         ShaderSpec (void) {}
60 };
61
62 enum
63 {
64         //!< Descriptor set index for additional resources
65         EXTRA_RESOURCES_DESCRIPTOR_SET_INDEX            = 1,
66 };
67
68 //! Base class for shader executor.
69 class ShaderExecutor
70 {
71 public:
72         virtual                                 ~ShaderExecutor         (void);
73
74         //! Execute
75         virtual void                    execute                         (int numValues, const void* const* inputs, void* const* outputs, vk::VkDescriptorSet extraResources = (vk::VkDescriptorSet)0) = 0;
76
77 protected:
78                                                         ShaderExecutor          (Context& context, const ShaderSpec& shaderSpec)
79                                                                 : m_context             (context)
80                                                                 , m_shaderSpec  (shaderSpec)
81                                                         {}
82
83         Context&                                m_context;
84         const ShaderSpec                m_shaderSpec;
85
86 private:
87                                                         ShaderExecutor          (const ShaderExecutor&);
88         ShaderExecutor&                 operator=                       (const ShaderExecutor&);
89 };
90
91 void                            generateSources         (glu::ShaderType shaderType, const ShaderSpec& shaderSpec, vk::SourceCollections& dst);
92 ShaderExecutor*         createExecutor          (Context& context, glu::ShaderType shaderType, const ShaderSpec& shaderSpec, vk::VkDescriptorSetLayout extraResourcesLayout = (vk::VkDescriptorSetLayout)0);
93
94 } // shaderexecutor
95 } // vkt
96
97 #endif // _VKTSHADEREXECUTOR_HPP