blob: c3d2d598d39029b8dc1e2433b51f47d04aa40a61 [file] [log] [blame]
#ifndef _GLSATTRIBUTELOCATIONTESTS_HPP
#define _GLSATTRIBUTELOCATIONTESTS_HPP
/*-------------------------------------------------------------------------
* drawElements Quality Program OpenGL (ES) Module
* -----------------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* 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 Attribute location tests
*//*--------------------------------------------------------------------*/
#include "tcuDefs.hpp"
#include "tcuTestCase.hpp"
#include <string>
#include <vector>
namespace glu
{
class ShaderProgram;
class RenderContext;
} // glu
namespace deqp
{
namespace gls
{
namespace AttributeLocationTestUtil
{
class AttribType
{
public:
AttribType (const std::string& name, deUint32 locationSize, deUint32 typeEnum);
const std::string& getName (void) const { return m_name; }
deUint32 getLocationSize (void) const { return m_locationSize; }
deUint32 getGLTypeEnum (void) const { return m_glTypeEnum; }
private:
std::string m_name;
deUint32 m_locationSize;
deUint32 m_glTypeEnum;
};
class Cond
{
public:
enum ConstCond
{
COND_ALWAYS,
COND_NEVER
};
Cond (ConstCond cond);
explicit Cond (const std::string& name, bool negate = true);
bool operator== (const Cond& other) const { return m_negate == other.m_negate && m_name == other.m_name; }
bool operator!= (const Cond& other) const { return !(*this == other); }
const std::string getName (void) const { return m_name; }
bool getNegate (void) const { return m_negate; }
private:
bool m_negate;
std::string m_name;
};
class Attribute
{
public:
enum
{
// Location is not defined
LOC_UNDEF = -1
};
enum
{
// Not an array
NOT_ARRAY = -1
};
Attribute (const AttribType& type,
const std::string& name,
deInt32 layoutLocation = LOC_UNDEF,
const Cond& cond = Cond::COND_ALWAYS,
int arraySize = NOT_ARRAY);
const AttribType getType (void) const { return m_type; }
const std::string& getName (void) const { return m_name; }
deInt32 getLayoutLocation (void) const { return m_layoutLocation; }
const Cond& getCondition (void) const { return m_cond; }
int getArraySize (void) const { return m_arraySize; }
private:
AttribType m_type;
std::string m_name;
deInt32 m_layoutLocation;
Cond m_cond;
int m_arraySize;
};
class Bind
{
public:
Bind (const std::string& attribute, deUint32 location);
const std::string& getAttributeName (void) const { return m_attribute; }
deUint32 getLocation (void) const { return m_location; }
private:
std::string m_attribute;
deUint32 m_location;
};
} // AttributeLocationTestUtil
// Simple bind attribute test
class BindAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
BindAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
// Bind maximum number of attributes
class BindMaxAttributesTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
BindMaxAttributesTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class BindAliasingAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
BindAliasingAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int offset = 0,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_offset;
const int m_arraySize;
};
class BindMaxAliasingAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
BindMaxAliasingAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class BindInactiveAliasingAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
BindInactiveAliasingAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class BindHoleAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
BindHoleAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class PreAttachBindAttributeTest : public tcu::TestCase
{
public:
PreAttachBindAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
class PreLinkBindAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
PreLinkBindAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
class PostLinkBindAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
PostLinkBindAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
class BindReattachAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
BindReattachAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
class LocationAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
LocationAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class LocationMaxAttributesTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
LocationMaxAttributesTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class LocationHoleAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
LocationHoleAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class MixedAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
MixedAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class MixedMaxAttributesTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
MixedMaxAttributesTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class MixedHoleAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
MixedHoleAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class BindRelinkAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
BindRelinkAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
class BindRelinkHoleAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
BindRelinkHoleAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class MixedRelinkHoleAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
MixedRelinkHoleAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx,
const AttribType& type,
int arraySize = AttributeLocationTestUtil::Attribute::NOT_ARRAY);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
const AttribType m_type;
const int m_arraySize;
};
class PreAttachMixedAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
PreAttachMixedAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
class PreLinkMixedAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
PreLinkMixedAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
class PostLinkMixedAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
PostLinkMixedAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
class MixedReattachAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
MixedReattachAttributeTest (tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
class MixedRelinkAttributeTest : public tcu::TestCase
{
public:
typedef AttributeLocationTestUtil::AttribType AttribType;
MixedRelinkAttributeTest(tcu::TestContext& testCtx,
glu::RenderContext& renderCtx);
virtual IterateResult iterate (void);
private:
glu::RenderContext& m_renderCtx;
};
} // gls
} // deqp
#endif // _GLSATTRIBUTELOCATIONTESTS_HPP