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