1e5c31af7Sopenharmony_ci#ifndef _ES31CLAYOUTBINDINGTESTS_HPP
2e5c31af7Sopenharmony_ci#define _ES31CLAYOUTBINDINGTESTS_HPP
3e5c31af7Sopenharmony_ci/*-------------------------------------------------------------------------
4e5c31af7Sopenharmony_ci * OpenGL Conformance Test Suite
5e5c31af7Sopenharmony_ci * -----------------------------
6e5c31af7Sopenharmony_ci *
7e5c31af7Sopenharmony_ci * Copyright (c) 2014-2016 The Khronos Group Inc.
8e5c31af7Sopenharmony_ci *
9e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
10e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License.
11e5c31af7Sopenharmony_ci * You may obtain a copy of the License at
12e5c31af7Sopenharmony_ci *
13e5c31af7Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
14e5c31af7Sopenharmony_ci *
15e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
16e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
17e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and
19e5c31af7Sopenharmony_ci * limitations under the License.
20e5c31af7Sopenharmony_ci *
21e5c31af7Sopenharmony_ci */ /*!
22e5c31af7Sopenharmony_ci * \file
23e5c31af7Sopenharmony_ci * \brief
24e5c31af7Sopenharmony_ci */ /*-------------------------------------------------------------------*/
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_ci#include "glcTestCase.hpp"
27e5c31af7Sopenharmony_ci#include "gluShaderUtil.hpp"
28e5c31af7Sopenharmony_ci#include "tcuDefs.hpp"
29e5c31af7Sopenharmony_ci#include "tes31TestCase.hpp"
30e5c31af7Sopenharmony_ci
31e5c31af7Sopenharmony_cinamespace glcts
32e5c31af7Sopenharmony_ci{
33e5c31af7Sopenharmony_ci
34e5c31af7Sopenharmony_ci//=========================================================================
35e5c31af7Sopenharmony_ci//= utility macros/templates
36e5c31af7Sopenharmony_ci//=========================================================================
37e5c31af7Sopenharmony_citemplate <typename T, size_t N>
38e5c31af7Sopenharmony_cistd::vector<T> makeVector(const T (&data)[N])
39e5c31af7Sopenharmony_ci{
40e5c31af7Sopenharmony_ci	return std::vector<T>(data, data + N);
41e5c31af7Sopenharmony_ci}
42e5c31af7Sopenharmony_ci
43e5c31af7Sopenharmony_cienum eStageType
44e5c31af7Sopenharmony_ci{
45e5c31af7Sopenharmony_ci	VertexShader,
46e5c31af7Sopenharmony_ci	FragmentShader,
47e5c31af7Sopenharmony_ci	ComputeShader
48e5c31af7Sopenharmony_ci};
49e5c31af7Sopenharmony_ci
50e5c31af7Sopenharmony_cistruct StageType
51e5c31af7Sopenharmony_ci{
52e5c31af7Sopenharmony_ci	const char* name;
53e5c31af7Sopenharmony_ci	eStageType  type;
54e5c31af7Sopenharmony_ci};
55e5c31af7Sopenharmony_ci
56e5c31af7Sopenharmony_cienum eSurfaceType
57e5c31af7Sopenharmony_ci{
58e5c31af7Sopenharmony_ci	AtomicCounter,
59e5c31af7Sopenharmony_ci	Texture,
60e5c31af7Sopenharmony_ci	Image,
61e5c31af7Sopenharmony_ci	UniformBlock,
62e5c31af7Sopenharmony_ci	ShaderStorageBuffer
63e5c31af7Sopenharmony_ci};
64e5c31af7Sopenharmony_ci
65e5c31af7Sopenharmony_cienum eTextureType
66e5c31af7Sopenharmony_ci{
67e5c31af7Sopenharmony_ci	None,
68e5c31af7Sopenharmony_ci	OneD,
69e5c31af7Sopenharmony_ci	TwoD,
70e5c31af7Sopenharmony_ci	ThreeD,
71e5c31af7Sopenharmony_ci	OneDArray,
72e5c31af7Sopenharmony_ci	TwoDArray
73e5c31af7Sopenharmony_ci};
74e5c31af7Sopenharmony_ci
75e5c31af7Sopenharmony_cistruct LayoutBindingParameters
76e5c31af7Sopenharmony_ci{
77e5c31af7Sopenharmony_ci	char const*  keyword;	  // uniform, buffer
78e5c31af7Sopenharmony_ci	eSurfaceType surface_type; // Texture, Image...
79e5c31af7Sopenharmony_ci	eTextureType texture_type;
80e5c31af7Sopenharmony_ci	char const*  vector_type;		// lookup vector type
81e5c31af7Sopenharmony_ci	char const*  uniform_type;		// sampler2D, image2D...
82e5c31af7Sopenharmony_ci	char const*  coord_vector_type; // coord vector type
83e5c31af7Sopenharmony_ci	char const*  access_function;   // texture(), imageLoad()...
84e5c31af7Sopenharmony_ci};
85e5c31af7Sopenharmony_ci
86e5c31af7Sopenharmony_ciclass LayoutBindingTests : public TestCaseGroup
87e5c31af7Sopenharmony_ci{
88e5c31af7Sopenharmony_cipublic:
89e5c31af7Sopenharmony_ci	LayoutBindingTests(glcts::Context& context, glu::GLSLVersion glslVersion);
90e5c31af7Sopenharmony_ci	~LayoutBindingTests(void);
91e5c31af7Sopenharmony_ci
92e5c31af7Sopenharmony_ci	void init(void);
93e5c31af7Sopenharmony_ci
94e5c31af7Sopenharmony_ciprivate:
95e5c31af7Sopenharmony_ci	LayoutBindingTests(const LayoutBindingTests& other);
96e5c31af7Sopenharmony_ci	LayoutBindingTests& operator=(const LayoutBindingTests& other);
97e5c31af7Sopenharmony_ci
98e5c31af7Sopenharmony_ci	std::string createTestName(const StageType& stageType, const LayoutBindingParameters& testArgs);
99e5c31af7Sopenharmony_ci
100e5c31af7Sopenharmony_ciprivate:
101e5c31af7Sopenharmony_ci	glu::GLSLVersion m_glslVersion;
102e5c31af7Sopenharmony_ci
103e5c31af7Sopenharmony_ciprivate:
104e5c31af7Sopenharmony_ci	static StageType			   stageTypes[];
105e5c31af7Sopenharmony_ci	static LayoutBindingParameters test_args[];
106e5c31af7Sopenharmony_ci};
107e5c31af7Sopenharmony_ci
108e5c31af7Sopenharmony_ci} // glcts
109e5c31af7Sopenharmony_ci
110e5c31af7Sopenharmony_ci#endif // _ES31CLAYOUTBINDINGTESTS_HPP
111