blob: fae0eb84791bcf4c310287bea1fba727ea20fa23 [file] [log] [blame]
#ifndef _ES31CLAYOUTBINDINGTESTS_HPP
#define _ES31CLAYOUTBINDINGTESTS_HPP
/*-------------------------------------------------------------------------
* OpenGL Conformance Test Suite
* -----------------------------
*
* Copyright (c) 2014-2016 The Khronos Group Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/ /*!
* \file
* \brief
*/ /*-------------------------------------------------------------------*/
#include "glcTestCase.hpp"
#include "gluShaderUtil.hpp"
#include "tcuDefs.hpp"
#include "tes31TestCase.hpp"
namespace glcts
{
//=========================================================================
//= utility macros/templates
//=========================================================================
template <typename T, size_t N>
std::vector<T> makeVector(const T (&data)[N])
{
return std::vector<T>(data, data + N);
}
enum eStageType
{
VertexShader,
FragmentShader,
ComputeShader
};
struct StageType
{
const char* name;
eStageType type;
};
enum eSurfaceType
{
AtomicCounter,
Texture,
Image,
UniformBlock,
ShaderStorageBuffer
};
enum eTextureType
{
None,
OneD,
TwoD,
ThreeD,
OneDArray,
TwoDArray
};
struct LayoutBindingParameters
{
char const* keyword; // uniform, buffer
eSurfaceType surface_type; // Texture, Image...
eTextureType texture_type;
char const* vector_type; // lookup vector type
char const* uniform_type; // sampler2D, image2D...
char const* coord_vector_type; // coord vector type
char const* access_function; // texture(), imageLoad()...
};
class LayoutBindingTests : public TestCaseGroup
{
public:
LayoutBindingTests(glcts::Context& context, glu::GLSLVersion glslVersion);
~LayoutBindingTests(void);
void init(void);
private:
LayoutBindingTests(const LayoutBindingTests& other);
LayoutBindingTests& operator=(const LayoutBindingTests& other);
std::string createTestName(const StageType& stageType, const LayoutBindingParameters& testArgs);
private:
glu::GLSLVersion m_glslVersion;
private:
static StageType stageTypes[];
static LayoutBindingParameters test_args[];
};
} // glcts
#endif // _ES31CLAYOUTBINDINGTESTS_HPP