| #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 |