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"
36 namespace shaderexecutor
39 //! Shader input / output variable declaration.
42 std::string name; //!< Symbol name.
43 glu::VarType varType; //!< Symbol type.
46 Symbol (const std::string& name_, const glu::VarType& varType_) : name(name_), varType(varType_) {}
49 //! Complete shader specification.
52 std::vector<Symbol> inputs;
53 std::vector<Symbol> outputs;
54 std::string globalDeclarations; //!< These are placed into global scope. Can contain uniform declarations for example.
55 std::string source; //!< Source snippet to be executed.
62 //!< Descriptor set index for additional resources
63 EXTRA_RESOURCES_DESCRIPTOR_SET_INDEX = 1,
66 //! Base class for shader executor.
70 virtual ~ShaderExecutor (void);
73 virtual void execute (int numValues, const void* const* inputs, void* const* outputs, vk::VkDescriptorSet extraResources = (vk::VkDescriptorSet)0) = 0;
76 ShaderExecutor (Context& context, const ShaderSpec& shaderSpec)
78 , m_shaderSpec (shaderSpec)
82 const ShaderSpec m_shaderSpec;
85 ShaderExecutor (const ShaderExecutor&);
86 ShaderExecutor& operator= (const ShaderExecutor&);
89 void generateSources (glu::ShaderType shaderType, const ShaderSpec& shaderSpec, vk::SourceCollections& dst);
90 ShaderExecutor* createExecutor (Context& context, glu::ShaderType shaderType, const ShaderSpec& shaderSpec, vk::VkDescriptorSetLayout extraResourcesLayout = (vk::VkDescriptorSetLayout)0);
95 #endif // _VKTSHADEREXECUTOR_HPP