xref: /aosp_15_r20/external/deqp/modules/gles2/functional/es2fAttribLocationTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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