1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES Utilities
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 utilities.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "gluTextureUtil.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "gluContextInfo.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluTexture.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuTextureUtil.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "tcuFormatUtil.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
31*35238bceSAndroid Build Coastguard Worker
32*35238bceSAndroid Build Coastguard Worker namespace glu
33*35238bceSAndroid Build Coastguard Worker {
34*35238bceSAndroid Build Coastguard Worker
35*35238bceSAndroid Build Coastguard Worker using std::string;
36*35238bceSAndroid Build Coastguard Worker
37*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
38*35238bceSAndroid Build Coastguard Worker * \brief Map tcu::TextureFormat to GL pixel transfer format.
39*35238bceSAndroid Build Coastguard Worker *
40*35238bceSAndroid Build Coastguard Worker * Maps generic texture format description to GL pixel transfer format.
41*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
42*35238bceSAndroid Build Coastguard Worker *
43*35238bceSAndroid Build Coastguard Worker * \param texFormat Generic texture format.
44*35238bceSAndroid Build Coastguard Worker * \return GL pixel transfer format.
45*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getTransferFormat(tcu::TextureFormat texFormat)46*35238bceSAndroid Build Coastguard Worker TransferFormat getTransferFormat(tcu::TextureFormat texFormat)
47*35238bceSAndroid Build Coastguard Worker {
48*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
49*35238bceSAndroid Build Coastguard Worker
50*35238bceSAndroid Build Coastguard Worker uint32_t format = GL_NONE;
51*35238bceSAndroid Build Coastguard Worker uint32_t type = GL_NONE;
52*35238bceSAndroid Build Coastguard Worker bool isInt = false;
53*35238bceSAndroid Build Coastguard Worker
54*35238bceSAndroid Build Coastguard Worker switch (texFormat.type)
55*35238bceSAndroid Build Coastguard Worker {
56*35238bceSAndroid Build Coastguard Worker case TextureFormat::SIGNED_INT8:
57*35238bceSAndroid Build Coastguard Worker case TextureFormat::SIGNED_INT16:
58*35238bceSAndroid Build Coastguard Worker case TextureFormat::SIGNED_INT32:
59*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT8:
60*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT16:
61*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT32:
62*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT_1010102_REV:
63*35238bceSAndroid Build Coastguard Worker isInt = true;
64*35238bceSAndroid Build Coastguard Worker break;
65*35238bceSAndroid Build Coastguard Worker
66*35238bceSAndroid Build Coastguard Worker default:
67*35238bceSAndroid Build Coastguard Worker isInt = false;
68*35238bceSAndroid Build Coastguard Worker break;
69*35238bceSAndroid Build Coastguard Worker }
70*35238bceSAndroid Build Coastguard Worker
71*35238bceSAndroid Build Coastguard Worker switch (texFormat.order)
72*35238bceSAndroid Build Coastguard Worker {
73*35238bceSAndroid Build Coastguard Worker case TextureFormat::A:
74*35238bceSAndroid Build Coastguard Worker format = GL_ALPHA;
75*35238bceSAndroid Build Coastguard Worker break;
76*35238bceSAndroid Build Coastguard Worker case TextureFormat::L:
77*35238bceSAndroid Build Coastguard Worker format = GL_LUMINANCE;
78*35238bceSAndroid Build Coastguard Worker break;
79*35238bceSAndroid Build Coastguard Worker case TextureFormat::LA:
80*35238bceSAndroid Build Coastguard Worker format = GL_LUMINANCE_ALPHA;
81*35238bceSAndroid Build Coastguard Worker break;
82*35238bceSAndroid Build Coastguard Worker case TextureFormat::R:
83*35238bceSAndroid Build Coastguard Worker format = isInt ? GL_RED_INTEGER : GL_RED;
84*35238bceSAndroid Build Coastguard Worker break;
85*35238bceSAndroid Build Coastguard Worker case TextureFormat::RG:
86*35238bceSAndroid Build Coastguard Worker format = isInt ? GL_RG_INTEGER : GL_RG;
87*35238bceSAndroid Build Coastguard Worker break;
88*35238bceSAndroid Build Coastguard Worker case TextureFormat::RGB:
89*35238bceSAndroid Build Coastguard Worker format = isInt ? GL_RGB_INTEGER : GL_RGB;
90*35238bceSAndroid Build Coastguard Worker break;
91*35238bceSAndroid Build Coastguard Worker case TextureFormat::RGBA:
92*35238bceSAndroid Build Coastguard Worker format = isInt ? GL_RGBA_INTEGER : GL_RGBA;
93*35238bceSAndroid Build Coastguard Worker break;
94*35238bceSAndroid Build Coastguard Worker case TextureFormat::sR:
95*35238bceSAndroid Build Coastguard Worker format = GL_RED;
96*35238bceSAndroid Build Coastguard Worker break;
97*35238bceSAndroid Build Coastguard Worker case TextureFormat::sRG:
98*35238bceSAndroid Build Coastguard Worker format = GL_RG;
99*35238bceSAndroid Build Coastguard Worker break;
100*35238bceSAndroid Build Coastguard Worker case TextureFormat::sRGB:
101*35238bceSAndroid Build Coastguard Worker format = GL_RGB;
102*35238bceSAndroid Build Coastguard Worker break;
103*35238bceSAndroid Build Coastguard Worker case TextureFormat::sRGBA:
104*35238bceSAndroid Build Coastguard Worker format = GL_RGBA;
105*35238bceSAndroid Build Coastguard Worker break;
106*35238bceSAndroid Build Coastguard Worker case TextureFormat::D:
107*35238bceSAndroid Build Coastguard Worker format = GL_DEPTH_COMPONENT;
108*35238bceSAndroid Build Coastguard Worker break;
109*35238bceSAndroid Build Coastguard Worker case TextureFormat::DS:
110*35238bceSAndroid Build Coastguard Worker format = GL_DEPTH_STENCIL;
111*35238bceSAndroid Build Coastguard Worker break;
112*35238bceSAndroid Build Coastguard Worker case TextureFormat::S:
113*35238bceSAndroid Build Coastguard Worker format = GL_STENCIL_INDEX;
114*35238bceSAndroid Build Coastguard Worker break;
115*35238bceSAndroid Build Coastguard Worker
116*35238bceSAndroid Build Coastguard Worker case TextureFormat::BGRA:
117*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!isInt);
118*35238bceSAndroid Build Coastguard Worker format = GL_BGRA;
119*35238bceSAndroid Build Coastguard Worker break;
120*35238bceSAndroid Build Coastguard Worker
121*35238bceSAndroid Build Coastguard Worker default:
122*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
123*35238bceSAndroid Build Coastguard Worker }
124*35238bceSAndroid Build Coastguard Worker
125*35238bceSAndroid Build Coastguard Worker switch (texFormat.type)
126*35238bceSAndroid Build Coastguard Worker {
127*35238bceSAndroid Build Coastguard Worker case TextureFormat::SNORM_INT8:
128*35238bceSAndroid Build Coastguard Worker type = GL_BYTE;
129*35238bceSAndroid Build Coastguard Worker break;
130*35238bceSAndroid Build Coastguard Worker case TextureFormat::SNORM_INT16:
131*35238bceSAndroid Build Coastguard Worker type = GL_SHORT;
132*35238bceSAndroid Build Coastguard Worker break;
133*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNORM_INT8:
134*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_BYTE;
135*35238bceSAndroid Build Coastguard Worker break;
136*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNORM_INT16:
137*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_SHORT;
138*35238bceSAndroid Build Coastguard Worker break;
139*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNORM_SHORT_565:
140*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_SHORT_5_6_5;
141*35238bceSAndroid Build Coastguard Worker break;
142*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNORM_SHORT_4444:
143*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_SHORT_4_4_4_4;
144*35238bceSAndroid Build Coastguard Worker break;
145*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNORM_SHORT_5551:
146*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_SHORT_5_5_5_1;
147*35238bceSAndroid Build Coastguard Worker break;
148*35238bceSAndroid Build Coastguard Worker case TextureFormat::SIGNED_INT8:
149*35238bceSAndroid Build Coastguard Worker type = GL_BYTE;
150*35238bceSAndroid Build Coastguard Worker break;
151*35238bceSAndroid Build Coastguard Worker case TextureFormat::SIGNED_INT16:
152*35238bceSAndroid Build Coastguard Worker type = GL_SHORT;
153*35238bceSAndroid Build Coastguard Worker break;
154*35238bceSAndroid Build Coastguard Worker case TextureFormat::SIGNED_INT32:
155*35238bceSAndroid Build Coastguard Worker type = GL_INT;
156*35238bceSAndroid Build Coastguard Worker break;
157*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT8:
158*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_BYTE;
159*35238bceSAndroid Build Coastguard Worker break;
160*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT16:
161*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_SHORT;
162*35238bceSAndroid Build Coastguard Worker break;
163*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT32:
164*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_INT;
165*35238bceSAndroid Build Coastguard Worker break;
166*35238bceSAndroid Build Coastguard Worker case TextureFormat::FLOAT:
167*35238bceSAndroid Build Coastguard Worker type = GL_FLOAT;
168*35238bceSAndroid Build Coastguard Worker break;
169*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNORM_INT_101010:
170*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_INT_2_10_10_10_REV;
171*35238bceSAndroid Build Coastguard Worker break;
172*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNORM_INT_1010102_REV:
173*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_INT_2_10_10_10_REV;
174*35238bceSAndroid Build Coastguard Worker break;
175*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT_1010102_REV:
176*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_INT_2_10_10_10_REV;
177*35238bceSAndroid Build Coastguard Worker break;
178*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT_11F_11F_10F_REV:
179*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_INT_10F_11F_11F_REV;
180*35238bceSAndroid Build Coastguard Worker break;
181*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT_999_E5_REV:
182*35238bceSAndroid Build Coastguard Worker type = GL_UNSIGNED_INT_5_9_9_9_REV;
183*35238bceSAndroid Build Coastguard Worker break;
184*35238bceSAndroid Build Coastguard Worker case TextureFormat::HALF_FLOAT:
185*35238bceSAndroid Build Coastguard Worker type = GL_HALF_FLOAT;
186*35238bceSAndroid Build Coastguard Worker break;
187*35238bceSAndroid Build Coastguard Worker case TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV:
188*35238bceSAndroid Build Coastguard Worker type = GL_FLOAT_32_UNSIGNED_INT_24_8_REV;
189*35238bceSAndroid Build Coastguard Worker break;
190*35238bceSAndroid Build Coastguard Worker case TextureFormat::UNSIGNED_INT_24_8:
191*35238bceSAndroid Build Coastguard Worker type = texFormat.order == TextureFormat::D ? GL_UNSIGNED_INT : GL_UNSIGNED_INT_24_8;
192*35238bceSAndroid Build Coastguard Worker break;
193*35238bceSAndroid Build Coastguard Worker
194*35238bceSAndroid Build Coastguard Worker default:
195*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map texture format to GL transfer format");
196*35238bceSAndroid Build Coastguard Worker }
197*35238bceSAndroid Build Coastguard Worker
198*35238bceSAndroid Build Coastguard Worker return TransferFormat(format, type);
199*35238bceSAndroid Build Coastguard Worker }
200*35238bceSAndroid Build Coastguard Worker
201*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
202*35238bceSAndroid Build Coastguard Worker * \brief Map tcu::TextureFormat to GL internal sized format.
203*35238bceSAndroid Build Coastguard Worker *
204*35238bceSAndroid Build Coastguard Worker * Maps generic texture format description to GL internal format.
205*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
206*35238bceSAndroid Build Coastguard Worker *
207*35238bceSAndroid Build Coastguard Worker * \param texFormat Generic texture format.
208*35238bceSAndroid Build Coastguard Worker * \return GL sized internal format.
209*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getInternalFormat(tcu::TextureFormat texFormat)210*35238bceSAndroid Build Coastguard Worker uint32_t getInternalFormat(tcu::TextureFormat texFormat)
211*35238bceSAndroid Build Coastguard Worker {
212*35238bceSAndroid Build Coastguard Worker DE_STATIC_ASSERT(tcu::TextureFormat::CHANNELORDER_LAST < (1 << 16));
213*35238bceSAndroid Build Coastguard Worker DE_STATIC_ASSERT(tcu::TextureFormat::CHANNELTYPE_LAST < (1 << 16));
214*35238bceSAndroid Build Coastguard Worker
215*35238bceSAndroid Build Coastguard Worker #define PACK_FMT(ORDER, TYPE) ((int(ORDER) << 16) | int(TYPE))
216*35238bceSAndroid Build Coastguard Worker #define FMT_CASE(ORDER, TYPE) PACK_FMT(tcu::TextureFormat::ORDER, tcu::TextureFormat::TYPE)
217*35238bceSAndroid Build Coastguard Worker
218*35238bceSAndroid Build Coastguard Worker switch (PACK_FMT(texFormat.order, texFormat.type))
219*35238bceSAndroid Build Coastguard Worker {
220*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, UNORM_SHORT_5551):
221*35238bceSAndroid Build Coastguard Worker return GL_RGB5_A1;
222*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, UNORM_SHORT_4444):
223*35238bceSAndroid Build Coastguard Worker return GL_RGBA4;
224*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, UNORM_SHORT_565):
225*35238bceSAndroid Build Coastguard Worker return GL_RGB565;
226*35238bceSAndroid Build Coastguard Worker case FMT_CASE(D, UNORM_INT16):
227*35238bceSAndroid Build Coastguard Worker return GL_DEPTH_COMPONENT16;
228*35238bceSAndroid Build Coastguard Worker case FMT_CASE(S, UNSIGNED_INT8):
229*35238bceSAndroid Build Coastguard Worker return GL_STENCIL_INDEX8;
230*35238bceSAndroid Build Coastguard Worker
231*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, FLOAT):
232*35238bceSAndroid Build Coastguard Worker return GL_RGBA32F;
233*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, SIGNED_INT32):
234*35238bceSAndroid Build Coastguard Worker return GL_RGBA32I;
235*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, UNSIGNED_INT32):
236*35238bceSAndroid Build Coastguard Worker return GL_RGBA32UI;
237*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, UNORM_INT16):
238*35238bceSAndroid Build Coastguard Worker return GL_RGBA16;
239*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, SNORM_INT16):
240*35238bceSAndroid Build Coastguard Worker return GL_RGBA16_SNORM;
241*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, HALF_FLOAT):
242*35238bceSAndroid Build Coastguard Worker return GL_RGBA16F;
243*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, SIGNED_INT16):
244*35238bceSAndroid Build Coastguard Worker return GL_RGBA16I;
245*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, UNSIGNED_INT16):
246*35238bceSAndroid Build Coastguard Worker return GL_RGBA16UI;
247*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, UNORM_INT8):
248*35238bceSAndroid Build Coastguard Worker return GL_RGBA8;
249*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, SIGNED_INT8):
250*35238bceSAndroid Build Coastguard Worker return GL_RGBA8I;
251*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, UNSIGNED_INT8):
252*35238bceSAndroid Build Coastguard Worker return GL_RGBA8UI;
253*35238bceSAndroid Build Coastguard Worker case FMT_CASE(sRGBA, UNORM_INT8):
254*35238bceSAndroid Build Coastguard Worker return GL_SRGB8_ALPHA8;
255*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, UNORM_INT_1010102_REV):
256*35238bceSAndroid Build Coastguard Worker return GL_RGB10_A2;
257*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, UNSIGNED_INT_1010102_REV):
258*35238bceSAndroid Build Coastguard Worker return GL_RGB10_A2UI;
259*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGBA, SNORM_INT8):
260*35238bceSAndroid Build Coastguard Worker return GL_RGBA8_SNORM;
261*35238bceSAndroid Build Coastguard Worker
262*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, UNORM_INT8):
263*35238bceSAndroid Build Coastguard Worker return GL_RGB8;
264*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, UNSIGNED_INT_11F_11F_10F_REV):
265*35238bceSAndroid Build Coastguard Worker return GL_R11F_G11F_B10F;
266*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, FLOAT):
267*35238bceSAndroid Build Coastguard Worker return GL_RGB32F;
268*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, SIGNED_INT32):
269*35238bceSAndroid Build Coastguard Worker return GL_RGB32I;
270*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, UNSIGNED_INT32):
271*35238bceSAndroid Build Coastguard Worker return GL_RGB32UI;
272*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, UNORM_INT16):
273*35238bceSAndroid Build Coastguard Worker return GL_RGB16;
274*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, SNORM_INT16):
275*35238bceSAndroid Build Coastguard Worker return GL_RGB16_SNORM;
276*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, HALF_FLOAT):
277*35238bceSAndroid Build Coastguard Worker return GL_RGB16F;
278*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, SIGNED_INT16):
279*35238bceSAndroid Build Coastguard Worker return GL_RGB16I;
280*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, UNSIGNED_INT16):
281*35238bceSAndroid Build Coastguard Worker return GL_RGB16UI;
282*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, SNORM_INT8):
283*35238bceSAndroid Build Coastguard Worker return GL_RGB8_SNORM;
284*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, SIGNED_INT8):
285*35238bceSAndroid Build Coastguard Worker return GL_RGB8I;
286*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, UNSIGNED_INT8):
287*35238bceSAndroid Build Coastguard Worker return GL_RGB8UI;
288*35238bceSAndroid Build Coastguard Worker case FMT_CASE(sRGB, UNORM_INT8):
289*35238bceSAndroid Build Coastguard Worker return GL_SRGB8;
290*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, UNSIGNED_INT_999_E5_REV):
291*35238bceSAndroid Build Coastguard Worker return GL_RGB9_E5;
292*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RGB, UNORM_INT_1010102_REV):
293*35238bceSAndroid Build Coastguard Worker return GL_RGB10;
294*35238bceSAndroid Build Coastguard Worker
295*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, FLOAT):
296*35238bceSAndroid Build Coastguard Worker return GL_RG32F;
297*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, SIGNED_INT32):
298*35238bceSAndroid Build Coastguard Worker return GL_RG32I;
299*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, UNSIGNED_INT32):
300*35238bceSAndroid Build Coastguard Worker return GL_RG32UI;
301*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, UNORM_INT16):
302*35238bceSAndroid Build Coastguard Worker return GL_RG16;
303*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, SNORM_INT16):
304*35238bceSAndroid Build Coastguard Worker return GL_RG16_SNORM;
305*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, HALF_FLOAT):
306*35238bceSAndroid Build Coastguard Worker return GL_RG16F;
307*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, SIGNED_INT16):
308*35238bceSAndroid Build Coastguard Worker return GL_RG16I;
309*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, UNSIGNED_INT16):
310*35238bceSAndroid Build Coastguard Worker return GL_RG16UI;
311*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, UNORM_INT8):
312*35238bceSAndroid Build Coastguard Worker return GL_RG8;
313*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, SIGNED_INT8):
314*35238bceSAndroid Build Coastguard Worker return GL_RG8I;
315*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, UNSIGNED_INT8):
316*35238bceSAndroid Build Coastguard Worker return GL_RG8UI;
317*35238bceSAndroid Build Coastguard Worker case FMT_CASE(RG, SNORM_INT8):
318*35238bceSAndroid Build Coastguard Worker return GL_RG8_SNORM;
319*35238bceSAndroid Build Coastguard Worker case FMT_CASE(sRG, UNORM_INT8):
320*35238bceSAndroid Build Coastguard Worker return GL_SRG8_EXT;
321*35238bceSAndroid Build Coastguard Worker
322*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, FLOAT):
323*35238bceSAndroid Build Coastguard Worker return GL_R32F;
324*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, SIGNED_INT32):
325*35238bceSAndroid Build Coastguard Worker return GL_R32I;
326*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, UNSIGNED_INT32):
327*35238bceSAndroid Build Coastguard Worker return GL_R32UI;
328*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, UNORM_INT16):
329*35238bceSAndroid Build Coastguard Worker return GL_R16;
330*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, SNORM_INT16):
331*35238bceSAndroid Build Coastguard Worker return GL_R16_SNORM;
332*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, HALF_FLOAT):
333*35238bceSAndroid Build Coastguard Worker return GL_R16F;
334*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, SIGNED_INT16):
335*35238bceSAndroid Build Coastguard Worker return GL_R16I;
336*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, UNSIGNED_INT16):
337*35238bceSAndroid Build Coastguard Worker return GL_R16UI;
338*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, UNORM_INT8):
339*35238bceSAndroid Build Coastguard Worker return GL_R8;
340*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, SIGNED_INT8):
341*35238bceSAndroid Build Coastguard Worker return GL_R8I;
342*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, UNSIGNED_INT8):
343*35238bceSAndroid Build Coastguard Worker return GL_R8UI;
344*35238bceSAndroid Build Coastguard Worker case FMT_CASE(R, SNORM_INT8):
345*35238bceSAndroid Build Coastguard Worker return GL_R8_SNORM;
346*35238bceSAndroid Build Coastguard Worker case FMT_CASE(sR, UNORM_INT8):
347*35238bceSAndroid Build Coastguard Worker return GL_SR8_EXT;
348*35238bceSAndroid Build Coastguard Worker
349*35238bceSAndroid Build Coastguard Worker case FMT_CASE(D, FLOAT):
350*35238bceSAndroid Build Coastguard Worker return GL_DEPTH_COMPONENT32F;
351*35238bceSAndroid Build Coastguard Worker case FMT_CASE(D, UNSIGNED_INT_24_8):
352*35238bceSAndroid Build Coastguard Worker return GL_DEPTH_COMPONENT24;
353*35238bceSAndroid Build Coastguard Worker case FMT_CASE(D, UNSIGNED_INT32):
354*35238bceSAndroid Build Coastguard Worker return GL_DEPTH_COMPONENT32;
355*35238bceSAndroid Build Coastguard Worker case FMT_CASE(DS, FLOAT_UNSIGNED_INT_24_8_REV):
356*35238bceSAndroid Build Coastguard Worker return GL_DEPTH32F_STENCIL8;
357*35238bceSAndroid Build Coastguard Worker case FMT_CASE(DS, UNSIGNED_INT_24_8):
358*35238bceSAndroid Build Coastguard Worker return GL_DEPTH24_STENCIL8;
359*35238bceSAndroid Build Coastguard Worker
360*35238bceSAndroid Build Coastguard Worker default:
361*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map texture format to GL internal format");
362*35238bceSAndroid Build Coastguard Worker }
363*35238bceSAndroid Build Coastguard Worker }
364*35238bceSAndroid Build Coastguard Worker
365*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
366*35238bceSAndroid Build Coastguard Worker * \brief Map generic compressed format to GL compressed format enum.
367*35238bceSAndroid Build Coastguard Worker *
368*35238bceSAndroid Build Coastguard Worker * Maps generic compressed format to GL compressed format enum value.
369*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
370*35238bceSAndroid Build Coastguard Worker *
371*35238bceSAndroid Build Coastguard Worker * \param format Generic compressed format.
372*35238bceSAndroid Build Coastguard Worker * \return GL compressed texture format.
373*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getGLFormat(tcu::CompressedTexFormat format)374*35238bceSAndroid Build Coastguard Worker uint32_t getGLFormat(tcu::CompressedTexFormat format)
375*35238bceSAndroid Build Coastguard Worker {
376*35238bceSAndroid Build Coastguard Worker switch (format)
377*35238bceSAndroid Build Coastguard Worker {
378*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ETC1_RGB8:
379*35238bceSAndroid Build Coastguard Worker return GL_ETC1_RGB8_OES;
380*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_EAC_R11:
381*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_R11_EAC;
382*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_EAC_SIGNED_R11:
383*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SIGNED_R11_EAC;
384*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_EAC_RG11:
385*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RG11_EAC;
386*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_EAC_SIGNED_RG11:
387*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SIGNED_RG11_EAC;
388*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ETC2_RGB8:
389*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGB8_ETC2;
390*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ETC2_SRGB8:
391*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ETC2;
392*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1:
393*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;
394*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1:
395*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2;
396*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ETC2_EAC_RGBA8:
397*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA8_ETC2_EAC;
398*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ETC2_EAC_SRGB8_ALPHA8:
399*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC;
400*35238bceSAndroid Build Coastguard Worker
401*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_RGBA:
402*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_4x4_KHR;
403*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_RGBA:
404*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_5x4_KHR;
405*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_RGBA:
406*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_5x5_KHR;
407*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_6x5_RGBA:
408*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_6x5_KHR;
409*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_RGBA:
410*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_6x6_KHR;
411*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_RGBA:
412*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_8x5_KHR;
413*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_RGBA:
414*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_8x6_KHR;
415*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_8x8_RGBA:
416*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_8x8_KHR;
417*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_10x5_RGBA:
418*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_10x5_KHR;
419*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_10x6_RGBA:
420*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_10x6_KHR;
421*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_10x8_RGBA:
422*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_10x8_KHR;
423*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_10x10_RGBA:
424*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_10x10_KHR;
425*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_12x10_RGBA:
426*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_12x10_KHR;
427*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_12x12_RGBA:
428*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_RGBA_ASTC_12x12_KHR;
429*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_SRGB8_ALPHA8:
430*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR;
431*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_SRGB8_ALPHA8:
432*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR;
433*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_SRGB8_ALPHA8:
434*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR;
435*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_6x5_SRGB8_ALPHA8:
436*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR;
437*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_SRGB8_ALPHA8:
438*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR;
439*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_SRGB8_ALPHA8:
440*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR;
441*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_SRGB8_ALPHA8:
442*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR;
443*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_8x8_SRGB8_ALPHA8:
444*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR;
445*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_10x5_SRGB8_ALPHA8:
446*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR;
447*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_10x6_SRGB8_ALPHA8:
448*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR;
449*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_10x8_SRGB8_ALPHA8:
450*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR;
451*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_10x10_SRGB8_ALPHA8:
452*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR;
453*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_12x10_SRGB8_ALPHA8:
454*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR;
455*35238bceSAndroid Build Coastguard Worker case tcu::COMPRESSEDTEXFORMAT_ASTC_12x12_SRGB8_ALPHA8:
456*35238bceSAndroid Build Coastguard Worker return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR;
457*35238bceSAndroid Build Coastguard Worker
458*35238bceSAndroid Build Coastguard Worker default:
459*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map compressed format to GL format");
460*35238bceSAndroid Build Coastguard Worker }
461*35238bceSAndroid Build Coastguard Worker }
462*35238bceSAndroid Build Coastguard Worker
463*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
464*35238bceSAndroid Build Coastguard Worker * \brief Map compressed GL format to generic compressed format.
465*35238bceSAndroid Build Coastguard Worker *
466*35238bceSAndroid Build Coastguard Worker * Maps compressed GL format to generic compressed format.
467*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
468*35238bceSAndroid Build Coastguard Worker *
469*35238bceSAndroid Build Coastguard Worker * \param GL compressed texture format.
470*35238bceSAndroid Build Coastguard Worker * \return format Generic compressed format.
471*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
mapGLCompressedTexFormat(uint32_t format)472*35238bceSAndroid Build Coastguard Worker tcu::CompressedTexFormat mapGLCompressedTexFormat(uint32_t format)
473*35238bceSAndroid Build Coastguard Worker {
474*35238bceSAndroid Build Coastguard Worker switch (format)
475*35238bceSAndroid Build Coastguard Worker {
476*35238bceSAndroid Build Coastguard Worker case GL_ETC1_RGB8_OES:
477*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ETC1_RGB8;
478*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_R11_EAC:
479*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_EAC_R11;
480*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SIGNED_R11_EAC:
481*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_EAC_SIGNED_R11;
482*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RG11_EAC:
483*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_EAC_RG11;
484*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SIGNED_RG11_EAC:
485*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_EAC_SIGNED_RG11;
486*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGB8_ETC2:
487*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ETC2_RGB8;
488*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ETC2:
489*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ETC2_SRGB8;
490*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
491*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1;
492*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
493*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1;
494*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA8_ETC2_EAC:
495*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ETC2_EAC_RGBA8;
496*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
497*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ETC2_EAC_SRGB8_ALPHA8;
498*35238bceSAndroid Build Coastguard Worker
499*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
500*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_RGBA;
501*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
502*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_RGBA;
503*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
504*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_RGBA;
505*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
506*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_6x5_RGBA;
507*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
508*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_RGBA;
509*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
510*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_RGBA;
511*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
512*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_RGBA;
513*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
514*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_8x8_RGBA;
515*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
516*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_10x5_RGBA;
517*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
518*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_10x6_RGBA;
519*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
520*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_10x8_RGBA;
521*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
522*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_10x10_RGBA;
523*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
524*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_12x10_RGBA;
525*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
526*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_12x12_RGBA;
527*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
528*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_SRGB8_ALPHA8;
529*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
530*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_SRGB8_ALPHA8;
531*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
532*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_SRGB8_ALPHA8;
533*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
534*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_6x5_SRGB8_ALPHA8;
535*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
536*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_SRGB8_ALPHA8;
537*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
538*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_SRGB8_ALPHA8;
539*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
540*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_SRGB8_ALPHA8;
541*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
542*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_8x8_SRGB8_ALPHA8;
543*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
544*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_10x5_SRGB8_ALPHA8;
545*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
546*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_10x6_SRGB8_ALPHA8;
547*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
548*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_10x8_SRGB8_ALPHA8;
549*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
550*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_10x10_SRGB8_ALPHA8;
551*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
552*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_12x10_SRGB8_ALPHA8;
553*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
554*35238bceSAndroid Build Coastguard Worker return tcu::COMPRESSEDTEXFORMAT_ASTC_12x12_SRGB8_ALPHA8;
555*35238bceSAndroid Build Coastguard Worker
556*35238bceSAndroid Build Coastguard Worker default:
557*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map compressed GL format to compressed format");
558*35238bceSAndroid Build Coastguard Worker }
559*35238bceSAndroid Build Coastguard Worker }
560*35238bceSAndroid Build Coastguard Worker
isCompressedFormat(uint32_t internalFormat)561*35238bceSAndroid Build Coastguard Worker bool isCompressedFormat(uint32_t internalFormat)
562*35238bceSAndroid Build Coastguard Worker {
563*35238bceSAndroid Build Coastguard Worker switch (internalFormat)
564*35238bceSAndroid Build Coastguard Worker {
565*35238bceSAndroid Build Coastguard Worker case GL_ETC1_RGB8_OES:
566*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_R11_EAC:
567*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SIGNED_R11_EAC:
568*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RG11_EAC:
569*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SIGNED_RG11_EAC:
570*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGB8_ETC2:
571*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ETC2:
572*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
573*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
574*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA8_ETC2_EAC:
575*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
576*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
577*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
578*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
579*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
580*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
581*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
582*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
583*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
584*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
585*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
586*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
587*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
588*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
589*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
590*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
591*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
592*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
593*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
594*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
595*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
596*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
597*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
598*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
599*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
600*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
601*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
602*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
603*35238bceSAndroid Build Coastguard Worker case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
604*35238bceSAndroid Build Coastguard Worker return true;
605*35238bceSAndroid Build Coastguard Worker
606*35238bceSAndroid Build Coastguard Worker default:
607*35238bceSAndroid Build Coastguard Worker return false;
608*35238bceSAndroid Build Coastguard Worker }
609*35238bceSAndroid Build Coastguard Worker }
610*35238bceSAndroid Build Coastguard Worker
mapGLChannelType(uint32_t dataType,bool normalized)611*35238bceSAndroid Build Coastguard Worker static tcu::TextureFormat::ChannelType mapGLChannelType(uint32_t dataType, bool normalized)
612*35238bceSAndroid Build Coastguard Worker {
613*35238bceSAndroid Build Coastguard Worker // \note Normalized bit is ignored where it doesn't apply.
614*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
615*35238bceSAndroid Build Coastguard Worker
616*35238bceSAndroid Build Coastguard Worker switch (dataType)
617*35238bceSAndroid Build Coastguard Worker {
618*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_BYTE:
619*35238bceSAndroid Build Coastguard Worker return normalized ? TextureFormat::UNORM_INT8 : TextureFormat::UNSIGNED_INT8;
620*35238bceSAndroid Build Coastguard Worker case GL_BYTE:
621*35238bceSAndroid Build Coastguard Worker return normalized ? TextureFormat::SNORM_INT8 : TextureFormat::SIGNED_INT8;
622*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_SHORT:
623*35238bceSAndroid Build Coastguard Worker return normalized ? TextureFormat::UNORM_INT16 : TextureFormat::UNSIGNED_INT16;
624*35238bceSAndroid Build Coastguard Worker case GL_SHORT:
625*35238bceSAndroid Build Coastguard Worker return normalized ? TextureFormat::SNORM_INT16 : TextureFormat::SIGNED_INT16;
626*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_INT:
627*35238bceSAndroid Build Coastguard Worker return normalized ? TextureFormat::UNORM_INT32 : TextureFormat::UNSIGNED_INT32;
628*35238bceSAndroid Build Coastguard Worker case GL_INT:
629*35238bceSAndroid Build Coastguard Worker return normalized ? TextureFormat::SNORM_INT32 : TextureFormat::SIGNED_INT32;
630*35238bceSAndroid Build Coastguard Worker case GL_FLOAT:
631*35238bceSAndroid Build Coastguard Worker return TextureFormat::FLOAT;
632*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_SHORT_4_4_4_4:
633*35238bceSAndroid Build Coastguard Worker return TextureFormat::UNORM_SHORT_4444;
634*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_SHORT_5_5_5_1:
635*35238bceSAndroid Build Coastguard Worker return TextureFormat::UNORM_SHORT_5551;
636*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_SHORT_5_6_5:
637*35238bceSAndroid Build Coastguard Worker return TextureFormat::UNORM_SHORT_565;
638*35238bceSAndroid Build Coastguard Worker case GL_HALF_FLOAT:
639*35238bceSAndroid Build Coastguard Worker return TextureFormat::HALF_FLOAT;
640*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_INT_2_10_10_10_REV:
641*35238bceSAndroid Build Coastguard Worker return normalized ? TextureFormat::UNORM_INT_1010102_REV : TextureFormat::UNSIGNED_INT_1010102_REV;
642*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_INT_10F_11F_11F_REV:
643*35238bceSAndroid Build Coastguard Worker return TextureFormat::UNSIGNED_INT_11F_11F_10F_REV;
644*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_INT_24_8:
645*35238bceSAndroid Build Coastguard Worker return TextureFormat::UNSIGNED_INT_24_8;
646*35238bceSAndroid Build Coastguard Worker case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
647*35238bceSAndroid Build Coastguard Worker return TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV;
648*35238bceSAndroid Build Coastguard Worker case GL_UNSIGNED_INT_5_9_9_9_REV:
649*35238bceSAndroid Build Coastguard Worker return TextureFormat::UNSIGNED_INT_999_E5_REV;
650*35238bceSAndroid Build Coastguard Worker
651*35238bceSAndroid Build Coastguard Worker // GL_OES_texture_half_float
652*35238bceSAndroid Build Coastguard Worker case GL_HALF_FLOAT_OES:
653*35238bceSAndroid Build Coastguard Worker return TextureFormat::HALF_FLOAT;
654*35238bceSAndroid Build Coastguard Worker
655*35238bceSAndroid Build Coastguard Worker default:
656*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
657*35238bceSAndroid Build Coastguard Worker return TextureFormat::CHANNELTYPE_LAST;
658*35238bceSAndroid Build Coastguard Worker }
659*35238bceSAndroid Build Coastguard Worker }
660*35238bceSAndroid Build Coastguard Worker
661*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
662*35238bceSAndroid Build Coastguard Worker * \brief Map GL pixel transfer format to tcu::TextureFormat.
663*35238bceSAndroid Build Coastguard Worker *
664*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
665*35238bceSAndroid Build Coastguard Worker *
666*35238bceSAndroid Build Coastguard Worker * \param format GL pixel format.
667*35238bceSAndroid Build Coastguard Worker * \param dataType GL data type.
668*35238bceSAndroid Build Coastguard Worker * \return Generic texture format.
669*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
mapGLTransferFormat(uint32_t format,uint32_t dataType)670*35238bceSAndroid Build Coastguard Worker tcu::TextureFormat mapGLTransferFormat(uint32_t format, uint32_t dataType)
671*35238bceSAndroid Build Coastguard Worker {
672*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
673*35238bceSAndroid Build Coastguard Worker switch (format)
674*35238bceSAndroid Build Coastguard Worker {
675*35238bceSAndroid Build Coastguard Worker case GL_ALPHA:
676*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::A, mapGLChannelType(dataType, true));
677*35238bceSAndroid Build Coastguard Worker case GL_LUMINANCE:
678*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::L, mapGLChannelType(dataType, true));
679*35238bceSAndroid Build Coastguard Worker case GL_LUMINANCE_ALPHA:
680*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::LA, mapGLChannelType(dataType, true));
681*35238bceSAndroid Build Coastguard Worker case GL_RGB:
682*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, mapGLChannelType(dataType, true));
683*35238bceSAndroid Build Coastguard Worker case GL_RGBA:
684*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, mapGLChannelType(dataType, true));
685*35238bceSAndroid Build Coastguard Worker case GL_BGRA:
686*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::BGRA, mapGLChannelType(dataType, true));
687*35238bceSAndroid Build Coastguard Worker case GL_RG:
688*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, mapGLChannelType(dataType, true));
689*35238bceSAndroid Build Coastguard Worker case GL_RED:
690*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, mapGLChannelType(dataType, true));
691*35238bceSAndroid Build Coastguard Worker case GL_RGBA_INTEGER:
692*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, mapGLChannelType(dataType, false));
693*35238bceSAndroid Build Coastguard Worker case GL_RGB_INTEGER:
694*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, mapGLChannelType(dataType, false));
695*35238bceSAndroid Build Coastguard Worker case GL_RG_INTEGER:
696*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, mapGLChannelType(dataType, false));
697*35238bceSAndroid Build Coastguard Worker case GL_RED_INTEGER:
698*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, mapGLChannelType(dataType, false));
699*35238bceSAndroid Build Coastguard Worker case GL_SRGB:
700*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::sRGB, mapGLChannelType(dataType, false));
701*35238bceSAndroid Build Coastguard Worker case GL_SRGB_ALPHA:
702*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::sRGBA, mapGLChannelType(dataType, false));
703*35238bceSAndroid Build Coastguard Worker
704*35238bceSAndroid Build Coastguard Worker case GL_DEPTH_COMPONENT:
705*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::D, mapGLChannelType(dataType, true));
706*35238bceSAndroid Build Coastguard Worker case GL_DEPTH_STENCIL:
707*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::DS, mapGLChannelType(dataType, true));
708*35238bceSAndroid Build Coastguard Worker
709*35238bceSAndroid Build Coastguard Worker default:
710*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError(string("Can't map GL pixel format (") + tcu::toHex(format).toString() + ", " +
711*35238bceSAndroid Build Coastguard Worker tcu::toHex(dataType).toString() + ") to texture format");
712*35238bceSAndroid Build Coastguard Worker }
713*35238bceSAndroid Build Coastguard Worker }
714*35238bceSAndroid Build Coastguard Worker
715*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
716*35238bceSAndroid Build Coastguard Worker * \brief Map GL internal texture format to tcu::TextureFormat.
717*35238bceSAndroid Build Coastguard Worker *
718*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
719*35238bceSAndroid Build Coastguard Worker *
720*35238bceSAndroid Build Coastguard Worker * \param internalFormat Sized internal format.
721*35238bceSAndroid Build Coastguard Worker * \return Generic texture format.
722*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
mapGLInternalFormat(uint32_t internalFormat)723*35238bceSAndroid Build Coastguard Worker tcu::TextureFormat mapGLInternalFormat(uint32_t internalFormat)
724*35238bceSAndroid Build Coastguard Worker {
725*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
726*35238bceSAndroid Build Coastguard Worker switch (internalFormat)
727*35238bceSAndroid Build Coastguard Worker {
728*35238bceSAndroid Build Coastguard Worker case GL_RGB5_A1:
729*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::UNORM_SHORT_5551);
730*35238bceSAndroid Build Coastguard Worker case GL_RGBA4:
731*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::UNORM_SHORT_4444);
732*35238bceSAndroid Build Coastguard Worker case GL_RGB565:
733*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::UNORM_SHORT_565);
734*35238bceSAndroid Build Coastguard Worker case GL_DEPTH_COMPONENT16:
735*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::D, TextureFormat::UNORM_INT16);
736*35238bceSAndroid Build Coastguard Worker case GL_STENCIL_INDEX8:
737*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::S, TextureFormat::UNSIGNED_INT8);
738*35238bceSAndroid Build Coastguard Worker
739*35238bceSAndroid Build Coastguard Worker case GL_RGBA32F:
740*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::FLOAT);
741*35238bceSAndroid Build Coastguard Worker case GL_RGBA32I:
742*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::SIGNED_INT32);
743*35238bceSAndroid Build Coastguard Worker case GL_RGBA32UI:
744*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::UNSIGNED_INT32);
745*35238bceSAndroid Build Coastguard Worker case GL_RGBA16:
746*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::UNORM_INT16);
747*35238bceSAndroid Build Coastguard Worker case GL_RGBA16_SNORM:
748*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::SNORM_INT16);
749*35238bceSAndroid Build Coastguard Worker case GL_RGBA16F:
750*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::HALF_FLOAT);
751*35238bceSAndroid Build Coastguard Worker case GL_RGBA16I:
752*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::SIGNED_INT16);
753*35238bceSAndroid Build Coastguard Worker case GL_RGBA16UI:
754*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::UNSIGNED_INT16);
755*35238bceSAndroid Build Coastguard Worker case GL_RGBA8:
756*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::UNORM_INT8);
757*35238bceSAndroid Build Coastguard Worker case GL_RGBA8I:
758*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::SIGNED_INT8);
759*35238bceSAndroid Build Coastguard Worker case GL_RGBA8UI:
760*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::UNSIGNED_INT8);
761*35238bceSAndroid Build Coastguard Worker case GL_SRGB8_ALPHA8:
762*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::sRGBA, TextureFormat::UNORM_INT8);
763*35238bceSAndroid Build Coastguard Worker case GL_RGB10_A2:
764*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::UNORM_INT_1010102_REV);
765*35238bceSAndroid Build Coastguard Worker case GL_RGB10_A2UI:
766*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::UNSIGNED_INT_1010102_REV);
767*35238bceSAndroid Build Coastguard Worker case GL_RGBA8_SNORM:
768*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGBA, TextureFormat::SNORM_INT8);
769*35238bceSAndroid Build Coastguard Worker
770*35238bceSAndroid Build Coastguard Worker case GL_RGB8:
771*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::UNORM_INT8);
772*35238bceSAndroid Build Coastguard Worker case GL_R11F_G11F_B10F:
773*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::UNSIGNED_INT_11F_11F_10F_REV);
774*35238bceSAndroid Build Coastguard Worker case GL_RGB32F:
775*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::FLOAT);
776*35238bceSAndroid Build Coastguard Worker case GL_RGB32I:
777*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::SIGNED_INT32);
778*35238bceSAndroid Build Coastguard Worker case GL_RGB32UI:
779*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::UNSIGNED_INT32);
780*35238bceSAndroid Build Coastguard Worker case GL_RGB16:
781*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::UNORM_INT16);
782*35238bceSAndroid Build Coastguard Worker case GL_RGB16_SNORM:
783*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::SNORM_INT16);
784*35238bceSAndroid Build Coastguard Worker case GL_RGB16F:
785*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::HALF_FLOAT);
786*35238bceSAndroid Build Coastguard Worker case GL_RGB16I:
787*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::SIGNED_INT16);
788*35238bceSAndroid Build Coastguard Worker case GL_RGB16UI:
789*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::UNSIGNED_INT16);
790*35238bceSAndroid Build Coastguard Worker case GL_RGB8_SNORM:
791*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::SNORM_INT8);
792*35238bceSAndroid Build Coastguard Worker case GL_RGB8I:
793*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::SIGNED_INT8);
794*35238bceSAndroid Build Coastguard Worker case GL_RGB8UI:
795*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::UNSIGNED_INT8);
796*35238bceSAndroid Build Coastguard Worker case GL_SRGB8:
797*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::sRGB, TextureFormat::UNORM_INT8);
798*35238bceSAndroid Build Coastguard Worker case GL_RGB9_E5:
799*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::UNSIGNED_INT_999_E5_REV);
800*35238bceSAndroid Build Coastguard Worker case GL_RGB10:
801*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RGB, TextureFormat::UNORM_INT_1010102_REV);
802*35238bceSAndroid Build Coastguard Worker
803*35238bceSAndroid Build Coastguard Worker case GL_RG32F:
804*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::FLOAT);
805*35238bceSAndroid Build Coastguard Worker case GL_RG32I:
806*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::SIGNED_INT32);
807*35238bceSAndroid Build Coastguard Worker case GL_RG32UI:
808*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::UNSIGNED_INT32);
809*35238bceSAndroid Build Coastguard Worker case GL_RG16:
810*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::UNORM_INT16);
811*35238bceSAndroid Build Coastguard Worker case GL_RG16_SNORM:
812*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::SNORM_INT16);
813*35238bceSAndroid Build Coastguard Worker case GL_RG16F:
814*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::HALF_FLOAT);
815*35238bceSAndroid Build Coastguard Worker case GL_RG16I:
816*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::SIGNED_INT16);
817*35238bceSAndroid Build Coastguard Worker case GL_RG16UI:
818*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::UNSIGNED_INT16);
819*35238bceSAndroid Build Coastguard Worker case GL_RG8:
820*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::UNORM_INT8);
821*35238bceSAndroid Build Coastguard Worker case GL_RG8I:
822*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::SIGNED_INT8);
823*35238bceSAndroid Build Coastguard Worker case GL_RG8UI:
824*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::UNSIGNED_INT8);
825*35238bceSAndroid Build Coastguard Worker case GL_RG8_SNORM:
826*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::RG, TextureFormat::SNORM_INT8);
827*35238bceSAndroid Build Coastguard Worker case GL_SRG8_EXT:
828*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::sRG, TextureFormat::UNORM_INT8);
829*35238bceSAndroid Build Coastguard Worker
830*35238bceSAndroid Build Coastguard Worker case GL_R32F:
831*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::FLOAT);
832*35238bceSAndroid Build Coastguard Worker case GL_R32I:
833*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::SIGNED_INT32);
834*35238bceSAndroid Build Coastguard Worker case GL_R32UI:
835*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::UNSIGNED_INT32);
836*35238bceSAndroid Build Coastguard Worker case GL_R16:
837*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::UNORM_INT16);
838*35238bceSAndroid Build Coastguard Worker case GL_R16_SNORM:
839*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::SNORM_INT16);
840*35238bceSAndroid Build Coastguard Worker case GL_R16F:
841*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::HALF_FLOAT);
842*35238bceSAndroid Build Coastguard Worker case GL_R16I:
843*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::SIGNED_INT16);
844*35238bceSAndroid Build Coastguard Worker case GL_R16UI:
845*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::UNSIGNED_INT16);
846*35238bceSAndroid Build Coastguard Worker case GL_R8:
847*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::UNORM_INT8);
848*35238bceSAndroid Build Coastguard Worker case GL_R8I:
849*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::SIGNED_INT8);
850*35238bceSAndroid Build Coastguard Worker case GL_R8UI:
851*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::UNSIGNED_INT8);
852*35238bceSAndroid Build Coastguard Worker case GL_R8_SNORM:
853*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::R, TextureFormat::SNORM_INT8);
854*35238bceSAndroid Build Coastguard Worker case GL_SR8_EXT:
855*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::sR, TextureFormat::UNORM_INT8);
856*35238bceSAndroid Build Coastguard Worker
857*35238bceSAndroid Build Coastguard Worker case GL_DEPTH_COMPONENT32F:
858*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::D, TextureFormat::FLOAT);
859*35238bceSAndroid Build Coastguard Worker case GL_DEPTH_COMPONENT24:
860*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::D, TextureFormat::UNSIGNED_INT_24_8);
861*35238bceSAndroid Build Coastguard Worker case GL_DEPTH_COMPONENT32:
862*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::D, TextureFormat::UNSIGNED_INT32);
863*35238bceSAndroid Build Coastguard Worker case GL_DEPTH32F_STENCIL8:
864*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::DS, TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV);
865*35238bceSAndroid Build Coastguard Worker case GL_DEPTH24_STENCIL8:
866*35238bceSAndroid Build Coastguard Worker return TextureFormat(TextureFormat::DS, TextureFormat::UNSIGNED_INT_24_8);
867*35238bceSAndroid Build Coastguard Worker
868*35238bceSAndroid Build Coastguard Worker default:
869*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError(string("Can't map GL sized internal format (") +
870*35238bceSAndroid Build Coastguard Worker tcu::toHex(internalFormat).toString() + ") to texture format");
871*35238bceSAndroid Build Coastguard Worker }
872*35238bceSAndroid Build Coastguard Worker }
873*35238bceSAndroid Build Coastguard Worker
isGLInternalColorFormatFilterable(uint32_t format)874*35238bceSAndroid Build Coastguard Worker bool isGLInternalColorFormatFilterable(uint32_t format)
875*35238bceSAndroid Build Coastguard Worker {
876*35238bceSAndroid Build Coastguard Worker switch (format)
877*35238bceSAndroid Build Coastguard Worker {
878*35238bceSAndroid Build Coastguard Worker case GL_R8:
879*35238bceSAndroid Build Coastguard Worker case GL_R8_SNORM:
880*35238bceSAndroid Build Coastguard Worker case GL_RG8:
881*35238bceSAndroid Build Coastguard Worker case GL_RG8_SNORM:
882*35238bceSAndroid Build Coastguard Worker case GL_RGB8:
883*35238bceSAndroid Build Coastguard Worker case GL_RGB8_SNORM:
884*35238bceSAndroid Build Coastguard Worker case GL_RGB565:
885*35238bceSAndroid Build Coastguard Worker case GL_RGBA4:
886*35238bceSAndroid Build Coastguard Worker case GL_RGB5_A1:
887*35238bceSAndroid Build Coastguard Worker case GL_RGBA8:
888*35238bceSAndroid Build Coastguard Worker case GL_RGBA8_SNORM:
889*35238bceSAndroid Build Coastguard Worker case GL_RGB10_A2:
890*35238bceSAndroid Build Coastguard Worker case GL_SR8_EXT:
891*35238bceSAndroid Build Coastguard Worker case GL_SRG8_EXT:
892*35238bceSAndroid Build Coastguard Worker case GL_SRGB8:
893*35238bceSAndroid Build Coastguard Worker case GL_SRGB8_ALPHA8:
894*35238bceSAndroid Build Coastguard Worker case GL_R16F:
895*35238bceSAndroid Build Coastguard Worker case GL_RG16F:
896*35238bceSAndroid Build Coastguard Worker case GL_RGB16F:
897*35238bceSAndroid Build Coastguard Worker case GL_RGBA16F:
898*35238bceSAndroid Build Coastguard Worker case GL_R11F_G11F_B10F:
899*35238bceSAndroid Build Coastguard Worker case GL_RGB9_E5:
900*35238bceSAndroid Build Coastguard Worker return true;
901*35238bceSAndroid Build Coastguard Worker
902*35238bceSAndroid Build Coastguard Worker case GL_RGB10_A2UI:
903*35238bceSAndroid Build Coastguard Worker case GL_R32F:
904*35238bceSAndroid Build Coastguard Worker case GL_RG32F:
905*35238bceSAndroid Build Coastguard Worker case GL_RGB32F:
906*35238bceSAndroid Build Coastguard Worker case GL_RGBA32F:
907*35238bceSAndroid Build Coastguard Worker case GL_R8I:
908*35238bceSAndroid Build Coastguard Worker case GL_R8UI:
909*35238bceSAndroid Build Coastguard Worker case GL_R16I:
910*35238bceSAndroid Build Coastguard Worker case GL_R16UI:
911*35238bceSAndroid Build Coastguard Worker case GL_R32I:
912*35238bceSAndroid Build Coastguard Worker case GL_R32UI:
913*35238bceSAndroid Build Coastguard Worker case GL_RG8I:
914*35238bceSAndroid Build Coastguard Worker case GL_RG8UI:
915*35238bceSAndroid Build Coastguard Worker case GL_RG16I:
916*35238bceSAndroid Build Coastguard Worker case GL_RG16UI:
917*35238bceSAndroid Build Coastguard Worker case GL_RG32I:
918*35238bceSAndroid Build Coastguard Worker case GL_RG32UI:
919*35238bceSAndroid Build Coastguard Worker case GL_RGB8I:
920*35238bceSAndroid Build Coastguard Worker case GL_RGB8UI:
921*35238bceSAndroid Build Coastguard Worker case GL_RGB16I:
922*35238bceSAndroid Build Coastguard Worker case GL_RGB16UI:
923*35238bceSAndroid Build Coastguard Worker case GL_RGB32I:
924*35238bceSAndroid Build Coastguard Worker case GL_RGB32UI:
925*35238bceSAndroid Build Coastguard Worker case GL_RGBA8I:
926*35238bceSAndroid Build Coastguard Worker case GL_RGBA8UI:
927*35238bceSAndroid Build Coastguard Worker case GL_RGBA16I:
928*35238bceSAndroid Build Coastguard Worker case GL_RGBA16UI:
929*35238bceSAndroid Build Coastguard Worker case GL_RGBA32I:
930*35238bceSAndroid Build Coastguard Worker case GL_RGBA32UI:
931*35238bceSAndroid Build Coastguard Worker return false;
932*35238bceSAndroid Build Coastguard Worker
933*35238bceSAndroid Build Coastguard Worker default:
934*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
935*35238bceSAndroid Build Coastguard Worker return false;
936*35238bceSAndroid Build Coastguard Worker }
937*35238bceSAndroid Build Coastguard Worker }
938*35238bceSAndroid Build Coastguard Worker
mapGLWrapMode(uint32_t wrapMode)939*35238bceSAndroid Build Coastguard Worker static inline tcu::Sampler::WrapMode mapGLWrapMode(uint32_t wrapMode)
940*35238bceSAndroid Build Coastguard Worker {
941*35238bceSAndroid Build Coastguard Worker switch (wrapMode)
942*35238bceSAndroid Build Coastguard Worker {
943*35238bceSAndroid Build Coastguard Worker case GL_CLAMP_TO_EDGE:
944*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::CLAMP_TO_EDGE;
945*35238bceSAndroid Build Coastguard Worker case GL_CLAMP_TO_BORDER:
946*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::CLAMP_TO_BORDER;
947*35238bceSAndroid Build Coastguard Worker case GL_REPEAT:
948*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::REPEAT_GL;
949*35238bceSAndroid Build Coastguard Worker case GL_MIRRORED_REPEAT:
950*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::MIRRORED_REPEAT_GL;
951*35238bceSAndroid Build Coastguard Worker default:
952*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map GL wrap mode " + tcu::toHex(wrapMode).toString());
953*35238bceSAndroid Build Coastguard Worker }
954*35238bceSAndroid Build Coastguard Worker }
955*35238bceSAndroid Build Coastguard Worker
mapGLMinFilterMode(uint32_t filterMode)956*35238bceSAndroid Build Coastguard Worker static inline tcu::Sampler::FilterMode mapGLMinFilterMode(uint32_t filterMode)
957*35238bceSAndroid Build Coastguard Worker {
958*35238bceSAndroid Build Coastguard Worker switch (filterMode)
959*35238bceSAndroid Build Coastguard Worker {
960*35238bceSAndroid Build Coastguard Worker case GL_NEAREST:
961*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::NEAREST;
962*35238bceSAndroid Build Coastguard Worker case GL_LINEAR:
963*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::LINEAR;
964*35238bceSAndroid Build Coastguard Worker case GL_NEAREST_MIPMAP_NEAREST:
965*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::NEAREST_MIPMAP_NEAREST;
966*35238bceSAndroid Build Coastguard Worker case GL_NEAREST_MIPMAP_LINEAR:
967*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::NEAREST_MIPMAP_LINEAR;
968*35238bceSAndroid Build Coastguard Worker case GL_LINEAR_MIPMAP_NEAREST:
969*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::LINEAR_MIPMAP_NEAREST;
970*35238bceSAndroid Build Coastguard Worker case GL_LINEAR_MIPMAP_LINEAR:
971*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::LINEAR_MIPMAP_LINEAR;
972*35238bceSAndroid Build Coastguard Worker default:
973*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map GL min filter mode" + tcu::toHex(filterMode).toString());
974*35238bceSAndroid Build Coastguard Worker }
975*35238bceSAndroid Build Coastguard Worker }
976*35238bceSAndroid Build Coastguard Worker
mapGLMagFilterMode(uint32_t filterMode)977*35238bceSAndroid Build Coastguard Worker static inline tcu::Sampler::FilterMode mapGLMagFilterMode(uint32_t filterMode)
978*35238bceSAndroid Build Coastguard Worker {
979*35238bceSAndroid Build Coastguard Worker switch (filterMode)
980*35238bceSAndroid Build Coastguard Worker {
981*35238bceSAndroid Build Coastguard Worker case GL_NEAREST:
982*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::NEAREST;
983*35238bceSAndroid Build Coastguard Worker case GL_LINEAR:
984*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::LINEAR;
985*35238bceSAndroid Build Coastguard Worker default:
986*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map GL mag filter mode" + tcu::toHex(filterMode).toString());
987*35238bceSAndroid Build Coastguard Worker }
988*35238bceSAndroid Build Coastguard Worker }
989*35238bceSAndroid Build Coastguard Worker
990*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
991*35238bceSAndroid Build Coastguard Worker * \brief Map GL sampler parameters to tcu::Sampler.
992*35238bceSAndroid Build Coastguard Worker *
993*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
994*35238bceSAndroid Build Coastguard Worker *
995*35238bceSAndroid Build Coastguard Worker * \param wrapS S-component wrap mode
996*35238bceSAndroid Build Coastguard Worker * \param minFilter Minification filter mode
997*35238bceSAndroid Build Coastguard Worker * \param magFilter Magnification filter mode
998*35238bceSAndroid Build Coastguard Worker * \return Sampler description.
999*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
mapGLSampler(uint32_t wrapS,uint32_t minFilter,uint32_t magFilter)1000*35238bceSAndroid Build Coastguard Worker tcu::Sampler mapGLSampler(uint32_t wrapS, uint32_t minFilter, uint32_t magFilter)
1001*35238bceSAndroid Build Coastguard Worker {
1002*35238bceSAndroid Build Coastguard Worker return mapGLSampler(wrapS, wrapS, wrapS, minFilter, magFilter);
1003*35238bceSAndroid Build Coastguard Worker }
1004*35238bceSAndroid Build Coastguard Worker
1005*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1006*35238bceSAndroid Build Coastguard Worker * \brief Map GL sampler parameters to tcu::Sampler.
1007*35238bceSAndroid Build Coastguard Worker *
1008*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
1009*35238bceSAndroid Build Coastguard Worker *
1010*35238bceSAndroid Build Coastguard Worker * \param wrapS S-component wrap mode
1011*35238bceSAndroid Build Coastguard Worker * \param wrapT T-component wrap mode
1012*35238bceSAndroid Build Coastguard Worker * \param minFilter Minification filter mode
1013*35238bceSAndroid Build Coastguard Worker * \param magFilter Magnification filter mode
1014*35238bceSAndroid Build Coastguard Worker * \return Sampler description.
1015*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
mapGLSampler(uint32_t wrapS,uint32_t wrapT,uint32_t minFilter,uint32_t magFilter)1016*35238bceSAndroid Build Coastguard Worker tcu::Sampler mapGLSampler(uint32_t wrapS, uint32_t wrapT, uint32_t minFilter, uint32_t magFilter)
1017*35238bceSAndroid Build Coastguard Worker {
1018*35238bceSAndroid Build Coastguard Worker return mapGLSampler(wrapS, wrapT, wrapS, minFilter, magFilter);
1019*35238bceSAndroid Build Coastguard Worker }
1020*35238bceSAndroid Build Coastguard Worker
1021*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1022*35238bceSAndroid Build Coastguard Worker * \brief Map GL sampler parameters to tcu::Sampler.
1023*35238bceSAndroid Build Coastguard Worker *
1024*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
1025*35238bceSAndroid Build Coastguard Worker *
1026*35238bceSAndroid Build Coastguard Worker * \param wrapS S-component wrap mode
1027*35238bceSAndroid Build Coastguard Worker * \param wrapT T-component wrap mode
1028*35238bceSAndroid Build Coastguard Worker * \param wrapR R-component wrap mode
1029*35238bceSAndroid Build Coastguard Worker * \param minFilter Minification filter mode
1030*35238bceSAndroid Build Coastguard Worker * \param magFilter Magnification filter mode
1031*35238bceSAndroid Build Coastguard Worker * \return Sampler description.
1032*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
mapGLSampler(uint32_t wrapS,uint32_t wrapT,uint32_t wrapR,uint32_t minFilter,uint32_t magFilter)1033*35238bceSAndroid Build Coastguard Worker tcu::Sampler mapGLSampler(uint32_t wrapS, uint32_t wrapT, uint32_t wrapR, uint32_t minFilter, uint32_t magFilter)
1034*35238bceSAndroid Build Coastguard Worker {
1035*35238bceSAndroid Build Coastguard Worker return tcu::Sampler(mapGLWrapMode(wrapS), mapGLWrapMode(wrapT), mapGLWrapMode(wrapR), mapGLMinFilterMode(minFilter),
1036*35238bceSAndroid Build Coastguard Worker mapGLMagFilterMode(magFilter), 0.0f /* lod threshold */, true /* normalized coords */,
1037*35238bceSAndroid Build Coastguard Worker tcu::Sampler::COMPAREMODE_NONE /* no compare */, 0 /* compare channel */,
1038*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f) /* border color, not used */);
1039*35238bceSAndroid Build Coastguard Worker }
1040*35238bceSAndroid Build Coastguard Worker
1041*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1042*35238bceSAndroid Build Coastguard Worker * \brief Map GL compare function to tcu::Sampler::CompareMode.
1043*35238bceSAndroid Build Coastguard Worker *
1044*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
1045*35238bceSAndroid Build Coastguard Worker *
1046*35238bceSAndroid Build Coastguard Worker * \param mode GL compare mode
1047*35238bceSAndroid Build Coastguard Worker * \return Compare mode
1048*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
mapGLCompareFunc(uint32_t mode)1049*35238bceSAndroid Build Coastguard Worker tcu::Sampler::CompareMode mapGLCompareFunc(uint32_t mode)
1050*35238bceSAndroid Build Coastguard Worker {
1051*35238bceSAndroid Build Coastguard Worker switch (mode)
1052*35238bceSAndroid Build Coastguard Worker {
1053*35238bceSAndroid Build Coastguard Worker case GL_LESS:
1054*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::COMPAREMODE_LESS;
1055*35238bceSAndroid Build Coastguard Worker case GL_LEQUAL:
1056*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::COMPAREMODE_LESS_OR_EQUAL;
1057*35238bceSAndroid Build Coastguard Worker case GL_GREATER:
1058*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::COMPAREMODE_GREATER;
1059*35238bceSAndroid Build Coastguard Worker case GL_GEQUAL:
1060*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::COMPAREMODE_GREATER_OR_EQUAL;
1061*35238bceSAndroid Build Coastguard Worker case GL_EQUAL:
1062*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::COMPAREMODE_EQUAL;
1063*35238bceSAndroid Build Coastguard Worker case GL_NOTEQUAL:
1064*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::COMPAREMODE_NOT_EQUAL;
1065*35238bceSAndroid Build Coastguard Worker case GL_ALWAYS:
1066*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::COMPAREMODE_ALWAYS;
1067*35238bceSAndroid Build Coastguard Worker case GL_NEVER:
1068*35238bceSAndroid Build Coastguard Worker return tcu::Sampler::COMPAREMODE_NEVER;
1069*35238bceSAndroid Build Coastguard Worker default:
1070*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map GL compare mode " + tcu::toHex(mode).toString());
1071*35238bceSAndroid Build Coastguard Worker }
1072*35238bceSAndroid Build Coastguard Worker }
1073*35238bceSAndroid Build Coastguard Worker
1074*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1075*35238bceSAndroid Build Coastguard Worker * \brief Get GL wrap mode.
1076*35238bceSAndroid Build Coastguard Worker *
1077*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
1078*35238bceSAndroid Build Coastguard Worker *
1079*35238bceSAndroid Build Coastguard Worker * \param wrapMode Wrap mode
1080*35238bceSAndroid Build Coastguard Worker * \return GL wrap mode
1081*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getGLWrapMode(tcu::Sampler::WrapMode wrapMode)1082*35238bceSAndroid Build Coastguard Worker uint32_t getGLWrapMode(tcu::Sampler::WrapMode wrapMode)
1083*35238bceSAndroid Build Coastguard Worker {
1084*35238bceSAndroid Build Coastguard Worker DE_ASSERT(wrapMode != tcu::Sampler::WRAPMODE_LAST);
1085*35238bceSAndroid Build Coastguard Worker switch (wrapMode)
1086*35238bceSAndroid Build Coastguard Worker {
1087*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::CLAMP_TO_EDGE:
1088*35238bceSAndroid Build Coastguard Worker return GL_CLAMP_TO_EDGE;
1089*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::CLAMP_TO_BORDER:
1090*35238bceSAndroid Build Coastguard Worker return GL_CLAMP_TO_BORDER;
1091*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::REPEAT_GL:
1092*35238bceSAndroid Build Coastguard Worker return GL_REPEAT;
1093*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::MIRRORED_REPEAT_GL:
1094*35238bceSAndroid Build Coastguard Worker return GL_MIRRORED_REPEAT;
1095*35238bceSAndroid Build Coastguard Worker default:
1096*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map wrap mode");
1097*35238bceSAndroid Build Coastguard Worker }
1098*35238bceSAndroid Build Coastguard Worker }
1099*35238bceSAndroid Build Coastguard Worker
1100*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1101*35238bceSAndroid Build Coastguard Worker * \brief Get GL filter mode.
1102*35238bceSAndroid Build Coastguard Worker *
1103*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
1104*35238bceSAndroid Build Coastguard Worker *
1105*35238bceSAndroid Build Coastguard Worker * \param filterMode Filter mode
1106*35238bceSAndroid Build Coastguard Worker * \return GL filter mode
1107*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getGLFilterMode(tcu::Sampler::FilterMode filterMode)1108*35238bceSAndroid Build Coastguard Worker uint32_t getGLFilterMode(tcu::Sampler::FilterMode filterMode)
1109*35238bceSAndroid Build Coastguard Worker {
1110*35238bceSAndroid Build Coastguard Worker DE_ASSERT(filterMode != tcu::Sampler::FILTERMODE_LAST);
1111*35238bceSAndroid Build Coastguard Worker switch (filterMode)
1112*35238bceSAndroid Build Coastguard Worker {
1113*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::NEAREST:
1114*35238bceSAndroid Build Coastguard Worker return GL_NEAREST;
1115*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::LINEAR:
1116*35238bceSAndroid Build Coastguard Worker return GL_LINEAR;
1117*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::NEAREST_MIPMAP_NEAREST:
1118*35238bceSAndroid Build Coastguard Worker return GL_NEAREST_MIPMAP_NEAREST;
1119*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::NEAREST_MIPMAP_LINEAR:
1120*35238bceSAndroid Build Coastguard Worker return GL_NEAREST_MIPMAP_LINEAR;
1121*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::LINEAR_MIPMAP_NEAREST:
1122*35238bceSAndroid Build Coastguard Worker return GL_LINEAR_MIPMAP_NEAREST;
1123*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::LINEAR_MIPMAP_LINEAR:
1124*35238bceSAndroid Build Coastguard Worker return GL_LINEAR_MIPMAP_LINEAR;
1125*35238bceSAndroid Build Coastguard Worker default:
1126*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map filter mode");
1127*35238bceSAndroid Build Coastguard Worker }
1128*35238bceSAndroid Build Coastguard Worker }
1129*35238bceSAndroid Build Coastguard Worker
1130*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1131*35238bceSAndroid Build Coastguard Worker * \brief Get GL compare mode.
1132*35238bceSAndroid Build Coastguard Worker *
1133*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
1134*35238bceSAndroid Build Coastguard Worker *
1135*35238bceSAndroid Build Coastguard Worker * \param compareMode Compare mode
1136*35238bceSAndroid Build Coastguard Worker * \return GL compare mode
1137*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getGLCompareFunc(tcu::Sampler::CompareMode compareMode)1138*35238bceSAndroid Build Coastguard Worker uint32_t getGLCompareFunc(tcu::Sampler::CompareMode compareMode)
1139*35238bceSAndroid Build Coastguard Worker {
1140*35238bceSAndroid Build Coastguard Worker DE_ASSERT(compareMode != tcu::Sampler::COMPAREMODE_NONE);
1141*35238bceSAndroid Build Coastguard Worker switch (compareMode)
1142*35238bceSAndroid Build Coastguard Worker {
1143*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::COMPAREMODE_NONE:
1144*35238bceSAndroid Build Coastguard Worker return GL_NONE;
1145*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::COMPAREMODE_LESS:
1146*35238bceSAndroid Build Coastguard Worker return GL_LESS;
1147*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::COMPAREMODE_LESS_OR_EQUAL:
1148*35238bceSAndroid Build Coastguard Worker return GL_LEQUAL;
1149*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::COMPAREMODE_GREATER:
1150*35238bceSAndroid Build Coastguard Worker return GL_GREATER;
1151*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::COMPAREMODE_GREATER_OR_EQUAL:
1152*35238bceSAndroid Build Coastguard Worker return GL_GEQUAL;
1153*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::COMPAREMODE_EQUAL:
1154*35238bceSAndroid Build Coastguard Worker return GL_EQUAL;
1155*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::COMPAREMODE_NOT_EQUAL:
1156*35238bceSAndroid Build Coastguard Worker return GL_NOTEQUAL;
1157*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::COMPAREMODE_ALWAYS:
1158*35238bceSAndroid Build Coastguard Worker return GL_ALWAYS;
1159*35238bceSAndroid Build Coastguard Worker case tcu::Sampler::COMPAREMODE_NEVER:
1160*35238bceSAndroid Build Coastguard Worker return GL_NEVER;
1161*35238bceSAndroid Build Coastguard Worker default:
1162*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map compare mode");
1163*35238bceSAndroid Build Coastguard Worker }
1164*35238bceSAndroid Build Coastguard Worker }
1165*35238bceSAndroid Build Coastguard Worker
1166*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1167*35238bceSAndroid Build Coastguard Worker * \brief Get GL cube face.
1168*35238bceSAndroid Build Coastguard Worker *
1169*35238bceSAndroid Build Coastguard Worker * If no mapping is found, throws tcu::InternalError.
1170*35238bceSAndroid Build Coastguard Worker *
1171*35238bceSAndroid Build Coastguard Worker * \param face Cube face
1172*35238bceSAndroid Build Coastguard Worker * \return GL cube face
1173*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getGLCubeFace(tcu::CubeFace face)1174*35238bceSAndroid Build Coastguard Worker uint32_t getGLCubeFace(tcu::CubeFace face)
1175*35238bceSAndroid Build Coastguard Worker {
1176*35238bceSAndroid Build Coastguard Worker DE_ASSERT(face != tcu::CUBEFACE_LAST);
1177*35238bceSAndroid Build Coastguard Worker switch (face)
1178*35238bceSAndroid Build Coastguard Worker {
1179*35238bceSAndroid Build Coastguard Worker case tcu::CUBEFACE_NEGATIVE_X:
1180*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_CUBE_MAP_NEGATIVE_X;
1181*35238bceSAndroid Build Coastguard Worker case tcu::CUBEFACE_POSITIVE_X:
1182*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_CUBE_MAP_POSITIVE_X;
1183*35238bceSAndroid Build Coastguard Worker case tcu::CUBEFACE_NEGATIVE_Y:
1184*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;
1185*35238bceSAndroid Build Coastguard Worker case tcu::CUBEFACE_POSITIVE_Y:
1186*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_CUBE_MAP_POSITIVE_Y;
1187*35238bceSAndroid Build Coastguard Worker case tcu::CUBEFACE_NEGATIVE_Z:
1188*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
1189*35238bceSAndroid Build Coastguard Worker case tcu::CUBEFACE_POSITIVE_Z:
1190*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_CUBE_MAP_POSITIVE_Z;
1191*35238bceSAndroid Build Coastguard Worker default:
1192*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map cube face");
1193*35238bceSAndroid Build Coastguard Worker }
1194*35238bceSAndroid Build Coastguard Worker }
1195*35238bceSAndroid Build Coastguard Worker
getCubeFaceFromGL(uint32_t face)1196*35238bceSAndroid Build Coastguard Worker tcu::CubeFace getCubeFaceFromGL(uint32_t face)
1197*35238bceSAndroid Build Coastguard Worker {
1198*35238bceSAndroid Build Coastguard Worker switch (face)
1199*35238bceSAndroid Build Coastguard Worker {
1200*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
1201*35238bceSAndroid Build Coastguard Worker return tcu::CUBEFACE_NEGATIVE_X;
1202*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
1203*35238bceSAndroid Build Coastguard Worker return tcu::CUBEFACE_POSITIVE_X;
1204*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
1205*35238bceSAndroid Build Coastguard Worker return tcu::CUBEFACE_NEGATIVE_Y;
1206*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
1207*35238bceSAndroid Build Coastguard Worker return tcu::CUBEFACE_POSITIVE_Y;
1208*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
1209*35238bceSAndroid Build Coastguard Worker return tcu::CUBEFACE_NEGATIVE_Z;
1210*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
1211*35238bceSAndroid Build Coastguard Worker return tcu::CUBEFACE_POSITIVE_Z;
1212*35238bceSAndroid Build Coastguard Worker default:
1213*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Can't map cube face");
1214*35238bceSAndroid Build Coastguard Worker }
1215*35238bceSAndroid Build Coastguard Worker }
1216*35238bceSAndroid Build Coastguard Worker
1217*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1218*35238bceSAndroid Build Coastguard Worker * \brief Get GLSL sampler type for texture format.
1219*35238bceSAndroid Build Coastguard Worker *
1220*35238bceSAndroid Build Coastguard Worker * If no mapping is found, glu::TYPE_LAST is returned.
1221*35238bceSAndroid Build Coastguard Worker *
1222*35238bceSAndroid Build Coastguard Worker * \param format Texture format
1223*35238bceSAndroid Build Coastguard Worker * \return GLSL 1D sampler type for format
1224*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getSampler1DType(tcu::TextureFormat format)1225*35238bceSAndroid Build Coastguard Worker DataType getSampler1DType(tcu::TextureFormat format)
1226*35238bceSAndroid Build Coastguard Worker {
1227*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
1228*35238bceSAndroid Build Coastguard Worker
1229*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
1230*35238bceSAndroid Build Coastguard Worker return TYPE_SAMPLER_1D;
1231*35238bceSAndroid Build Coastguard Worker
1232*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::S)
1233*35238bceSAndroid Build Coastguard Worker return TYPE_LAST;
1234*35238bceSAndroid Build Coastguard Worker
1235*35238bceSAndroid Build Coastguard Worker switch (tcu::getTextureChannelClass(format.type))
1236*35238bceSAndroid Build Coastguard Worker {
1237*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
1238*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
1239*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
1240*35238bceSAndroid Build Coastguard Worker return glu::TYPE_SAMPLER_1D;
1241*35238bceSAndroid Build Coastguard Worker
1242*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
1243*35238bceSAndroid Build Coastguard Worker return glu::TYPE_INT_SAMPLER_1D;
1244*35238bceSAndroid Build Coastguard Worker
1245*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
1246*35238bceSAndroid Build Coastguard Worker return glu::TYPE_UINT_SAMPLER_1D;
1247*35238bceSAndroid Build Coastguard Worker
1248*35238bceSAndroid Build Coastguard Worker default:
1249*35238bceSAndroid Build Coastguard Worker return glu::TYPE_LAST;
1250*35238bceSAndroid Build Coastguard Worker }
1251*35238bceSAndroid Build Coastguard Worker }
1252*35238bceSAndroid Build Coastguard Worker
1253*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1254*35238bceSAndroid Build Coastguard Worker * \brief Get GLSL sampler type for texture format.
1255*35238bceSAndroid Build Coastguard Worker *
1256*35238bceSAndroid Build Coastguard Worker * If no mapping is found, glu::TYPE_LAST is returned.
1257*35238bceSAndroid Build Coastguard Worker *
1258*35238bceSAndroid Build Coastguard Worker * \param format Texture format
1259*35238bceSAndroid Build Coastguard Worker * \return GLSL 2D sampler type for format
1260*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getSampler2DType(tcu::TextureFormat format)1261*35238bceSAndroid Build Coastguard Worker DataType getSampler2DType(tcu::TextureFormat format)
1262*35238bceSAndroid Build Coastguard Worker {
1263*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
1264*35238bceSAndroid Build Coastguard Worker
1265*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
1266*35238bceSAndroid Build Coastguard Worker return TYPE_SAMPLER_2D;
1267*35238bceSAndroid Build Coastguard Worker
1268*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::S)
1269*35238bceSAndroid Build Coastguard Worker return TYPE_LAST;
1270*35238bceSAndroid Build Coastguard Worker
1271*35238bceSAndroid Build Coastguard Worker switch (tcu::getTextureChannelClass(format.type))
1272*35238bceSAndroid Build Coastguard Worker {
1273*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
1274*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
1275*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
1276*35238bceSAndroid Build Coastguard Worker return glu::TYPE_SAMPLER_2D;
1277*35238bceSAndroid Build Coastguard Worker
1278*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
1279*35238bceSAndroid Build Coastguard Worker return glu::TYPE_INT_SAMPLER_2D;
1280*35238bceSAndroid Build Coastguard Worker
1281*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
1282*35238bceSAndroid Build Coastguard Worker return glu::TYPE_UINT_SAMPLER_2D;
1283*35238bceSAndroid Build Coastguard Worker
1284*35238bceSAndroid Build Coastguard Worker default:
1285*35238bceSAndroid Build Coastguard Worker return glu::TYPE_LAST;
1286*35238bceSAndroid Build Coastguard Worker }
1287*35238bceSAndroid Build Coastguard Worker }
1288*35238bceSAndroid Build Coastguard Worker
1289*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1290*35238bceSAndroid Build Coastguard Worker * \brief Get GLSL sampler type for texture format.
1291*35238bceSAndroid Build Coastguard Worker *
1292*35238bceSAndroid Build Coastguard Worker * If no mapping is found, glu::TYPE_LAST is returned.
1293*35238bceSAndroid Build Coastguard Worker *
1294*35238bceSAndroid Build Coastguard Worker * \param format Texture format
1295*35238bceSAndroid Build Coastguard Worker * \return GLSL cube map sampler type for format
1296*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getSamplerCubeType(tcu::TextureFormat format)1297*35238bceSAndroid Build Coastguard Worker DataType getSamplerCubeType(tcu::TextureFormat format)
1298*35238bceSAndroid Build Coastguard Worker {
1299*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
1300*35238bceSAndroid Build Coastguard Worker
1301*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
1302*35238bceSAndroid Build Coastguard Worker return TYPE_SAMPLER_CUBE;
1303*35238bceSAndroid Build Coastguard Worker
1304*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::S)
1305*35238bceSAndroid Build Coastguard Worker return TYPE_LAST;
1306*35238bceSAndroid Build Coastguard Worker
1307*35238bceSAndroid Build Coastguard Worker switch (tcu::getTextureChannelClass(format.type))
1308*35238bceSAndroid Build Coastguard Worker {
1309*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
1310*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
1311*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
1312*35238bceSAndroid Build Coastguard Worker return glu::TYPE_SAMPLER_CUBE;
1313*35238bceSAndroid Build Coastguard Worker
1314*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
1315*35238bceSAndroid Build Coastguard Worker return glu::TYPE_INT_SAMPLER_CUBE;
1316*35238bceSAndroid Build Coastguard Worker
1317*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
1318*35238bceSAndroid Build Coastguard Worker return glu::TYPE_UINT_SAMPLER_CUBE;
1319*35238bceSAndroid Build Coastguard Worker
1320*35238bceSAndroid Build Coastguard Worker default:
1321*35238bceSAndroid Build Coastguard Worker return glu::TYPE_LAST;
1322*35238bceSAndroid Build Coastguard Worker }
1323*35238bceSAndroid Build Coastguard Worker }
1324*35238bceSAndroid Build Coastguard Worker
1325*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1326*35238bceSAndroid Build Coastguard Worker * \brief Get GLSL sampler type for texture format.
1327*35238bceSAndroid Build Coastguard Worker *
1328*35238bceSAndroid Build Coastguard Worker * If no mapping is found, glu::TYPE_LAST is returned.
1329*35238bceSAndroid Build Coastguard Worker *
1330*35238bceSAndroid Build Coastguard Worker * \param format Texture format
1331*35238bceSAndroid Build Coastguard Worker * \return GLSL 1D array sampler type for format
1332*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getSampler1DArrayType(tcu::TextureFormat format)1333*35238bceSAndroid Build Coastguard Worker DataType getSampler1DArrayType(tcu::TextureFormat format)
1334*35238bceSAndroid Build Coastguard Worker {
1335*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
1336*35238bceSAndroid Build Coastguard Worker
1337*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
1338*35238bceSAndroid Build Coastguard Worker return TYPE_SAMPLER_1D_ARRAY;
1339*35238bceSAndroid Build Coastguard Worker
1340*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::S)
1341*35238bceSAndroid Build Coastguard Worker return TYPE_LAST;
1342*35238bceSAndroid Build Coastguard Worker
1343*35238bceSAndroid Build Coastguard Worker switch (tcu::getTextureChannelClass(format.type))
1344*35238bceSAndroid Build Coastguard Worker {
1345*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
1346*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
1347*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
1348*35238bceSAndroid Build Coastguard Worker return glu::TYPE_SAMPLER_1D_ARRAY;
1349*35238bceSAndroid Build Coastguard Worker
1350*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
1351*35238bceSAndroid Build Coastguard Worker return glu::TYPE_INT_SAMPLER_1D_ARRAY;
1352*35238bceSAndroid Build Coastguard Worker
1353*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
1354*35238bceSAndroid Build Coastguard Worker return glu::TYPE_UINT_SAMPLER_1D_ARRAY;
1355*35238bceSAndroid Build Coastguard Worker
1356*35238bceSAndroid Build Coastguard Worker default:
1357*35238bceSAndroid Build Coastguard Worker return glu::TYPE_LAST;
1358*35238bceSAndroid Build Coastguard Worker }
1359*35238bceSAndroid Build Coastguard Worker }
1360*35238bceSAndroid Build Coastguard Worker
1361*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1362*35238bceSAndroid Build Coastguard Worker * \brief Get GLSL sampler type for texture format.
1363*35238bceSAndroid Build Coastguard Worker *
1364*35238bceSAndroid Build Coastguard Worker * If no mapping is found, glu::TYPE_LAST is returned.
1365*35238bceSAndroid Build Coastguard Worker *
1366*35238bceSAndroid Build Coastguard Worker * \param format Texture format
1367*35238bceSAndroid Build Coastguard Worker * \return GLSL 2D array sampler type for format
1368*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getSampler2DArrayType(tcu::TextureFormat format)1369*35238bceSAndroid Build Coastguard Worker DataType getSampler2DArrayType(tcu::TextureFormat format)
1370*35238bceSAndroid Build Coastguard Worker {
1371*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
1372*35238bceSAndroid Build Coastguard Worker
1373*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
1374*35238bceSAndroid Build Coastguard Worker return TYPE_SAMPLER_2D_ARRAY;
1375*35238bceSAndroid Build Coastguard Worker
1376*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::S)
1377*35238bceSAndroid Build Coastguard Worker return TYPE_LAST;
1378*35238bceSAndroid Build Coastguard Worker
1379*35238bceSAndroid Build Coastguard Worker switch (tcu::getTextureChannelClass(format.type))
1380*35238bceSAndroid Build Coastguard Worker {
1381*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
1382*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
1383*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
1384*35238bceSAndroid Build Coastguard Worker return glu::TYPE_SAMPLER_2D_ARRAY;
1385*35238bceSAndroid Build Coastguard Worker
1386*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
1387*35238bceSAndroid Build Coastguard Worker return glu::TYPE_INT_SAMPLER_2D_ARRAY;
1388*35238bceSAndroid Build Coastguard Worker
1389*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
1390*35238bceSAndroid Build Coastguard Worker return glu::TYPE_UINT_SAMPLER_2D_ARRAY;
1391*35238bceSAndroid Build Coastguard Worker
1392*35238bceSAndroid Build Coastguard Worker default:
1393*35238bceSAndroid Build Coastguard Worker return glu::TYPE_LAST;
1394*35238bceSAndroid Build Coastguard Worker }
1395*35238bceSAndroid Build Coastguard Worker }
1396*35238bceSAndroid Build Coastguard Worker
1397*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1398*35238bceSAndroid Build Coastguard Worker * \brief Get GLSL sampler type for texture format.
1399*35238bceSAndroid Build Coastguard Worker *
1400*35238bceSAndroid Build Coastguard Worker * If no mapping is found, glu::TYPE_LAST is returned.
1401*35238bceSAndroid Build Coastguard Worker *
1402*35238bceSAndroid Build Coastguard Worker * \param format Texture format
1403*35238bceSAndroid Build Coastguard Worker * \return GLSL 3D sampler type for format
1404*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getSampler3DType(tcu::TextureFormat format)1405*35238bceSAndroid Build Coastguard Worker DataType getSampler3DType(tcu::TextureFormat format)
1406*35238bceSAndroid Build Coastguard Worker {
1407*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
1408*35238bceSAndroid Build Coastguard Worker
1409*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
1410*35238bceSAndroid Build Coastguard Worker return TYPE_SAMPLER_3D;
1411*35238bceSAndroid Build Coastguard Worker
1412*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::S)
1413*35238bceSAndroid Build Coastguard Worker return TYPE_LAST;
1414*35238bceSAndroid Build Coastguard Worker
1415*35238bceSAndroid Build Coastguard Worker switch (tcu::getTextureChannelClass(format.type))
1416*35238bceSAndroid Build Coastguard Worker {
1417*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
1418*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
1419*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
1420*35238bceSAndroid Build Coastguard Worker return glu::TYPE_SAMPLER_3D;
1421*35238bceSAndroid Build Coastguard Worker
1422*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
1423*35238bceSAndroid Build Coastguard Worker return glu::TYPE_INT_SAMPLER_3D;
1424*35238bceSAndroid Build Coastguard Worker
1425*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
1426*35238bceSAndroid Build Coastguard Worker return glu::TYPE_UINT_SAMPLER_3D;
1427*35238bceSAndroid Build Coastguard Worker
1428*35238bceSAndroid Build Coastguard Worker default:
1429*35238bceSAndroid Build Coastguard Worker return glu::TYPE_LAST;
1430*35238bceSAndroid Build Coastguard Worker }
1431*35238bceSAndroid Build Coastguard Worker }
1432*35238bceSAndroid Build Coastguard Worker
1433*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1434*35238bceSAndroid Build Coastguard Worker * \brief Get GLSL sampler type for texture format.
1435*35238bceSAndroid Build Coastguard Worker *
1436*35238bceSAndroid Build Coastguard Worker * If no mapping is found, glu::TYPE_LAST is returned.
1437*35238bceSAndroid Build Coastguard Worker *
1438*35238bceSAndroid Build Coastguard Worker * \param format Texture format
1439*35238bceSAndroid Build Coastguard Worker * \return GLSL cube map array sampler type for format
1440*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
getSamplerCubeArrayType(tcu::TextureFormat format)1441*35238bceSAndroid Build Coastguard Worker DataType getSamplerCubeArrayType(tcu::TextureFormat format)
1442*35238bceSAndroid Build Coastguard Worker {
1443*35238bceSAndroid Build Coastguard Worker using tcu::TextureFormat;
1444*35238bceSAndroid Build Coastguard Worker
1445*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
1446*35238bceSAndroid Build Coastguard Worker return TYPE_SAMPLER_CUBE_ARRAY;
1447*35238bceSAndroid Build Coastguard Worker
1448*35238bceSAndroid Build Coastguard Worker if (format.order == TextureFormat::S)
1449*35238bceSAndroid Build Coastguard Worker return TYPE_LAST;
1450*35238bceSAndroid Build Coastguard Worker
1451*35238bceSAndroid Build Coastguard Worker switch (tcu::getTextureChannelClass(format.type))
1452*35238bceSAndroid Build Coastguard Worker {
1453*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
1454*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
1455*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
1456*35238bceSAndroid Build Coastguard Worker return glu::TYPE_SAMPLER_CUBE_ARRAY;
1457*35238bceSAndroid Build Coastguard Worker
1458*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
1459*35238bceSAndroid Build Coastguard Worker return glu::TYPE_INT_SAMPLER_CUBE_ARRAY;
1460*35238bceSAndroid Build Coastguard Worker
1461*35238bceSAndroid Build Coastguard Worker case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
1462*35238bceSAndroid Build Coastguard Worker return glu::TYPE_UINT_SAMPLER_CUBE_ARRAY;
1463*35238bceSAndroid Build Coastguard Worker
1464*35238bceSAndroid Build Coastguard Worker default:
1465*35238bceSAndroid Build Coastguard Worker return glu::TYPE_LAST;
1466*35238bceSAndroid Build Coastguard Worker }
1467*35238bceSAndroid Build Coastguard Worker }
1468*35238bceSAndroid Build Coastguard Worker
1469*35238bceSAndroid Build Coastguard Worker enum RenderableType
1470*35238bceSAndroid Build Coastguard Worker {
1471*35238bceSAndroid Build Coastguard Worker RENDERABLE_COLOR = (1 << 0),
1472*35238bceSAndroid Build Coastguard Worker RENDERABLE_DEPTH = (1 << 1),
1473*35238bceSAndroid Build Coastguard Worker RENDERABLE_STENCIL = (1 << 2)
1474*35238bceSAndroid Build Coastguard Worker };
1475*35238bceSAndroid Build Coastguard Worker
getRenderableBitsES3(const ContextInfo & contextInfo,uint32_t internalFormat)1476*35238bceSAndroid Build Coastguard Worker static uint32_t getRenderableBitsES3(const ContextInfo &contextInfo, uint32_t internalFormat)
1477*35238bceSAndroid Build Coastguard Worker {
1478*35238bceSAndroid Build Coastguard Worker switch (internalFormat)
1479*35238bceSAndroid Build Coastguard Worker {
1480*35238bceSAndroid Build Coastguard Worker // Color-renderable formats
1481*35238bceSAndroid Build Coastguard Worker case GL_RGBA32I:
1482*35238bceSAndroid Build Coastguard Worker case GL_RGBA32UI:
1483*35238bceSAndroid Build Coastguard Worker case GL_RGBA16I:
1484*35238bceSAndroid Build Coastguard Worker case GL_RGBA16UI:
1485*35238bceSAndroid Build Coastguard Worker case GL_RGBA8:
1486*35238bceSAndroid Build Coastguard Worker case GL_RGBA8I:
1487*35238bceSAndroid Build Coastguard Worker case GL_RGBA8UI:
1488*35238bceSAndroid Build Coastguard Worker case GL_SRGB8_ALPHA8:
1489*35238bceSAndroid Build Coastguard Worker case GL_RGB10_A2:
1490*35238bceSAndroid Build Coastguard Worker case GL_RGB10_A2UI:
1491*35238bceSAndroid Build Coastguard Worker case GL_RGBA4:
1492*35238bceSAndroid Build Coastguard Worker case GL_RGB5_A1:
1493*35238bceSAndroid Build Coastguard Worker case GL_RGB8:
1494*35238bceSAndroid Build Coastguard Worker case GL_RGB565:
1495*35238bceSAndroid Build Coastguard Worker case GL_RG32I:
1496*35238bceSAndroid Build Coastguard Worker case GL_RG32UI:
1497*35238bceSAndroid Build Coastguard Worker case GL_RG16I:
1498*35238bceSAndroid Build Coastguard Worker case GL_RG16UI:
1499*35238bceSAndroid Build Coastguard Worker case GL_RG8:
1500*35238bceSAndroid Build Coastguard Worker case GL_RG8I:
1501*35238bceSAndroid Build Coastguard Worker case GL_RG8UI:
1502*35238bceSAndroid Build Coastguard Worker case GL_R32I:
1503*35238bceSAndroid Build Coastguard Worker case GL_R32UI:
1504*35238bceSAndroid Build Coastguard Worker case GL_R16I:
1505*35238bceSAndroid Build Coastguard Worker case GL_R16UI:
1506*35238bceSAndroid Build Coastguard Worker case GL_R8:
1507*35238bceSAndroid Build Coastguard Worker case GL_R8I:
1508*35238bceSAndroid Build Coastguard Worker case GL_R8UI:
1509*35238bceSAndroid Build Coastguard Worker return RENDERABLE_COLOR;
1510*35238bceSAndroid Build Coastguard Worker
1511*35238bceSAndroid Build Coastguard Worker // GL_EXT_color_buffer_float
1512*35238bceSAndroid Build Coastguard Worker case GL_RGBA32F:
1513*35238bceSAndroid Build Coastguard Worker case GL_R11F_G11F_B10F:
1514*35238bceSAndroid Build Coastguard Worker case GL_RG32F:
1515*35238bceSAndroid Build Coastguard Worker case GL_R32F:
1516*35238bceSAndroid Build Coastguard Worker if (contextInfo.isExtensionSupported("GL_EXT_color_buffer_float"))
1517*35238bceSAndroid Build Coastguard Worker return RENDERABLE_COLOR;
1518*35238bceSAndroid Build Coastguard Worker else
1519*35238bceSAndroid Build Coastguard Worker return 0;
1520*35238bceSAndroid Build Coastguard Worker
1521*35238bceSAndroid Build Coastguard Worker // GL_EXT_color_buffer_float / GL_EXT_color_buffer_half_float
1522*35238bceSAndroid Build Coastguard Worker case GL_RGBA16F:
1523*35238bceSAndroid Build Coastguard Worker case GL_RG16F:
1524*35238bceSAndroid Build Coastguard Worker case GL_R16F:
1525*35238bceSAndroid Build Coastguard Worker if (contextInfo.isExtensionSupported("GL_EXT_color_buffer_float") ||
1526*35238bceSAndroid Build Coastguard Worker contextInfo.isExtensionSupported("GL_EXT_color_buffer_half_float"))
1527*35238bceSAndroid Build Coastguard Worker return RENDERABLE_COLOR;
1528*35238bceSAndroid Build Coastguard Worker else
1529*35238bceSAndroid Build Coastguard Worker return 0;
1530*35238bceSAndroid Build Coastguard Worker
1531*35238bceSAndroid Build Coastguard Worker // Depth formats
1532*35238bceSAndroid Build Coastguard Worker case GL_DEPTH_COMPONENT32F:
1533*35238bceSAndroid Build Coastguard Worker case GL_DEPTH_COMPONENT24:
1534*35238bceSAndroid Build Coastguard Worker case GL_DEPTH_COMPONENT16:
1535*35238bceSAndroid Build Coastguard Worker return RENDERABLE_DEPTH;
1536*35238bceSAndroid Build Coastguard Worker
1537*35238bceSAndroid Build Coastguard Worker // Depth+stencil formats
1538*35238bceSAndroid Build Coastguard Worker case GL_DEPTH32F_STENCIL8:
1539*35238bceSAndroid Build Coastguard Worker case GL_DEPTH24_STENCIL8:
1540*35238bceSAndroid Build Coastguard Worker return RENDERABLE_DEPTH | RENDERABLE_STENCIL;
1541*35238bceSAndroid Build Coastguard Worker
1542*35238bceSAndroid Build Coastguard Worker // Stencil formats
1543*35238bceSAndroid Build Coastguard Worker case GL_STENCIL_INDEX8:
1544*35238bceSAndroid Build Coastguard Worker return RENDERABLE_STENCIL;
1545*35238bceSAndroid Build Coastguard Worker
1546*35238bceSAndroid Build Coastguard Worker default:
1547*35238bceSAndroid Build Coastguard Worker return 0;
1548*35238bceSAndroid Build Coastguard Worker }
1549*35238bceSAndroid Build Coastguard Worker }
1550*35238bceSAndroid Build Coastguard Worker
1551*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
1552*35238bceSAndroid Build Coastguard Worker * \brief Check if sized internal format is color-renderable.
1553*35238bceSAndroid Build Coastguard Worker * \note Works currently only on ES3 context.
1554*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
isSizedFormatColorRenderable(const RenderContext & renderCtx,const ContextInfo & contextInfo,uint32_t sizedFormat)1555*35238bceSAndroid Build Coastguard Worker bool isSizedFormatColorRenderable(const RenderContext &renderCtx, const ContextInfo &contextInfo, uint32_t sizedFormat)
1556*35238bceSAndroid Build Coastguard Worker {
1557*35238bceSAndroid Build Coastguard Worker uint32_t renderable = 0;
1558*35238bceSAndroid Build Coastguard Worker
1559*35238bceSAndroid Build Coastguard Worker if (renderCtx.getType().getAPI() == ApiType::es(3, 0))
1560*35238bceSAndroid Build Coastguard Worker renderable = getRenderableBitsES3(contextInfo, sizedFormat);
1561*35238bceSAndroid Build Coastguard Worker else
1562*35238bceSAndroid Build Coastguard Worker throw tcu::InternalError("Context type not supported in query");
1563*35238bceSAndroid Build Coastguard Worker
1564*35238bceSAndroid Build Coastguard Worker return (renderable & RENDERABLE_COLOR) != 0;
1565*35238bceSAndroid Build Coastguard Worker }
1566*35238bceSAndroid Build Coastguard Worker
getDefaultGatherOffsets(void)1567*35238bceSAndroid Build Coastguard Worker const tcu::IVec2 (&getDefaultGatherOffsets(void))[4]
1568*35238bceSAndroid Build Coastguard Worker {
1569*35238bceSAndroid Build Coastguard Worker static const tcu::IVec2 s_defaultOffsets[4] = {
1570*35238bceSAndroid Build Coastguard Worker tcu::IVec2(0, 1),
1571*35238bceSAndroid Build Coastguard Worker tcu::IVec2(1, 1),
1572*35238bceSAndroid Build Coastguard Worker tcu::IVec2(1, 0),
1573*35238bceSAndroid Build Coastguard Worker tcu::IVec2(0, 0),
1574*35238bceSAndroid Build Coastguard Worker };
1575*35238bceSAndroid Build Coastguard Worker return s_defaultOffsets;
1576*35238bceSAndroid Build Coastguard Worker }
1577*35238bceSAndroid Build Coastguard Worker
1578*35238bceSAndroid Build Coastguard Worker tcu::PixelBufferAccess getTextureBufferEffectiveRefTexture(TextureBuffer &buffer, int maxTextureBufferSize)
1579*35238bceSAndroid Build Coastguard Worker {
1580*35238bceSAndroid Build Coastguard Worker DE_ASSERT(maxTextureBufferSize > 0);
1581*35238bceSAndroid Build Coastguard Worker
1582*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess &fullAccess = buffer.getFullRefTexture();
1583*35238bceSAndroid Build Coastguard Worker
1584*35238bceSAndroid Build Coastguard Worker return tcu::PixelBufferAccess(fullAccess.getFormat(),
1585*35238bceSAndroid Build Coastguard Worker tcu::IVec3(de::min(fullAccess.getWidth(), maxTextureBufferSize), 1, 1),
1586*35238bceSAndroid Build Coastguard Worker fullAccess.getPitch(), fullAccess.getDataPtr());
1587*35238bceSAndroid Build Coastguard Worker }
1588*35238bceSAndroid Build Coastguard Worker
getTextureBufferEffectiveRefTexture(const TextureBuffer & buffer,int maxTextureBufferSize)1589*35238bceSAndroid Build Coastguard Worker tcu::ConstPixelBufferAccess getTextureBufferEffectiveRefTexture(const TextureBuffer &buffer, int maxTextureBufferSize)
1590*35238bceSAndroid Build Coastguard Worker {
1591*35238bceSAndroid Build Coastguard Worker return getTextureBufferEffectiveRefTexture(const_cast<TextureBuffer &>(buffer), maxTextureBufferSize);
1592*35238bceSAndroid Build Coastguard Worker }
1593*35238bceSAndroid Build Coastguard Worker
1594*35238bceSAndroid Build Coastguard Worker } // namespace glu
1595