xref: /aosp_15_r20/external/deqp/modules/gles31/functional/es31fTextureFormatTests.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 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 Texture format tests.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es31fTextureFormatTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "gluContextInfo.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "gluPixelTransfer.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluStrUtil.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "gluTexture.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "gluTextureUtil.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "glsTextureTestUtil.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "tcuTextureUtil.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "deStringUtil.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "deRandom.hpp"
34*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
35*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
36*35238bceSAndroid Build Coastguard Worker 
37*35238bceSAndroid Build Coastguard Worker using std::string;
38*35238bceSAndroid Build Coastguard Worker using std::vector;
39*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
40*35238bceSAndroid Build Coastguard Worker 
41*35238bceSAndroid Build Coastguard Worker namespace deqp
42*35238bceSAndroid Build Coastguard Worker {
43*35238bceSAndroid Build Coastguard Worker namespace gles31
44*35238bceSAndroid Build Coastguard Worker {
45*35238bceSAndroid Build Coastguard Worker namespace Functional
46*35238bceSAndroid Build Coastguard Worker {
47*35238bceSAndroid Build Coastguard Worker 
48*35238bceSAndroid Build Coastguard Worker using namespace deqp::gls;
49*35238bceSAndroid Build Coastguard Worker using namespace deqp::gls::TextureTestUtil;
50*35238bceSAndroid Build Coastguard Worker using namespace glu::TextureTestUtil;
51*35238bceSAndroid Build Coastguard Worker 
52*35238bceSAndroid Build Coastguard Worker using tcu::Sampler;
53*35238bceSAndroid Build Coastguard Worker 
54*35238bceSAndroid Build Coastguard Worker struct SupportedExtensions
55*35238bceSAndroid Build Coastguard Worker {
56*35238bceSAndroid Build Coastguard Worker     bool cubeMapArray;
57*35238bceSAndroid Build Coastguard Worker     bool sRGBR8;
58*35238bceSAndroid Build Coastguard Worker     bool sRGBRG8;
59*35238bceSAndroid Build Coastguard Worker };
60*35238bceSAndroid Build Coastguard Worker 
getCubeFaceFromNdx(int ndx)61*35238bceSAndroid Build Coastguard Worker static tcu::CubeFace getCubeFaceFromNdx(int ndx)
62*35238bceSAndroid Build Coastguard Worker {
63*35238bceSAndroid Build Coastguard Worker     switch (ndx)
64*35238bceSAndroid Build Coastguard Worker     {
65*35238bceSAndroid Build Coastguard Worker     case 0:
66*35238bceSAndroid Build Coastguard Worker         return tcu::CUBEFACE_POSITIVE_X;
67*35238bceSAndroid Build Coastguard Worker     case 1:
68*35238bceSAndroid Build Coastguard Worker         return tcu::CUBEFACE_NEGATIVE_X;
69*35238bceSAndroid Build Coastguard Worker     case 2:
70*35238bceSAndroid Build Coastguard Worker         return tcu::CUBEFACE_POSITIVE_Y;
71*35238bceSAndroid Build Coastguard Worker     case 3:
72*35238bceSAndroid Build Coastguard Worker         return tcu::CUBEFACE_NEGATIVE_Y;
73*35238bceSAndroid Build Coastguard Worker     case 4:
74*35238bceSAndroid Build Coastguard Worker         return tcu::CUBEFACE_POSITIVE_Z;
75*35238bceSAndroid Build Coastguard Worker     case 5:
76*35238bceSAndroid Build Coastguard Worker         return tcu::CUBEFACE_NEGATIVE_Z;
77*35238bceSAndroid Build Coastguard Worker     default:
78*35238bceSAndroid Build Coastguard Worker         DE_ASSERT(false);
79*35238bceSAndroid Build Coastguard Worker         return tcu::CUBEFACE_LAST;
80*35238bceSAndroid Build Coastguard Worker     }
81*35238bceSAndroid Build Coastguard Worker }
82*35238bceSAndroid Build Coastguard Worker 
83*35238bceSAndroid Build Coastguard Worker namespace
84*35238bceSAndroid Build Coastguard Worker {
85*35238bceSAndroid Build Coastguard Worker 
checkSupport(const glu::ContextInfo & renderCtxInfoid)86*35238bceSAndroid Build Coastguard Worker SupportedExtensions checkSupport(const glu::ContextInfo &renderCtxInfoid)
87*35238bceSAndroid Build Coastguard Worker {
88*35238bceSAndroid Build Coastguard Worker     SupportedExtensions supportedExtensions;
89*35238bceSAndroid Build Coastguard Worker 
90*35238bceSAndroid Build Coastguard Worker     supportedExtensions.cubeMapArray = renderCtxInfoid.isExtensionSupported("GL_EXT_texture_cube_map_array");
91*35238bceSAndroid Build Coastguard Worker     supportedExtensions.sRGBR8       = renderCtxInfoid.isExtensionSupported("GL_EXT_texture_sRGB_R8");
92*35238bceSAndroid Build Coastguard Worker     supportedExtensions.sRGBRG8      = renderCtxInfoid.isExtensionSupported("GL_EXT_texture_sRGB_RG8");
93*35238bceSAndroid Build Coastguard Worker 
94*35238bceSAndroid Build Coastguard Worker     return supportedExtensions;
95*35238bceSAndroid Build Coastguard Worker }
96*35238bceSAndroid Build Coastguard Worker 
97*35238bceSAndroid Build Coastguard Worker } // namespace
98*35238bceSAndroid Build Coastguard Worker 
99*35238bceSAndroid Build Coastguard Worker // TextureCubeArrayFormatCase
100*35238bceSAndroid Build Coastguard Worker 
101*35238bceSAndroid Build Coastguard Worker class TextureCubeArrayFormatCase : public tcu::TestCase
102*35238bceSAndroid Build Coastguard Worker {
103*35238bceSAndroid Build Coastguard Worker public:
104*35238bceSAndroid Build Coastguard Worker     TextureCubeArrayFormatCase(tcu::TestContext &testCtx, glu::RenderContext &renderCtx,
105*35238bceSAndroid Build Coastguard Worker                                const glu::ContextInfo &renderCtxInfo, const char *name, const char *description,
106*35238bceSAndroid Build Coastguard Worker                                uint32_t format, uint32_t dataType, int size, int depth);
107*35238bceSAndroid Build Coastguard Worker     TextureCubeArrayFormatCase(tcu::TestContext &testCtx, glu::RenderContext &renderCtx,
108*35238bceSAndroid Build Coastguard Worker                                const glu::ContextInfo &renderCtxInfo, const char *name, const char *description,
109*35238bceSAndroid Build Coastguard Worker                                uint32_t internalFormat, int size, int depth);
110*35238bceSAndroid Build Coastguard Worker     ~TextureCubeArrayFormatCase(void);
111*35238bceSAndroid Build Coastguard Worker 
112*35238bceSAndroid Build Coastguard Worker     void init(void);
113*35238bceSAndroid Build Coastguard Worker     void deinit(void);
114*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
115*35238bceSAndroid Build Coastguard Worker 
116*35238bceSAndroid Build Coastguard Worker private:
117*35238bceSAndroid Build Coastguard Worker     TextureCubeArrayFormatCase(const TextureCubeArrayFormatCase &other);
118*35238bceSAndroid Build Coastguard Worker     TextureCubeArrayFormatCase &operator=(const TextureCubeArrayFormatCase &other);
119*35238bceSAndroid Build Coastguard Worker 
120*35238bceSAndroid Build Coastguard Worker     bool testLayerFace(int layerNdx);
121*35238bceSAndroid Build Coastguard Worker 
122*35238bceSAndroid Build Coastguard Worker     glu::RenderContext &m_renderCtx;
123*35238bceSAndroid Build Coastguard Worker     const glu::ContextInfo &m_renderCtxInfo;
124*35238bceSAndroid Build Coastguard Worker 
125*35238bceSAndroid Build Coastguard Worker     const uint32_t m_format;
126*35238bceSAndroid Build Coastguard Worker     const uint32_t m_dataType;
127*35238bceSAndroid Build Coastguard Worker     const int m_size;
128*35238bceSAndroid Build Coastguard Worker     const int m_depth;
129*35238bceSAndroid Build Coastguard Worker 
130*35238bceSAndroid Build Coastguard Worker     glu::TextureCubeArray *m_texture;
131*35238bceSAndroid Build Coastguard Worker     TextureTestUtil::TextureRenderer m_renderer;
132*35238bceSAndroid Build Coastguard Worker 
133*35238bceSAndroid Build Coastguard Worker     int m_curLayerFace;
134*35238bceSAndroid Build Coastguard Worker };
135*35238bceSAndroid Build Coastguard Worker 
TextureCubeArrayFormatCase(tcu::TestContext & testCtx,glu::RenderContext & renderCtx,const glu::ContextInfo & renderCtxInfo,const char * name,const char * description,uint32_t format,uint32_t dataType,int size,int depth)136*35238bceSAndroid Build Coastguard Worker TextureCubeArrayFormatCase::TextureCubeArrayFormatCase(tcu::TestContext &testCtx, glu::RenderContext &renderCtx,
137*35238bceSAndroid Build Coastguard Worker                                                        const glu::ContextInfo &renderCtxInfo, const char *name,
138*35238bceSAndroid Build Coastguard Worker                                                        const char *description, uint32_t format, uint32_t dataType,
139*35238bceSAndroid Build Coastguard Worker                                                        int size, int depth)
140*35238bceSAndroid Build Coastguard Worker     : TestCase(testCtx, name, description)
141*35238bceSAndroid Build Coastguard Worker     , m_renderCtx(renderCtx)
142*35238bceSAndroid Build Coastguard Worker     , m_renderCtxInfo(renderCtxInfo)
143*35238bceSAndroid Build Coastguard Worker     , m_format(format)
144*35238bceSAndroid Build Coastguard Worker     , m_dataType(dataType)
145*35238bceSAndroid Build Coastguard Worker     , m_size(size)
146*35238bceSAndroid Build Coastguard Worker     , m_depth(depth)
147*35238bceSAndroid Build Coastguard Worker     , m_texture(DE_NULL)
148*35238bceSAndroid Build Coastguard Worker     , m_renderer(renderCtx, testCtx.getLog(), glu::getContextTypeGLSLVersion(renderCtx.getType()), glu::PRECISION_HIGHP)
149*35238bceSAndroid Build Coastguard Worker     , m_curLayerFace(0)
150*35238bceSAndroid Build Coastguard Worker {
151*35238bceSAndroid Build Coastguard Worker }
152*35238bceSAndroid Build Coastguard Worker 
TextureCubeArrayFormatCase(tcu::TestContext & testCtx,glu::RenderContext & renderCtx,const glu::ContextInfo & renderCtxInfo,const char * name,const char * description,uint32_t internalFormat,int size,int depth)153*35238bceSAndroid Build Coastguard Worker TextureCubeArrayFormatCase::TextureCubeArrayFormatCase(tcu::TestContext &testCtx, glu::RenderContext &renderCtx,
154*35238bceSAndroid Build Coastguard Worker                                                        const glu::ContextInfo &renderCtxInfo, const char *name,
155*35238bceSAndroid Build Coastguard Worker                                                        const char *description, uint32_t internalFormat, int size,
156*35238bceSAndroid Build Coastguard Worker                                                        int depth)
157*35238bceSAndroid Build Coastguard Worker     : TestCase(testCtx, name, description)
158*35238bceSAndroid Build Coastguard Worker     , m_renderCtx(renderCtx)
159*35238bceSAndroid Build Coastguard Worker     , m_renderCtxInfo(renderCtxInfo)
160*35238bceSAndroid Build Coastguard Worker     , m_format(internalFormat)
161*35238bceSAndroid Build Coastguard Worker     , m_dataType(GL_NONE)
162*35238bceSAndroid Build Coastguard Worker     , m_size(size)
163*35238bceSAndroid Build Coastguard Worker     , m_depth(depth)
164*35238bceSAndroid Build Coastguard Worker     , m_texture(DE_NULL)
165*35238bceSAndroid Build Coastguard Worker     , m_renderer(renderCtx, testCtx.getLog(), glu::getContextTypeGLSLVersion(renderCtx.getType()), glu::PRECISION_HIGHP)
166*35238bceSAndroid Build Coastguard Worker     , m_curLayerFace(0)
167*35238bceSAndroid Build Coastguard Worker {
168*35238bceSAndroid Build Coastguard Worker }
169*35238bceSAndroid Build Coastguard Worker 
~TextureCubeArrayFormatCase(void)170*35238bceSAndroid Build Coastguard Worker TextureCubeArrayFormatCase::~TextureCubeArrayFormatCase(void)
171*35238bceSAndroid Build Coastguard Worker {
172*35238bceSAndroid Build Coastguard Worker     deinit();
173*35238bceSAndroid Build Coastguard Worker }
174*35238bceSAndroid Build Coastguard Worker 
init(void)175*35238bceSAndroid Build Coastguard Worker void TextureCubeArrayFormatCase::init(void)
176*35238bceSAndroid Build Coastguard Worker {
177*35238bceSAndroid Build Coastguard Worker     const SupportedExtensions supportedExtensions = checkSupport(m_renderCtxInfo);
178*35238bceSAndroid Build Coastguard Worker 
179*35238bceSAndroid Build Coastguard Worker     if ((supportedExtensions.cubeMapArray && m_format != GL_SR8_EXT && m_format != GL_SRG8_EXT) ||
180*35238bceSAndroid Build Coastguard Worker         (supportedExtensions.cubeMapArray && m_format == GL_SR8_EXT && supportedExtensions.sRGBR8) ||
181*35238bceSAndroid Build Coastguard Worker         (supportedExtensions.cubeMapArray && m_format == GL_SRG8_EXT && supportedExtensions.sRGBRG8))
182*35238bceSAndroid Build Coastguard Worker     {
183*35238bceSAndroid Build Coastguard Worker         m_texture = m_dataType != GL_NONE ?
184*35238bceSAndroid Build Coastguard Worker                         new glu::TextureCubeArray(m_renderCtx, m_format, m_dataType, m_size,
185*35238bceSAndroid Build Coastguard Worker                                                   m_depth) // Implicit internal format.
186*35238bceSAndroid Build Coastguard Worker                         :
187*35238bceSAndroid Build Coastguard Worker                         new glu::TextureCubeArray(m_renderCtx, m_format, m_size, m_depth); // Explicit internal format.
188*35238bceSAndroid Build Coastguard Worker 
189*35238bceSAndroid Build Coastguard Worker         tcu::TextureFormatInfo spec = tcu::getTextureFormatInfo(m_texture->getRefTexture().getFormat());
190*35238bceSAndroid Build Coastguard Worker 
191*35238bceSAndroid Build Coastguard Worker         // Fill level 0.
192*35238bceSAndroid Build Coastguard Worker         m_texture->getRefTexture().allocLevel(0);
193*35238bceSAndroid Build Coastguard Worker         tcu::fillWithComponentGradients(m_texture->getRefTexture().getLevel(0), spec.valueMin, spec.valueMax);
194*35238bceSAndroid Build Coastguard Worker 
195*35238bceSAndroid Build Coastguard Worker         // Initialize state.
196*35238bceSAndroid Build Coastguard Worker         m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
197*35238bceSAndroid Build Coastguard Worker         m_curLayerFace = 0;
198*35238bceSAndroid Build Coastguard Worker     }
199*35238bceSAndroid Build Coastguard Worker     else
200*35238bceSAndroid Build Coastguard Worker     {
201*35238bceSAndroid Build Coastguard Worker         if (supportedExtensions.cubeMapArray == false)
202*35238bceSAndroid Build Coastguard Worker             m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "Cube map arrays not supported");
203*35238bceSAndroid Build Coastguard Worker 
204*35238bceSAndroid Build Coastguard Worker         if (supportedExtensions.sRGBR8 == false)
205*35238bceSAndroid Build Coastguard Worker             m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "texture srgb r8 not supported");
206*35238bceSAndroid Build Coastguard Worker 
207*35238bceSAndroid Build Coastguard Worker         if (supportedExtensions.sRGBRG8 == false)
208*35238bceSAndroid Build Coastguard Worker             m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "texture srgb rg8 not supported");
209*35238bceSAndroid Build Coastguard Worker     }
210*35238bceSAndroid Build Coastguard Worker }
211*35238bceSAndroid Build Coastguard Worker 
deinit(void)212*35238bceSAndroid Build Coastguard Worker void TextureCubeArrayFormatCase::deinit(void)
213*35238bceSAndroid Build Coastguard Worker {
214*35238bceSAndroid Build Coastguard Worker     delete m_texture;
215*35238bceSAndroid Build Coastguard Worker     m_texture = DE_NULL;
216*35238bceSAndroid Build Coastguard Worker 
217*35238bceSAndroid Build Coastguard Worker     m_renderer.clear();
218*35238bceSAndroid Build Coastguard Worker }
219*35238bceSAndroid Build Coastguard Worker 
testLayerFace(int layerFaceNdx)220*35238bceSAndroid Build Coastguard Worker bool TextureCubeArrayFormatCase::testLayerFace(int layerFaceNdx)
221*35238bceSAndroid Build Coastguard Worker {
222*35238bceSAndroid Build Coastguard Worker     const glw::Functions &gl = m_renderCtx.getFunctions();
223*35238bceSAndroid Build Coastguard Worker     TestLog &log             = m_testCtx.getLog();
224*35238bceSAndroid Build Coastguard Worker     RandomViewport viewport(m_renderCtx.getRenderTarget(), m_size, m_size, deStringHash(getName()));
225*35238bceSAndroid Build Coastguard Worker     tcu::Surface renderedFrame(viewport.width, viewport.height);
226*35238bceSAndroid Build Coastguard Worker     tcu::Surface referenceFrame(viewport.width, viewport.height);
227*35238bceSAndroid Build Coastguard Worker     tcu::RGBA threshold = m_renderCtx.getRenderTarget().getPixelFormat().getColorThreshold() + tcu::RGBA(1, 1, 1, 1);
228*35238bceSAndroid Build Coastguard Worker     vector<float> texCoord;
229*35238bceSAndroid Build Coastguard Worker     ReferenceParams renderParams(TEXTURETYPE_CUBE_ARRAY);
230*35238bceSAndroid Build Coastguard Worker     tcu::TextureFormatInfo spec = tcu::getTextureFormatInfo(m_texture->getRefTexture().getFormat());
231*35238bceSAndroid Build Coastguard Worker     const int layerNdx          = layerFaceNdx / 6;
232*35238bceSAndroid Build Coastguard Worker     const tcu::CubeFace face    = getCubeFaceFromNdx(layerFaceNdx % 6);
233*35238bceSAndroid Build Coastguard Worker 
234*35238bceSAndroid Build Coastguard Worker     renderParams.samplerType = getSamplerType(m_texture->getRefTexture().getFormat());
235*35238bceSAndroid Build Coastguard Worker     renderParams.sampler     = Sampler(Sampler::CLAMP_TO_EDGE, Sampler::CLAMP_TO_EDGE, Sampler::CLAMP_TO_EDGE,
236*35238bceSAndroid Build Coastguard Worker                                        Sampler::NEAREST, Sampler::NEAREST);
237*35238bceSAndroid Build Coastguard Worker     renderParams.sampler.seamlessCubeMap = true;
238*35238bceSAndroid Build Coastguard Worker     renderParams.colorScale              = spec.lookupScale;
239*35238bceSAndroid Build Coastguard Worker     renderParams.colorBias               = spec.lookupBias;
240*35238bceSAndroid Build Coastguard Worker 
241*35238bceSAndroid Build Coastguard Worker     // Layer here specifies the cube slice
242*35238bceSAndroid Build Coastguard Worker     computeQuadTexCoordCubeArray(texCoord, face, tcu::Vec2(0.0f, 0.0f), tcu::Vec2(1.0f, 1.0f),
243*35238bceSAndroid Build Coastguard Worker                                  tcu::Vec2((float)layerNdx));
244*35238bceSAndroid Build Coastguard Worker 
245*35238bceSAndroid Build Coastguard Worker     // Setup base viewport.
246*35238bceSAndroid Build Coastguard Worker     gl.clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
247*35238bceSAndroid Build Coastguard Worker     gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
248*35238bceSAndroid Build Coastguard Worker 
249*35238bceSAndroid Build Coastguard Worker     // Upload texture data to GL.
250*35238bceSAndroid Build Coastguard Worker     m_texture->upload();
251*35238bceSAndroid Build Coastguard Worker 
252*35238bceSAndroid Build Coastguard Worker     // Bind to unit 0.
253*35238bceSAndroid Build Coastguard Worker     gl.activeTexture(GL_TEXTURE0);
254*35238bceSAndroid Build Coastguard Worker     gl.bindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, m_texture->getGLTexture());
255*35238bceSAndroid Build Coastguard Worker 
256*35238bceSAndroid Build Coastguard Worker     // Setup nearest neighbor filtering and clamp-to-edge.
257*35238bceSAndroid Build Coastguard Worker     gl.texParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
258*35238bceSAndroid Build Coastguard Worker     gl.texParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
259*35238bceSAndroid Build Coastguard Worker     gl.texParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
260*35238bceSAndroid Build Coastguard Worker     gl.texParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
261*35238bceSAndroid Build Coastguard Worker 
262*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.getError(), "Set texturing state");
263*35238bceSAndroid Build Coastguard Worker 
264*35238bceSAndroid Build Coastguard Worker     // Draw.
265*35238bceSAndroid Build Coastguard Worker     m_renderer.renderQuad(0, &texCoord[0], renderParams);
266*35238bceSAndroid Build Coastguard Worker     glu::readPixels(m_renderCtx, viewport.x, viewport.y, renderedFrame.getAccess());
267*35238bceSAndroid Build Coastguard Worker 
268*35238bceSAndroid Build Coastguard Worker     // Compute reference.
269*35238bceSAndroid Build Coastguard Worker     sampleTexture(tcu::SurfaceAccess(referenceFrame, m_renderCtx.getRenderTarget().getPixelFormat()),
270*35238bceSAndroid Build Coastguard Worker                   m_texture->getRefTexture(), &texCoord[0], renderParams);
271*35238bceSAndroid Build Coastguard Worker 
272*35238bceSAndroid Build Coastguard Worker     // Compare and log.
273*35238bceSAndroid Build Coastguard Worker     return compareImages(log, (string("LayerFace" + de::toString(layerFaceNdx))).c_str(),
274*35238bceSAndroid Build Coastguard Worker                          (string("Layer-face " + de::toString(layerFaceNdx))).c_str(), referenceFrame, renderedFrame,
275*35238bceSAndroid Build Coastguard Worker                          threshold);
276*35238bceSAndroid Build Coastguard Worker }
277*35238bceSAndroid Build Coastguard Worker 
iterate(void)278*35238bceSAndroid Build Coastguard Worker TextureCubeArrayFormatCase::IterateResult TextureCubeArrayFormatCase::iterate(void)
279*35238bceSAndroid Build Coastguard Worker {
280*35238bceSAndroid Build Coastguard Worker     if (m_testCtx.getTestResult() == QP_TEST_RESULT_NOT_SUPPORTED)
281*35238bceSAndroid Build Coastguard Worker         return STOP;
282*35238bceSAndroid Build Coastguard Worker 
283*35238bceSAndroid Build Coastguard Worker     // Execute test for all layers.
284*35238bceSAndroid Build Coastguard Worker     bool isOk = testLayerFace(m_curLayerFace);
285*35238bceSAndroid Build Coastguard Worker 
286*35238bceSAndroid Build Coastguard Worker     if (!isOk && m_testCtx.getTestResult() == QP_TEST_RESULT_PASS)
287*35238bceSAndroid Build Coastguard Worker         m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Image comparison failed");
288*35238bceSAndroid Build Coastguard Worker 
289*35238bceSAndroid Build Coastguard Worker     m_curLayerFace += 1;
290*35238bceSAndroid Build Coastguard Worker 
291*35238bceSAndroid Build Coastguard Worker     return m_curLayerFace < m_texture->getRefTexture().getDepth() ? CONTINUE : STOP;
292*35238bceSAndroid Build Coastguard Worker }
293*35238bceSAndroid Build Coastguard Worker 
294*35238bceSAndroid Build Coastguard Worker // TextureBufferFormatCase
295*35238bceSAndroid Build Coastguard Worker 
296*35238bceSAndroid Build Coastguard Worker class TextureBufferFormatCase : public TestCase
297*35238bceSAndroid Build Coastguard Worker {
298*35238bceSAndroid Build Coastguard Worker public:
299*35238bceSAndroid Build Coastguard Worker     TextureBufferFormatCase(Context &ctx, glu::RenderContext &renderCtx, const char *name, const char *description,
300*35238bceSAndroid Build Coastguard Worker                             uint32_t internalFormat, int width);
301*35238bceSAndroid Build Coastguard Worker     ~TextureBufferFormatCase(void);
302*35238bceSAndroid Build Coastguard Worker 
303*35238bceSAndroid Build Coastguard Worker     void init(void);
304*35238bceSAndroid Build Coastguard Worker     void deinit(void);
305*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
306*35238bceSAndroid Build Coastguard Worker 
307*35238bceSAndroid Build Coastguard Worker private:
308*35238bceSAndroid Build Coastguard Worker     TextureBufferFormatCase(const TextureBufferFormatCase &other);
309*35238bceSAndroid Build Coastguard Worker     TextureBufferFormatCase &operator=(const TextureBufferFormatCase &other);
310*35238bceSAndroid Build Coastguard Worker 
311*35238bceSAndroid Build Coastguard Worker     glu::RenderContext &m_renderCtx;
312*35238bceSAndroid Build Coastguard Worker 
313*35238bceSAndroid Build Coastguard Worker     uint32_t m_format;
314*35238bceSAndroid Build Coastguard Worker     int m_width;
315*35238bceSAndroid Build Coastguard Worker     int m_maxTextureBufferSize;
316*35238bceSAndroid Build Coastguard Worker 
317*35238bceSAndroid Build Coastguard Worker     glu::TextureBuffer *m_texture;
318*35238bceSAndroid Build Coastguard Worker     TextureRenderer m_renderer;
319*35238bceSAndroid Build Coastguard Worker };
320*35238bceSAndroid Build Coastguard Worker 
TextureBufferFormatCase(Context & ctx,glu::RenderContext & renderCtx,const char * name,const char * description,uint32_t internalFormat,int width)321*35238bceSAndroid Build Coastguard Worker TextureBufferFormatCase::TextureBufferFormatCase(Context &ctx, glu::RenderContext &renderCtx, const char *name,
322*35238bceSAndroid Build Coastguard Worker                                                  const char *description, uint32_t internalFormat, int width)
323*35238bceSAndroid Build Coastguard Worker     : TestCase(ctx, name, description)
324*35238bceSAndroid Build Coastguard Worker     , m_renderCtx(renderCtx)
325*35238bceSAndroid Build Coastguard Worker     , m_format(internalFormat)
326*35238bceSAndroid Build Coastguard Worker     , m_width(width)
327*35238bceSAndroid Build Coastguard Worker     , m_maxTextureBufferSize(0)
328*35238bceSAndroid Build Coastguard Worker     , m_texture(DE_NULL)
329*35238bceSAndroid Build Coastguard Worker     , m_renderer(renderCtx, ctx.getTestContext().getLog(), glu::getContextTypeGLSLVersion(renderCtx.getType()),
330*35238bceSAndroid Build Coastguard Worker                  glu::PRECISION_HIGHP)
331*35238bceSAndroid Build Coastguard Worker {
332*35238bceSAndroid Build Coastguard Worker }
333*35238bceSAndroid Build Coastguard Worker 
~TextureBufferFormatCase(void)334*35238bceSAndroid Build Coastguard Worker TextureBufferFormatCase::~TextureBufferFormatCase(void)
335*35238bceSAndroid Build Coastguard Worker {
336*35238bceSAndroid Build Coastguard Worker     deinit();
337*35238bceSAndroid Build Coastguard Worker }
338*35238bceSAndroid Build Coastguard Worker 
init(void)339*35238bceSAndroid Build Coastguard Worker void TextureBufferFormatCase::init(void)
340*35238bceSAndroid Build Coastguard Worker {
341*35238bceSAndroid Build Coastguard Worker     TestLog &log                = m_testCtx.getLog();
342*35238bceSAndroid Build Coastguard Worker     tcu::TextureFormat fmt      = glu::mapGLInternalFormat(m_format);
343*35238bceSAndroid Build Coastguard Worker     tcu::TextureFormatInfo spec = tcu::getTextureFormatInfo(fmt);
344*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 colorA(spec.valueMin.x(), spec.valueMax.y(), spec.valueMin.z(), spec.valueMax.w());
345*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 colorB(spec.valueMax.x(), spec.valueMin.y(), spec.valueMax.z(), spec.valueMin.w());
346*35238bceSAndroid Build Coastguard Worker     const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
347*35238bceSAndroid Build Coastguard Worker 
348*35238bceSAndroid Build Coastguard Worker     if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_buffer") &&
349*35238bceSAndroid Build Coastguard Worker         !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"))
350*35238bceSAndroid Build Coastguard Worker     {
351*35238bceSAndroid Build Coastguard Worker         TCU_THROW(NotSupportedError, "Texture buffers not supported");
352*35238bceSAndroid Build Coastguard Worker     }
353*35238bceSAndroid Build Coastguard Worker 
354*35238bceSAndroid Build Coastguard Worker     m_maxTextureBufferSize = m_context.getContextInfo().getInt(GL_MAX_TEXTURE_BUFFER_SIZE);
355*35238bceSAndroid Build Coastguard Worker 
356*35238bceSAndroid Build Coastguard Worker     if (m_maxTextureBufferSize <= 0)
357*35238bceSAndroid Build Coastguard Worker         TCU_THROW(NotSupportedError, "GL_MAX_TEXTURE_BUFFER_SIZE > 0 required");
358*35238bceSAndroid Build Coastguard Worker 
359*35238bceSAndroid Build Coastguard Worker     log << TestLog::Message << "Buffer texture, " << glu::getTextureFormatStr(m_format) << ", " << m_width
360*35238bceSAndroid Build Coastguard Worker         << ",\n  fill with " << formatGradient(&colorA, &colorB) << " gradient" << TestLog::EndMessage;
361*35238bceSAndroid Build Coastguard Worker 
362*35238bceSAndroid Build Coastguard Worker     m_texture = new glu::TextureBuffer(m_renderCtx, m_format, m_width * fmt.getPixelSize());
363*35238bceSAndroid Build Coastguard Worker 
364*35238bceSAndroid Build Coastguard Worker     // Fill level 0.
365*35238bceSAndroid Build Coastguard Worker     tcu::fillWithComponentGradients(m_texture->getFullRefTexture(), colorA, colorB);
366*35238bceSAndroid Build Coastguard Worker }
367*35238bceSAndroid Build Coastguard Worker 
deinit(void)368*35238bceSAndroid Build Coastguard Worker void TextureBufferFormatCase::deinit(void)
369*35238bceSAndroid Build Coastguard Worker {
370*35238bceSAndroid Build Coastguard Worker     delete m_texture;
371*35238bceSAndroid Build Coastguard Worker     m_texture = DE_NULL;
372*35238bceSAndroid Build Coastguard Worker 
373*35238bceSAndroid Build Coastguard Worker     m_renderer.clear();
374*35238bceSAndroid Build Coastguard Worker }
375*35238bceSAndroid Build Coastguard Worker 
iterate(void)376*35238bceSAndroid Build Coastguard Worker TextureBufferFormatCase::IterateResult TextureBufferFormatCase::iterate(void)
377*35238bceSAndroid Build Coastguard Worker {
378*35238bceSAndroid Build Coastguard Worker     TestLog &log             = m_testCtx.getLog();
379*35238bceSAndroid Build Coastguard Worker     const glw::Functions &gl = m_renderCtx.getFunctions();
380*35238bceSAndroid Build Coastguard Worker     RandomViewport viewport(m_renderCtx.getRenderTarget(), m_width, 1, deStringHash(getName()));
381*35238bceSAndroid Build Coastguard Worker     tcu::Surface renderedFrame(viewport.width, viewport.height);
382*35238bceSAndroid Build Coastguard Worker     tcu::Surface referenceFrame(viewport.width, viewport.height);
383*35238bceSAndroid Build Coastguard Worker     tcu::RGBA threshold = m_renderCtx.getRenderTarget().getPixelFormat().getColorThreshold() + tcu::RGBA(1, 1, 1, 1);
384*35238bceSAndroid Build Coastguard Worker     vector<float> texCoord;
385*35238bceSAndroid Build Coastguard Worker     RenderParams renderParams(TEXTURETYPE_BUFFER);
386*35238bceSAndroid Build Coastguard Worker     const tcu::ConstPixelBufferAccess effectiveRefTexture =
387*35238bceSAndroid Build Coastguard Worker         glu::getTextureBufferEffectiveRefTexture(*m_texture, m_maxTextureBufferSize);
388*35238bceSAndroid Build Coastguard Worker     tcu::TextureFormatInfo spec = tcu::getTextureFormatInfo(effectiveRefTexture.getFormat());
389*35238bceSAndroid Build Coastguard Worker 
390*35238bceSAndroid Build Coastguard Worker     renderParams.flags |= RenderParams::LOG_ALL;
391*35238bceSAndroid Build Coastguard Worker     renderParams.samplerType = getFetchSamplerType(effectiveRefTexture.getFormat());
392*35238bceSAndroid Build Coastguard Worker     renderParams.colorScale  = spec.lookupScale;
393*35238bceSAndroid Build Coastguard Worker     renderParams.colorBias   = spec.lookupBias;
394*35238bceSAndroid Build Coastguard Worker 
395*35238bceSAndroid Build Coastguard Worker     computeQuadTexCoord1D(texCoord, 0.0f, (float)(effectiveRefTexture.getWidth()));
396*35238bceSAndroid Build Coastguard Worker 
397*35238bceSAndroid Build Coastguard Worker     gl.clearColor(0.125f, 0.25f, 0.5f, 1.0f);
398*35238bceSAndroid Build Coastguard Worker     gl.clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
399*35238bceSAndroid Build Coastguard Worker 
400*35238bceSAndroid Build Coastguard Worker     // Setup base viewport.
401*35238bceSAndroid Build Coastguard Worker     gl.clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
402*35238bceSAndroid Build Coastguard Worker     gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
403*35238bceSAndroid Build Coastguard Worker 
404*35238bceSAndroid Build Coastguard Worker     // Upload texture data to GL.
405*35238bceSAndroid Build Coastguard Worker     m_texture->upload();
406*35238bceSAndroid Build Coastguard Worker 
407*35238bceSAndroid Build Coastguard Worker     // Bind to unit 0.
408*35238bceSAndroid Build Coastguard Worker     gl.activeTexture(GL_TEXTURE0);
409*35238bceSAndroid Build Coastguard Worker     gl.bindTexture(GL_TEXTURE_BUFFER, m_texture->getGLTexture());
410*35238bceSAndroid Build Coastguard Worker 
411*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.getError(), "Set texturing state");
412*35238bceSAndroid Build Coastguard Worker 
413*35238bceSAndroid Build Coastguard Worker     // Draw.
414*35238bceSAndroid Build Coastguard Worker     m_renderer.renderQuad(0, &texCoord[0], renderParams);
415*35238bceSAndroid Build Coastguard Worker     glu::readPixels(m_renderCtx, viewport.x, viewport.y, renderedFrame.getAccess());
416*35238bceSAndroid Build Coastguard Worker 
417*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.getError(), "glReadPixels()");
418*35238bceSAndroid Build Coastguard Worker 
419*35238bceSAndroid Build Coastguard Worker     // Compute reference.
420*35238bceSAndroid Build Coastguard Worker     fetchTexture(tcu::SurfaceAccess(referenceFrame, m_renderCtx.getRenderTarget().getPixelFormat()),
421*35238bceSAndroid Build Coastguard Worker                  effectiveRefTexture, &texCoord[0], spec.lookupScale, spec.lookupBias);
422*35238bceSAndroid Build Coastguard Worker 
423*35238bceSAndroid Build Coastguard Worker     // Compare and log.
424*35238bceSAndroid Build Coastguard Worker     bool isOk = compareImages(log, referenceFrame, renderedFrame, threshold);
425*35238bceSAndroid Build Coastguard Worker 
426*35238bceSAndroid Build Coastguard Worker     m_testCtx.setTestResult(isOk ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL,
427*35238bceSAndroid Build Coastguard Worker                             isOk ? "Pass" : "Image comparison failed");
428*35238bceSAndroid Build Coastguard Worker 
429*35238bceSAndroid Build Coastguard Worker     return STOP;
430*35238bceSAndroid Build Coastguard Worker }
431*35238bceSAndroid Build Coastguard Worker 
432*35238bceSAndroid Build Coastguard Worker // TextureFormatTests
433*35238bceSAndroid Build Coastguard Worker 
TextureFormatTests(Context & context)434*35238bceSAndroid Build Coastguard Worker TextureFormatTests::TextureFormatTests(Context &context) : TestCaseGroup(context, "format", "Texture Format Tests")
435*35238bceSAndroid Build Coastguard Worker {
436*35238bceSAndroid Build Coastguard Worker }
437*35238bceSAndroid Build Coastguard Worker 
~TextureFormatTests(void)438*35238bceSAndroid Build Coastguard Worker TextureFormatTests::~TextureFormatTests(void)
439*35238bceSAndroid Build Coastguard Worker {
440*35238bceSAndroid Build Coastguard Worker }
441*35238bceSAndroid Build Coastguard Worker 
toStringVector(const char * const * str,int numStr)442*35238bceSAndroid Build Coastguard Worker vector<string> toStringVector(const char *const *str, int numStr)
443*35238bceSAndroid Build Coastguard Worker {
444*35238bceSAndroid Build Coastguard Worker     vector<string> v;
445*35238bceSAndroid Build Coastguard Worker     v.resize(numStr);
446*35238bceSAndroid Build Coastguard Worker     for (int i = 0; i < numStr; i++)
447*35238bceSAndroid Build Coastguard Worker         v[i] = str[i];
448*35238bceSAndroid Build Coastguard Worker     return v;
449*35238bceSAndroid Build Coastguard Worker }
450*35238bceSAndroid Build Coastguard Worker 
init(void)451*35238bceSAndroid Build Coastguard Worker void TextureFormatTests::init(void)
452*35238bceSAndroid Build Coastguard Worker {
453*35238bceSAndroid Build Coastguard Worker     tcu::TestCaseGroup *unsizedGroup     = DE_NULL;
454*35238bceSAndroid Build Coastguard Worker     tcu::TestCaseGroup *sizedGroup       = DE_NULL;
455*35238bceSAndroid Build Coastguard Worker     tcu::TestCaseGroup *sizedBufferGroup = DE_NULL;
456*35238bceSAndroid Build Coastguard Worker     addChild((unsizedGroup = new tcu::TestCaseGroup(m_testCtx, "unsized", "Unsized formats")));
457*35238bceSAndroid Build Coastguard Worker     addChild((sizedGroup = new tcu::TestCaseGroup(m_testCtx, "sized", "Sized formats")));
458*35238bceSAndroid Build Coastguard Worker     addChild((sizedBufferGroup = new tcu::TestCaseGroup(m_testCtx, "buffer", "Sized formats (Buffer)")));
459*35238bceSAndroid Build Coastguard Worker 
460*35238bceSAndroid Build Coastguard Worker     tcu::TestCaseGroup *sizedCubeArrayGroup = DE_NULL;
461*35238bceSAndroid Build Coastguard Worker     sizedGroup->addChild(
462*35238bceSAndroid Build Coastguard Worker         (sizedCubeArrayGroup = new tcu::TestCaseGroup(m_testCtx, "cube_array", "Sized formats (2D Array)")));
463*35238bceSAndroid Build Coastguard Worker 
464*35238bceSAndroid Build Coastguard Worker     struct
465*35238bceSAndroid Build Coastguard Worker     {
466*35238bceSAndroid Build Coastguard Worker         const char *name;
467*35238bceSAndroid Build Coastguard Worker         uint32_t format;
468*35238bceSAndroid Build Coastguard Worker         uint32_t dataType;
469*35238bceSAndroid Build Coastguard Worker     } texFormats[] = {{"alpha", GL_ALPHA, GL_UNSIGNED_BYTE},
470*35238bceSAndroid Build Coastguard Worker                       {"luminance", GL_LUMINANCE, GL_UNSIGNED_BYTE},
471*35238bceSAndroid Build Coastguard Worker                       {"luminance_alpha", GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE},
472*35238bceSAndroid Build Coastguard Worker                       {"rgb_unsigned_short_5_6_5", GL_RGB, GL_UNSIGNED_SHORT_5_6_5},
473*35238bceSAndroid Build Coastguard Worker                       {"rgb_unsigned_byte", GL_RGB, GL_UNSIGNED_BYTE},
474*35238bceSAndroid Build Coastguard Worker                       {"rgba_unsigned_short_4_4_4_4", GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4},
475*35238bceSAndroid Build Coastguard Worker                       {"rgba_unsigned_short_5_5_5_1", GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1},
476*35238bceSAndroid Build Coastguard Worker                       {"rgba_unsigned_byte", GL_RGBA, GL_UNSIGNED_BYTE}};
477*35238bceSAndroid Build Coastguard Worker 
478*35238bceSAndroid Build Coastguard Worker     for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(texFormats); formatNdx++)
479*35238bceSAndroid Build Coastguard Worker     {
480*35238bceSAndroid Build Coastguard Worker         uint32_t format        = texFormats[formatNdx].format;
481*35238bceSAndroid Build Coastguard Worker         uint32_t dataType      = texFormats[formatNdx].dataType;
482*35238bceSAndroid Build Coastguard Worker         string nameBase        = texFormats[formatNdx].name;
483*35238bceSAndroid Build Coastguard Worker         string descriptionBase = string(glu::getTextureFormatName(format)) + ", " + glu::getTypeName(dataType);
484*35238bceSAndroid Build Coastguard Worker 
485*35238bceSAndroid Build Coastguard Worker         unsizedGroup->addChild(new TextureCubeArrayFormatCase(
486*35238bceSAndroid Build Coastguard Worker             m_testCtx, m_context.getRenderContext(), m_context.getContextInfo(), (nameBase + "_cube_array_pot").c_str(),
487*35238bceSAndroid Build Coastguard Worker             (descriptionBase + ", GL_TEXTURE_CUBE_MAP_ARRAY").c_str(), format, dataType, 64, 12));
488*35238bceSAndroid Build Coastguard Worker         unsizedGroup->addChild(new TextureCubeArrayFormatCase(
489*35238bceSAndroid Build Coastguard Worker             m_testCtx, m_context.getRenderContext(), m_context.getContextInfo(),
490*35238bceSAndroid Build Coastguard Worker             (nameBase + "_cube_array_npot").c_str(), (descriptionBase + ", GL_TEXTURE_CUBE_MAP_ARRAY").c_str(), format,
491*35238bceSAndroid Build Coastguard Worker             dataType, 64, 12));
492*35238bceSAndroid Build Coastguard Worker     }
493*35238bceSAndroid Build Coastguard Worker 
494*35238bceSAndroid Build Coastguard Worker     struct
495*35238bceSAndroid Build Coastguard Worker     {
496*35238bceSAndroid Build Coastguard Worker         const char *name;
497*35238bceSAndroid Build Coastguard Worker         uint32_t internalFormat;
498*35238bceSAndroid Build Coastguard Worker     } sizedColorFormats[] = {{
499*35238bceSAndroid Build Coastguard Worker                                  "rgba32f",
500*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA32F,
501*35238bceSAndroid Build Coastguard Worker                              },
502*35238bceSAndroid Build Coastguard Worker                              {
503*35238bceSAndroid Build Coastguard Worker                                  "rgba32i",
504*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA32I,
505*35238bceSAndroid Build Coastguard Worker                              },
506*35238bceSAndroid Build Coastguard Worker                              {
507*35238bceSAndroid Build Coastguard Worker                                  "rgba32ui",
508*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA32UI,
509*35238bceSAndroid Build Coastguard Worker                              },
510*35238bceSAndroid Build Coastguard Worker                              {
511*35238bceSAndroid Build Coastguard Worker                                  "rgba16f",
512*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA16F,
513*35238bceSAndroid Build Coastguard Worker                              },
514*35238bceSAndroid Build Coastguard Worker                              {
515*35238bceSAndroid Build Coastguard Worker                                  "rgba16i",
516*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA16I,
517*35238bceSAndroid Build Coastguard Worker                              },
518*35238bceSAndroid Build Coastguard Worker                              {
519*35238bceSAndroid Build Coastguard Worker                                  "rgba16ui",
520*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA16UI,
521*35238bceSAndroid Build Coastguard Worker                              },
522*35238bceSAndroid Build Coastguard Worker                              {
523*35238bceSAndroid Build Coastguard Worker                                  "rgba8",
524*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA8,
525*35238bceSAndroid Build Coastguard Worker                              },
526*35238bceSAndroid Build Coastguard Worker                              {
527*35238bceSAndroid Build Coastguard Worker                                  "rgba8i",
528*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA8I,
529*35238bceSAndroid Build Coastguard Worker                              },
530*35238bceSAndroid Build Coastguard Worker                              {
531*35238bceSAndroid Build Coastguard Worker                                  "rgba8ui",
532*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA8UI,
533*35238bceSAndroid Build Coastguard Worker                              },
534*35238bceSAndroid Build Coastguard Worker                              {
535*35238bceSAndroid Build Coastguard Worker                                  "srgb_r8",
536*35238bceSAndroid Build Coastguard Worker                                  GL_SR8_EXT,
537*35238bceSAndroid Build Coastguard Worker                              },
538*35238bceSAndroid Build Coastguard Worker                              {
539*35238bceSAndroid Build Coastguard Worker                                  "srgb_rg8",
540*35238bceSAndroid Build Coastguard Worker                                  GL_SRG8_EXT,
541*35238bceSAndroid Build Coastguard Worker                              },
542*35238bceSAndroid Build Coastguard Worker                              {
543*35238bceSAndroid Build Coastguard Worker                                  "srgb8_alpha8",
544*35238bceSAndroid Build Coastguard Worker                                  GL_SRGB8_ALPHA8,
545*35238bceSAndroid Build Coastguard Worker                              },
546*35238bceSAndroid Build Coastguard Worker                              {
547*35238bceSAndroid Build Coastguard Worker                                  "rgb10_a2",
548*35238bceSAndroid Build Coastguard Worker                                  GL_RGB10_A2,
549*35238bceSAndroid Build Coastguard Worker                              },
550*35238bceSAndroid Build Coastguard Worker                              {
551*35238bceSAndroid Build Coastguard Worker                                  "rgb10_a2ui",
552*35238bceSAndroid Build Coastguard Worker                                  GL_RGB10_A2UI,
553*35238bceSAndroid Build Coastguard Worker                              },
554*35238bceSAndroid Build Coastguard Worker                              {
555*35238bceSAndroid Build Coastguard Worker                                  "rgba4",
556*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA4,
557*35238bceSAndroid Build Coastguard Worker                              },
558*35238bceSAndroid Build Coastguard Worker                              {
559*35238bceSAndroid Build Coastguard Worker                                  "rgb5_a1",
560*35238bceSAndroid Build Coastguard Worker                                  GL_RGB5_A1,
561*35238bceSAndroid Build Coastguard Worker                              },
562*35238bceSAndroid Build Coastguard Worker                              {
563*35238bceSAndroid Build Coastguard Worker                                  "rgba8_snorm",
564*35238bceSAndroid Build Coastguard Worker                                  GL_RGBA8_SNORM,
565*35238bceSAndroid Build Coastguard Worker                              },
566*35238bceSAndroid Build Coastguard Worker                              {
567*35238bceSAndroid Build Coastguard Worker                                  "rgb8",
568*35238bceSAndroid Build Coastguard Worker                                  GL_RGB8,
569*35238bceSAndroid Build Coastguard Worker                              },
570*35238bceSAndroid Build Coastguard Worker                              {
571*35238bceSAndroid Build Coastguard Worker                                  "rgb565",
572*35238bceSAndroid Build Coastguard Worker                                  GL_RGB565,
573*35238bceSAndroid Build Coastguard Worker                              },
574*35238bceSAndroid Build Coastguard Worker                              {
575*35238bceSAndroid Build Coastguard Worker                                  "r11f_g11f_b10f",
576*35238bceSAndroid Build Coastguard Worker                                  GL_R11F_G11F_B10F,
577*35238bceSAndroid Build Coastguard Worker                              },
578*35238bceSAndroid Build Coastguard Worker                              {
579*35238bceSAndroid Build Coastguard Worker                                  "rgb32f",
580*35238bceSAndroid Build Coastguard Worker                                  GL_RGB32F,
581*35238bceSAndroid Build Coastguard Worker                              },
582*35238bceSAndroid Build Coastguard Worker                              {
583*35238bceSAndroid Build Coastguard Worker                                  "rgb32i",
584*35238bceSAndroid Build Coastguard Worker                                  GL_RGB32I,
585*35238bceSAndroid Build Coastguard Worker                              },
586*35238bceSAndroid Build Coastguard Worker                              {
587*35238bceSAndroid Build Coastguard Worker                                  "rgb32ui",
588*35238bceSAndroid Build Coastguard Worker                                  GL_RGB32UI,
589*35238bceSAndroid Build Coastguard Worker                              },
590*35238bceSAndroid Build Coastguard Worker                              {
591*35238bceSAndroid Build Coastguard Worker                                  "rgb16f",
592*35238bceSAndroid Build Coastguard Worker                                  GL_RGB16F,
593*35238bceSAndroid Build Coastguard Worker                              },
594*35238bceSAndroid Build Coastguard Worker                              {
595*35238bceSAndroid Build Coastguard Worker                                  "rgb16i",
596*35238bceSAndroid Build Coastguard Worker                                  GL_RGB16I,
597*35238bceSAndroid Build Coastguard Worker                              },
598*35238bceSAndroid Build Coastguard Worker                              {
599*35238bceSAndroid Build Coastguard Worker                                  "rgb16ui",
600*35238bceSAndroid Build Coastguard Worker                                  GL_RGB16UI,
601*35238bceSAndroid Build Coastguard Worker                              },
602*35238bceSAndroid Build Coastguard Worker                              {
603*35238bceSAndroid Build Coastguard Worker                                  "rgb8_snorm",
604*35238bceSAndroid Build Coastguard Worker                                  GL_RGB8_SNORM,
605*35238bceSAndroid Build Coastguard Worker                              },
606*35238bceSAndroid Build Coastguard Worker                              {
607*35238bceSAndroid Build Coastguard Worker                                  "rgb8i",
608*35238bceSAndroid Build Coastguard Worker                                  GL_RGB8I,
609*35238bceSAndroid Build Coastguard Worker                              },
610*35238bceSAndroid Build Coastguard Worker                              {
611*35238bceSAndroid Build Coastguard Worker                                  "rgb8ui",
612*35238bceSAndroid Build Coastguard Worker                                  GL_RGB8UI,
613*35238bceSAndroid Build Coastguard Worker                              },
614*35238bceSAndroid Build Coastguard Worker                              {
615*35238bceSAndroid Build Coastguard Worker                                  "srgb8",
616*35238bceSAndroid Build Coastguard Worker                                  GL_SRGB8,
617*35238bceSAndroid Build Coastguard Worker                              },
618*35238bceSAndroid Build Coastguard Worker                              {
619*35238bceSAndroid Build Coastguard Worker                                  "rgb9_e5",
620*35238bceSAndroid Build Coastguard Worker                                  GL_RGB9_E5,
621*35238bceSAndroid Build Coastguard Worker                              },
622*35238bceSAndroid Build Coastguard Worker                              {
623*35238bceSAndroid Build Coastguard Worker                                  "rg32f",
624*35238bceSAndroid Build Coastguard Worker                                  GL_RG32F,
625*35238bceSAndroid Build Coastguard Worker                              },
626*35238bceSAndroid Build Coastguard Worker                              {
627*35238bceSAndroid Build Coastguard Worker                                  "rg32i",
628*35238bceSAndroid Build Coastguard Worker                                  GL_RG32I,
629*35238bceSAndroid Build Coastguard Worker                              },
630*35238bceSAndroid Build Coastguard Worker                              {
631*35238bceSAndroid Build Coastguard Worker                                  "rg32ui",
632*35238bceSAndroid Build Coastguard Worker                                  GL_RG32UI,
633*35238bceSAndroid Build Coastguard Worker                              },
634*35238bceSAndroid Build Coastguard Worker                              {
635*35238bceSAndroid Build Coastguard Worker                                  "rg16f",
636*35238bceSAndroid Build Coastguard Worker                                  GL_RG16F,
637*35238bceSAndroid Build Coastguard Worker                              },
638*35238bceSAndroid Build Coastguard Worker                              {
639*35238bceSAndroid Build Coastguard Worker                                  "rg16i",
640*35238bceSAndroid Build Coastguard Worker                                  GL_RG16I,
641*35238bceSAndroid Build Coastguard Worker                              },
642*35238bceSAndroid Build Coastguard Worker                              {
643*35238bceSAndroid Build Coastguard Worker                                  "rg16ui",
644*35238bceSAndroid Build Coastguard Worker                                  GL_RG16UI,
645*35238bceSAndroid Build Coastguard Worker                              },
646*35238bceSAndroid Build Coastguard Worker                              {
647*35238bceSAndroid Build Coastguard Worker                                  "rg8",
648*35238bceSAndroid Build Coastguard Worker                                  GL_RG8,
649*35238bceSAndroid Build Coastguard Worker                              },
650*35238bceSAndroid Build Coastguard Worker                              {
651*35238bceSAndroid Build Coastguard Worker                                  "rg8i",
652*35238bceSAndroid Build Coastguard Worker                                  GL_RG8I,
653*35238bceSAndroid Build Coastguard Worker                              },
654*35238bceSAndroid Build Coastguard Worker                              {
655*35238bceSAndroid Build Coastguard Worker                                  "rg8ui",
656*35238bceSAndroid Build Coastguard Worker                                  GL_RG8UI,
657*35238bceSAndroid Build Coastguard Worker                              },
658*35238bceSAndroid Build Coastguard Worker                              {
659*35238bceSAndroid Build Coastguard Worker                                  "rg8_snorm",
660*35238bceSAndroid Build Coastguard Worker                                  GL_RG8_SNORM,
661*35238bceSAndroid Build Coastguard Worker                              },
662*35238bceSAndroid Build Coastguard Worker                              {
663*35238bceSAndroid Build Coastguard Worker                                  "r32f",
664*35238bceSAndroid Build Coastguard Worker                                  GL_R32F,
665*35238bceSAndroid Build Coastguard Worker                              },
666*35238bceSAndroid Build Coastguard Worker                              {
667*35238bceSAndroid Build Coastguard Worker                                  "r32i",
668*35238bceSAndroid Build Coastguard Worker                                  GL_R32I,
669*35238bceSAndroid Build Coastguard Worker                              },
670*35238bceSAndroid Build Coastguard Worker                              {
671*35238bceSAndroid Build Coastguard Worker                                  "r32ui",
672*35238bceSAndroid Build Coastguard Worker                                  GL_R32UI,
673*35238bceSAndroid Build Coastguard Worker                              },
674*35238bceSAndroid Build Coastguard Worker                              {
675*35238bceSAndroid Build Coastguard Worker                                  "r16f",
676*35238bceSAndroid Build Coastguard Worker                                  GL_R16F,
677*35238bceSAndroid Build Coastguard Worker                              },
678*35238bceSAndroid Build Coastguard Worker                              {
679*35238bceSAndroid Build Coastguard Worker                                  "r16i",
680*35238bceSAndroid Build Coastguard Worker                                  GL_R16I,
681*35238bceSAndroid Build Coastguard Worker                              },
682*35238bceSAndroid Build Coastguard Worker                              {
683*35238bceSAndroid Build Coastguard Worker                                  "r16ui",
684*35238bceSAndroid Build Coastguard Worker                                  GL_R16UI,
685*35238bceSAndroid Build Coastguard Worker                              },
686*35238bceSAndroid Build Coastguard Worker                              {
687*35238bceSAndroid Build Coastguard Worker                                  "r8",
688*35238bceSAndroid Build Coastguard Worker                                  GL_R8,
689*35238bceSAndroid Build Coastguard Worker                              },
690*35238bceSAndroid Build Coastguard Worker                              {
691*35238bceSAndroid Build Coastguard Worker                                  "r8i",
692*35238bceSAndroid Build Coastguard Worker                                  GL_R8I,
693*35238bceSAndroid Build Coastguard Worker                              },
694*35238bceSAndroid Build Coastguard Worker                              {
695*35238bceSAndroid Build Coastguard Worker                                  "r8ui",
696*35238bceSAndroid Build Coastguard Worker                                  GL_R8UI,
697*35238bceSAndroid Build Coastguard Worker                              },
698*35238bceSAndroid Build Coastguard Worker                              {
699*35238bceSAndroid Build Coastguard Worker                                  "r8_snorm",
700*35238bceSAndroid Build Coastguard Worker                                  GL_R8_SNORM,
701*35238bceSAndroid Build Coastguard Worker                              }};
702*35238bceSAndroid Build Coastguard Worker 
703*35238bceSAndroid Build Coastguard Worker     struct
704*35238bceSAndroid Build Coastguard Worker     {
705*35238bceSAndroid Build Coastguard Worker         const char *name;
706*35238bceSAndroid Build Coastguard Worker         uint32_t internalFormat;
707*35238bceSAndroid Build Coastguard Worker     } sizedDepthStencilFormats[] = {// Depth and stencil formats
708*35238bceSAndroid Build Coastguard Worker                                     {"depth_component32f", GL_DEPTH_COMPONENT32F},
709*35238bceSAndroid Build Coastguard Worker                                     {"depth_component24", GL_DEPTH_COMPONENT24},
710*35238bceSAndroid Build Coastguard Worker                                     {"depth_component16", GL_DEPTH_COMPONENT16},
711*35238bceSAndroid Build Coastguard Worker                                     {"depth32f_stencil8", GL_DEPTH32F_STENCIL8},
712*35238bceSAndroid Build Coastguard Worker                                     {"depth24_stencil8", GL_DEPTH24_STENCIL8}};
713*35238bceSAndroid Build Coastguard Worker 
714*35238bceSAndroid Build Coastguard Worker     for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(sizedColorFormats); formatNdx++)
715*35238bceSAndroid Build Coastguard Worker     {
716*35238bceSAndroid Build Coastguard Worker         uint32_t internalFormat = sizedColorFormats[formatNdx].internalFormat;
717*35238bceSAndroid Build Coastguard Worker         string nameBase         = sizedColorFormats[formatNdx].name;
718*35238bceSAndroid Build Coastguard Worker         string descriptionBase  = glu::getTextureFormatName(internalFormat);
719*35238bceSAndroid Build Coastguard Worker 
720*35238bceSAndroid Build Coastguard Worker         sizedCubeArrayGroup->addChild(new TextureCubeArrayFormatCase(
721*35238bceSAndroid Build Coastguard Worker             m_testCtx, m_context.getRenderContext(), m_context.getContextInfo(), (nameBase + "_pot").c_str(),
722*35238bceSAndroid Build Coastguard Worker             (descriptionBase + ", GL_TEXTURE_CUBE_MAP_ARRAY").c_str(), internalFormat, 64, 12));
723*35238bceSAndroid Build Coastguard Worker         sizedCubeArrayGroup->addChild(new TextureCubeArrayFormatCase(
724*35238bceSAndroid Build Coastguard Worker             m_testCtx, m_context.getRenderContext(), m_context.getContextInfo(), (nameBase + "_npot").c_str(),
725*35238bceSAndroid Build Coastguard Worker             (descriptionBase + ", GL_TEXTURE_CUBE_MAP_ARRAY").c_str(), internalFormat, 64, 12));
726*35238bceSAndroid Build Coastguard Worker     }
727*35238bceSAndroid Build Coastguard Worker 
728*35238bceSAndroid Build Coastguard Worker     for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(sizedDepthStencilFormats); formatNdx++)
729*35238bceSAndroid Build Coastguard Worker     {
730*35238bceSAndroid Build Coastguard Worker         uint32_t internalFormat = sizedDepthStencilFormats[formatNdx].internalFormat;
731*35238bceSAndroid Build Coastguard Worker         string nameBase         = sizedDepthStencilFormats[formatNdx].name;
732*35238bceSAndroid Build Coastguard Worker         string descriptionBase  = glu::getTextureFormatName(internalFormat);
733*35238bceSAndroid Build Coastguard Worker 
734*35238bceSAndroid Build Coastguard Worker         sizedCubeArrayGroup->addChild(new TextureCubeArrayFormatCase(
735*35238bceSAndroid Build Coastguard Worker             m_testCtx, m_context.getRenderContext(), m_context.getContextInfo(), (nameBase + "_pot").c_str(),
736*35238bceSAndroid Build Coastguard Worker             (descriptionBase + ", GL_TEXTURE_CUBE_MAP_ARRAY").c_str(), internalFormat, 64, 12));
737*35238bceSAndroid Build Coastguard Worker         sizedCubeArrayGroup->addChild(new TextureCubeArrayFormatCase(
738*35238bceSAndroid Build Coastguard Worker             m_testCtx, m_context.getRenderContext(), m_context.getContextInfo(), (nameBase + "_npot").c_str(),
739*35238bceSAndroid Build Coastguard Worker             (descriptionBase + ", GL_TEXTURE_CUBE_MAP_ARRAY").c_str(), internalFormat, 64, 12));
740*35238bceSAndroid Build Coastguard Worker     }
741*35238bceSAndroid Build Coastguard Worker 
742*35238bceSAndroid Build Coastguard Worker     // \todo Check
743*35238bceSAndroid Build Coastguard Worker     struct
744*35238bceSAndroid Build Coastguard Worker     {
745*35238bceSAndroid Build Coastguard Worker         const char *name;
746*35238bceSAndroid Build Coastguard Worker         uint32_t internalFormat;
747*35238bceSAndroid Build Coastguard Worker     } bufferColorFormats[] = {{
748*35238bceSAndroid Build Coastguard Worker                                   "r8",
749*35238bceSAndroid Build Coastguard Worker                                   GL_R8,
750*35238bceSAndroid Build Coastguard Worker                               },
751*35238bceSAndroid Build Coastguard Worker                               {
752*35238bceSAndroid Build Coastguard Worker                                   "r16f",
753*35238bceSAndroid Build Coastguard Worker                                   GL_R16F,
754*35238bceSAndroid Build Coastguard Worker                               },
755*35238bceSAndroid Build Coastguard Worker                               {
756*35238bceSAndroid Build Coastguard Worker                                   "r32f",
757*35238bceSAndroid Build Coastguard Worker                                   GL_R32F,
758*35238bceSAndroid Build Coastguard Worker                               },
759*35238bceSAndroid Build Coastguard Worker                               {
760*35238bceSAndroid Build Coastguard Worker                                   "r8i",
761*35238bceSAndroid Build Coastguard Worker                                   GL_R8I,
762*35238bceSAndroid Build Coastguard Worker                               },
763*35238bceSAndroid Build Coastguard Worker                               {
764*35238bceSAndroid Build Coastguard Worker                                   "r16i",
765*35238bceSAndroid Build Coastguard Worker                                   GL_R16I,
766*35238bceSAndroid Build Coastguard Worker                               },
767*35238bceSAndroid Build Coastguard Worker                               {
768*35238bceSAndroid Build Coastguard Worker                                   "r32i",
769*35238bceSAndroid Build Coastguard Worker                                   GL_R32I,
770*35238bceSAndroid Build Coastguard Worker                               },
771*35238bceSAndroid Build Coastguard Worker                               {
772*35238bceSAndroid Build Coastguard Worker                                   "r8ui",
773*35238bceSAndroid Build Coastguard Worker                                   GL_R8UI,
774*35238bceSAndroid Build Coastguard Worker                               },
775*35238bceSAndroid Build Coastguard Worker                               {
776*35238bceSAndroid Build Coastguard Worker                                   "r16ui",
777*35238bceSAndroid Build Coastguard Worker                                   GL_R16UI,
778*35238bceSAndroid Build Coastguard Worker                               },
779*35238bceSAndroid Build Coastguard Worker                               {
780*35238bceSAndroid Build Coastguard Worker                                   "r32ui",
781*35238bceSAndroid Build Coastguard Worker                                   GL_R32UI,
782*35238bceSAndroid Build Coastguard Worker                               },
783*35238bceSAndroid Build Coastguard Worker                               {
784*35238bceSAndroid Build Coastguard Worker                                   "rg8",
785*35238bceSAndroid Build Coastguard Worker                                   GL_RG8,
786*35238bceSAndroid Build Coastguard Worker                               },
787*35238bceSAndroid Build Coastguard Worker                               {
788*35238bceSAndroid Build Coastguard Worker                                   "rg16f",
789*35238bceSAndroid Build Coastguard Worker                                   GL_RG16F,
790*35238bceSAndroid Build Coastguard Worker                               },
791*35238bceSAndroid Build Coastguard Worker                               {
792*35238bceSAndroid Build Coastguard Worker                                   "rg32f",
793*35238bceSAndroid Build Coastguard Worker                                   GL_RG32F,
794*35238bceSAndroid Build Coastguard Worker                               },
795*35238bceSAndroid Build Coastguard Worker                               {
796*35238bceSAndroid Build Coastguard Worker                                   "rg8i",
797*35238bceSAndroid Build Coastguard Worker                                   GL_RG8I,
798*35238bceSAndroid Build Coastguard Worker                               },
799*35238bceSAndroid Build Coastguard Worker                               {
800*35238bceSAndroid Build Coastguard Worker                                   "rg16i",
801*35238bceSAndroid Build Coastguard Worker                                   GL_RG16I,
802*35238bceSAndroid Build Coastguard Worker                               },
803*35238bceSAndroid Build Coastguard Worker                               {
804*35238bceSAndroid Build Coastguard Worker                                   "rg32i",
805*35238bceSAndroid Build Coastguard Worker                                   GL_RG32I,
806*35238bceSAndroid Build Coastguard Worker                               },
807*35238bceSAndroid Build Coastguard Worker                               {
808*35238bceSAndroid Build Coastguard Worker                                   "rg8ui",
809*35238bceSAndroid Build Coastguard Worker                                   GL_RG8UI,
810*35238bceSAndroid Build Coastguard Worker                               },
811*35238bceSAndroid Build Coastguard Worker                               {
812*35238bceSAndroid Build Coastguard Worker                                   "rg16ui",
813*35238bceSAndroid Build Coastguard Worker                                   GL_RG16UI,
814*35238bceSAndroid Build Coastguard Worker                               },
815*35238bceSAndroid Build Coastguard Worker                               {
816*35238bceSAndroid Build Coastguard Worker                                   "rg32ui",
817*35238bceSAndroid Build Coastguard Worker                                   GL_RG32UI,
818*35238bceSAndroid Build Coastguard Worker                               },
819*35238bceSAndroid Build Coastguard Worker                               {
820*35238bceSAndroid Build Coastguard Worker                                   "rgba8",
821*35238bceSAndroid Build Coastguard Worker                                   GL_RGBA8,
822*35238bceSAndroid Build Coastguard Worker                               },
823*35238bceSAndroid Build Coastguard Worker                               {
824*35238bceSAndroid Build Coastguard Worker                                   "rgba16f",
825*35238bceSAndroid Build Coastguard Worker                                   GL_RGBA16F,
826*35238bceSAndroid Build Coastguard Worker                               },
827*35238bceSAndroid Build Coastguard Worker                               {
828*35238bceSAndroid Build Coastguard Worker                                   "rgba32f",
829*35238bceSAndroid Build Coastguard Worker                                   GL_RGBA32F,
830*35238bceSAndroid Build Coastguard Worker                               },
831*35238bceSAndroid Build Coastguard Worker                               {
832*35238bceSAndroid Build Coastguard Worker                                   "rgba8i",
833*35238bceSAndroid Build Coastguard Worker                                   GL_RGBA8I,
834*35238bceSAndroid Build Coastguard Worker                               },
835*35238bceSAndroid Build Coastguard Worker                               {
836*35238bceSAndroid Build Coastguard Worker                                   "rgba16i",
837*35238bceSAndroid Build Coastguard Worker                                   GL_RGBA16I,
838*35238bceSAndroid Build Coastguard Worker                               },
839*35238bceSAndroid Build Coastguard Worker                               {
840*35238bceSAndroid Build Coastguard Worker                                   "rgba32i",
841*35238bceSAndroid Build Coastguard Worker                                   GL_RGBA32I,
842*35238bceSAndroid Build Coastguard Worker                               },
843*35238bceSAndroid Build Coastguard Worker                               {
844*35238bceSAndroid Build Coastguard Worker                                   "rgba8ui",
845*35238bceSAndroid Build Coastguard Worker                                   GL_RGBA8UI,
846*35238bceSAndroid Build Coastguard Worker                               },
847*35238bceSAndroid Build Coastguard Worker                               {
848*35238bceSAndroid Build Coastguard Worker                                   "rgba16ui",
849*35238bceSAndroid Build Coastguard Worker                                   GL_RGBA16UI,
850*35238bceSAndroid Build Coastguard Worker                               },
851*35238bceSAndroid Build Coastguard Worker                               {
852*35238bceSAndroid Build Coastguard Worker                                   "rgba32ui",
853*35238bceSAndroid Build Coastguard Worker                                   GL_RGBA32UI,
854*35238bceSAndroid Build Coastguard Worker                               }};
855*35238bceSAndroid Build Coastguard Worker 
856*35238bceSAndroid Build Coastguard Worker     for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(bufferColorFormats); formatNdx++)
857*35238bceSAndroid Build Coastguard Worker     {
858*35238bceSAndroid Build Coastguard Worker         uint32_t internalFormat = bufferColorFormats[formatNdx].internalFormat;
859*35238bceSAndroid Build Coastguard Worker         string nameBase         = bufferColorFormats[formatNdx].name;
860*35238bceSAndroid Build Coastguard Worker         string descriptionBase  = glu::getTextureFormatName(internalFormat);
861*35238bceSAndroid Build Coastguard Worker 
862*35238bceSAndroid Build Coastguard Worker         sizedBufferGroup->addChild(
863*35238bceSAndroid Build Coastguard Worker             new TextureBufferFormatCase(m_context, m_context.getRenderContext(), (nameBase + "_pot").c_str(),
864*35238bceSAndroid Build Coastguard Worker                                         (descriptionBase + ", GL_TEXTURE_BUFFER").c_str(), internalFormat, 64));
865*35238bceSAndroid Build Coastguard Worker         sizedBufferGroup->addChild(
866*35238bceSAndroid Build Coastguard Worker             new TextureBufferFormatCase(m_context, m_context.getRenderContext(), (nameBase + "_npot").c_str(),
867*35238bceSAndroid Build Coastguard Worker                                         (descriptionBase + ", GL_TEXTURE_BUFFER").c_str(), internalFormat, 112));
868*35238bceSAndroid Build Coastguard Worker     }
869*35238bceSAndroid Build Coastguard Worker }
870*35238bceSAndroid Build Coastguard Worker 
871*35238bceSAndroid Build Coastguard Worker } // namespace Functional
872*35238bceSAndroid Build Coastguard Worker } // namespace gles31
873*35238bceSAndroid Build Coastguard Worker } // namespace deqp
874