1 #ifndef _VKTSHADEREXECUTOR_HPP
2 #define _VKTSHADEREXECUTOR_HPP
3 /*------------------------------------------------------------------------
4 * Vulkan Conformance Tests
5 * ------------------------
7 * Copyright (c) 2015 The Khronos Group Inc.
8 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
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
14 * http://www.apache.org/licenses/LICENSE-2.0
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.
24 * \brief Vulkan ShaderExecutor
25 *//*--------------------------------------------------------------------*/
27 #include "tcuDefs.hpp"
28 #include "vktTestCase.hpp"
29 #include "gluVarType.hpp"
30 #include "vkGlslProgram.hpp"
37 namespace shaderexecutor
40 //! Shader input / output variable declaration.
43 std::string name; //!< Symbol name.
44 glu::VarType varType; //!< Symbol type.
47 Symbol (const std::string& name_, const glu::VarType& varType_) : name(name_), varType(varType_) {}
50 //! Complete shader specification.
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;
64 //!< Descriptor set index for additional resources
65 EXTRA_RESOURCES_DESCRIPTOR_SET_INDEX = 1,
68 //! Base class for shader executor.
72 virtual ~ShaderExecutor (void);
75 virtual void execute (int numValues, const void* const* inputs, void* const* outputs, vk::VkDescriptorSet extraResources = (vk::VkDescriptorSet)0) = 0;
78 ShaderExecutor (Context& context, const ShaderSpec& shaderSpec)
80 , m_shaderSpec (shaderSpec)
84 const ShaderSpec m_shaderSpec;
87 ShaderExecutor (const ShaderExecutor&);
88 ShaderExecutor& operator= (const ShaderExecutor&);
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);
97 #endif // _VKTSHADEREXECUTOR_HPP