1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 2.0 Module
3*35238bceSAndroid Build Coastguard Worker * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker *
11*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker *
19*35238bceSAndroid Build Coastguard Worker *//*!
20*35238bceSAndroid Build Coastguard Worker * \file
21*35238bceSAndroid Build Coastguard Worker * \brief Attribute location test
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es2fAttribLocationTests.hpp"
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Worker #include "glsAttributeLocationTests.hpp"
27*35238bceSAndroid Build Coastguard Worker
28*35238bceSAndroid Build Coastguard Worker #include "deStringUtil.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "gluDefs.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "glwDefs.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
34*35238bceSAndroid Build Coastguard Worker
35*35238bceSAndroid Build Coastguard Worker #include <vector>
36*35238bceSAndroid Build Coastguard Worker
37*35238bceSAndroid Build Coastguard Worker using namespace deqp::gls::AttributeLocationTestUtil;
38*35238bceSAndroid Build Coastguard Worker using std::vector;
39*35238bceSAndroid Build Coastguard Worker
40*35238bceSAndroid Build Coastguard Worker namespace deqp
41*35238bceSAndroid Build Coastguard Worker {
42*35238bceSAndroid Build Coastguard Worker namespace gles2
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker namespace Functional
45*35238bceSAndroid Build Coastguard Worker {
46*35238bceSAndroid Build Coastguard Worker
createAttributeLocationTests(Context & context)47*35238bceSAndroid Build Coastguard Worker TestCaseGroup *createAttributeLocationTests(Context &context)
48*35238bceSAndroid Build Coastguard Worker {
49*35238bceSAndroid Build Coastguard Worker const AttribType types[] = {AttribType("float", 1, GL_FLOAT), AttribType("vec2", 1, GL_FLOAT_VEC2),
50*35238bceSAndroid Build Coastguard Worker AttribType("vec3", 1, GL_FLOAT_VEC3), AttribType("vec4", 1, GL_FLOAT_VEC4),
51*35238bceSAndroid Build Coastguard Worker
52*35238bceSAndroid Build Coastguard Worker AttribType("mat2", 2, GL_FLOAT_MAT2), AttribType("mat3", 3, GL_FLOAT_MAT3),
53*35238bceSAndroid Build Coastguard Worker AttribType("mat4", 4, GL_FLOAT_MAT4)};
54*35238bceSAndroid Build Coastguard Worker
55*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const root = new TestCaseGroup(context, "attribute_location", "Attribute location tests");
56*35238bceSAndroid Build Coastguard Worker
57*35238bceSAndroid Build Coastguard Worker // Basic bind attribute tests
58*35238bceSAndroid Build Coastguard Worker {
59*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const bindAttributeGroup = new TestCaseGroup(context, "bind", "Basic attribute binding tests.");
60*35238bceSAndroid Build Coastguard Worker
61*35238bceSAndroid Build Coastguard Worker root->addChild(bindAttributeGroup);
62*35238bceSAndroid Build Coastguard Worker
63*35238bceSAndroid Build Coastguard Worker for (int typeNdx = 0; typeNdx < DE_LENGTH_OF_ARRAY(types); typeNdx++)
64*35238bceSAndroid Build Coastguard Worker {
65*35238bceSAndroid Build Coastguard Worker const AttribType &type = types[typeNdx];
66*35238bceSAndroid Build Coastguard Worker bindAttributeGroup->addChild(
67*35238bceSAndroid Build Coastguard Worker new gls::BindAttributeTest(context.getTestContext(), context.getRenderContext(), type));
68*35238bceSAndroid Build Coastguard Worker }
69*35238bceSAndroid Build Coastguard Worker }
70*35238bceSAndroid Build Coastguard Worker
71*35238bceSAndroid Build Coastguard Worker // Bind max number of attributes
72*35238bceSAndroid Build Coastguard Worker {
73*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const bindMaxAttributeGroup =
74*35238bceSAndroid Build Coastguard Worker new TestCaseGroup(context, "bind_max_attributes", "Test using maximum attributes with bind.");
75*35238bceSAndroid Build Coastguard Worker
76*35238bceSAndroid Build Coastguard Worker root->addChild(bindMaxAttributeGroup);
77*35238bceSAndroid Build Coastguard Worker
78*35238bceSAndroid Build Coastguard Worker for (int typeNdx = 0; typeNdx < DE_LENGTH_OF_ARRAY(types); typeNdx++)
79*35238bceSAndroid Build Coastguard Worker {
80*35238bceSAndroid Build Coastguard Worker const AttribType &type = types[typeNdx];
81*35238bceSAndroid Build Coastguard Worker bindMaxAttributeGroup->addChild(
82*35238bceSAndroid Build Coastguard Worker new gls::BindMaxAttributesTest(context.getTestContext(), context.getRenderContext(), type));
83*35238bceSAndroid Build Coastguard Worker }
84*35238bceSAndroid Build Coastguard Worker }
85*35238bceSAndroid Build Coastguard Worker
86*35238bceSAndroid Build Coastguard Worker // Test aliasing
87*35238bceSAndroid Build Coastguard Worker {
88*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const aliasingGroup =
89*35238bceSAndroid Build Coastguard Worker new TestCaseGroup(context, "bind_aliasing", "Test attribute location aliasing with bind.");
90*35238bceSAndroid Build Coastguard Worker
91*35238bceSAndroid Build Coastguard Worker root->addChild(aliasingGroup);
92*35238bceSAndroid Build Coastguard Worker
93*35238bceSAndroid Build Coastguard Worker for (int typeNdx = 0; typeNdx < DE_LENGTH_OF_ARRAY(types); typeNdx++)
94*35238bceSAndroid Build Coastguard Worker {
95*35238bceSAndroid Build Coastguard Worker const AttribType &type = types[typeNdx];
96*35238bceSAndroid Build Coastguard Worker
97*35238bceSAndroid Build Coastguard Worker // Simple aliasing cases
98*35238bceSAndroid Build Coastguard Worker aliasingGroup->addChild(
99*35238bceSAndroid Build Coastguard Worker new gls::BindAliasingAttributeTest(context.getTestContext(), context.getRenderContext(), type));
100*35238bceSAndroid Build Coastguard Worker
101*35238bceSAndroid Build Coastguard Worker // For types which occupy more than one location. Alias second location.
102*35238bceSAndroid Build Coastguard Worker if (type.getLocationSize() > 1)
103*35238bceSAndroid Build Coastguard Worker aliasingGroup->addChild(
104*35238bceSAndroid Build Coastguard Worker new gls::BindAliasingAttributeTest(context.getTestContext(), context.getRenderContext(), type, 1));
105*35238bceSAndroid Build Coastguard Worker
106*35238bceSAndroid Build Coastguard Worker // Use more than maximum attributes with conditional aliasing
107*35238bceSAndroid Build Coastguard Worker aliasingGroup->addChild(
108*35238bceSAndroid Build Coastguard Worker new gls::BindMaxAliasingAttributeTest(context.getTestContext(), context.getRenderContext(), type));
109*35238bceSAndroid Build Coastguard Worker
110*35238bceSAndroid Build Coastguard Worker // Use more than maximum attributes with inactive attributes
111*35238bceSAndroid Build Coastguard Worker aliasingGroup->addChild(
112*35238bceSAndroid Build Coastguard Worker new gls::BindInactiveAliasingAttributeTest(context.getTestContext(), context.getRenderContext(), type));
113*35238bceSAndroid Build Coastguard Worker }
114*35238bceSAndroid Build Coastguard Worker }
115*35238bceSAndroid Build Coastguard Worker
116*35238bceSAndroid Build Coastguard Worker // Test filling holes in attribute location
117*35238bceSAndroid Build Coastguard Worker {
118*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const holeGroup = new TestCaseGroup(
119*35238bceSAndroid Build Coastguard Worker context, "bind_hole", "Bind all, but one attribute and leave hole in location space for it.");
120*35238bceSAndroid Build Coastguard Worker
121*35238bceSAndroid Build Coastguard Worker root->addChild(holeGroup);
122*35238bceSAndroid Build Coastguard Worker
123*35238bceSAndroid Build Coastguard Worker for (int typeNdx = 0; typeNdx < DE_LENGTH_OF_ARRAY(types); typeNdx++)
124*35238bceSAndroid Build Coastguard Worker {
125*35238bceSAndroid Build Coastguard Worker const AttribType &type = types[typeNdx];
126*35238bceSAndroid Build Coastguard Worker
127*35238bceSAndroid Build Coastguard Worker // Bind first location, leave hole size of type and fill rest of locations
128*35238bceSAndroid Build Coastguard Worker holeGroup->addChild(
129*35238bceSAndroid Build Coastguard Worker new gls::BindHoleAttributeTest(context.getTestContext(), context.getRenderContext(), type));
130*35238bceSAndroid Build Coastguard Worker }
131*35238bceSAndroid Build Coastguard Worker }
132*35238bceSAndroid Build Coastguard Worker
133*35238bceSAndroid Build Coastguard Worker // Test binding at different times
134*35238bceSAndroid Build Coastguard Worker {
135*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const bindTimeGroup =
136*35238bceSAndroid Build Coastguard Worker new TestCaseGroup(context, "bind_time", "Bind time tests. Test binding at different stages.");
137*35238bceSAndroid Build Coastguard Worker
138*35238bceSAndroid Build Coastguard Worker root->addChild(bindTimeGroup);
139*35238bceSAndroid Build Coastguard Worker
140*35238bceSAndroid Build Coastguard Worker bindTimeGroup->addChild(
141*35238bceSAndroid Build Coastguard Worker new gls::PreAttachBindAttributeTest(context.getTestContext(), context.getRenderContext()));
142*35238bceSAndroid Build Coastguard Worker bindTimeGroup->addChild(
143*35238bceSAndroid Build Coastguard Worker new gls::PreLinkBindAttributeTest(context.getTestContext(), context.getRenderContext()));
144*35238bceSAndroid Build Coastguard Worker bindTimeGroup->addChild(
145*35238bceSAndroid Build Coastguard Worker new gls::PostLinkBindAttributeTest(context.getTestContext(), context.getRenderContext()));
146*35238bceSAndroid Build Coastguard Worker bindTimeGroup->addChild(new gls::BindRelinkAttributeTest(context.getTestContext(), context.getRenderContext()));
147*35238bceSAndroid Build Coastguard Worker bindTimeGroup->addChild(
148*35238bceSAndroid Build Coastguard Worker new gls::BindReattachAttributeTest(context.getTestContext(), context.getRenderContext()));
149*35238bceSAndroid Build Coastguard Worker }
150*35238bceSAndroid Build Coastguard Worker
151*35238bceSAndroid Build Coastguard Worker // Test relinking program
152*35238bceSAndroid Build Coastguard Worker {
153*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const relinkHoleGroup = new TestCaseGroup(
154*35238bceSAndroid Build Coastguard Worker context, "bind_relink_hole", "Test relinking with moving hole in attribute location space.");
155*35238bceSAndroid Build Coastguard Worker
156*35238bceSAndroid Build Coastguard Worker root->addChild(relinkHoleGroup);
157*35238bceSAndroid Build Coastguard Worker
158*35238bceSAndroid Build Coastguard Worker for (int typeNdx = 0; typeNdx < DE_LENGTH_OF_ARRAY(types); typeNdx++)
159*35238bceSAndroid Build Coastguard Worker {
160*35238bceSAndroid Build Coastguard Worker const AttribType &type = types[typeNdx];
161*35238bceSAndroid Build Coastguard Worker
162*35238bceSAndroid Build Coastguard Worker relinkHoleGroup->addChild(
163*35238bceSAndroid Build Coastguard Worker new gls::BindRelinkHoleAttributeTest(context.getTestContext(), context.getRenderContext(), type));
164*35238bceSAndroid Build Coastguard Worker }
165*35238bceSAndroid Build Coastguard Worker }
166*35238bceSAndroid Build Coastguard Worker
167*35238bceSAndroid Build Coastguard Worker return root;
168*35238bceSAndroid Build Coastguard Worker }
169*35238bceSAndroid Build Coastguard Worker
170*35238bceSAndroid Build Coastguard Worker } // namespace Functional
171*35238bceSAndroid Build Coastguard Worker } // namespace gles2
172*35238bceSAndroid Build Coastguard Worker } // namespace deqp
173