xref: /aosp_15_r20/external/deqp/modules/gles31/functional/es31fSamplerStateQueryTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES 3.1 Module
3*35238bceSAndroid Build Coastguard Worker  * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  *
5*35238bceSAndroid Build Coastguard Worker  * Copyright 2015 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 Sampler object state query tests
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es31fSamplerStateQueryTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsTextureStateQueryTests.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "glsStateQueryUtil.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
28*35238bceSAndroid Build Coastguard Worker 
29*35238bceSAndroid Build Coastguard Worker namespace deqp
30*35238bceSAndroid Build Coastguard Worker {
31*35238bceSAndroid Build Coastguard Worker namespace gles31
32*35238bceSAndroid Build Coastguard Worker {
33*35238bceSAndroid Build Coastguard Worker namespace Functional
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker 
36*35238bceSAndroid Build Coastguard Worker using namespace gls::StateQueryUtil;
37*35238bceSAndroid Build Coastguard Worker using namespace gls::TextureStateQueryTests;
38*35238bceSAndroid Build Coastguard Worker 
getVerifierSuffix(QueryType type)39*35238bceSAndroid Build Coastguard Worker static const char *getVerifierSuffix(QueryType type)
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker     switch (type)
42*35238bceSAndroid Build Coastguard Worker     {
43*35238bceSAndroid Build Coastguard Worker     case QUERY_SAMPLER_PARAM_FLOAT:
44*35238bceSAndroid Build Coastguard Worker     case QUERY_SAMPLER_PARAM_FLOAT_VEC4:
45*35238bceSAndroid Build Coastguard Worker         return "_float";
46*35238bceSAndroid Build Coastguard Worker 
47*35238bceSAndroid Build Coastguard Worker     case QUERY_SAMPLER_PARAM_INTEGER:
48*35238bceSAndroid Build Coastguard Worker     case QUERY_SAMPLER_PARAM_INTEGER_VEC4:
49*35238bceSAndroid Build Coastguard Worker         return "_integer";
50*35238bceSAndroid Build Coastguard Worker 
51*35238bceSAndroid Build Coastguard Worker     case QUERY_SAMPLER_PARAM_PURE_INTEGER:
52*35238bceSAndroid Build Coastguard Worker     case QUERY_SAMPLER_PARAM_PURE_INTEGER_VEC4:
53*35238bceSAndroid Build Coastguard Worker         return "_pure_int";
54*35238bceSAndroid Build Coastguard Worker 
55*35238bceSAndroid Build Coastguard Worker     case QUERY_SAMPLER_PARAM_PURE_UNSIGNED_INTEGER:
56*35238bceSAndroid Build Coastguard Worker     case QUERY_SAMPLER_PARAM_PURE_UNSIGNED_INTEGER_VEC4:
57*35238bceSAndroid Build Coastguard Worker         return "_pure_uint";
58*35238bceSAndroid Build Coastguard Worker 
59*35238bceSAndroid Build Coastguard Worker     default:
60*35238bceSAndroid Build Coastguard Worker         DE_ASSERT(false);
61*35238bceSAndroid Build Coastguard Worker         return DE_NULL;
62*35238bceSAndroid Build Coastguard Worker     }
63*35238bceSAndroid Build Coastguard Worker }
64*35238bceSAndroid Build Coastguard Worker 
isIsVectorQuery(TesterType tester)65*35238bceSAndroid Build Coastguard Worker static bool isIsVectorQuery(TesterType tester)
66*35238bceSAndroid Build Coastguard Worker {
67*35238bceSAndroid Build Coastguard Worker     return tester == TESTER_TEXTURE_BORDER_COLOR;
68*35238bceSAndroid Build Coastguard Worker }
69*35238bceSAndroid Build Coastguard Worker 
isExtendedParamQuery(TesterType tester)70*35238bceSAndroid Build Coastguard Worker static bool isExtendedParamQuery(TesterType tester)
71*35238bceSAndroid Build Coastguard Worker {
72*35238bceSAndroid Build Coastguard Worker     return tester == TESTER_TEXTURE_WRAP_S_CLAMP_TO_BORDER || tester == TESTER_TEXTURE_WRAP_T_CLAMP_TO_BORDER ||
73*35238bceSAndroid Build Coastguard Worker            tester == TESTER_TEXTURE_WRAP_R_CLAMP_TO_BORDER;
74*35238bceSAndroid Build Coastguard Worker }
75*35238bceSAndroid Build Coastguard Worker 
SamplerStateQueryTests(Context & context)76*35238bceSAndroid Build Coastguard Worker SamplerStateQueryTests::SamplerStateQueryTests(Context &context)
77*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "sampler", "Sampler state query tests")
78*35238bceSAndroid Build Coastguard Worker {
79*35238bceSAndroid Build Coastguard Worker }
80*35238bceSAndroid Build Coastguard Worker 
init(void)81*35238bceSAndroid Build Coastguard Worker void SamplerStateQueryTests::init(void)
82*35238bceSAndroid Build Coastguard Worker {
83*35238bceSAndroid Build Coastguard Worker     using namespace gls::TextureStateQueryTests;
84*35238bceSAndroid Build Coastguard Worker 
85*35238bceSAndroid Build Coastguard Worker     static const QueryType scalarVerifiers[] = {
86*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_INTEGER,
87*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_FLOAT,
88*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_PURE_INTEGER,
89*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_PURE_UNSIGNED_INTEGER,
90*35238bceSAndroid Build Coastguard Worker     };
91*35238bceSAndroid Build Coastguard Worker     static const QueryType nonPureVerifiers[] = {
92*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_INTEGER,
93*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_FLOAT,
94*35238bceSAndroid Build Coastguard Worker     };
95*35238bceSAndroid Build Coastguard Worker     static const QueryType vectorVerifiers[] = {
96*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_INTEGER_VEC4,
97*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_FLOAT_VEC4,
98*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_PURE_INTEGER_VEC4,
99*35238bceSAndroid Build Coastguard Worker         QUERY_SAMPLER_PARAM_PURE_UNSIGNED_INTEGER_VEC4,
100*35238bceSAndroid Build Coastguard Worker     };
101*35238bceSAndroid Build Coastguard Worker 
102*35238bceSAndroid Build Coastguard Worker #define FOR_EACH_VERIFIER(VERIFIERS, X)                                                   \
103*35238bceSAndroid Build Coastguard Worker     for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); ++verifierNdx) \
104*35238bceSAndroid Build Coastguard Worker     {                                                                                     \
105*35238bceSAndroid Build Coastguard Worker         const char *verifierSuffix = getVerifierSuffix((VERIFIERS)[verifierNdx]);         \
106*35238bceSAndroid Build Coastguard Worker         const QueryType verifier   = (VERIFIERS)[verifierNdx];                            \
107*35238bceSAndroid Build Coastguard Worker         targetGroup->addChild(X);                                                         \
108*35238bceSAndroid Build Coastguard Worker     }
109*35238bceSAndroid Build Coastguard Worker 
110*35238bceSAndroid Build Coastguard Worker     static const struct
111*35238bceSAndroid Build Coastguard Worker     {
112*35238bceSAndroid Build Coastguard Worker         const char *name;
113*35238bceSAndroid Build Coastguard Worker         const char *desc;
114*35238bceSAndroid Build Coastguard Worker         TesterType tester;
115*35238bceSAndroid Build Coastguard Worker         bool newInGLES31;
116*35238bceSAndroid Build Coastguard Worker     } states[] = {
117*35238bceSAndroid Build Coastguard Worker         {"texture_wrap_s", "TEXTURE_WRAP_S", TESTER_TEXTURE_WRAP_S, false},
118*35238bceSAndroid Build Coastguard Worker         {"texture_wrap_t", "TEXTURE_WRAP_T", TESTER_TEXTURE_WRAP_T, false},
119*35238bceSAndroid Build Coastguard Worker         {"texture_wrap_r", "TEXTURE_WRAP_R", TESTER_TEXTURE_WRAP_R, false},
120*35238bceSAndroid Build Coastguard Worker         {"texture_mag_filter", "TEXTURE_MAG_FILTER", TESTER_TEXTURE_MAG_FILTER, false},
121*35238bceSAndroid Build Coastguard Worker         {"texture_min_filter", "TEXTURE_MIN_FILTER", TESTER_TEXTURE_MIN_FILTER, false},
122*35238bceSAndroid Build Coastguard Worker         {"texture_min_lod", "TEXTURE_MIN_LOD", TESTER_TEXTURE_MIN_LOD, false},
123*35238bceSAndroid Build Coastguard Worker         {"texture_max_lod", "TEXTURE_MAX_LOD", TESTER_TEXTURE_MAX_LOD, false},
124*35238bceSAndroid Build Coastguard Worker         {"texture_compare_mode", "TEXTURE_COMPARE_MODE", TESTER_TEXTURE_COMPARE_MODE, false},
125*35238bceSAndroid Build Coastguard Worker         {"texture_compare_func", "TEXTURE_COMPARE_FUNC", TESTER_TEXTURE_COMPARE_FUNC, false},
126*35238bceSAndroid Build Coastguard Worker         {"texture_srgb_decode", "TEXTURE_SRGB_DECODE_EXT", TESTER_TEXTURE_SRGB_DECODE_EXT, true},
127*35238bceSAndroid Build Coastguard Worker         {"texture_border_color", "TEXTURE_BORDER_COLOR", TESTER_TEXTURE_BORDER_COLOR, true},
128*35238bceSAndroid Build Coastguard Worker         {"texture_wrap_s_clamp_to_border", "TEXTURE_WRAP_S_CLAMP_TO_BORDER", TESTER_TEXTURE_WRAP_S_CLAMP_TO_BORDER,
129*35238bceSAndroid Build Coastguard Worker          true},
130*35238bceSAndroid Build Coastguard Worker         {"texture_wrap_t_clamp_to_border", "TEXTURE_WRAP_T_CLAMP_TO_BORDER", TESTER_TEXTURE_WRAP_T_CLAMP_TO_BORDER,
131*35238bceSAndroid Build Coastguard Worker          true},
132*35238bceSAndroid Build Coastguard Worker         {"texture_wrap_r_clamp_to_border", "TEXTURE_WRAP_R_CLAMP_TO_BORDER", TESTER_TEXTURE_WRAP_R_CLAMP_TO_BORDER,
133*35238bceSAndroid Build Coastguard Worker          true},
134*35238bceSAndroid Build Coastguard Worker     };
135*35238bceSAndroid Build Coastguard Worker     static const struct
136*35238bceSAndroid Build Coastguard Worker     {
137*35238bceSAndroid Build Coastguard Worker         const char *name;
138*35238bceSAndroid Build Coastguard Worker         const char *desc;
139*35238bceSAndroid Build Coastguard Worker         QueryType verifier;
140*35238bceSAndroid Build Coastguard Worker     } pureSetters[] = {
141*35238bceSAndroid Build Coastguard Worker         {"set_pure_int", "Set state with pure int", QUERY_SAMPLER_PARAM_PURE_INTEGER},
142*35238bceSAndroid Build Coastguard Worker         {"set_pure_uint", "Set state with pure unsigned int", QUERY_SAMPLER_PARAM_PURE_UNSIGNED_INTEGER},
143*35238bceSAndroid Build Coastguard Worker     };
144*35238bceSAndroid Build Coastguard Worker     static const struct
145*35238bceSAndroid Build Coastguard Worker     {
146*35238bceSAndroid Build Coastguard Worker         const char *name;
147*35238bceSAndroid Build Coastguard Worker         const char *desc;
148*35238bceSAndroid Build Coastguard Worker         TesterType intTester;
149*35238bceSAndroid Build Coastguard Worker         TesterType uintTester;
150*35238bceSAndroid Build Coastguard Worker     } pureStates[] = {
151*35238bceSAndroid Build Coastguard Worker         {"texture_wrap_s", "TEXTURE_WRAP_S", TESTER_TEXTURE_WRAP_S_SET_PURE_INT, TESTER_TEXTURE_WRAP_S_SET_PURE_UINT},
152*35238bceSAndroid Build Coastguard Worker         {"texture_wrap_t", "TEXTURE_WRAP_T", TESTER_TEXTURE_WRAP_T_SET_PURE_INT, TESTER_TEXTURE_WRAP_T_SET_PURE_UINT},
153*35238bceSAndroid Build Coastguard Worker         {"texture_wrap_r", "TEXTURE_WRAP_R", TESTER_TEXTURE_WRAP_R_SET_PURE_INT, TESTER_TEXTURE_WRAP_R_SET_PURE_UINT},
154*35238bceSAndroid Build Coastguard Worker         {"texture_mag_filter", "TEXTURE_MAG_FILTER", TESTER_TEXTURE_MAG_FILTER_SET_PURE_INT,
155*35238bceSAndroid Build Coastguard Worker          TESTER_TEXTURE_MAG_FILTER_SET_PURE_UINT},
156*35238bceSAndroid Build Coastguard Worker         {"texture_min_filter", "TEXTURE_MIN_FILTER", TESTER_TEXTURE_MIN_FILTER_SET_PURE_INT,
157*35238bceSAndroid Build Coastguard Worker          TESTER_TEXTURE_MIN_FILTER_SET_PURE_UINT},
158*35238bceSAndroid Build Coastguard Worker         {"texture_min_lod", "TEXTURE_MIN_LOD", TESTER_TEXTURE_MIN_LOD_SET_PURE_INT,
159*35238bceSAndroid Build Coastguard Worker          TESTER_TEXTURE_MIN_LOD_SET_PURE_UINT},
160*35238bceSAndroid Build Coastguard Worker         {"texture_max_lod", "TEXTURE_MAX_LOD", TESTER_TEXTURE_MAX_LOD_SET_PURE_INT,
161*35238bceSAndroid Build Coastguard Worker          TESTER_TEXTURE_MAX_LOD_SET_PURE_UINT},
162*35238bceSAndroid Build Coastguard Worker         {"texture_compare_mode", "TEXTURE_COMPARE_MODE", TESTER_TEXTURE_COMPARE_MODE_SET_PURE_INT,
163*35238bceSAndroid Build Coastguard Worker          TESTER_TEXTURE_COMPARE_MODE_SET_PURE_UINT},
164*35238bceSAndroid Build Coastguard Worker         {"texture_compare_func", "TEXTURE_COMPARE_FUNC", TESTER_TEXTURE_COMPARE_FUNC_SET_PURE_INT,
165*35238bceSAndroid Build Coastguard Worker          TESTER_TEXTURE_COMPARE_FUNC_SET_PURE_UINT},
166*35238bceSAndroid Build Coastguard Worker         {"texture_srgb_decode", "TEXTURE_SRGB_DECODE_EXT", TESTER_TEXTURE_SRGB_DECODE_EXT_SET_PURE_INT,
167*35238bceSAndroid Build Coastguard Worker          TESTER_TEXTURE_SRGB_DECODE_EXT_SET_PURE_UINT},
168*35238bceSAndroid Build Coastguard Worker         // \note texture_border_color is already checked
169*35238bceSAndroid Build Coastguard Worker         // \note texture_wrap_*_clamp_to_border brings no additional coverage
170*35238bceSAndroid Build Coastguard Worker     };
171*35238bceSAndroid Build Coastguard Worker 
172*35238bceSAndroid Build Coastguard Worker     // set_value
173*35238bceSAndroid Build Coastguard Worker     {
174*35238bceSAndroid Build Coastguard Worker         tcu::TestCaseGroup *const targetGroup =
175*35238bceSAndroid Build Coastguard Worker             new tcu::TestCaseGroup(m_testCtx, "set_value", "Set value and query it");
176*35238bceSAndroid Build Coastguard Worker         addChild(targetGroup);
177*35238bceSAndroid Build Coastguard Worker 
178*35238bceSAndroid Build Coastguard Worker         for (int stateNdx = 0; stateNdx < DE_LENGTH_OF_ARRAY(states); ++stateNdx)
179*35238bceSAndroid Build Coastguard Worker         {
180*35238bceSAndroid Build Coastguard Worker             // already tested in gles3
181*35238bceSAndroid Build Coastguard Worker             if (!states[stateNdx].newInGLES31)
182*35238bceSAndroid Build Coastguard Worker                 continue;
183*35238bceSAndroid Build Coastguard Worker 
184*35238bceSAndroid Build Coastguard Worker             if (isExtendedParamQuery(states[stateNdx].tester))
185*35238bceSAndroid Build Coastguard Worker             {
186*35238bceSAndroid Build Coastguard Worker                 // no need to cover for all getters if the only thing new is the param name
187*35238bceSAndroid Build Coastguard Worker                 FOR_EACH_VERIFIER(nonPureVerifiers,
188*35238bceSAndroid Build Coastguard Worker                                   createSamplerParamTest(m_testCtx, m_context.getRenderContext(),
189*35238bceSAndroid Build Coastguard Worker                                                          std::string() + states[stateNdx].name + verifierSuffix,
190*35238bceSAndroid Build Coastguard Worker                                                          states[stateNdx].desc, verifier, states[stateNdx].tester))
191*35238bceSAndroid Build Coastguard Worker             }
192*35238bceSAndroid Build Coastguard Worker             else if (isIsVectorQuery(states[stateNdx].tester))
193*35238bceSAndroid Build Coastguard Worker             {
194*35238bceSAndroid Build Coastguard Worker                 FOR_EACH_VERIFIER(vectorVerifiers,
195*35238bceSAndroid Build Coastguard Worker                                   createSamplerParamTest(m_testCtx, m_context.getRenderContext(),
196*35238bceSAndroid Build Coastguard Worker                                                          std::string() + states[stateNdx].name + verifierSuffix,
197*35238bceSAndroid Build Coastguard Worker                                                          states[stateNdx].desc, verifier, states[stateNdx].tester))
198*35238bceSAndroid Build Coastguard Worker             }
199*35238bceSAndroid Build Coastguard Worker             else
200*35238bceSAndroid Build Coastguard Worker             {
201*35238bceSAndroid Build Coastguard Worker                 FOR_EACH_VERIFIER(scalarVerifiers,
202*35238bceSAndroid Build Coastguard Worker                                   createSamplerParamTest(m_testCtx, m_context.getRenderContext(),
203*35238bceSAndroid Build Coastguard Worker                                                          std::string() + states[stateNdx].name + verifierSuffix,
204*35238bceSAndroid Build Coastguard Worker                                                          states[stateNdx].desc, verifier, states[stateNdx].tester))
205*35238bceSAndroid Build Coastguard Worker             }
206*35238bceSAndroid Build Coastguard Worker         }
207*35238bceSAndroid Build Coastguard Worker     }
208*35238bceSAndroid Build Coastguard Worker 
209*35238bceSAndroid Build Coastguard Worker #undef FOR_EACH_VERIFIER
210*35238bceSAndroid Build Coastguard Worker 
211*35238bceSAndroid Build Coastguard Worker     // set_pure_uint
212*35238bceSAndroid Build Coastguard Worker     // set_pure_int
213*35238bceSAndroid Build Coastguard Worker     for (int setterNdx = 0; setterNdx < DE_LENGTH_OF_ARRAY(pureSetters); ++setterNdx)
214*35238bceSAndroid Build Coastguard Worker     {
215*35238bceSAndroid Build Coastguard Worker         tcu::TestCaseGroup *const targetGroup =
216*35238bceSAndroid Build Coastguard Worker             new tcu::TestCaseGroup(m_testCtx, pureSetters[setterNdx].name, pureSetters[setterNdx].desc);
217*35238bceSAndroid Build Coastguard Worker         addChild(targetGroup);
218*35238bceSAndroid Build Coastguard Worker 
219*35238bceSAndroid Build Coastguard Worker         for (int stateNdx = 0; stateNdx < DE_LENGTH_OF_ARRAY(pureStates); ++stateNdx)
220*35238bceSAndroid Build Coastguard Worker         {
221*35238bceSAndroid Build Coastguard Worker             const TesterType tester = (pureSetters[setterNdx].verifier == QUERY_SAMPLER_PARAM_PURE_INTEGER) ?
222*35238bceSAndroid Build Coastguard Worker                                           (pureStates[stateNdx].intTester) :
223*35238bceSAndroid Build Coastguard Worker                                       (pureSetters[setterNdx].verifier == QUERY_SAMPLER_PARAM_PURE_UNSIGNED_INTEGER) ?
224*35238bceSAndroid Build Coastguard Worker                                           (pureStates[stateNdx].uintTester) :
225*35238bceSAndroid Build Coastguard Worker                                           (TESTER_LAST);
226*35238bceSAndroid Build Coastguard Worker 
227*35238bceSAndroid Build Coastguard Worker             targetGroup->addChild(createSamplerParamTest(
228*35238bceSAndroid Build Coastguard Worker                 m_testCtx, m_context.getRenderContext(), std::string() + pureStates[stateNdx].name,
229*35238bceSAndroid Build Coastguard Worker                 pureStates[stateNdx].desc, pureSetters[setterNdx].verifier, tester));
230*35238bceSAndroid Build Coastguard Worker         }
231*35238bceSAndroid Build Coastguard Worker     }
232*35238bceSAndroid Build Coastguard Worker }
233*35238bceSAndroid Build Coastguard Worker 
234*35238bceSAndroid Build Coastguard Worker } // namespace Functional
235*35238bceSAndroid Build Coastguard Worker } // namespace gles31
236*35238bceSAndroid Build Coastguard Worker } // namespace deqp
237