529 lines
13 KiB
C++
529 lines
13 KiB
C++
#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
|