1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2016 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker
7*8975f5c5SAndroid Build Coastguard Worker // queryutils.cpp: Utilities for querying values from GL objects
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/queryutils.h"
10*8975f5c5SAndroid Build Coastguard Worker
11*8975f5c5SAndroid Build Coastguard Worker #include <algorithm>
12*8975f5c5SAndroid Build Coastguard Worker
13*8975f5c5SAndroid Build Coastguard Worker #include "common/utilities.h"
14*8975f5c5SAndroid Build Coastguard Worker
15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Buffer.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Config.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Context.h"
18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Display.h"
19*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/EGLSync.h"
20*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Fence.h"
21*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Framebuffer.h"
22*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/GLES1State.h"
23*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/MemoryObject.h"
24*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Program.h"
25*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Renderbuffer.h"
26*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Sampler.h"
27*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Shader.h"
28*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Surface.h"
29*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Texture.h"
30*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Uniform.h"
31*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/VertexAttribute.h"
32*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/queryconversions.h"
33*8975f5c5SAndroid Build Coastguard Worker
34*8975f5c5SAndroid Build Coastguard Worker namespace gl
35*8975f5c5SAndroid Build Coastguard Worker {
36*8975f5c5SAndroid Build Coastguard Worker
37*8975f5c5SAndroid Build Coastguard Worker namespace
38*8975f5c5SAndroid Build Coastguard Worker {
39*8975f5c5SAndroid Build Coastguard Worker
40*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger>
ConvertToColor(const GLfloat * params)41*8975f5c5SAndroid Build Coastguard Worker ColorGeneric ConvertToColor(const GLfloat *params)
42*8975f5c5SAndroid Build Coastguard Worker {
43*8975f5c5SAndroid Build Coastguard Worker if (isPureInteger)
44*8975f5c5SAndroid Build Coastguard Worker {
45*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
46*8975f5c5SAndroid Build Coastguard Worker return ColorGeneric(ColorI());
47*8975f5c5SAndroid Build Coastguard Worker }
48*8975f5c5SAndroid Build Coastguard Worker else
49*8975f5c5SAndroid Build Coastguard Worker {
50*8975f5c5SAndroid Build Coastguard Worker return ColorGeneric(ColorF::fromData(params));
51*8975f5c5SAndroid Build Coastguard Worker }
52*8975f5c5SAndroid Build Coastguard Worker }
53*8975f5c5SAndroid Build Coastguard Worker
54*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger>
ConvertToColor(const GLint * params)55*8975f5c5SAndroid Build Coastguard Worker ColorGeneric ConvertToColor(const GLint *params)
56*8975f5c5SAndroid Build Coastguard Worker {
57*8975f5c5SAndroid Build Coastguard Worker if (isPureInteger)
58*8975f5c5SAndroid Build Coastguard Worker {
59*8975f5c5SAndroid Build Coastguard Worker return ColorGeneric(ColorI(params[0], params[1], params[2], params[3]));
60*8975f5c5SAndroid Build Coastguard Worker }
61*8975f5c5SAndroid Build Coastguard Worker else
62*8975f5c5SAndroid Build Coastguard Worker {
63*8975f5c5SAndroid Build Coastguard Worker return ColorGeneric(ColorF(normalizedToFloat(params[0]), normalizedToFloat(params[1]),
64*8975f5c5SAndroid Build Coastguard Worker normalizedToFloat(params[2]), normalizedToFloat(params[3])));
65*8975f5c5SAndroid Build Coastguard Worker }
66*8975f5c5SAndroid Build Coastguard Worker }
67*8975f5c5SAndroid Build Coastguard Worker
68*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger>
ConvertToColor(const GLuint * params)69*8975f5c5SAndroid Build Coastguard Worker ColorGeneric ConvertToColor(const GLuint *params)
70*8975f5c5SAndroid Build Coastguard Worker {
71*8975f5c5SAndroid Build Coastguard Worker if (isPureInteger)
72*8975f5c5SAndroid Build Coastguard Worker {
73*8975f5c5SAndroid Build Coastguard Worker return ColorGeneric(ColorUI(params[0], params[1], params[2], params[3]));
74*8975f5c5SAndroid Build Coastguard Worker }
75*8975f5c5SAndroid Build Coastguard Worker else
76*8975f5c5SAndroid Build Coastguard Worker {
77*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
78*8975f5c5SAndroid Build Coastguard Worker return ColorGeneric(ColorF());
79*8975f5c5SAndroid Build Coastguard Worker }
80*8975f5c5SAndroid Build Coastguard Worker }
81*8975f5c5SAndroid Build Coastguard Worker
82*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger>
ConvertFromColor(const ColorGeneric & color,GLfloat * outParams)83*8975f5c5SAndroid Build Coastguard Worker void ConvertFromColor(const ColorGeneric &color, GLfloat *outParams)
84*8975f5c5SAndroid Build Coastguard Worker {
85*8975f5c5SAndroid Build Coastguard Worker if (isPureInteger)
86*8975f5c5SAndroid Build Coastguard Worker {
87*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
88*8975f5c5SAndroid Build Coastguard Worker }
89*8975f5c5SAndroid Build Coastguard Worker else
90*8975f5c5SAndroid Build Coastguard Worker {
91*8975f5c5SAndroid Build Coastguard Worker color.colorF.writeData(outParams);
92*8975f5c5SAndroid Build Coastguard Worker }
93*8975f5c5SAndroid Build Coastguard Worker }
94*8975f5c5SAndroid Build Coastguard Worker
95*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger>
ConvertFromColor(const ColorGeneric & color,GLint * outParams)96*8975f5c5SAndroid Build Coastguard Worker void ConvertFromColor(const ColorGeneric &color, GLint *outParams)
97*8975f5c5SAndroid Build Coastguard Worker {
98*8975f5c5SAndroid Build Coastguard Worker if (isPureInteger)
99*8975f5c5SAndroid Build Coastguard Worker {
100*8975f5c5SAndroid Build Coastguard Worker outParams[0] = color.colorI.red;
101*8975f5c5SAndroid Build Coastguard Worker outParams[1] = color.colorI.green;
102*8975f5c5SAndroid Build Coastguard Worker outParams[2] = color.colorI.blue;
103*8975f5c5SAndroid Build Coastguard Worker outParams[3] = color.colorI.alpha;
104*8975f5c5SAndroid Build Coastguard Worker }
105*8975f5c5SAndroid Build Coastguard Worker else
106*8975f5c5SAndroid Build Coastguard Worker {
107*8975f5c5SAndroid Build Coastguard Worker outParams[0] = floatToNormalized<GLint>(color.colorF.red);
108*8975f5c5SAndroid Build Coastguard Worker outParams[1] = floatToNormalized<GLint>(color.colorF.green);
109*8975f5c5SAndroid Build Coastguard Worker outParams[2] = floatToNormalized<GLint>(color.colorF.blue);
110*8975f5c5SAndroid Build Coastguard Worker outParams[3] = floatToNormalized<GLint>(color.colorF.alpha);
111*8975f5c5SAndroid Build Coastguard Worker }
112*8975f5c5SAndroid Build Coastguard Worker }
113*8975f5c5SAndroid Build Coastguard Worker
114*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger>
ConvertFromColor(const ColorGeneric & color,GLuint * outParams)115*8975f5c5SAndroid Build Coastguard Worker void ConvertFromColor(const ColorGeneric &color, GLuint *outParams)
116*8975f5c5SAndroid Build Coastguard Worker {
117*8975f5c5SAndroid Build Coastguard Worker if (isPureInteger)
118*8975f5c5SAndroid Build Coastguard Worker {
119*8975f5c5SAndroid Build Coastguard Worker constexpr unsigned int kMinValue = 0;
120*8975f5c5SAndroid Build Coastguard Worker
121*8975f5c5SAndroid Build Coastguard Worker outParams[0] = std::max(color.colorUI.red, kMinValue);
122*8975f5c5SAndroid Build Coastguard Worker outParams[1] = std::max(color.colorUI.green, kMinValue);
123*8975f5c5SAndroid Build Coastguard Worker outParams[2] = std::max(color.colorUI.blue, kMinValue);
124*8975f5c5SAndroid Build Coastguard Worker outParams[3] = std::max(color.colorUI.alpha, kMinValue);
125*8975f5c5SAndroid Build Coastguard Worker }
126*8975f5c5SAndroid Build Coastguard Worker else
127*8975f5c5SAndroid Build Coastguard Worker {
128*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
129*8975f5c5SAndroid Build Coastguard Worker }
130*8975f5c5SAndroid Build Coastguard Worker }
131*8975f5c5SAndroid Build Coastguard Worker
132*8975f5c5SAndroid Build Coastguard Worker template <typename ParamType>
QueryTexLevelParameterBase(const Texture * texture,TextureTarget target,GLint level,GLenum pname,ParamType * params)133*8975f5c5SAndroid Build Coastguard Worker void QueryTexLevelParameterBase(const Texture *texture,
134*8975f5c5SAndroid Build Coastguard Worker TextureTarget target,
135*8975f5c5SAndroid Build Coastguard Worker GLint level,
136*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
137*8975f5c5SAndroid Build Coastguard Worker ParamType *params)
138*8975f5c5SAndroid Build Coastguard Worker {
139*8975f5c5SAndroid Build Coastguard Worker ASSERT(texture != nullptr);
140*8975f5c5SAndroid Build Coastguard Worker const InternalFormat *info = texture->getTextureState().getImageDesc(target, level).format.info;
141*8975f5c5SAndroid Build Coastguard Worker
142*8975f5c5SAndroid Build Coastguard Worker switch (pname)
143*8975f5c5SAndroid Build Coastguard Worker {
144*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_RED_TYPE:
145*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
146*8975f5c5SAndroid Build Coastguard Worker pname, info->redBits ? info->componentType : GL_NONE);
147*8975f5c5SAndroid Build Coastguard Worker break;
148*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_GREEN_TYPE:
149*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
150*8975f5c5SAndroid Build Coastguard Worker pname, info->greenBits ? info->componentType : GL_NONE);
151*8975f5c5SAndroid Build Coastguard Worker break;
152*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BLUE_TYPE:
153*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
154*8975f5c5SAndroid Build Coastguard Worker pname, info->blueBits ? info->componentType : GL_NONE);
155*8975f5c5SAndroid Build Coastguard Worker break;
156*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_ALPHA_TYPE:
157*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
158*8975f5c5SAndroid Build Coastguard Worker pname, info->alphaBits ? info->componentType : GL_NONE);
159*8975f5c5SAndroid Build Coastguard Worker break;
160*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_DEPTH_TYPE:
161*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
162*8975f5c5SAndroid Build Coastguard Worker pname, info->depthBits ? info->componentType : GL_NONE);
163*8975f5c5SAndroid Build Coastguard Worker break;
164*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_RED_SIZE:
165*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, info->redBits);
166*8975f5c5SAndroid Build Coastguard Worker break;
167*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_GREEN_SIZE:
168*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, info->greenBits);
169*8975f5c5SAndroid Build Coastguard Worker break;
170*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BLUE_SIZE:
171*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, info->blueBits);
172*8975f5c5SAndroid Build Coastguard Worker break;
173*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_ALPHA_SIZE:
174*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, info->alphaBits);
175*8975f5c5SAndroid Build Coastguard Worker break;
176*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_DEPTH_SIZE:
177*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, info->depthBits);
178*8975f5c5SAndroid Build Coastguard Worker break;
179*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_STENCIL_SIZE:
180*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, info->stencilBits);
181*8975f5c5SAndroid Build Coastguard Worker break;
182*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SHARED_SIZE:
183*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, info->sharedBits);
184*8975f5c5SAndroid Build Coastguard Worker break;
185*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_INTERNAL_FORMAT:
186*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
187*8975f5c5SAndroid Build Coastguard Worker pname, info->internalFormat ? info->internalFormat : GL_RGBA);
188*8975f5c5SAndroid Build Coastguard Worker break;
189*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WIDTH:
190*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
191*8975f5c5SAndroid Build Coastguard Worker pname, static_cast<uint32_t>(texture->getWidth(target, level)));
192*8975f5c5SAndroid Build Coastguard Worker break;
193*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_HEIGHT:
194*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
195*8975f5c5SAndroid Build Coastguard Worker pname, static_cast<uint32_t>(texture->getHeight(target, level)));
196*8975f5c5SAndroid Build Coastguard Worker break;
197*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_DEPTH:
198*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
199*8975f5c5SAndroid Build Coastguard Worker pname, static_cast<uint32_t>(texture->getDepth(target, level)));
200*8975f5c5SAndroid Build Coastguard Worker break;
201*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SAMPLES:
202*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, texture->getSamples(target, level));
203*8975f5c5SAndroid Build Coastguard Worker break;
204*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_FIXED_SAMPLE_LOCATIONS:
205*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(
206*8975f5c5SAndroid Build Coastguard Worker pname, static_cast<GLint>(texture->getFixedSampleLocations(target, level)));
207*8975f5c5SAndroid Build Coastguard Worker break;
208*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPRESSED:
209*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, static_cast<GLint>(info->compressed));
210*8975f5c5SAndroid Build Coastguard Worker break;
211*8975f5c5SAndroid Build Coastguard Worker case GL_MEMORY_SIZE_ANGLE:
212*8975f5c5SAndroid Build Coastguard Worker *params =
213*8975f5c5SAndroid Build Coastguard Worker CastFromStateValue<ParamType>(pname, texture->getLevelMemorySize(target, level));
214*8975f5c5SAndroid Build Coastguard Worker break;
215*8975f5c5SAndroid Build Coastguard Worker case GL_RESOURCE_INITIALIZED_ANGLE:
216*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
217*8975f5c5SAndroid Build Coastguard Worker pname, texture->initState(GL_NONE, ImageIndex::MakeFromTarget(target, level)) ==
218*8975f5c5SAndroid Build Coastguard Worker InitState::Initialized);
219*8975f5c5SAndroid Build Coastguard Worker break;
220*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BUFFER_DATA_STORE_BINDING:
221*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(
222*8975f5c5SAndroid Build Coastguard Worker pname, static_cast<GLint>(texture->getBuffer().id().value));
223*8975f5c5SAndroid Build Coastguard Worker break;
224*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BUFFER_OFFSET:
225*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(
226*8975f5c5SAndroid Build Coastguard Worker pname, static_cast<GLint>(texture->getBuffer().getOffset()));
227*8975f5c5SAndroid Build Coastguard Worker break;
228*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BUFFER_SIZE:
229*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(
230*8975f5c5SAndroid Build Coastguard Worker pname, static_cast<GLint>(GetBoundBufferAvailableSize(texture->getBuffer())));
231*8975f5c5SAndroid Build Coastguard Worker break;
232*8975f5c5SAndroid Build Coastguard Worker default:
233*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
234*8975f5c5SAndroid Build Coastguard Worker break;
235*8975f5c5SAndroid Build Coastguard Worker }
236*8975f5c5SAndroid Build Coastguard Worker }
237*8975f5c5SAndroid Build Coastguard Worker
238*8975f5c5SAndroid Build Coastguard Worker // This function is needed to handle fixed_point data.
239*8975f5c5SAndroid Build Coastguard Worker // It can be used when some pname need special conversion from int/float/bool to fixed_point.
240*8975f5c5SAndroid Build Coastguard Worker template <bool isGLfixed, typename QueryT, typename ParamType>
CastFromSpecialValue(GLenum pname,const ParamType param)241*8975f5c5SAndroid Build Coastguard Worker QueryT CastFromSpecialValue(GLenum pname, const ParamType param)
242*8975f5c5SAndroid Build Coastguard Worker {
243*8975f5c5SAndroid Build Coastguard Worker if (isGLfixed)
244*8975f5c5SAndroid Build Coastguard Worker {
245*8975f5c5SAndroid Build Coastguard Worker return static_cast<QueryT>(ConvertFloatToFixed(CastFromStateValue<GLfloat>(pname, param)));
246*8975f5c5SAndroid Build Coastguard Worker }
247*8975f5c5SAndroid Build Coastguard Worker else
248*8975f5c5SAndroid Build Coastguard Worker {
249*8975f5c5SAndroid Build Coastguard Worker return CastFromStateValue<QueryT>(pname, param);
250*8975f5c5SAndroid Build Coastguard Worker }
251*8975f5c5SAndroid Build Coastguard Worker }
252*8975f5c5SAndroid Build Coastguard Worker
253*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger, bool isGLfixed, typename ParamType>
QueryTexParameterBase(const Context * context,const Texture * texture,GLenum pname,ParamType * params)254*8975f5c5SAndroid Build Coastguard Worker void QueryTexParameterBase(const Context *context,
255*8975f5c5SAndroid Build Coastguard Worker const Texture *texture,
256*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
257*8975f5c5SAndroid Build Coastguard Worker ParamType *params)
258*8975f5c5SAndroid Build Coastguard Worker {
259*8975f5c5SAndroid Build Coastguard Worker ASSERT(texture != nullptr);
260*8975f5c5SAndroid Build Coastguard Worker
261*8975f5c5SAndroid Build Coastguard Worker switch (pname)
262*8975f5c5SAndroid Build Coastguard Worker {
263*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAG_FILTER:
264*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getMagFilter());
265*8975f5c5SAndroid Build Coastguard Worker break;
266*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_FILTER:
267*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getMinFilter());
268*8975f5c5SAndroid Build Coastguard Worker break;
269*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_S:
270*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getWrapS());
271*8975f5c5SAndroid Build Coastguard Worker break;
272*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_T:
273*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getWrapT());
274*8975f5c5SAndroid Build Coastguard Worker break;
275*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_R:
276*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getWrapR());
277*8975f5c5SAndroid Build Coastguard Worker break;
278*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_IMMUTABLE_FORMAT:
279*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getImmutableFormat());
280*8975f5c5SAndroid Build Coastguard Worker break;
281*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_IMMUTABLE_LEVELS:
282*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getImmutableLevels());
283*8975f5c5SAndroid Build Coastguard Worker break;
284*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_USAGE_ANGLE:
285*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getUsage());
286*8975f5c5SAndroid Build Coastguard Worker break;
287*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_ANISOTROPY_EXT:
288*8975f5c5SAndroid Build Coastguard Worker *params =
289*8975f5c5SAndroid Build Coastguard Worker CastFromSpecialValue<isGLfixed, ParamType>(pname, texture->getMaxAnisotropy());
290*8975f5c5SAndroid Build Coastguard Worker break;
291*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_R:
292*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getSwizzleRed());
293*8975f5c5SAndroid Build Coastguard Worker break;
294*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_G:
295*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getSwizzleGreen());
296*8975f5c5SAndroid Build Coastguard Worker break;
297*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_B:
298*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getSwizzleBlue());
299*8975f5c5SAndroid Build Coastguard Worker break;
300*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_A:
301*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getSwizzleAlpha());
302*8975f5c5SAndroid Build Coastguard Worker break;
303*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BASE_LEVEL:
304*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getBaseLevel());
305*8975f5c5SAndroid Build Coastguard Worker break;
306*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_LEVEL:
307*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getMaxLevel());
308*8975f5c5SAndroid Build Coastguard Worker break;
309*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_LOD:
310*8975f5c5SAndroid Build Coastguard Worker *params = CastFromSpecialValue<isGLfixed, ParamType>(pname, texture->getMinLod());
311*8975f5c5SAndroid Build Coastguard Worker break;
312*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_LOD:
313*8975f5c5SAndroid Build Coastguard Worker *params = CastFromSpecialValue<isGLfixed, ParamType>(pname, texture->getMaxLod());
314*8975f5c5SAndroid Build Coastguard Worker break;
315*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_MODE:
316*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getCompareMode());
317*8975f5c5SAndroid Build Coastguard Worker break;
318*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_FUNC:
319*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getCompareFunc());
320*8975f5c5SAndroid Build Coastguard Worker break;
321*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SRGB_DECODE_EXT:
322*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getSRGBDecode());
323*8975f5c5SAndroid Build Coastguard Worker break;
324*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_FORMAT_SRGB_OVERRIDE_EXT:
325*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getSRGBOverride());
326*8975f5c5SAndroid Build Coastguard Worker break;
327*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_STENCIL_TEXTURE_MODE:
328*8975f5c5SAndroid Build Coastguard Worker *params =
329*8975f5c5SAndroid Build Coastguard Worker CastFromGLintStateValue<ParamType>(pname, texture->getDepthStencilTextureMode());
330*8975f5c5SAndroid Build Coastguard Worker break;
331*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_CROP_RECT_OES:
332*8975f5c5SAndroid Build Coastguard Worker {
333*8975f5c5SAndroid Build Coastguard Worker const gl::Rectangle &crop = texture->getCrop();
334*8975f5c5SAndroid Build Coastguard Worker params[0] = CastFromSpecialValue<isGLfixed, ParamType>(pname, crop.x);
335*8975f5c5SAndroid Build Coastguard Worker params[1] = CastFromSpecialValue<isGLfixed, ParamType>(pname, crop.y);
336*8975f5c5SAndroid Build Coastguard Worker params[2] = CastFromSpecialValue<isGLfixed, ParamType>(pname, crop.width);
337*8975f5c5SAndroid Build Coastguard Worker params[3] = CastFromSpecialValue<isGLfixed, ParamType>(pname, crop.height);
338*8975f5c5SAndroid Build Coastguard Worker break;
339*8975f5c5SAndroid Build Coastguard Worker }
340*8975f5c5SAndroid Build Coastguard Worker case GL_GENERATE_MIPMAP:
341*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getGenerateMipmapHint());
342*8975f5c5SAndroid Build Coastguard Worker break;
343*8975f5c5SAndroid Build Coastguard Worker case GL_MEMORY_SIZE_ANGLE:
344*8975f5c5SAndroid Build Coastguard Worker *params = CastFromSpecialValue<isGLfixed, ParamType>(pname, texture->getMemorySize());
345*8975f5c5SAndroid Build Coastguard Worker break;
346*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BORDER_COLOR:
347*8975f5c5SAndroid Build Coastguard Worker ConvertFromColor<isPureInteger>(texture->getBorderColor(), params);
348*8975f5c5SAndroid Build Coastguard Worker break;
349*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_NATIVE_ID_ANGLE:
350*8975f5c5SAndroid Build Coastguard Worker *params = CastFromSpecialValue<isGLfixed, ParamType>(pname, texture->getNativeID());
351*8975f5c5SAndroid Build Coastguard Worker break;
352*8975f5c5SAndroid Build Coastguard Worker case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
353*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
354*8975f5c5SAndroid Build Coastguard Worker pname, texture->getImplementationColorReadFormat(context));
355*8975f5c5SAndroid Build Coastguard Worker break;
356*8975f5c5SAndroid Build Coastguard Worker case GL_IMPLEMENTATION_COLOR_READ_TYPE:
357*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
358*8975f5c5SAndroid Build Coastguard Worker pname, texture->getImplementationColorReadType(context));
359*8975f5c5SAndroid Build Coastguard Worker break;
360*8975f5c5SAndroid Build Coastguard Worker case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
361*8975f5c5SAndroid Build Coastguard Worker *params =
362*8975f5c5SAndroid Build Coastguard Worker CastFromGLintStateValue<ParamType>(pname, GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE);
363*8975f5c5SAndroid Build Coastguard Worker break;
364*8975f5c5SAndroid Build Coastguard Worker case GL_RESOURCE_INITIALIZED_ANGLE:
365*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
366*8975f5c5SAndroid Build Coastguard Worker pname, texture->initState() == InitState::Initialized);
367*8975f5c5SAndroid Build Coastguard Worker break;
368*8975f5c5SAndroid Build Coastguard Worker case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
369*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
370*8975f5c5SAndroid Build Coastguard Worker pname, texture->getRequiredTextureImageUnits(context));
371*8975f5c5SAndroid Build Coastguard Worker break;
372*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_PROTECTED_EXT:
373*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->hasProtectedContent());
374*8975f5c5SAndroid Build Coastguard Worker break;
375*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_TILING_EXT:
376*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getTilingMode());
377*8975f5c5SAndroid Build Coastguard Worker break;
378*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM:
379*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getFoveatedFeatureBits());
380*8975f5c5SAndroid Build Coastguard Worker break;
381*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_FOVEATED_FEATURE_QUERY_QCOM:
382*8975f5c5SAndroid Build Coastguard Worker *params =
383*8975f5c5SAndroid Build Coastguard Worker CastFromGLintStateValue<ParamType>(pname, texture->getSupportedFoveationFeatures());
384*8975f5c5SAndroid Build Coastguard Worker break;
385*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_FOVEATED_MIN_PIXEL_DENSITY_QCOM:
386*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getMinPixelDensity());
387*8975f5c5SAndroid Build Coastguard Worker break;
388*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_FOVEATED_NUM_FOCAL_POINTS_QUERY_QCOM:
389*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, texture->getNumFocalPoints());
390*8975f5c5SAndroid Build Coastguard Worker break;
391*8975f5c5SAndroid Build Coastguard Worker case GL_SURFACE_COMPRESSION_EXT:
392*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname,
393*8975f5c5SAndroid Build Coastguard Worker texture->getImageCompressionRate(context));
394*8975f5c5SAndroid Build Coastguard Worker break;
395*8975f5c5SAndroid Build Coastguard Worker default:
396*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
397*8975f5c5SAndroid Build Coastguard Worker break;
398*8975f5c5SAndroid Build Coastguard Worker }
399*8975f5c5SAndroid Build Coastguard Worker }
400*8975f5c5SAndroid Build Coastguard Worker
401*8975f5c5SAndroid Build Coastguard Worker // this function is needed to handle OES_FIXED_POINT.
402*8975f5c5SAndroid Build Coastguard Worker // Some pname values can take in GLfixed values and may need to be converted
403*8975f5c5SAndroid Build Coastguard Worker template <bool isGLfixed, typename ReturnType, typename ParamType>
ConvertTexParam(GLenum pname,const ParamType param)404*8975f5c5SAndroid Build Coastguard Worker ReturnType ConvertTexParam(GLenum pname, const ParamType param)
405*8975f5c5SAndroid Build Coastguard Worker {
406*8975f5c5SAndroid Build Coastguard Worker if (isGLfixed)
407*8975f5c5SAndroid Build Coastguard Worker {
408*8975f5c5SAndroid Build Coastguard Worker return CastQueryValueTo<ReturnType>(pname,
409*8975f5c5SAndroid Build Coastguard Worker ConvertFixedToFloat(static_cast<GLfixed>(param)));
410*8975f5c5SAndroid Build Coastguard Worker }
411*8975f5c5SAndroid Build Coastguard Worker else
412*8975f5c5SAndroid Build Coastguard Worker {
413*8975f5c5SAndroid Build Coastguard Worker return CastQueryValueTo<ReturnType>(pname, param);
414*8975f5c5SAndroid Build Coastguard Worker }
415*8975f5c5SAndroid Build Coastguard Worker }
416*8975f5c5SAndroid Build Coastguard Worker
417*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger, bool isGLfixed, typename ParamType>
SetTexParameterBase(Context * context,Texture * texture,GLenum pname,const ParamType * params)418*8975f5c5SAndroid Build Coastguard Worker void SetTexParameterBase(Context *context, Texture *texture, GLenum pname, const ParamType *params)
419*8975f5c5SAndroid Build Coastguard Worker {
420*8975f5c5SAndroid Build Coastguard Worker ASSERT(texture != nullptr);
421*8975f5c5SAndroid Build Coastguard Worker
422*8975f5c5SAndroid Build Coastguard Worker switch (pname)
423*8975f5c5SAndroid Build Coastguard Worker {
424*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_S:
425*8975f5c5SAndroid Build Coastguard Worker texture->setWrapS(context, ConvertToGLenum(pname, params[0]));
426*8975f5c5SAndroid Build Coastguard Worker break;
427*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_T:
428*8975f5c5SAndroid Build Coastguard Worker texture->setWrapT(context, ConvertToGLenum(pname, params[0]));
429*8975f5c5SAndroid Build Coastguard Worker break;
430*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_R:
431*8975f5c5SAndroid Build Coastguard Worker texture->setWrapR(context, ConvertToGLenum(pname, params[0]));
432*8975f5c5SAndroid Build Coastguard Worker break;
433*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_FILTER:
434*8975f5c5SAndroid Build Coastguard Worker texture->setMinFilter(context, ConvertToGLenum(pname, params[0]));
435*8975f5c5SAndroid Build Coastguard Worker break;
436*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAG_FILTER:
437*8975f5c5SAndroid Build Coastguard Worker texture->setMagFilter(context, ConvertToGLenum(pname, params[0]));
438*8975f5c5SAndroid Build Coastguard Worker break;
439*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_USAGE_ANGLE:
440*8975f5c5SAndroid Build Coastguard Worker texture->setUsage(context, ConvertToGLenum(pname, params[0]));
441*8975f5c5SAndroid Build Coastguard Worker break;
442*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_ANISOTROPY_EXT:
443*8975f5c5SAndroid Build Coastguard Worker texture->setMaxAnisotropy(context,
444*8975f5c5SAndroid Build Coastguard Worker ConvertTexParam<isGLfixed, GLfloat>(pname, params[0]));
445*8975f5c5SAndroid Build Coastguard Worker break;
446*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_MODE:
447*8975f5c5SAndroid Build Coastguard Worker texture->setCompareMode(context, ConvertToGLenum(pname, params[0]));
448*8975f5c5SAndroid Build Coastguard Worker break;
449*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_FUNC:
450*8975f5c5SAndroid Build Coastguard Worker texture->setCompareFunc(context, ConvertToGLenum(pname, params[0]));
451*8975f5c5SAndroid Build Coastguard Worker break;
452*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_R:
453*8975f5c5SAndroid Build Coastguard Worker texture->setSwizzleRed(context, ConvertToGLenum(pname, params[0]));
454*8975f5c5SAndroid Build Coastguard Worker break;
455*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_G:
456*8975f5c5SAndroid Build Coastguard Worker texture->setSwizzleGreen(context, ConvertToGLenum(pname, params[0]));
457*8975f5c5SAndroid Build Coastguard Worker break;
458*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_B:
459*8975f5c5SAndroid Build Coastguard Worker texture->setSwizzleBlue(context, ConvertToGLenum(pname, params[0]));
460*8975f5c5SAndroid Build Coastguard Worker break;
461*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_A:
462*8975f5c5SAndroid Build Coastguard Worker texture->setSwizzleAlpha(context, ConvertToGLenum(pname, params[0]));
463*8975f5c5SAndroid Build Coastguard Worker break;
464*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BASE_LEVEL:
465*8975f5c5SAndroid Build Coastguard Worker {
466*8975f5c5SAndroid Build Coastguard Worker (void)(texture->setBaseLevel(
467*8975f5c5SAndroid Build Coastguard Worker context, clampCast<GLuint>(CastQueryValueTo<GLint>(pname, params[0]))));
468*8975f5c5SAndroid Build Coastguard Worker break;
469*8975f5c5SAndroid Build Coastguard Worker }
470*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_LEVEL:
471*8975f5c5SAndroid Build Coastguard Worker texture->setMaxLevel(context,
472*8975f5c5SAndroid Build Coastguard Worker clampCast<GLuint>(CastQueryValueTo<GLint>(pname, params[0])));
473*8975f5c5SAndroid Build Coastguard Worker break;
474*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_LOD:
475*8975f5c5SAndroid Build Coastguard Worker texture->setMinLod(context, CastQueryValueTo<GLfloat>(pname, params[0]));
476*8975f5c5SAndroid Build Coastguard Worker break;
477*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_LOD:
478*8975f5c5SAndroid Build Coastguard Worker texture->setMaxLod(context, CastQueryValueTo<GLfloat>(pname, params[0]));
479*8975f5c5SAndroid Build Coastguard Worker break;
480*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_STENCIL_TEXTURE_MODE:
481*8975f5c5SAndroid Build Coastguard Worker texture->setDepthStencilTextureMode(context, ConvertToGLenum(pname, params[0]));
482*8975f5c5SAndroid Build Coastguard Worker break;
483*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SRGB_DECODE_EXT:
484*8975f5c5SAndroid Build Coastguard Worker texture->setSRGBDecode(context, ConvertToGLenum(pname, params[0]));
485*8975f5c5SAndroid Build Coastguard Worker break;
486*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_FORMAT_SRGB_OVERRIDE_EXT:
487*8975f5c5SAndroid Build Coastguard Worker texture->setSRGBOverride(context, ConvertToGLenum(pname, params[0]));
488*8975f5c5SAndroid Build Coastguard Worker break;
489*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_CROP_RECT_OES:
490*8975f5c5SAndroid Build Coastguard Worker texture->setCrop(gl::Rectangle(ConvertTexParam<isGLfixed, GLint>(pname, params[0]),
491*8975f5c5SAndroid Build Coastguard Worker ConvertTexParam<isGLfixed, GLint>(pname, params[1]),
492*8975f5c5SAndroid Build Coastguard Worker ConvertTexParam<isGLfixed, GLint>(pname, params[2]),
493*8975f5c5SAndroid Build Coastguard Worker ConvertTexParam<isGLfixed, GLint>(pname, params[3])));
494*8975f5c5SAndroid Build Coastguard Worker break;
495*8975f5c5SAndroid Build Coastguard Worker case GL_GENERATE_MIPMAP:
496*8975f5c5SAndroid Build Coastguard Worker texture->setGenerateMipmapHint(ConvertToGLenum(params[0]));
497*8975f5c5SAndroid Build Coastguard Worker break;
498*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BORDER_COLOR:
499*8975f5c5SAndroid Build Coastguard Worker texture->setBorderColor(context, ConvertToColor<isPureInteger>(params));
500*8975f5c5SAndroid Build Coastguard Worker break;
501*8975f5c5SAndroid Build Coastguard Worker case GL_RESOURCE_INITIALIZED_ANGLE:
502*8975f5c5SAndroid Build Coastguard Worker texture->setInitState(ConvertToBool(params[0]) ? InitState::Initialized
503*8975f5c5SAndroid Build Coastguard Worker : InitState::MayNeedInit);
504*8975f5c5SAndroid Build Coastguard Worker break;
505*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_PROTECTED_EXT:
506*8975f5c5SAndroid Build Coastguard Worker texture->setProtectedContent(context, (params[0] == GL_TRUE));
507*8975f5c5SAndroid Build Coastguard Worker break;
508*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERABILITY_VALIDATION_ANGLE:
509*8975f5c5SAndroid Build Coastguard Worker texture->setRenderabilityValidation(context, (params[0] == GL_TRUE));
510*8975f5c5SAndroid Build Coastguard Worker break;
511*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_TILING_EXT:
512*8975f5c5SAndroid Build Coastguard Worker texture->setTilingMode(context, ConvertToGLenum(pname, params[0]));
513*8975f5c5SAndroid Build Coastguard Worker break;
514*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM:
515*8975f5c5SAndroid Build Coastguard Worker texture->setFoveatedFeatureBits(ConvertToGLenum(pname, params[0]));
516*8975f5c5SAndroid Build Coastguard Worker break;
517*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_FOVEATED_MIN_PIXEL_DENSITY_QCOM:
518*8975f5c5SAndroid Build Coastguard Worker texture->setMinPixelDensity(ConvertToGLfloat(params[0]));
519*8975f5c5SAndroid Build Coastguard Worker break;
520*8975f5c5SAndroid Build Coastguard Worker default:
521*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
522*8975f5c5SAndroid Build Coastguard Worker break;
523*8975f5c5SAndroid Build Coastguard Worker }
524*8975f5c5SAndroid Build Coastguard Worker }
525*8975f5c5SAndroid Build Coastguard Worker
526*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger, typename ParamType>
QuerySamplerParameterBase(const Sampler * sampler,GLenum pname,ParamType * params)527*8975f5c5SAndroid Build Coastguard Worker void QuerySamplerParameterBase(const Sampler *sampler, GLenum pname, ParamType *params)
528*8975f5c5SAndroid Build Coastguard Worker {
529*8975f5c5SAndroid Build Coastguard Worker switch (pname)
530*8975f5c5SAndroid Build Coastguard Worker {
531*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_FILTER:
532*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, sampler->getMinFilter());
533*8975f5c5SAndroid Build Coastguard Worker break;
534*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAG_FILTER:
535*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, sampler->getMagFilter());
536*8975f5c5SAndroid Build Coastguard Worker break;
537*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_S:
538*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, sampler->getWrapS());
539*8975f5c5SAndroid Build Coastguard Worker break;
540*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_T:
541*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, sampler->getWrapT());
542*8975f5c5SAndroid Build Coastguard Worker break;
543*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_R:
544*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, sampler->getWrapR());
545*8975f5c5SAndroid Build Coastguard Worker break;
546*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_ANISOTROPY_EXT:
547*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, sampler->getMaxAnisotropy());
548*8975f5c5SAndroid Build Coastguard Worker break;
549*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_LOD:
550*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, sampler->getMinLod());
551*8975f5c5SAndroid Build Coastguard Worker break;
552*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_LOD:
553*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, sampler->getMaxLod());
554*8975f5c5SAndroid Build Coastguard Worker break;
555*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_MODE:
556*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, sampler->getCompareMode());
557*8975f5c5SAndroid Build Coastguard Worker break;
558*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_FUNC:
559*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, sampler->getCompareFunc());
560*8975f5c5SAndroid Build Coastguard Worker break;
561*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SRGB_DECODE_EXT:
562*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, sampler->getSRGBDecode());
563*8975f5c5SAndroid Build Coastguard Worker break;
564*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BORDER_COLOR:
565*8975f5c5SAndroid Build Coastguard Worker ConvertFromColor<isPureInteger>(sampler->getBorderColor(), params);
566*8975f5c5SAndroid Build Coastguard Worker break;
567*8975f5c5SAndroid Build Coastguard Worker default:
568*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
569*8975f5c5SAndroid Build Coastguard Worker break;
570*8975f5c5SAndroid Build Coastguard Worker }
571*8975f5c5SAndroid Build Coastguard Worker }
572*8975f5c5SAndroid Build Coastguard Worker
573*8975f5c5SAndroid Build Coastguard Worker template <bool isPureInteger, typename ParamType>
SetSamplerParameterBase(Context * context,Sampler * sampler,GLenum pname,const ParamType * params)574*8975f5c5SAndroid Build Coastguard Worker void SetSamplerParameterBase(Context *context,
575*8975f5c5SAndroid Build Coastguard Worker Sampler *sampler,
576*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
577*8975f5c5SAndroid Build Coastguard Worker const ParamType *params)
578*8975f5c5SAndroid Build Coastguard Worker {
579*8975f5c5SAndroid Build Coastguard Worker switch (pname)
580*8975f5c5SAndroid Build Coastguard Worker {
581*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_S:
582*8975f5c5SAndroid Build Coastguard Worker sampler->setWrapS(context, ConvertToGLenum(pname, params[0]));
583*8975f5c5SAndroid Build Coastguard Worker break;
584*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_T:
585*8975f5c5SAndroid Build Coastguard Worker sampler->setWrapT(context, ConvertToGLenum(pname, params[0]));
586*8975f5c5SAndroid Build Coastguard Worker break;
587*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_R:
588*8975f5c5SAndroid Build Coastguard Worker sampler->setWrapR(context, ConvertToGLenum(pname, params[0]));
589*8975f5c5SAndroid Build Coastguard Worker break;
590*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_FILTER:
591*8975f5c5SAndroid Build Coastguard Worker sampler->setMinFilter(context, ConvertToGLenum(pname, params[0]));
592*8975f5c5SAndroid Build Coastguard Worker break;
593*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAG_FILTER:
594*8975f5c5SAndroid Build Coastguard Worker sampler->setMagFilter(context, ConvertToGLenum(pname, params[0]));
595*8975f5c5SAndroid Build Coastguard Worker break;
596*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_ANISOTROPY_EXT:
597*8975f5c5SAndroid Build Coastguard Worker sampler->setMaxAnisotropy(context, CastQueryValueTo<GLfloat>(pname, params[0]));
598*8975f5c5SAndroid Build Coastguard Worker break;
599*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_MODE:
600*8975f5c5SAndroid Build Coastguard Worker sampler->setCompareMode(context, ConvertToGLenum(pname, params[0]));
601*8975f5c5SAndroid Build Coastguard Worker break;
602*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_FUNC:
603*8975f5c5SAndroid Build Coastguard Worker sampler->setCompareFunc(context, ConvertToGLenum(pname, params[0]));
604*8975f5c5SAndroid Build Coastguard Worker break;
605*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_LOD:
606*8975f5c5SAndroid Build Coastguard Worker sampler->setMinLod(context, CastQueryValueTo<GLfloat>(pname, params[0]));
607*8975f5c5SAndroid Build Coastguard Worker break;
608*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_LOD:
609*8975f5c5SAndroid Build Coastguard Worker sampler->setMaxLod(context, CastQueryValueTo<GLfloat>(pname, params[0]));
610*8975f5c5SAndroid Build Coastguard Worker break;
611*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SRGB_DECODE_EXT:
612*8975f5c5SAndroid Build Coastguard Worker sampler->setSRGBDecode(context, ConvertToGLenum(pname, params[0]));
613*8975f5c5SAndroid Build Coastguard Worker break;
614*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BORDER_COLOR:
615*8975f5c5SAndroid Build Coastguard Worker sampler->setBorderColor(context, ConvertToColor<isPureInteger>(params));
616*8975f5c5SAndroid Build Coastguard Worker break;
617*8975f5c5SAndroid Build Coastguard Worker default:
618*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
619*8975f5c5SAndroid Build Coastguard Worker break;
620*8975f5c5SAndroid Build Coastguard Worker }
621*8975f5c5SAndroid Build Coastguard Worker
622*8975f5c5SAndroid Build Coastguard Worker sampler->onStateChange(angle::SubjectMessage::ContentsChanged);
623*8975f5c5SAndroid Build Coastguard Worker }
624*8975f5c5SAndroid Build Coastguard Worker
625*8975f5c5SAndroid Build Coastguard Worker // Warning: you should ensure binding really matches attrib.bindingIndex before using this function.
626*8975f5c5SAndroid Build Coastguard Worker template <typename ParamType, typename CurrentDataType, size_t CurrentValueCount>
QueryVertexAttribBase(const VertexAttribute & attrib,const VertexBinding & binding,const CurrentDataType (& currentValueData)[CurrentValueCount],GLenum pname,ParamType * params)627*8975f5c5SAndroid Build Coastguard Worker void QueryVertexAttribBase(const VertexAttribute &attrib,
628*8975f5c5SAndroid Build Coastguard Worker const VertexBinding &binding,
629*8975f5c5SAndroid Build Coastguard Worker const CurrentDataType (¤tValueData)[CurrentValueCount],
630*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
631*8975f5c5SAndroid Build Coastguard Worker ParamType *params)
632*8975f5c5SAndroid Build Coastguard Worker {
633*8975f5c5SAndroid Build Coastguard Worker switch (pname)
634*8975f5c5SAndroid Build Coastguard Worker {
635*8975f5c5SAndroid Build Coastguard Worker case GL_CURRENT_VERTEX_ATTRIB:
636*8975f5c5SAndroid Build Coastguard Worker for (size_t i = 0; i < CurrentValueCount; ++i)
637*8975f5c5SAndroid Build Coastguard Worker {
638*8975f5c5SAndroid Build Coastguard Worker params[i] = CastFromStateValue<ParamType>(pname, currentValueData[i]);
639*8975f5c5SAndroid Build Coastguard Worker }
640*8975f5c5SAndroid Build Coastguard Worker break;
641*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
642*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, static_cast<GLint>(attrib.enabled));
643*8975f5c5SAndroid Build Coastguard Worker break;
644*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_ARRAY_SIZE:
645*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, attrib.format->channelCount);
646*8975f5c5SAndroid Build Coastguard Worker break;
647*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
648*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, attrib.vertexAttribArrayStride);
649*8975f5c5SAndroid Build Coastguard Worker break;
650*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_ARRAY_TYPE:
651*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(
652*8975f5c5SAndroid Build Coastguard Worker pname, gl::ToGLenum(attrib.format->vertexAttribType));
653*8975f5c5SAndroid Build Coastguard Worker break;
654*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
655*8975f5c5SAndroid Build Coastguard Worker *params =
656*8975f5c5SAndroid Build Coastguard Worker CastFromStateValue<ParamType>(pname, static_cast<GLint>(attrib.format->isNorm()));
657*8975f5c5SAndroid Build Coastguard Worker break;
658*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
659*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, binding.getBuffer().id().value);
660*8975f5c5SAndroid Build Coastguard Worker break;
661*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
662*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, binding.getDivisor());
663*8975f5c5SAndroid Build Coastguard Worker break;
664*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
665*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, attrib.format->isPureInt());
666*8975f5c5SAndroid Build Coastguard Worker break;
667*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_BINDING:
668*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, attrib.bindingIndex);
669*8975f5c5SAndroid Build Coastguard Worker break;
670*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_RELATIVE_OFFSET:
671*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, attrib.relativeOffset);
672*8975f5c5SAndroid Build Coastguard Worker break;
673*8975f5c5SAndroid Build Coastguard Worker default:
674*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
675*8975f5c5SAndroid Build Coastguard Worker break;
676*8975f5c5SAndroid Build Coastguard Worker }
677*8975f5c5SAndroid Build Coastguard Worker }
678*8975f5c5SAndroid Build Coastguard Worker
679*8975f5c5SAndroid Build Coastguard Worker template <typename ParamType>
QueryBufferParameterBase(const Buffer * buffer,GLenum pname,ParamType * params)680*8975f5c5SAndroid Build Coastguard Worker void QueryBufferParameterBase(const Buffer *buffer, GLenum pname, ParamType *params)
681*8975f5c5SAndroid Build Coastguard Worker {
682*8975f5c5SAndroid Build Coastguard Worker ASSERT(buffer != nullptr);
683*8975f5c5SAndroid Build Coastguard Worker
684*8975f5c5SAndroid Build Coastguard Worker switch (pname)
685*8975f5c5SAndroid Build Coastguard Worker {
686*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_USAGE:
687*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, ToGLenum(buffer->getUsage()));
688*8975f5c5SAndroid Build Coastguard Worker break;
689*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_SIZE:
690*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, buffer->getSize());
691*8975f5c5SAndroid Build Coastguard Worker break;
692*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_ACCESS_FLAGS:
693*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, buffer->getAccessFlags());
694*8975f5c5SAndroid Build Coastguard Worker break;
695*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_ACCESS_OES:
696*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, buffer->getAccess());
697*8975f5c5SAndroid Build Coastguard Worker break;
698*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_MAPPED:
699*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, buffer->isMapped());
700*8975f5c5SAndroid Build Coastguard Worker break;
701*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_MAP_OFFSET:
702*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, buffer->getMapOffset());
703*8975f5c5SAndroid Build Coastguard Worker break;
704*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_MAP_LENGTH:
705*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, buffer->getMapLength());
706*8975f5c5SAndroid Build Coastguard Worker break;
707*8975f5c5SAndroid Build Coastguard Worker case GL_MEMORY_SIZE_ANGLE:
708*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, buffer->getMemorySize());
709*8975f5c5SAndroid Build Coastguard Worker break;
710*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_IMMUTABLE_STORAGE_EXT:
711*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(pname, buffer->isImmutable());
712*8975f5c5SAndroid Build Coastguard Worker break;
713*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_STORAGE_FLAGS_EXT:
714*8975f5c5SAndroid Build Coastguard Worker *params = CastFromGLintStateValue<ParamType>(pname, buffer->getStorageExtUsageFlags());
715*8975f5c5SAndroid Build Coastguard Worker break;
716*8975f5c5SAndroid Build Coastguard Worker case GL_RESOURCE_INITIALIZED_ANGLE:
717*8975f5c5SAndroid Build Coastguard Worker *params = CastFromStateValue<ParamType>(
718*8975f5c5SAndroid Build Coastguard Worker pname, ConvertToGLBoolean(buffer->initState() == InitState::Initialized));
719*8975f5c5SAndroid Build Coastguard Worker break;
720*8975f5c5SAndroid Build Coastguard Worker default:
721*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
722*8975f5c5SAndroid Build Coastguard Worker break;
723*8975f5c5SAndroid Build Coastguard Worker }
724*8975f5c5SAndroid Build Coastguard Worker }
725*8975f5c5SAndroid Build Coastguard Worker
726*8975f5c5SAndroid Build Coastguard Worker template <typename T>
GetCommonVariableProperty(const T & var,GLenum prop)727*8975f5c5SAndroid Build Coastguard Worker GLint GetCommonVariableProperty(const T &var, GLenum prop)
728*8975f5c5SAndroid Build Coastguard Worker {
729*8975f5c5SAndroid Build Coastguard Worker switch (prop)
730*8975f5c5SAndroid Build Coastguard Worker {
731*8975f5c5SAndroid Build Coastguard Worker case GL_TYPE:
732*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(var.pod.type);
733*8975f5c5SAndroid Build Coastguard Worker
734*8975f5c5SAndroid Build Coastguard Worker case GL_ARRAY_SIZE:
735*8975f5c5SAndroid Build Coastguard Worker // Queryable variables are guaranteed not to be arrays of arrays or arrays of structs,
736*8975f5c5SAndroid Build Coastguard Worker // see GLES 3.1 spec section 7.3.1.1 page 77.
737*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(var.getBasicTypeElementCount());
738*8975f5c5SAndroid Build Coastguard Worker
739*8975f5c5SAndroid Build Coastguard Worker case GL_NAME_LENGTH:
740*8975f5c5SAndroid Build Coastguard Worker // ES31 spec p84: This counts the terminating null char.
741*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(var.name.size() + 1u);
742*8975f5c5SAndroid Build Coastguard Worker
743*8975f5c5SAndroid Build Coastguard Worker default:
744*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
745*8975f5c5SAndroid Build Coastguard Worker return GL_INVALID_VALUE;
746*8975f5c5SAndroid Build Coastguard Worker }
747*8975f5c5SAndroid Build Coastguard Worker }
748*8975f5c5SAndroid Build Coastguard Worker
GetInputResourceProperty(const Program * program,GLuint index,GLenum prop)749*8975f5c5SAndroid Build Coastguard Worker GLint GetInputResourceProperty(const Program *program, GLuint index, GLenum prop)
750*8975f5c5SAndroid Build Coastguard Worker {
751*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
752*8975f5c5SAndroid Build Coastguard Worker const ProgramInput &variable = executable.getInputResource(index);
753*8975f5c5SAndroid Build Coastguard Worker
754*8975f5c5SAndroid Build Coastguard Worker switch (prop)
755*8975f5c5SAndroid Build Coastguard Worker {
756*8975f5c5SAndroid Build Coastguard Worker case GL_TYPE:
757*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(variable.getType());
758*8975f5c5SAndroid Build Coastguard Worker case GL_ARRAY_SIZE:
759*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(variable.getBasicTypeElementCount());
760*8975f5c5SAndroid Build Coastguard Worker
761*8975f5c5SAndroid Build Coastguard Worker case GL_NAME_LENGTH:
762*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getInputResourceName(index).size() + 1u);
763*8975f5c5SAndroid Build Coastguard Worker
764*8975f5c5SAndroid Build Coastguard Worker case GL_LOCATION:
765*8975f5c5SAndroid Build Coastguard Worker return variable.isBuiltIn() ? GL_INVALID_INDEX : variable.getLocation();
766*8975f5c5SAndroid Build Coastguard Worker
767*8975f5c5SAndroid Build Coastguard Worker // The query is targeted at the set of active input variables used by the first shader stage
768*8975f5c5SAndroid Build Coastguard Worker // of program. If program contains multiple shader stages then input variables from any
769*8975f5c5SAndroid Build Coastguard Worker // stage other than the first will not be enumerated. Since we found the variable to get
770*8975f5c5SAndroid Build Coastguard Worker // this far, we know it exists in the first attached shader stage.
771*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_VERTEX_SHADER:
772*8975f5c5SAndroid Build Coastguard Worker return executable.getFirstLinkedShaderStageType() == ShaderType::Vertex;
773*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_FRAGMENT_SHADER:
774*8975f5c5SAndroid Build Coastguard Worker return executable.getFirstLinkedShaderStageType() == ShaderType::Fragment;
775*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_COMPUTE_SHADER:
776*8975f5c5SAndroid Build Coastguard Worker return executable.getFirstLinkedShaderStageType() == ShaderType::Compute;
777*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
778*8975f5c5SAndroid Build Coastguard Worker return executable.getFirstLinkedShaderStageType() == ShaderType::Geometry;
779*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT:
780*8975f5c5SAndroid Build Coastguard Worker return executable.getFirstLinkedShaderStageType() == ShaderType::TessControl;
781*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT:
782*8975f5c5SAndroid Build Coastguard Worker return executable.getFirstLinkedShaderStageType() == ShaderType::TessEvaluation;
783*8975f5c5SAndroid Build Coastguard Worker case GL_IS_PER_PATCH_EXT:
784*8975f5c5SAndroid Build Coastguard Worker return variable.isPatch();
785*8975f5c5SAndroid Build Coastguard Worker
786*8975f5c5SAndroid Build Coastguard Worker default:
787*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
788*8975f5c5SAndroid Build Coastguard Worker return GL_INVALID_VALUE;
789*8975f5c5SAndroid Build Coastguard Worker }
790*8975f5c5SAndroid Build Coastguard Worker }
791*8975f5c5SAndroid Build Coastguard Worker
GetOutputResourceProperty(const Program * program,GLuint index,const GLenum prop)792*8975f5c5SAndroid Build Coastguard Worker GLint GetOutputResourceProperty(const Program *program, GLuint index, const GLenum prop)
793*8975f5c5SAndroid Build Coastguard Worker {
794*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
795*8975f5c5SAndroid Build Coastguard Worker const ProgramOutput &outputVariable = executable.getOutputResource(index);
796*8975f5c5SAndroid Build Coastguard Worker
797*8975f5c5SAndroid Build Coastguard Worker switch (prop)
798*8975f5c5SAndroid Build Coastguard Worker {
799*8975f5c5SAndroid Build Coastguard Worker case GL_TYPE:
800*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(outputVariable.pod.type);
801*8975f5c5SAndroid Build Coastguard Worker case GL_ARRAY_SIZE:
802*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(outputVariable.pod.basicTypeElementCount);
803*8975f5c5SAndroid Build Coastguard Worker
804*8975f5c5SAndroid Build Coastguard Worker case GL_NAME_LENGTH:
805*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getOutputResourceName(index).size() + 1u);
806*8975f5c5SAndroid Build Coastguard Worker
807*8975f5c5SAndroid Build Coastguard Worker case GL_LOCATION:
808*8975f5c5SAndroid Build Coastguard Worker return outputVariable.pod.location;
809*8975f5c5SAndroid Build Coastguard Worker
810*8975f5c5SAndroid Build Coastguard Worker case GL_LOCATION_INDEX_EXT:
811*8975f5c5SAndroid Build Coastguard Worker // EXT_blend_func_extended
812*8975f5c5SAndroid Build Coastguard Worker if (executable.getLastLinkedShaderStageType() == gl::ShaderType::Fragment)
813*8975f5c5SAndroid Build Coastguard Worker {
814*8975f5c5SAndroid Build Coastguard Worker return executable.getFragDataIndex(outputVariable.name);
815*8975f5c5SAndroid Build Coastguard Worker }
816*8975f5c5SAndroid Build Coastguard Worker return GL_INVALID_INDEX;
817*8975f5c5SAndroid Build Coastguard Worker
818*8975f5c5SAndroid Build Coastguard Worker // The set of active user-defined outputs from the final shader stage in this program. If
819*8975f5c5SAndroid Build Coastguard Worker // the final stage is a Fragment Shader, then this represents the fragment outputs that get
820*8975f5c5SAndroid Build Coastguard Worker // written to individual color buffers. If the program only contains a Compute Shader, then
821*8975f5c5SAndroid Build Coastguard Worker // there are no user-defined outputs.
822*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_VERTEX_SHADER:
823*8975f5c5SAndroid Build Coastguard Worker return executable.getLastLinkedShaderStageType() == ShaderType::Vertex;
824*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_FRAGMENT_SHADER:
825*8975f5c5SAndroid Build Coastguard Worker return executable.getLastLinkedShaderStageType() == ShaderType::Fragment;
826*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_COMPUTE_SHADER:
827*8975f5c5SAndroid Build Coastguard Worker return executable.getLastLinkedShaderStageType() == ShaderType::Compute;
828*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
829*8975f5c5SAndroid Build Coastguard Worker return executable.getLastLinkedShaderStageType() == ShaderType::Geometry;
830*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT:
831*8975f5c5SAndroid Build Coastguard Worker return executable.getLastLinkedShaderStageType() == ShaderType::TessControl;
832*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT:
833*8975f5c5SAndroid Build Coastguard Worker return executable.getLastLinkedShaderStageType() == ShaderType::TessEvaluation;
834*8975f5c5SAndroid Build Coastguard Worker case GL_IS_PER_PATCH_EXT:
835*8975f5c5SAndroid Build Coastguard Worker return outputVariable.pod.isPatch;
836*8975f5c5SAndroid Build Coastguard Worker
837*8975f5c5SAndroid Build Coastguard Worker default:
838*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
839*8975f5c5SAndroid Build Coastguard Worker return GL_INVALID_VALUE;
840*8975f5c5SAndroid Build Coastguard Worker }
841*8975f5c5SAndroid Build Coastguard Worker }
842*8975f5c5SAndroid Build Coastguard Worker
GetTransformFeedbackVaryingResourceProperty(const Program * program,GLuint index,const GLenum prop)843*8975f5c5SAndroid Build Coastguard Worker GLint GetTransformFeedbackVaryingResourceProperty(const Program *program,
844*8975f5c5SAndroid Build Coastguard Worker GLuint index,
845*8975f5c5SAndroid Build Coastguard Worker const GLenum prop)
846*8975f5c5SAndroid Build Coastguard Worker {
847*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
848*8975f5c5SAndroid Build Coastguard Worker const TransformFeedbackVarying &tfVariable =
849*8975f5c5SAndroid Build Coastguard Worker executable.getTransformFeedbackVaryingResource(index);
850*8975f5c5SAndroid Build Coastguard Worker switch (prop)
851*8975f5c5SAndroid Build Coastguard Worker {
852*8975f5c5SAndroid Build Coastguard Worker case GL_TYPE:
853*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(tfVariable.type);
854*8975f5c5SAndroid Build Coastguard Worker
855*8975f5c5SAndroid Build Coastguard Worker case GL_ARRAY_SIZE:
856*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(tfVariable.size());
857*8975f5c5SAndroid Build Coastguard Worker
858*8975f5c5SAndroid Build Coastguard Worker case GL_NAME_LENGTH:
859*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(tfVariable.nameWithArrayIndex().size() + 1);
860*8975f5c5SAndroid Build Coastguard Worker
861*8975f5c5SAndroid Build Coastguard Worker default:
862*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
863*8975f5c5SAndroid Build Coastguard Worker return GL_INVALID_VALUE;
864*8975f5c5SAndroid Build Coastguard Worker }
865*8975f5c5SAndroid Build Coastguard Worker }
866*8975f5c5SAndroid Build Coastguard Worker
QueryProgramInterfaceActiveResources(const Program * program,GLenum programInterface)867*8975f5c5SAndroid Build Coastguard Worker GLint QueryProgramInterfaceActiveResources(const Program *program, GLenum programInterface)
868*8975f5c5SAndroid Build Coastguard Worker {
869*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
870*8975f5c5SAndroid Build Coastguard Worker switch (programInterface)
871*8975f5c5SAndroid Build Coastguard Worker {
872*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_INPUT:
873*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getProgramInputs().size());
874*8975f5c5SAndroid Build Coastguard Worker
875*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_OUTPUT:
876*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getOutputVariables().size());
877*8975f5c5SAndroid Build Coastguard Worker
878*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM:
879*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getUniforms().size());
880*8975f5c5SAndroid Build Coastguard Worker
881*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK:
882*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getUniformBlocks().size());
883*8975f5c5SAndroid Build Coastguard Worker
884*8975f5c5SAndroid Build Coastguard Worker case GL_ATOMIC_COUNTER_BUFFER:
885*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getAtomicCounterBuffers().size());
886*8975f5c5SAndroid Build Coastguard Worker
887*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_VARIABLE:
888*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getBufferVariables().size());
889*8975f5c5SAndroid Build Coastguard Worker
890*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BLOCK:
891*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getShaderStorageBlocks().size());
892*8975f5c5SAndroid Build Coastguard Worker
893*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_VARYING:
894*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getLinkedTransformFeedbackVaryings().size());
895*8975f5c5SAndroid Build Coastguard Worker
896*8975f5c5SAndroid Build Coastguard Worker default:
897*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
898*8975f5c5SAndroid Build Coastguard Worker return 0;
899*8975f5c5SAndroid Build Coastguard Worker }
900*8975f5c5SAndroid Build Coastguard Worker }
901*8975f5c5SAndroid Build Coastguard Worker
902*8975f5c5SAndroid Build Coastguard Worker template <typename T, typename M>
FindMaxSize(const std::vector<T> & resources,M member)903*8975f5c5SAndroid Build Coastguard Worker GLint FindMaxSize(const std::vector<T> &resources, M member)
904*8975f5c5SAndroid Build Coastguard Worker {
905*8975f5c5SAndroid Build Coastguard Worker GLint max = 0;
906*8975f5c5SAndroid Build Coastguard Worker for (const T &resource : resources)
907*8975f5c5SAndroid Build Coastguard Worker {
908*8975f5c5SAndroid Build Coastguard Worker max = std::max(max, clampCast<GLint>((resource.*member).size()));
909*8975f5c5SAndroid Build Coastguard Worker }
910*8975f5c5SAndroid Build Coastguard Worker return max;
911*8975f5c5SAndroid Build Coastguard Worker }
912*8975f5c5SAndroid Build Coastguard Worker
FindMaxNameLength(const std::vector<std::string> & names)913*8975f5c5SAndroid Build Coastguard Worker GLint FindMaxNameLength(const std::vector<std::string> &names)
914*8975f5c5SAndroid Build Coastguard Worker {
915*8975f5c5SAndroid Build Coastguard Worker GLint max = 0;
916*8975f5c5SAndroid Build Coastguard Worker for (const std::string &name : names)
917*8975f5c5SAndroid Build Coastguard Worker {
918*8975f5c5SAndroid Build Coastguard Worker max = std::max(max, clampCast<GLint>(name.size()));
919*8975f5c5SAndroid Build Coastguard Worker }
920*8975f5c5SAndroid Build Coastguard Worker return max;
921*8975f5c5SAndroid Build Coastguard Worker }
922*8975f5c5SAndroid Build Coastguard Worker
QueryProgramInterfaceMaxNameLength(const Program * program,GLenum programInterface)923*8975f5c5SAndroid Build Coastguard Worker GLint QueryProgramInterfaceMaxNameLength(const Program *program, GLenum programInterface)
924*8975f5c5SAndroid Build Coastguard Worker {
925*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
926*8975f5c5SAndroid Build Coastguard Worker
927*8975f5c5SAndroid Build Coastguard Worker GLint maxNameLength = 0;
928*8975f5c5SAndroid Build Coastguard Worker switch (programInterface)
929*8975f5c5SAndroid Build Coastguard Worker {
930*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_INPUT:
931*8975f5c5SAndroid Build Coastguard Worker maxNameLength = executable.getInputResourceMaxNameSize();
932*8975f5c5SAndroid Build Coastguard Worker break;
933*8975f5c5SAndroid Build Coastguard Worker
934*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_OUTPUT:
935*8975f5c5SAndroid Build Coastguard Worker maxNameLength = executable.getOutputResourceMaxNameSize();
936*8975f5c5SAndroid Build Coastguard Worker break;
937*8975f5c5SAndroid Build Coastguard Worker
938*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM:
939*8975f5c5SAndroid Build Coastguard Worker maxNameLength = FindMaxNameLength(executable.getUniformNames());
940*8975f5c5SAndroid Build Coastguard Worker break;
941*8975f5c5SAndroid Build Coastguard Worker
942*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK:
943*8975f5c5SAndroid Build Coastguard Worker return executable.getActiveUniformBlockMaxNameLength();
944*8975f5c5SAndroid Build Coastguard Worker
945*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_VARIABLE:
946*8975f5c5SAndroid Build Coastguard Worker maxNameLength = FindMaxSize(executable.getBufferVariables(), &BufferVariable::name);
947*8975f5c5SAndroid Build Coastguard Worker break;
948*8975f5c5SAndroid Build Coastguard Worker
949*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BLOCK:
950*8975f5c5SAndroid Build Coastguard Worker return executable.getActiveShaderStorageBlockMaxNameLength();
951*8975f5c5SAndroid Build Coastguard Worker
952*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_VARYING:
953*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getTransformFeedbackVaryingMaxLength());
954*8975f5c5SAndroid Build Coastguard Worker
955*8975f5c5SAndroid Build Coastguard Worker default:
956*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
957*8975f5c5SAndroid Build Coastguard Worker return 0;
958*8975f5c5SAndroid Build Coastguard Worker }
959*8975f5c5SAndroid Build Coastguard Worker // This length includes an extra character for the null terminator.
960*8975f5c5SAndroid Build Coastguard Worker return (maxNameLength == 0 ? 0 : maxNameLength + 1);
961*8975f5c5SAndroid Build Coastguard Worker }
962*8975f5c5SAndroid Build Coastguard Worker
QueryProgramInterfaceMaxNumActiveVariables(const Program * program,GLenum programInterface)963*8975f5c5SAndroid Build Coastguard Worker GLint QueryProgramInterfaceMaxNumActiveVariables(const Program *program, GLenum programInterface)
964*8975f5c5SAndroid Build Coastguard Worker {
965*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
966*8975f5c5SAndroid Build Coastguard Worker
967*8975f5c5SAndroid Build Coastguard Worker switch (programInterface)
968*8975f5c5SAndroid Build Coastguard Worker {
969*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK:
970*8975f5c5SAndroid Build Coastguard Worker return FindMaxSize(executable.getUniformBlocks(), &InterfaceBlock::memberIndexes);
971*8975f5c5SAndroid Build Coastguard Worker case GL_ATOMIC_COUNTER_BUFFER:
972*8975f5c5SAndroid Build Coastguard Worker return FindMaxSize(executable.getAtomicCounterBuffers(),
973*8975f5c5SAndroid Build Coastguard Worker &AtomicCounterBuffer::memberIndexes);
974*8975f5c5SAndroid Build Coastguard Worker
975*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BLOCK:
976*8975f5c5SAndroid Build Coastguard Worker return FindMaxSize(executable.getShaderStorageBlocks(), &InterfaceBlock::memberIndexes);
977*8975f5c5SAndroid Build Coastguard Worker
978*8975f5c5SAndroid Build Coastguard Worker default:
979*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
980*8975f5c5SAndroid Build Coastguard Worker return 0;
981*8975f5c5SAndroid Build Coastguard Worker }
982*8975f5c5SAndroid Build Coastguard Worker }
983*8975f5c5SAndroid Build Coastguard Worker
GetUniformPropertyEnum(GLenum prop)984*8975f5c5SAndroid Build Coastguard Worker GLenum GetUniformPropertyEnum(GLenum prop)
985*8975f5c5SAndroid Build Coastguard Worker {
986*8975f5c5SAndroid Build Coastguard Worker switch (prop)
987*8975f5c5SAndroid Build Coastguard Worker {
988*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_TYPE:
989*8975f5c5SAndroid Build Coastguard Worker return GL_TYPE;
990*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_SIZE:
991*8975f5c5SAndroid Build Coastguard Worker return GL_ARRAY_SIZE;
992*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_NAME_LENGTH:
993*8975f5c5SAndroid Build Coastguard Worker return GL_NAME_LENGTH;
994*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK_INDEX:
995*8975f5c5SAndroid Build Coastguard Worker return GL_BLOCK_INDEX;
996*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_OFFSET:
997*8975f5c5SAndroid Build Coastguard Worker return GL_OFFSET;
998*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_ARRAY_STRIDE:
999*8975f5c5SAndroid Build Coastguard Worker return GL_ARRAY_STRIDE;
1000*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_MATRIX_STRIDE:
1001*8975f5c5SAndroid Build Coastguard Worker return GL_MATRIX_STRIDE;
1002*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_IS_ROW_MAJOR:
1003*8975f5c5SAndroid Build Coastguard Worker return GL_IS_ROW_MAJOR;
1004*8975f5c5SAndroid Build Coastguard Worker
1005*8975f5c5SAndroid Build Coastguard Worker default:
1006*8975f5c5SAndroid Build Coastguard Worker return prop;
1007*8975f5c5SAndroid Build Coastguard Worker }
1008*8975f5c5SAndroid Build Coastguard Worker }
1009*8975f5c5SAndroid Build Coastguard Worker
GetUniformBlockPropertyEnum(GLenum prop)1010*8975f5c5SAndroid Build Coastguard Worker GLenum GetUniformBlockPropertyEnum(GLenum prop)
1011*8975f5c5SAndroid Build Coastguard Worker {
1012*8975f5c5SAndroid Build Coastguard Worker switch (prop)
1013*8975f5c5SAndroid Build Coastguard Worker {
1014*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK_BINDING:
1015*8975f5c5SAndroid Build Coastguard Worker return GL_BUFFER_BINDING;
1016*8975f5c5SAndroid Build Coastguard Worker
1017*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK_DATA_SIZE:
1018*8975f5c5SAndroid Build Coastguard Worker return GL_BUFFER_DATA_SIZE;
1019*8975f5c5SAndroid Build Coastguard Worker
1020*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK_NAME_LENGTH:
1021*8975f5c5SAndroid Build Coastguard Worker return GL_NAME_LENGTH;
1022*8975f5c5SAndroid Build Coastguard Worker
1023*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
1024*8975f5c5SAndroid Build Coastguard Worker return GL_NUM_ACTIVE_VARIABLES;
1025*8975f5c5SAndroid Build Coastguard Worker
1026*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
1027*8975f5c5SAndroid Build Coastguard Worker return GL_ACTIVE_VARIABLES;
1028*8975f5c5SAndroid Build Coastguard Worker
1029*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
1030*8975f5c5SAndroid Build Coastguard Worker return GL_REFERENCED_BY_VERTEX_SHADER;
1031*8975f5c5SAndroid Build Coastguard Worker
1032*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
1033*8975f5c5SAndroid Build Coastguard Worker return GL_REFERENCED_BY_FRAGMENT_SHADER;
1034*8975f5c5SAndroid Build Coastguard Worker
1035*8975f5c5SAndroid Build Coastguard Worker default:
1036*8975f5c5SAndroid Build Coastguard Worker return prop;
1037*8975f5c5SAndroid Build Coastguard Worker }
1038*8975f5c5SAndroid Build Coastguard Worker }
1039*8975f5c5SAndroid Build Coastguard Worker
1040*8975f5c5SAndroid Build Coastguard Worker template <typename ShaderVariableT>
GetShaderVariableBufferResourceProperty(const ShaderVariableT & buffer,GLenum pname,GLint * params,GLsizei bufSize,GLsizei * outputPosition)1041*8975f5c5SAndroid Build Coastguard Worker void GetShaderVariableBufferResourceProperty(const ShaderVariableT &buffer,
1042*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1043*8975f5c5SAndroid Build Coastguard Worker GLint *params,
1044*8975f5c5SAndroid Build Coastguard Worker GLsizei bufSize,
1045*8975f5c5SAndroid Build Coastguard Worker GLsizei *outputPosition)
1046*8975f5c5SAndroid Build Coastguard Worker
1047*8975f5c5SAndroid Build Coastguard Worker {
1048*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1049*8975f5c5SAndroid Build Coastguard Worker {
1050*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_DATA_SIZE:
1051*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = clampCast<GLint>(buffer.pod.dataSize);
1052*8975f5c5SAndroid Build Coastguard Worker break;
1053*8975f5c5SAndroid Build Coastguard Worker case GL_NUM_ACTIVE_VARIABLES:
1054*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = buffer.numActiveVariables();
1055*8975f5c5SAndroid Build Coastguard Worker break;
1056*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_VARIABLES:
1057*8975f5c5SAndroid Build Coastguard Worker for (size_t memberIndex = 0;
1058*8975f5c5SAndroid Build Coastguard Worker memberIndex < buffer.memberIndexes.size() && *outputPosition < bufSize;
1059*8975f5c5SAndroid Build Coastguard Worker ++memberIndex)
1060*8975f5c5SAndroid Build Coastguard Worker {
1061*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = clampCast<GLint>(buffer.memberIndexes[memberIndex]);
1062*8975f5c5SAndroid Build Coastguard Worker }
1063*8975f5c5SAndroid Build Coastguard Worker break;
1064*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_VERTEX_SHADER:
1065*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = static_cast<GLint>(buffer.isActive(ShaderType::Vertex));
1066*8975f5c5SAndroid Build Coastguard Worker break;
1067*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_FRAGMENT_SHADER:
1068*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = static_cast<GLint>(buffer.isActive(ShaderType::Fragment));
1069*8975f5c5SAndroid Build Coastguard Worker break;
1070*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_COMPUTE_SHADER:
1071*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = static_cast<GLint>(buffer.isActive(ShaderType::Compute));
1072*8975f5c5SAndroid Build Coastguard Worker break;
1073*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
1074*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = static_cast<GLint>(buffer.isActive(ShaderType::Geometry));
1075*8975f5c5SAndroid Build Coastguard Worker break;
1076*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT:
1077*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] =
1078*8975f5c5SAndroid Build Coastguard Worker static_cast<GLint>(buffer.isActive(ShaderType::TessControl));
1079*8975f5c5SAndroid Build Coastguard Worker break;
1080*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT:
1081*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] =
1082*8975f5c5SAndroid Build Coastguard Worker static_cast<GLint>(buffer.isActive(ShaderType::TessEvaluation));
1083*8975f5c5SAndroid Build Coastguard Worker break;
1084*8975f5c5SAndroid Build Coastguard Worker default:
1085*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1086*8975f5c5SAndroid Build Coastguard Worker break;
1087*8975f5c5SAndroid Build Coastguard Worker }
1088*8975f5c5SAndroid Build Coastguard Worker }
1089*8975f5c5SAndroid Build Coastguard Worker
GetInterfaceBlockResourceProperty(const InterfaceBlock & block,GLenum pname,GLint * params,GLsizei bufSize,GLsizei * outputPosition)1090*8975f5c5SAndroid Build Coastguard Worker void GetInterfaceBlockResourceProperty(const InterfaceBlock &block,
1091*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1092*8975f5c5SAndroid Build Coastguard Worker GLint *params,
1093*8975f5c5SAndroid Build Coastguard Worker GLsizei bufSize,
1094*8975f5c5SAndroid Build Coastguard Worker GLsizei *outputPosition)
1095*8975f5c5SAndroid Build Coastguard Worker {
1096*8975f5c5SAndroid Build Coastguard Worker if (pname == GL_NAME_LENGTH)
1097*8975f5c5SAndroid Build Coastguard Worker {
1098*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = clampCast<GLint>(block.nameWithArrayIndex().size() + 1);
1099*8975f5c5SAndroid Build Coastguard Worker return;
1100*8975f5c5SAndroid Build Coastguard Worker }
1101*8975f5c5SAndroid Build Coastguard Worker GetShaderVariableBufferResourceProperty(block, pname, params, bufSize, outputPosition);
1102*8975f5c5SAndroid Build Coastguard Worker }
1103*8975f5c5SAndroid Build Coastguard Worker
GetUniformBlockResourceProperty(const Program * program,GLuint blockIndex,GLenum pname,GLint * params,GLsizei bufSize,GLsizei * outputPosition)1104*8975f5c5SAndroid Build Coastguard Worker void GetUniformBlockResourceProperty(const Program *program,
1105*8975f5c5SAndroid Build Coastguard Worker GLuint blockIndex,
1106*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1107*8975f5c5SAndroid Build Coastguard Worker GLint *params,
1108*8975f5c5SAndroid Build Coastguard Worker GLsizei bufSize,
1109*8975f5c5SAndroid Build Coastguard Worker GLsizei *outputPosition)
1110*8975f5c5SAndroid Build Coastguard Worker
1111*8975f5c5SAndroid Build Coastguard Worker {
1112*8975f5c5SAndroid Build Coastguard Worker ASSERT(*outputPosition < bufSize);
1113*8975f5c5SAndroid Build Coastguard Worker
1114*8975f5c5SAndroid Build Coastguard Worker if (pname == GL_BUFFER_BINDING)
1115*8975f5c5SAndroid Build Coastguard Worker {
1116*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = program->getExecutable().getUniformBlockBinding(blockIndex);
1117*8975f5c5SAndroid Build Coastguard Worker return;
1118*8975f5c5SAndroid Build Coastguard Worker }
1119*8975f5c5SAndroid Build Coastguard Worker
1120*8975f5c5SAndroid Build Coastguard Worker const auto &block = program->getExecutable().getUniformBlockByIndex(blockIndex);
1121*8975f5c5SAndroid Build Coastguard Worker GetInterfaceBlockResourceProperty(block, pname, params, bufSize, outputPosition);
1122*8975f5c5SAndroid Build Coastguard Worker }
1123*8975f5c5SAndroid Build Coastguard Worker
GetShaderStorageBlockResourceProperty(const Program * program,GLuint blockIndex,GLenum pname,GLint * params,GLsizei bufSize,GLsizei * outputPosition)1124*8975f5c5SAndroid Build Coastguard Worker void GetShaderStorageBlockResourceProperty(const Program *program,
1125*8975f5c5SAndroid Build Coastguard Worker GLuint blockIndex,
1126*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1127*8975f5c5SAndroid Build Coastguard Worker GLint *params,
1128*8975f5c5SAndroid Build Coastguard Worker GLsizei bufSize,
1129*8975f5c5SAndroid Build Coastguard Worker GLsizei *outputPosition)
1130*8975f5c5SAndroid Build Coastguard Worker
1131*8975f5c5SAndroid Build Coastguard Worker {
1132*8975f5c5SAndroid Build Coastguard Worker ASSERT(*outputPosition < bufSize);
1133*8975f5c5SAndroid Build Coastguard Worker
1134*8975f5c5SAndroid Build Coastguard Worker if (pname == GL_BUFFER_BINDING)
1135*8975f5c5SAndroid Build Coastguard Worker {
1136*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] =
1137*8975f5c5SAndroid Build Coastguard Worker program->getExecutable().getShaderStorageBlockBinding(blockIndex);
1138*8975f5c5SAndroid Build Coastguard Worker return;
1139*8975f5c5SAndroid Build Coastguard Worker }
1140*8975f5c5SAndroid Build Coastguard Worker
1141*8975f5c5SAndroid Build Coastguard Worker const auto &block = program->getExecutable().getShaderStorageBlockByIndex(blockIndex);
1142*8975f5c5SAndroid Build Coastguard Worker GetInterfaceBlockResourceProperty(block, pname, params, bufSize, outputPosition);
1143*8975f5c5SAndroid Build Coastguard Worker }
1144*8975f5c5SAndroid Build Coastguard Worker
GetAtomicCounterBufferResourceProperty(const Program * program,GLuint index,GLenum pname,GLint * params,GLsizei bufSize,GLsizei * outputPosition)1145*8975f5c5SAndroid Build Coastguard Worker void GetAtomicCounterBufferResourceProperty(const Program *program,
1146*8975f5c5SAndroid Build Coastguard Worker GLuint index,
1147*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1148*8975f5c5SAndroid Build Coastguard Worker GLint *params,
1149*8975f5c5SAndroid Build Coastguard Worker GLsizei bufSize,
1150*8975f5c5SAndroid Build Coastguard Worker GLsizei *outputPosition)
1151*8975f5c5SAndroid Build Coastguard Worker
1152*8975f5c5SAndroid Build Coastguard Worker {
1153*8975f5c5SAndroid Build Coastguard Worker ASSERT(*outputPosition < bufSize);
1154*8975f5c5SAndroid Build Coastguard Worker
1155*8975f5c5SAndroid Build Coastguard Worker if (pname == GL_BUFFER_BINDING)
1156*8975f5c5SAndroid Build Coastguard Worker {
1157*8975f5c5SAndroid Build Coastguard Worker params[(*outputPosition)++] = program->getExecutable().getAtomicCounterBufferBinding(index);
1158*8975f5c5SAndroid Build Coastguard Worker return;
1159*8975f5c5SAndroid Build Coastguard Worker }
1160*8975f5c5SAndroid Build Coastguard Worker
1161*8975f5c5SAndroid Build Coastguard Worker const auto &buffer = program->getExecutable().getAtomicCounterBuffers()[index];
1162*8975f5c5SAndroid Build Coastguard Worker GetShaderVariableBufferResourceProperty(buffer, pname, params, bufSize, outputPosition);
1163*8975f5c5SAndroid Build Coastguard Worker }
1164*8975f5c5SAndroid Build Coastguard Worker
IsTextureEnvEnumParameter(TextureEnvParameter pname)1165*8975f5c5SAndroid Build Coastguard Worker bool IsTextureEnvEnumParameter(TextureEnvParameter pname)
1166*8975f5c5SAndroid Build Coastguard Worker {
1167*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1168*8975f5c5SAndroid Build Coastguard Worker {
1169*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Mode:
1170*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::CombineRgb:
1171*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::CombineAlpha:
1172*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src0Rgb:
1173*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src1Rgb:
1174*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src2Rgb:
1175*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src0Alpha:
1176*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src1Alpha:
1177*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src2Alpha:
1178*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op0Rgb:
1179*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op1Rgb:
1180*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op2Rgb:
1181*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op0Alpha:
1182*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op1Alpha:
1183*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op2Alpha:
1184*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::PointCoordReplace:
1185*8975f5c5SAndroid Build Coastguard Worker return true;
1186*8975f5c5SAndroid Build Coastguard Worker default:
1187*8975f5c5SAndroid Build Coastguard Worker return false;
1188*8975f5c5SAndroid Build Coastguard Worker }
1189*8975f5c5SAndroid Build Coastguard Worker }
1190*8975f5c5SAndroid Build Coastguard Worker
GetShaderProgramId(ProgramPipeline * programPipeline,ShaderType shaderType,GLint * params)1191*8975f5c5SAndroid Build Coastguard Worker void GetShaderProgramId(ProgramPipeline *programPipeline, ShaderType shaderType, GLint *params)
1192*8975f5c5SAndroid Build Coastguard Worker {
1193*8975f5c5SAndroid Build Coastguard Worker ASSERT(params);
1194*8975f5c5SAndroid Build Coastguard Worker
1195*8975f5c5SAndroid Build Coastguard Worker *params = 0;
1196*8975f5c5SAndroid Build Coastguard Worker if (programPipeline)
1197*8975f5c5SAndroid Build Coastguard Worker {
1198*8975f5c5SAndroid Build Coastguard Worker const Program *program = programPipeline->getShaderProgram(shaderType);
1199*8975f5c5SAndroid Build Coastguard Worker if (program)
1200*8975f5c5SAndroid Build Coastguard Worker {
1201*8975f5c5SAndroid Build Coastguard Worker *params = program->id().value;
1202*8975f5c5SAndroid Build Coastguard Worker }
1203*8975f5c5SAndroid Build Coastguard Worker }
1204*8975f5c5SAndroid Build Coastguard Worker }
1205*8975f5c5SAndroid Build Coastguard Worker
1206*8975f5c5SAndroid Build Coastguard Worker } // namespace
1207*8975f5c5SAndroid Build Coastguard Worker
QueryFramebufferAttachmentParameteriv(const Context * context,const Framebuffer * framebuffer,GLenum attachment,GLenum pname,GLint * params)1208*8975f5c5SAndroid Build Coastguard Worker void QueryFramebufferAttachmentParameteriv(const Context *context,
1209*8975f5c5SAndroid Build Coastguard Worker const Framebuffer *framebuffer,
1210*8975f5c5SAndroid Build Coastguard Worker GLenum attachment,
1211*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1212*8975f5c5SAndroid Build Coastguard Worker GLint *params)
1213*8975f5c5SAndroid Build Coastguard Worker {
1214*8975f5c5SAndroid Build Coastguard Worker ASSERT(framebuffer);
1215*8975f5c5SAndroid Build Coastguard Worker
1216*8975f5c5SAndroid Build Coastguard Worker const FramebufferAttachment *attachmentObject = framebuffer->getAttachment(context, attachment);
1217*8975f5c5SAndroid Build Coastguard Worker
1218*8975f5c5SAndroid Build Coastguard Worker if (attachmentObject == nullptr)
1219*8975f5c5SAndroid Build Coastguard Worker {
1220*8975f5c5SAndroid Build Coastguard Worker // ES 2.0.25 spec pg 127 states that if the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
1221*8975f5c5SAndroid Build Coastguard Worker // is NONE, then querying any other pname will generate INVALID_ENUM.
1222*8975f5c5SAndroid Build Coastguard Worker
1223*8975f5c5SAndroid Build Coastguard Worker // ES 3.0.2 spec pg 235 states that if the attachment type is none,
1224*8975f5c5SAndroid Build Coastguard Worker // GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME will return zero and be an
1225*8975f5c5SAndroid Build Coastguard Worker // INVALID_OPERATION for all other pnames
1226*8975f5c5SAndroid Build Coastguard Worker
1227*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1228*8975f5c5SAndroid Build Coastguard Worker {
1229*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
1230*8975f5c5SAndroid Build Coastguard Worker *params = GL_NONE;
1231*8975f5c5SAndroid Build Coastguard Worker break;
1232*8975f5c5SAndroid Build Coastguard Worker
1233*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
1234*8975f5c5SAndroid Build Coastguard Worker *params = 0;
1235*8975f5c5SAndroid Build Coastguard Worker break;
1236*8975f5c5SAndroid Build Coastguard Worker
1237*8975f5c5SAndroid Build Coastguard Worker default:
1238*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1239*8975f5c5SAndroid Build Coastguard Worker break;
1240*8975f5c5SAndroid Build Coastguard Worker }
1241*8975f5c5SAndroid Build Coastguard Worker
1242*8975f5c5SAndroid Build Coastguard Worker return;
1243*8975f5c5SAndroid Build Coastguard Worker }
1244*8975f5c5SAndroid Build Coastguard Worker
1245*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1246*8975f5c5SAndroid Build Coastguard Worker {
1247*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
1248*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->type();
1249*8975f5c5SAndroid Build Coastguard Worker break;
1250*8975f5c5SAndroid Build Coastguard Worker
1251*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
1252*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->id();
1253*8975f5c5SAndroid Build Coastguard Worker break;
1254*8975f5c5SAndroid Build Coastguard Worker
1255*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
1256*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->mipLevel();
1257*8975f5c5SAndroid Build Coastguard Worker break;
1258*8975f5c5SAndroid Build Coastguard Worker
1259*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
1260*8975f5c5SAndroid Build Coastguard Worker {
1261*8975f5c5SAndroid Build Coastguard Worker TextureTarget face = attachmentObject->cubeMapFace();
1262*8975f5c5SAndroid Build Coastguard Worker if (face != TextureTarget::InvalidEnum)
1263*8975f5c5SAndroid Build Coastguard Worker {
1264*8975f5c5SAndroid Build Coastguard Worker *params = ToGLenum(attachmentObject->cubeMapFace());
1265*8975f5c5SAndroid Build Coastguard Worker }
1266*8975f5c5SAndroid Build Coastguard Worker else
1267*8975f5c5SAndroid Build Coastguard Worker {
1268*8975f5c5SAndroid Build Coastguard Worker // This happens when the attachment isn't a texture cube map face
1269*8975f5c5SAndroid Build Coastguard Worker *params = GL_NONE;
1270*8975f5c5SAndroid Build Coastguard Worker }
1271*8975f5c5SAndroid Build Coastguard Worker }
1272*8975f5c5SAndroid Build Coastguard Worker break;
1273*8975f5c5SAndroid Build Coastguard Worker
1274*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
1275*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getRedSize();
1276*8975f5c5SAndroid Build Coastguard Worker break;
1277*8975f5c5SAndroid Build Coastguard Worker
1278*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
1279*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getGreenSize();
1280*8975f5c5SAndroid Build Coastguard Worker break;
1281*8975f5c5SAndroid Build Coastguard Worker
1282*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
1283*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getBlueSize();
1284*8975f5c5SAndroid Build Coastguard Worker break;
1285*8975f5c5SAndroid Build Coastguard Worker
1286*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
1287*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getAlphaSize();
1288*8975f5c5SAndroid Build Coastguard Worker break;
1289*8975f5c5SAndroid Build Coastguard Worker
1290*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
1291*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getDepthSize();
1292*8975f5c5SAndroid Build Coastguard Worker break;
1293*8975f5c5SAndroid Build Coastguard Worker
1294*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
1295*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getStencilSize();
1296*8975f5c5SAndroid Build Coastguard Worker break;
1297*8975f5c5SAndroid Build Coastguard Worker
1298*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
1299*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getComponentType();
1300*8975f5c5SAndroid Build Coastguard Worker break;
1301*8975f5c5SAndroid Build Coastguard Worker
1302*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
1303*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getColorEncoding();
1304*8975f5c5SAndroid Build Coastguard Worker break;
1305*8975f5c5SAndroid Build Coastguard Worker
1306*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
1307*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->layer();
1308*8975f5c5SAndroid Build Coastguard Worker break;
1309*8975f5c5SAndroid Build Coastguard Worker
1310*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR:
1311*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getNumViews();
1312*8975f5c5SAndroid Build Coastguard Worker break;
1313*8975f5c5SAndroid Build Coastguard Worker
1314*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR:
1315*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getBaseViewIndex();
1316*8975f5c5SAndroid Build Coastguard Worker break;
1317*8975f5c5SAndroid Build Coastguard Worker
1318*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT:
1319*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->isLayered();
1320*8975f5c5SAndroid Build Coastguard Worker break;
1321*8975f5c5SAndroid Build Coastguard Worker
1322*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT:
1323*8975f5c5SAndroid Build Coastguard Worker if (attachmentObject->type() == GL_TEXTURE)
1324*8975f5c5SAndroid Build Coastguard Worker {
1325*8975f5c5SAndroid Build Coastguard Worker *params = attachmentObject->getSamples();
1326*8975f5c5SAndroid Build Coastguard Worker }
1327*8975f5c5SAndroid Build Coastguard Worker else
1328*8975f5c5SAndroid Build Coastguard Worker {
1329*8975f5c5SAndroid Build Coastguard Worker *params = 0;
1330*8975f5c5SAndroid Build Coastguard Worker }
1331*8975f5c5SAndroid Build Coastguard Worker break;
1332*8975f5c5SAndroid Build Coastguard Worker
1333*8975f5c5SAndroid Build Coastguard Worker default:
1334*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1335*8975f5c5SAndroid Build Coastguard Worker break;
1336*8975f5c5SAndroid Build Coastguard Worker }
1337*8975f5c5SAndroid Build Coastguard Worker }
1338*8975f5c5SAndroid Build Coastguard Worker
QueryBufferParameteriv(const Buffer * buffer,GLenum pname,GLint * params)1339*8975f5c5SAndroid Build Coastguard Worker void QueryBufferParameteriv(const Buffer *buffer, GLenum pname, GLint *params)
1340*8975f5c5SAndroid Build Coastguard Worker {
1341*8975f5c5SAndroid Build Coastguard Worker QueryBufferParameterBase(buffer, pname, params);
1342*8975f5c5SAndroid Build Coastguard Worker }
1343*8975f5c5SAndroid Build Coastguard Worker
QueryBufferParameteri64v(const Buffer * buffer,GLenum pname,GLint64 * params)1344*8975f5c5SAndroid Build Coastguard Worker void QueryBufferParameteri64v(const Buffer *buffer, GLenum pname, GLint64 *params)
1345*8975f5c5SAndroid Build Coastguard Worker {
1346*8975f5c5SAndroid Build Coastguard Worker QueryBufferParameterBase(buffer, pname, params);
1347*8975f5c5SAndroid Build Coastguard Worker }
1348*8975f5c5SAndroid Build Coastguard Worker
QueryBufferPointerv(const Buffer * buffer,GLenum pname,void ** params)1349*8975f5c5SAndroid Build Coastguard Worker void QueryBufferPointerv(const Buffer *buffer, GLenum pname, void **params)
1350*8975f5c5SAndroid Build Coastguard Worker {
1351*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1352*8975f5c5SAndroid Build Coastguard Worker {
1353*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_MAP_POINTER:
1354*8975f5c5SAndroid Build Coastguard Worker *params = buffer->getMapPointer();
1355*8975f5c5SAndroid Build Coastguard Worker break;
1356*8975f5c5SAndroid Build Coastguard Worker
1357*8975f5c5SAndroid Build Coastguard Worker default:
1358*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1359*8975f5c5SAndroid Build Coastguard Worker break;
1360*8975f5c5SAndroid Build Coastguard Worker }
1361*8975f5c5SAndroid Build Coastguard Worker }
1362*8975f5c5SAndroid Build Coastguard Worker
QueryProgramiv(Context * context,Program * program,GLenum pname,GLint * params)1363*8975f5c5SAndroid Build Coastguard Worker void QueryProgramiv(Context *context, Program *program, GLenum pname, GLint *params)
1364*8975f5c5SAndroid Build Coastguard Worker {
1365*8975f5c5SAndroid Build Coastguard Worker ASSERT(program != nullptr || pname == GL_COMPLETION_STATUS_KHR);
1366*8975f5c5SAndroid Build Coastguard Worker
1367*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1368*8975f5c5SAndroid Build Coastguard Worker {
1369*8975f5c5SAndroid Build Coastguard Worker case GL_DELETE_STATUS:
1370*8975f5c5SAndroid Build Coastguard Worker *params = program->isFlaggedForDeletion();
1371*8975f5c5SAndroid Build Coastguard Worker return;
1372*8975f5c5SAndroid Build Coastguard Worker case GL_LINK_STATUS:
1373*8975f5c5SAndroid Build Coastguard Worker *params = program->isLinked();
1374*8975f5c5SAndroid Build Coastguard Worker return;
1375*8975f5c5SAndroid Build Coastguard Worker case GL_COMPLETION_STATUS_KHR:
1376*8975f5c5SAndroid Build Coastguard Worker if (context->isContextLost())
1377*8975f5c5SAndroid Build Coastguard Worker {
1378*8975f5c5SAndroid Build Coastguard Worker *params = GL_TRUE;
1379*8975f5c5SAndroid Build Coastguard Worker }
1380*8975f5c5SAndroid Build Coastguard Worker else
1381*8975f5c5SAndroid Build Coastguard Worker {
1382*8975f5c5SAndroid Build Coastguard Worker *params = program->isLinking() ? GL_FALSE : GL_TRUE;
1383*8975f5c5SAndroid Build Coastguard Worker }
1384*8975f5c5SAndroid Build Coastguard Worker return;
1385*8975f5c5SAndroid Build Coastguard Worker case GL_VALIDATE_STATUS:
1386*8975f5c5SAndroid Build Coastguard Worker *params = program->isValidated();
1387*8975f5c5SAndroid Build Coastguard Worker return;
1388*8975f5c5SAndroid Build Coastguard Worker case GL_INFO_LOG_LENGTH:
1389*8975f5c5SAndroid Build Coastguard Worker *params = program->getInfoLogLength();
1390*8975f5c5SAndroid Build Coastguard Worker return;
1391*8975f5c5SAndroid Build Coastguard Worker case GL_ATTACHED_SHADERS:
1392*8975f5c5SAndroid Build Coastguard Worker *params = program->getAttachedShadersCount();
1393*8975f5c5SAndroid Build Coastguard Worker return;
1394*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_ATTRIBUTES:
1395*8975f5c5SAndroid Build Coastguard Worker *params = static_cast<GLint>(program->getExecutable().getProgramInputs().size());
1396*8975f5c5SAndroid Build Coastguard Worker return;
1397*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
1398*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getActiveAttributeMaxLength();
1399*8975f5c5SAndroid Build Coastguard Worker return;
1400*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_UNIFORMS:
1401*8975f5c5SAndroid Build Coastguard Worker *params = static_cast<GLint>(program->getExecutable().getUniforms().size());
1402*8975f5c5SAndroid Build Coastguard Worker return;
1403*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_UNIFORM_MAX_LENGTH:
1404*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getActiveUniformMaxLength();
1405*8975f5c5SAndroid Build Coastguard Worker return;
1406*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_BINARY_READY_ANGLE:
1407*8975f5c5SAndroid Build Coastguard Worker *params = program->isBinaryReady(context);
1408*8975f5c5SAndroid Build Coastguard Worker return;
1409*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_BINARY_LENGTH_OES:
1410*8975f5c5SAndroid Build Coastguard Worker *params = context->getCaps().programBinaryFormats.empty()
1411*8975f5c5SAndroid Build Coastguard Worker ? 0
1412*8975f5c5SAndroid Build Coastguard Worker : program->getBinaryLength(context);
1413*8975f5c5SAndroid Build Coastguard Worker return;
1414*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_UNIFORM_BLOCKS:
1415*8975f5c5SAndroid Build Coastguard Worker *params = static_cast<GLint>(program->getExecutable().getUniformBlocks().size());
1416*8975f5c5SAndroid Build Coastguard Worker return;
1417*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
1418*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getActiveUniformBlockMaxNameLength();
1419*8975f5c5SAndroid Build Coastguard Worker break;
1420*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
1421*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getTransformFeedbackBufferMode();
1422*8975f5c5SAndroid Build Coastguard Worker break;
1423*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_VARYINGS:
1424*8975f5c5SAndroid Build Coastguard Worker *params = clampCast<GLint>(
1425*8975f5c5SAndroid Build Coastguard Worker program->getExecutable().getLinkedTransformFeedbackVaryings().size());
1426*8975f5c5SAndroid Build Coastguard Worker break;
1427*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
1428*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getTransformFeedbackVaryingMaxLength();
1429*8975f5c5SAndroid Build Coastguard Worker break;
1430*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
1431*8975f5c5SAndroid Build Coastguard Worker *params = program->getBinaryRetrievableHint();
1432*8975f5c5SAndroid Build Coastguard Worker break;
1433*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_SEPARABLE:
1434*8975f5c5SAndroid Build Coastguard Worker // From es31cSeparateShaderObjsTests.cpp:
1435*8975f5c5SAndroid Build Coastguard Worker // ProgramParameteri PROGRAM_SEPARABLE
1436*8975f5c5SAndroid Build Coastguard Worker // NOTE: The query for PROGRAM_SEPARABLE must query latched
1437*8975f5c5SAndroid Build Coastguard Worker // state. In other words, the state of the binary after
1438*8975f5c5SAndroid Build Coastguard Worker // it was linked. So in the tests below, the queries
1439*8975f5c5SAndroid Build Coastguard Worker // should return the default state GL_FALSE since the
1440*8975f5c5SAndroid Build Coastguard Worker // program has no linked binary.
1441*8975f5c5SAndroid Build Coastguard Worker *params = program->isSeparable() && program->isLinked();
1442*8975f5c5SAndroid Build Coastguard Worker break;
1443*8975f5c5SAndroid Build Coastguard Worker case GL_COMPUTE_WORK_GROUP_SIZE:
1444*8975f5c5SAndroid Build Coastguard Worker {
1445*8975f5c5SAndroid Build Coastguard Worker const sh::WorkGroupSize &localSize =
1446*8975f5c5SAndroid Build Coastguard Worker program->getExecutable().getComputeShaderLocalSize();
1447*8975f5c5SAndroid Build Coastguard Worker params[0] = localSize[0];
1448*8975f5c5SAndroid Build Coastguard Worker params[1] = localSize[1];
1449*8975f5c5SAndroid Build Coastguard Worker params[2] = localSize[2];
1450*8975f5c5SAndroid Build Coastguard Worker }
1451*8975f5c5SAndroid Build Coastguard Worker break;
1452*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS:
1453*8975f5c5SAndroid Build Coastguard Worker *params = static_cast<GLint>(program->getExecutable().getAtomicCounterBuffers().size());
1454*8975f5c5SAndroid Build Coastguard Worker break;
1455*8975f5c5SAndroid Build Coastguard Worker case GL_GEOMETRY_LINKED_INPUT_TYPE_EXT:
1456*8975f5c5SAndroid Build Coastguard Worker *params = ToGLenum(program->getExecutable().getGeometryShaderInputPrimitiveType());
1457*8975f5c5SAndroid Build Coastguard Worker break;
1458*8975f5c5SAndroid Build Coastguard Worker case GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT:
1459*8975f5c5SAndroid Build Coastguard Worker *params = ToGLenum(program->getExecutable().getGeometryShaderOutputPrimitiveType());
1460*8975f5c5SAndroid Build Coastguard Worker break;
1461*8975f5c5SAndroid Build Coastguard Worker case GL_GEOMETRY_LINKED_VERTICES_OUT_EXT:
1462*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getGeometryShaderMaxVertices();
1463*8975f5c5SAndroid Build Coastguard Worker break;
1464*8975f5c5SAndroid Build Coastguard Worker case GL_GEOMETRY_SHADER_INVOCATIONS_EXT:
1465*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getGeometryShaderInvocations();
1466*8975f5c5SAndroid Build Coastguard Worker break;
1467*8975f5c5SAndroid Build Coastguard Worker case GL_TESS_CONTROL_OUTPUT_VERTICES_EXT:
1468*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getTessControlShaderVertices();
1469*8975f5c5SAndroid Build Coastguard Worker break;
1470*8975f5c5SAndroid Build Coastguard Worker case GL_TESS_GEN_MODE_EXT:
1471*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getTessGenMode();
1472*8975f5c5SAndroid Build Coastguard Worker break;
1473*8975f5c5SAndroid Build Coastguard Worker case GL_TESS_GEN_SPACING_EXT:
1474*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getTessGenSpacing()
1475*8975f5c5SAndroid Build Coastguard Worker ? program->getExecutable().getTessGenSpacing()
1476*8975f5c5SAndroid Build Coastguard Worker : GL_EQUAL;
1477*8975f5c5SAndroid Build Coastguard Worker break;
1478*8975f5c5SAndroid Build Coastguard Worker case GL_TESS_GEN_VERTEX_ORDER:
1479*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getTessGenVertexOrder()
1480*8975f5c5SAndroid Build Coastguard Worker ? program->getExecutable().getTessGenVertexOrder()
1481*8975f5c5SAndroid Build Coastguard Worker : GL_CCW;
1482*8975f5c5SAndroid Build Coastguard Worker break;
1483*8975f5c5SAndroid Build Coastguard Worker case GL_TESS_GEN_POINT_MODE_EXT:
1484*8975f5c5SAndroid Build Coastguard Worker *params = program->getExecutable().getTessGenPointMode() ? GL_TRUE : GL_FALSE;
1485*8975f5c5SAndroid Build Coastguard Worker break;
1486*8975f5c5SAndroid Build Coastguard Worker default:
1487*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1488*8975f5c5SAndroid Build Coastguard Worker break;
1489*8975f5c5SAndroid Build Coastguard Worker }
1490*8975f5c5SAndroid Build Coastguard Worker }
1491*8975f5c5SAndroid Build Coastguard Worker
QueryRenderbufferiv(const Context * context,const Renderbuffer * renderbuffer,GLenum pname,GLint * params)1492*8975f5c5SAndroid Build Coastguard Worker void QueryRenderbufferiv(const Context *context,
1493*8975f5c5SAndroid Build Coastguard Worker const Renderbuffer *renderbuffer,
1494*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1495*8975f5c5SAndroid Build Coastguard Worker GLint *params)
1496*8975f5c5SAndroid Build Coastguard Worker {
1497*8975f5c5SAndroid Build Coastguard Worker ASSERT(renderbuffer != nullptr);
1498*8975f5c5SAndroid Build Coastguard Worker
1499*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1500*8975f5c5SAndroid Build Coastguard Worker {
1501*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_WIDTH:
1502*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getWidth();
1503*8975f5c5SAndroid Build Coastguard Worker break;
1504*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_HEIGHT:
1505*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getHeight();
1506*8975f5c5SAndroid Build Coastguard Worker break;
1507*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_INTERNAL_FORMAT:
1508*8975f5c5SAndroid Build Coastguard Worker // Special case the WebGL 1 DEPTH_STENCIL format.
1509*8975f5c5SAndroid Build Coastguard Worker if (context->isWebGL1() &&
1510*8975f5c5SAndroid Build Coastguard Worker renderbuffer->getFormat().info->internalFormat == GL_DEPTH24_STENCIL8)
1511*8975f5c5SAndroid Build Coastguard Worker {
1512*8975f5c5SAndroid Build Coastguard Worker *params = GL_DEPTH_STENCIL;
1513*8975f5c5SAndroid Build Coastguard Worker }
1514*8975f5c5SAndroid Build Coastguard Worker else
1515*8975f5c5SAndroid Build Coastguard Worker {
1516*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getFormat().info->internalFormat;
1517*8975f5c5SAndroid Build Coastguard Worker }
1518*8975f5c5SAndroid Build Coastguard Worker break;
1519*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_RED_SIZE:
1520*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getRedSize();
1521*8975f5c5SAndroid Build Coastguard Worker break;
1522*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_GREEN_SIZE:
1523*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getGreenSize();
1524*8975f5c5SAndroid Build Coastguard Worker break;
1525*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_BLUE_SIZE:
1526*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getBlueSize();
1527*8975f5c5SAndroid Build Coastguard Worker break;
1528*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_ALPHA_SIZE:
1529*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getAlphaSize();
1530*8975f5c5SAndroid Build Coastguard Worker break;
1531*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_DEPTH_SIZE:
1532*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getDepthSize();
1533*8975f5c5SAndroid Build Coastguard Worker break;
1534*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_STENCIL_SIZE:
1535*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getStencilSize();
1536*8975f5c5SAndroid Build Coastguard Worker break;
1537*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_SAMPLES_ANGLE:
1538*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getState().getSamples();
1539*8975f5c5SAndroid Build Coastguard Worker break;
1540*8975f5c5SAndroid Build Coastguard Worker case GL_MEMORY_SIZE_ANGLE:
1541*8975f5c5SAndroid Build Coastguard Worker *params = renderbuffer->getMemorySize();
1542*8975f5c5SAndroid Build Coastguard Worker break;
1543*8975f5c5SAndroid Build Coastguard Worker case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
1544*8975f5c5SAndroid Build Coastguard Worker *params = static_cast<GLint>(renderbuffer->getImplementationColorReadFormat(context));
1545*8975f5c5SAndroid Build Coastguard Worker break;
1546*8975f5c5SAndroid Build Coastguard Worker case GL_IMPLEMENTATION_COLOR_READ_TYPE:
1547*8975f5c5SAndroid Build Coastguard Worker *params = static_cast<GLint>(renderbuffer->getImplementationColorReadType(context));
1548*8975f5c5SAndroid Build Coastguard Worker break;
1549*8975f5c5SAndroid Build Coastguard Worker case GL_RESOURCE_INITIALIZED_ANGLE:
1550*8975f5c5SAndroid Build Coastguard Worker *params = (renderbuffer->initState(GL_NONE, ImageIndex()) == InitState::Initialized);
1551*8975f5c5SAndroid Build Coastguard Worker break;
1552*8975f5c5SAndroid Build Coastguard Worker default:
1553*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1554*8975f5c5SAndroid Build Coastguard Worker break;
1555*8975f5c5SAndroid Build Coastguard Worker }
1556*8975f5c5SAndroid Build Coastguard Worker }
1557*8975f5c5SAndroid Build Coastguard Worker
QueryShaderiv(const Context * context,Shader * shader,GLenum pname,GLint * params)1558*8975f5c5SAndroid Build Coastguard Worker void QueryShaderiv(const Context *context, Shader *shader, GLenum pname, GLint *params)
1559*8975f5c5SAndroid Build Coastguard Worker {
1560*8975f5c5SAndroid Build Coastguard Worker ASSERT(shader != nullptr || pname == GL_COMPLETION_STATUS_KHR);
1561*8975f5c5SAndroid Build Coastguard Worker
1562*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1563*8975f5c5SAndroid Build Coastguard Worker {
1564*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_TYPE:
1565*8975f5c5SAndroid Build Coastguard Worker *params = static_cast<GLint>(ToGLenum(shader->getType()));
1566*8975f5c5SAndroid Build Coastguard Worker return;
1567*8975f5c5SAndroid Build Coastguard Worker case GL_DELETE_STATUS:
1568*8975f5c5SAndroid Build Coastguard Worker *params = shader->isFlaggedForDeletion();
1569*8975f5c5SAndroid Build Coastguard Worker return;
1570*8975f5c5SAndroid Build Coastguard Worker case GL_COMPILE_STATUS:
1571*8975f5c5SAndroid Build Coastguard Worker *params = shader->isCompiled(context) ? GL_TRUE : GL_FALSE;
1572*8975f5c5SAndroid Build Coastguard Worker return;
1573*8975f5c5SAndroid Build Coastguard Worker case GL_COMPLETION_STATUS_KHR:
1574*8975f5c5SAndroid Build Coastguard Worker if (context->isContextLost())
1575*8975f5c5SAndroid Build Coastguard Worker {
1576*8975f5c5SAndroid Build Coastguard Worker *params = GL_TRUE;
1577*8975f5c5SAndroid Build Coastguard Worker }
1578*8975f5c5SAndroid Build Coastguard Worker else
1579*8975f5c5SAndroid Build Coastguard Worker {
1580*8975f5c5SAndroid Build Coastguard Worker *params = shader->isCompleted() ? GL_TRUE : GL_FALSE;
1581*8975f5c5SAndroid Build Coastguard Worker }
1582*8975f5c5SAndroid Build Coastguard Worker return;
1583*8975f5c5SAndroid Build Coastguard Worker case GL_INFO_LOG_LENGTH:
1584*8975f5c5SAndroid Build Coastguard Worker *params = shader->getInfoLogLength(context);
1585*8975f5c5SAndroid Build Coastguard Worker return;
1586*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_SOURCE_LENGTH:
1587*8975f5c5SAndroid Build Coastguard Worker *params = shader->getSourceLength();
1588*8975f5c5SAndroid Build Coastguard Worker return;
1589*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE:
1590*8975f5c5SAndroid Build Coastguard Worker *params = shader->getTranslatedSourceWithDebugInfoLength(context);
1591*8975f5c5SAndroid Build Coastguard Worker return;
1592*8975f5c5SAndroid Build Coastguard Worker default:
1593*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1594*8975f5c5SAndroid Build Coastguard Worker break;
1595*8975f5c5SAndroid Build Coastguard Worker }
1596*8975f5c5SAndroid Build Coastguard Worker }
1597*8975f5c5SAndroid Build Coastguard Worker
QueryTexLevelParameterfv(const Texture * texture,TextureTarget target,GLint level,GLenum pname,GLfloat * params)1598*8975f5c5SAndroid Build Coastguard Worker void QueryTexLevelParameterfv(const Texture *texture,
1599*8975f5c5SAndroid Build Coastguard Worker TextureTarget target,
1600*8975f5c5SAndroid Build Coastguard Worker GLint level,
1601*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1602*8975f5c5SAndroid Build Coastguard Worker GLfloat *params)
1603*8975f5c5SAndroid Build Coastguard Worker {
1604*8975f5c5SAndroid Build Coastguard Worker QueryTexLevelParameterBase(texture, target, level, pname, params);
1605*8975f5c5SAndroid Build Coastguard Worker }
1606*8975f5c5SAndroid Build Coastguard Worker
QueryTexLevelParameteriv(const Texture * texture,TextureTarget target,GLint level,GLenum pname,GLint * params)1607*8975f5c5SAndroid Build Coastguard Worker void QueryTexLevelParameteriv(const Texture *texture,
1608*8975f5c5SAndroid Build Coastguard Worker TextureTarget target,
1609*8975f5c5SAndroid Build Coastguard Worker GLint level,
1610*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1611*8975f5c5SAndroid Build Coastguard Worker GLint *params)
1612*8975f5c5SAndroid Build Coastguard Worker {
1613*8975f5c5SAndroid Build Coastguard Worker QueryTexLevelParameterBase(texture, target, level, pname, params);
1614*8975f5c5SAndroid Build Coastguard Worker }
1615*8975f5c5SAndroid Build Coastguard Worker
QueryTexParameterfv(const Context * context,const Texture * texture,GLenum pname,GLfloat * params)1616*8975f5c5SAndroid Build Coastguard Worker void QueryTexParameterfv(const Context *context,
1617*8975f5c5SAndroid Build Coastguard Worker const Texture *texture,
1618*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1619*8975f5c5SAndroid Build Coastguard Worker GLfloat *params)
1620*8975f5c5SAndroid Build Coastguard Worker {
1621*8975f5c5SAndroid Build Coastguard Worker QueryTexParameterBase<false, false>(context, texture, pname, params);
1622*8975f5c5SAndroid Build Coastguard Worker }
1623*8975f5c5SAndroid Build Coastguard Worker
QueryTexParameterxv(const Context * context,const Texture * texture,GLenum pname,GLfixed * params)1624*8975f5c5SAndroid Build Coastguard Worker void QueryTexParameterxv(const Context *context,
1625*8975f5c5SAndroid Build Coastguard Worker const Texture *texture,
1626*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1627*8975f5c5SAndroid Build Coastguard Worker GLfixed *params)
1628*8975f5c5SAndroid Build Coastguard Worker {
1629*8975f5c5SAndroid Build Coastguard Worker QueryTexParameterBase<false, true>(context, texture, pname, params);
1630*8975f5c5SAndroid Build Coastguard Worker }
1631*8975f5c5SAndroid Build Coastguard Worker
QueryTexParameteriv(const Context * context,const Texture * texture,GLenum pname,GLint * params)1632*8975f5c5SAndroid Build Coastguard Worker void QueryTexParameteriv(const Context *context,
1633*8975f5c5SAndroid Build Coastguard Worker const Texture *texture,
1634*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1635*8975f5c5SAndroid Build Coastguard Worker GLint *params)
1636*8975f5c5SAndroid Build Coastguard Worker {
1637*8975f5c5SAndroid Build Coastguard Worker QueryTexParameterBase<false, false>(context, texture, pname, params);
1638*8975f5c5SAndroid Build Coastguard Worker }
1639*8975f5c5SAndroid Build Coastguard Worker
QueryTexParameterIiv(const Context * context,const Texture * texture,GLenum pname,GLint * params)1640*8975f5c5SAndroid Build Coastguard Worker void QueryTexParameterIiv(const Context *context,
1641*8975f5c5SAndroid Build Coastguard Worker const Texture *texture,
1642*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1643*8975f5c5SAndroid Build Coastguard Worker GLint *params)
1644*8975f5c5SAndroid Build Coastguard Worker {
1645*8975f5c5SAndroid Build Coastguard Worker QueryTexParameterBase<true, false>(context, texture, pname, params);
1646*8975f5c5SAndroid Build Coastguard Worker }
1647*8975f5c5SAndroid Build Coastguard Worker
QueryTexParameterIuiv(const Context * context,const Texture * texture,GLenum pname,GLuint * params)1648*8975f5c5SAndroid Build Coastguard Worker void QueryTexParameterIuiv(const Context *context,
1649*8975f5c5SAndroid Build Coastguard Worker const Texture *texture,
1650*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1651*8975f5c5SAndroid Build Coastguard Worker GLuint *params)
1652*8975f5c5SAndroid Build Coastguard Worker {
1653*8975f5c5SAndroid Build Coastguard Worker QueryTexParameterBase<true, false>(context, texture, pname, params);
1654*8975f5c5SAndroid Build Coastguard Worker }
1655*8975f5c5SAndroid Build Coastguard Worker
QuerySamplerParameterfv(const Sampler * sampler,GLenum pname,GLfloat * params)1656*8975f5c5SAndroid Build Coastguard Worker void QuerySamplerParameterfv(const Sampler *sampler, GLenum pname, GLfloat *params)
1657*8975f5c5SAndroid Build Coastguard Worker {
1658*8975f5c5SAndroid Build Coastguard Worker QuerySamplerParameterBase<false>(sampler, pname, params);
1659*8975f5c5SAndroid Build Coastguard Worker }
1660*8975f5c5SAndroid Build Coastguard Worker
QuerySamplerParameteriv(const Sampler * sampler,GLenum pname,GLint * params)1661*8975f5c5SAndroid Build Coastguard Worker void QuerySamplerParameteriv(const Sampler *sampler, GLenum pname, GLint *params)
1662*8975f5c5SAndroid Build Coastguard Worker {
1663*8975f5c5SAndroid Build Coastguard Worker QuerySamplerParameterBase<false>(sampler, pname, params);
1664*8975f5c5SAndroid Build Coastguard Worker }
1665*8975f5c5SAndroid Build Coastguard Worker
QuerySamplerParameterIiv(const Sampler * sampler,GLenum pname,GLint * params)1666*8975f5c5SAndroid Build Coastguard Worker void QuerySamplerParameterIiv(const Sampler *sampler, GLenum pname, GLint *params)
1667*8975f5c5SAndroid Build Coastguard Worker {
1668*8975f5c5SAndroid Build Coastguard Worker QuerySamplerParameterBase<true>(sampler, pname, params);
1669*8975f5c5SAndroid Build Coastguard Worker }
1670*8975f5c5SAndroid Build Coastguard Worker
QuerySamplerParameterIuiv(const Sampler * sampler,GLenum pname,GLuint * params)1671*8975f5c5SAndroid Build Coastguard Worker void QuerySamplerParameterIuiv(const Sampler *sampler, GLenum pname, GLuint *params)
1672*8975f5c5SAndroid Build Coastguard Worker {
1673*8975f5c5SAndroid Build Coastguard Worker QuerySamplerParameterBase<true>(sampler, pname, params);
1674*8975f5c5SAndroid Build Coastguard Worker }
1675*8975f5c5SAndroid Build Coastguard Worker
QueryVertexAttribfv(const VertexAttribute & attrib,const VertexBinding & binding,const VertexAttribCurrentValueData & currentValueData,GLenum pname,GLfloat * params)1676*8975f5c5SAndroid Build Coastguard Worker void QueryVertexAttribfv(const VertexAttribute &attrib,
1677*8975f5c5SAndroid Build Coastguard Worker const VertexBinding &binding,
1678*8975f5c5SAndroid Build Coastguard Worker const VertexAttribCurrentValueData ¤tValueData,
1679*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1680*8975f5c5SAndroid Build Coastguard Worker GLfloat *params)
1681*8975f5c5SAndroid Build Coastguard Worker {
1682*8975f5c5SAndroid Build Coastguard Worker QueryVertexAttribBase(attrib, binding, currentValueData.Values.FloatValues, pname, params);
1683*8975f5c5SAndroid Build Coastguard Worker }
1684*8975f5c5SAndroid Build Coastguard Worker
QueryVertexAttribiv(const VertexAttribute & attrib,const VertexBinding & binding,const VertexAttribCurrentValueData & currentValueData,GLenum pname,GLint * params)1685*8975f5c5SAndroid Build Coastguard Worker void QueryVertexAttribiv(const VertexAttribute &attrib,
1686*8975f5c5SAndroid Build Coastguard Worker const VertexBinding &binding,
1687*8975f5c5SAndroid Build Coastguard Worker const VertexAttribCurrentValueData ¤tValueData,
1688*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1689*8975f5c5SAndroid Build Coastguard Worker GLint *params)
1690*8975f5c5SAndroid Build Coastguard Worker {
1691*8975f5c5SAndroid Build Coastguard Worker QueryVertexAttribBase(attrib, binding, currentValueData.Values.FloatValues, pname, params);
1692*8975f5c5SAndroid Build Coastguard Worker }
1693*8975f5c5SAndroid Build Coastguard Worker
QueryVertexAttribPointerv(const VertexAttribute & attrib,GLenum pname,void ** pointer)1694*8975f5c5SAndroid Build Coastguard Worker void QueryVertexAttribPointerv(const VertexAttribute &attrib, GLenum pname, void **pointer)
1695*8975f5c5SAndroid Build Coastguard Worker {
1696*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1697*8975f5c5SAndroid Build Coastguard Worker {
1698*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ATTRIB_ARRAY_POINTER:
1699*8975f5c5SAndroid Build Coastguard Worker *pointer = const_cast<void *>(attrib.pointer);
1700*8975f5c5SAndroid Build Coastguard Worker break;
1701*8975f5c5SAndroid Build Coastguard Worker
1702*8975f5c5SAndroid Build Coastguard Worker default:
1703*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1704*8975f5c5SAndroid Build Coastguard Worker break;
1705*8975f5c5SAndroid Build Coastguard Worker }
1706*8975f5c5SAndroid Build Coastguard Worker }
1707*8975f5c5SAndroid Build Coastguard Worker
QueryVertexAttribIiv(const VertexAttribute & attrib,const VertexBinding & binding,const VertexAttribCurrentValueData & currentValueData,GLenum pname,GLint * params)1708*8975f5c5SAndroid Build Coastguard Worker void QueryVertexAttribIiv(const VertexAttribute &attrib,
1709*8975f5c5SAndroid Build Coastguard Worker const VertexBinding &binding,
1710*8975f5c5SAndroid Build Coastguard Worker const VertexAttribCurrentValueData ¤tValueData,
1711*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1712*8975f5c5SAndroid Build Coastguard Worker GLint *params)
1713*8975f5c5SAndroid Build Coastguard Worker {
1714*8975f5c5SAndroid Build Coastguard Worker QueryVertexAttribBase(attrib, binding, currentValueData.Values.IntValues, pname, params);
1715*8975f5c5SAndroid Build Coastguard Worker }
1716*8975f5c5SAndroid Build Coastguard Worker
QueryVertexAttribIuiv(const VertexAttribute & attrib,const VertexBinding & binding,const VertexAttribCurrentValueData & currentValueData,GLenum pname,GLuint * params)1717*8975f5c5SAndroid Build Coastguard Worker void QueryVertexAttribIuiv(const VertexAttribute &attrib,
1718*8975f5c5SAndroid Build Coastguard Worker const VertexBinding &binding,
1719*8975f5c5SAndroid Build Coastguard Worker const VertexAttribCurrentValueData ¤tValueData,
1720*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1721*8975f5c5SAndroid Build Coastguard Worker GLuint *params)
1722*8975f5c5SAndroid Build Coastguard Worker {
1723*8975f5c5SAndroid Build Coastguard Worker QueryVertexAttribBase(attrib, binding, currentValueData.Values.UnsignedIntValues, pname,
1724*8975f5c5SAndroid Build Coastguard Worker params);
1725*8975f5c5SAndroid Build Coastguard Worker }
1726*8975f5c5SAndroid Build Coastguard Worker
QueryActiveUniformBlockiv(const Program * program,UniformBlockIndex uniformBlockIndex,GLenum pname,GLint * params)1727*8975f5c5SAndroid Build Coastguard Worker void QueryActiveUniformBlockiv(const Program *program,
1728*8975f5c5SAndroid Build Coastguard Worker UniformBlockIndex uniformBlockIndex,
1729*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1730*8975f5c5SAndroid Build Coastguard Worker GLint *params)
1731*8975f5c5SAndroid Build Coastguard Worker {
1732*8975f5c5SAndroid Build Coastguard Worker GLenum prop = GetUniformBlockPropertyEnum(pname);
1733*8975f5c5SAndroid Build Coastguard Worker QueryProgramResourceiv(program, GL_UNIFORM_BLOCK, uniformBlockIndex, 1, &prop,
1734*8975f5c5SAndroid Build Coastguard Worker std::numeric_limits<GLsizei>::max(), nullptr, params);
1735*8975f5c5SAndroid Build Coastguard Worker }
1736*8975f5c5SAndroid Build Coastguard Worker
QueryInternalFormativ(const Context * context,const Texture * texture,GLenum internalformat,const TextureCaps & format,GLenum pname,GLsizei bufSize,GLint * params)1737*8975f5c5SAndroid Build Coastguard Worker void QueryInternalFormativ(const Context *context,
1738*8975f5c5SAndroid Build Coastguard Worker const Texture *texture,
1739*8975f5c5SAndroid Build Coastguard Worker GLenum internalformat,
1740*8975f5c5SAndroid Build Coastguard Worker const TextureCaps &format,
1741*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1742*8975f5c5SAndroid Build Coastguard Worker GLsizei bufSize,
1743*8975f5c5SAndroid Build Coastguard Worker GLint *params)
1744*8975f5c5SAndroid Build Coastguard Worker {
1745*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1746*8975f5c5SAndroid Build Coastguard Worker {
1747*8975f5c5SAndroid Build Coastguard Worker case GL_NUM_SAMPLE_COUNTS:
1748*8975f5c5SAndroid Build Coastguard Worker if (bufSize != 0)
1749*8975f5c5SAndroid Build Coastguard Worker {
1750*8975f5c5SAndroid Build Coastguard Worker *params = clampCast<GLint>(format.sampleCounts.size());
1751*8975f5c5SAndroid Build Coastguard Worker }
1752*8975f5c5SAndroid Build Coastguard Worker break;
1753*8975f5c5SAndroid Build Coastguard Worker
1754*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLES:
1755*8975f5c5SAndroid Build Coastguard Worker {
1756*8975f5c5SAndroid Build Coastguard Worker size_t returnCount = std::min<size_t>(bufSize, format.sampleCounts.size());
1757*8975f5c5SAndroid Build Coastguard Worker auto sampleReverseIt = format.sampleCounts.rbegin();
1758*8975f5c5SAndroid Build Coastguard Worker for (size_t sampleIndex = 0; sampleIndex < returnCount; ++sampleIndex)
1759*8975f5c5SAndroid Build Coastguard Worker {
1760*8975f5c5SAndroid Build Coastguard Worker params[sampleIndex] = *sampleReverseIt++;
1761*8975f5c5SAndroid Build Coastguard Worker }
1762*8975f5c5SAndroid Build Coastguard Worker }
1763*8975f5c5SAndroid Build Coastguard Worker break;
1764*8975f5c5SAndroid Build Coastguard Worker
1765*8975f5c5SAndroid Build Coastguard Worker case GL_NUM_SURFACE_COMPRESSION_FIXED_RATES_EXT:
1766*8975f5c5SAndroid Build Coastguard Worker if (texture != nullptr)
1767*8975f5c5SAndroid Build Coastguard Worker {
1768*8975f5c5SAndroid Build Coastguard Worker *params = texture->getFormatSupportedCompressionRates(context, internalformat,
1769*8975f5c5SAndroid Build Coastguard Worker bufSize, nullptr);
1770*8975f5c5SAndroid Build Coastguard Worker }
1771*8975f5c5SAndroid Build Coastguard Worker break;
1772*8975f5c5SAndroid Build Coastguard Worker
1773*8975f5c5SAndroid Build Coastguard Worker case GL_SURFACE_COMPRESSION_EXT:
1774*8975f5c5SAndroid Build Coastguard Worker if (texture != nullptr)
1775*8975f5c5SAndroid Build Coastguard Worker {
1776*8975f5c5SAndroid Build Coastguard Worker texture->getFormatSupportedCompressionRates(context, internalformat, bufSize,
1777*8975f5c5SAndroid Build Coastguard Worker params);
1778*8975f5c5SAndroid Build Coastguard Worker }
1779*8975f5c5SAndroid Build Coastguard Worker break;
1780*8975f5c5SAndroid Build Coastguard Worker
1781*8975f5c5SAndroid Build Coastguard Worker default:
1782*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1783*8975f5c5SAndroid Build Coastguard Worker break;
1784*8975f5c5SAndroid Build Coastguard Worker }
1785*8975f5c5SAndroid Build Coastguard Worker }
1786*8975f5c5SAndroid Build Coastguard Worker
QueryFramebufferParameteriv(const Framebuffer * framebuffer,GLenum pname,GLint * params)1787*8975f5c5SAndroid Build Coastguard Worker void QueryFramebufferParameteriv(const Framebuffer *framebuffer, GLenum pname, GLint *params)
1788*8975f5c5SAndroid Build Coastguard Worker {
1789*8975f5c5SAndroid Build Coastguard Worker ASSERT(framebuffer);
1790*8975f5c5SAndroid Build Coastguard Worker
1791*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1792*8975f5c5SAndroid Build Coastguard Worker {
1793*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_WIDTH:
1794*8975f5c5SAndroid Build Coastguard Worker *params = framebuffer->getDefaultWidth();
1795*8975f5c5SAndroid Build Coastguard Worker break;
1796*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_HEIGHT:
1797*8975f5c5SAndroid Build Coastguard Worker *params = framebuffer->getDefaultHeight();
1798*8975f5c5SAndroid Build Coastguard Worker break;
1799*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_SAMPLES:
1800*8975f5c5SAndroid Build Coastguard Worker *params = framebuffer->getDefaultSamples();
1801*8975f5c5SAndroid Build Coastguard Worker break;
1802*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
1803*8975f5c5SAndroid Build Coastguard Worker *params = ConvertToGLBoolean(framebuffer->getDefaultFixedSampleLocations());
1804*8975f5c5SAndroid Build Coastguard Worker break;
1805*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT:
1806*8975f5c5SAndroid Build Coastguard Worker *params = framebuffer->getDefaultLayers();
1807*8975f5c5SAndroid Build Coastguard Worker break;
1808*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_FLIP_Y_MESA:
1809*8975f5c5SAndroid Build Coastguard Worker *params = ConvertToGLBoolean(framebuffer->getFlipY());
1810*8975f5c5SAndroid Build Coastguard Worker break;
1811*8975f5c5SAndroid Build Coastguard Worker default:
1812*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1813*8975f5c5SAndroid Build Coastguard Worker break;
1814*8975f5c5SAndroid Build Coastguard Worker }
1815*8975f5c5SAndroid Build Coastguard Worker }
1816*8975f5c5SAndroid Build Coastguard Worker
QuerySynciv(const Context * context,const Sync * sync,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * values)1817*8975f5c5SAndroid Build Coastguard Worker angle::Result QuerySynciv(const Context *context,
1818*8975f5c5SAndroid Build Coastguard Worker const Sync *sync,
1819*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1820*8975f5c5SAndroid Build Coastguard Worker GLsizei bufSize,
1821*8975f5c5SAndroid Build Coastguard Worker GLsizei *length,
1822*8975f5c5SAndroid Build Coastguard Worker GLint *values)
1823*8975f5c5SAndroid Build Coastguard Worker {
1824*8975f5c5SAndroid Build Coastguard Worker ASSERT(sync != nullptr || pname == GL_SYNC_STATUS);
1825*8975f5c5SAndroid Build Coastguard Worker
1826*8975f5c5SAndroid Build Coastguard Worker // All queries return one value, exit early if the buffer can't fit anything.
1827*8975f5c5SAndroid Build Coastguard Worker if (bufSize < 1)
1828*8975f5c5SAndroid Build Coastguard Worker {
1829*8975f5c5SAndroid Build Coastguard Worker if (length != nullptr)
1830*8975f5c5SAndroid Build Coastguard Worker {
1831*8975f5c5SAndroid Build Coastguard Worker *length = 0;
1832*8975f5c5SAndroid Build Coastguard Worker }
1833*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1834*8975f5c5SAndroid Build Coastguard Worker }
1835*8975f5c5SAndroid Build Coastguard Worker
1836*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1837*8975f5c5SAndroid Build Coastguard Worker {
1838*8975f5c5SAndroid Build Coastguard Worker case GL_OBJECT_TYPE:
1839*8975f5c5SAndroid Build Coastguard Worker *values = clampCast<GLint>(GL_SYNC_FENCE);
1840*8975f5c5SAndroid Build Coastguard Worker break;
1841*8975f5c5SAndroid Build Coastguard Worker case GL_SYNC_CONDITION:
1842*8975f5c5SAndroid Build Coastguard Worker *values = clampCast<GLint>(sync->getCondition());
1843*8975f5c5SAndroid Build Coastguard Worker break;
1844*8975f5c5SAndroid Build Coastguard Worker case GL_SYNC_FLAGS:
1845*8975f5c5SAndroid Build Coastguard Worker *values = clampCast<GLint>(sync->getFlags());
1846*8975f5c5SAndroid Build Coastguard Worker break;
1847*8975f5c5SAndroid Build Coastguard Worker case GL_SYNC_STATUS:
1848*8975f5c5SAndroid Build Coastguard Worker if (context->isContextLost())
1849*8975f5c5SAndroid Build Coastguard Worker {
1850*8975f5c5SAndroid Build Coastguard Worker *values = GL_SIGNALED;
1851*8975f5c5SAndroid Build Coastguard Worker }
1852*8975f5c5SAndroid Build Coastguard Worker else
1853*8975f5c5SAndroid Build Coastguard Worker {
1854*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(sync->getStatus(context, values));
1855*8975f5c5SAndroid Build Coastguard Worker }
1856*8975f5c5SAndroid Build Coastguard Worker break;
1857*8975f5c5SAndroid Build Coastguard Worker
1858*8975f5c5SAndroid Build Coastguard Worker default:
1859*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1860*8975f5c5SAndroid Build Coastguard Worker break;
1861*8975f5c5SAndroid Build Coastguard Worker }
1862*8975f5c5SAndroid Build Coastguard Worker
1863*8975f5c5SAndroid Build Coastguard Worker if (length != nullptr)
1864*8975f5c5SAndroid Build Coastguard Worker {
1865*8975f5c5SAndroid Build Coastguard Worker *length = 1;
1866*8975f5c5SAndroid Build Coastguard Worker }
1867*8975f5c5SAndroid Build Coastguard Worker
1868*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1869*8975f5c5SAndroid Build Coastguard Worker }
1870*8975f5c5SAndroid Build Coastguard Worker
SetTexParameterx(Context * context,Texture * texture,GLenum pname,GLfixed param)1871*8975f5c5SAndroid Build Coastguard Worker void SetTexParameterx(Context *context, Texture *texture, GLenum pname, GLfixed param)
1872*8975f5c5SAndroid Build Coastguard Worker {
1873*8975f5c5SAndroid Build Coastguard Worker SetTexParameterBase<false, true>(context, texture, pname, ¶m);
1874*8975f5c5SAndroid Build Coastguard Worker }
1875*8975f5c5SAndroid Build Coastguard Worker
SetTexParameterxv(Context * context,Texture * texture,GLenum pname,const GLfixed * params)1876*8975f5c5SAndroid Build Coastguard Worker void SetTexParameterxv(Context *context, Texture *texture, GLenum pname, const GLfixed *params)
1877*8975f5c5SAndroid Build Coastguard Worker {
1878*8975f5c5SAndroid Build Coastguard Worker SetTexParameterBase<false, true>(context, texture, pname, params);
1879*8975f5c5SAndroid Build Coastguard Worker }
1880*8975f5c5SAndroid Build Coastguard Worker
SetTexParameterf(Context * context,Texture * texture,GLenum pname,GLfloat param)1881*8975f5c5SAndroid Build Coastguard Worker void SetTexParameterf(Context *context, Texture *texture, GLenum pname, GLfloat param)
1882*8975f5c5SAndroid Build Coastguard Worker {
1883*8975f5c5SAndroid Build Coastguard Worker SetTexParameterBase<false, false>(context, texture, pname, ¶m);
1884*8975f5c5SAndroid Build Coastguard Worker }
1885*8975f5c5SAndroid Build Coastguard Worker
SetTexParameterfv(Context * context,Texture * texture,GLenum pname,const GLfloat * params)1886*8975f5c5SAndroid Build Coastguard Worker void SetTexParameterfv(Context *context, Texture *texture, GLenum pname, const GLfloat *params)
1887*8975f5c5SAndroid Build Coastguard Worker {
1888*8975f5c5SAndroid Build Coastguard Worker SetTexParameterBase<false, false>(context, texture, pname, params);
1889*8975f5c5SAndroid Build Coastguard Worker }
1890*8975f5c5SAndroid Build Coastguard Worker
SetTexParameteri(Context * context,Texture * texture,GLenum pname,GLint param)1891*8975f5c5SAndroid Build Coastguard Worker void SetTexParameteri(Context *context, Texture *texture, GLenum pname, GLint param)
1892*8975f5c5SAndroid Build Coastguard Worker {
1893*8975f5c5SAndroid Build Coastguard Worker SetTexParameterBase<false, false>(context, texture, pname, ¶m);
1894*8975f5c5SAndroid Build Coastguard Worker }
1895*8975f5c5SAndroid Build Coastguard Worker
SetTexParameteriv(Context * context,Texture * texture,GLenum pname,const GLint * params)1896*8975f5c5SAndroid Build Coastguard Worker void SetTexParameteriv(Context *context, Texture *texture, GLenum pname, const GLint *params)
1897*8975f5c5SAndroid Build Coastguard Worker {
1898*8975f5c5SAndroid Build Coastguard Worker SetTexParameterBase<false, false>(context, texture, pname, params);
1899*8975f5c5SAndroid Build Coastguard Worker }
1900*8975f5c5SAndroid Build Coastguard Worker
SetTexParameterIiv(Context * context,Texture * texture,GLenum pname,const GLint * params)1901*8975f5c5SAndroid Build Coastguard Worker void SetTexParameterIiv(Context *context, Texture *texture, GLenum pname, const GLint *params)
1902*8975f5c5SAndroid Build Coastguard Worker {
1903*8975f5c5SAndroid Build Coastguard Worker SetTexParameterBase<true, false>(context, texture, pname, params);
1904*8975f5c5SAndroid Build Coastguard Worker }
1905*8975f5c5SAndroid Build Coastguard Worker
SetTexParameterIuiv(Context * context,Texture * texture,GLenum pname,const GLuint * params)1906*8975f5c5SAndroid Build Coastguard Worker void SetTexParameterIuiv(Context *context, Texture *texture, GLenum pname, const GLuint *params)
1907*8975f5c5SAndroid Build Coastguard Worker {
1908*8975f5c5SAndroid Build Coastguard Worker SetTexParameterBase<true, false>(context, texture, pname, params);
1909*8975f5c5SAndroid Build Coastguard Worker }
1910*8975f5c5SAndroid Build Coastguard Worker
SetSamplerParameterf(Context * context,Sampler * sampler,GLenum pname,GLfloat param)1911*8975f5c5SAndroid Build Coastguard Worker void SetSamplerParameterf(Context *context, Sampler *sampler, GLenum pname, GLfloat param)
1912*8975f5c5SAndroid Build Coastguard Worker {
1913*8975f5c5SAndroid Build Coastguard Worker SetSamplerParameterBase<false>(context, sampler, pname, ¶m);
1914*8975f5c5SAndroid Build Coastguard Worker }
1915*8975f5c5SAndroid Build Coastguard Worker
SetSamplerParameterfv(Context * context,Sampler * sampler,GLenum pname,const GLfloat * params)1916*8975f5c5SAndroid Build Coastguard Worker void SetSamplerParameterfv(Context *context, Sampler *sampler, GLenum pname, const GLfloat *params)
1917*8975f5c5SAndroid Build Coastguard Worker {
1918*8975f5c5SAndroid Build Coastguard Worker SetSamplerParameterBase<false>(context, sampler, pname, params);
1919*8975f5c5SAndroid Build Coastguard Worker }
1920*8975f5c5SAndroid Build Coastguard Worker
SetSamplerParameteri(Context * context,Sampler * sampler,GLenum pname,GLint param)1921*8975f5c5SAndroid Build Coastguard Worker void SetSamplerParameteri(Context *context, Sampler *sampler, GLenum pname, GLint param)
1922*8975f5c5SAndroid Build Coastguard Worker {
1923*8975f5c5SAndroid Build Coastguard Worker SetSamplerParameterBase<false>(context, sampler, pname, ¶m);
1924*8975f5c5SAndroid Build Coastguard Worker }
1925*8975f5c5SAndroid Build Coastguard Worker
SetSamplerParameteriv(Context * context,Sampler * sampler,GLenum pname,const GLint * params)1926*8975f5c5SAndroid Build Coastguard Worker void SetSamplerParameteriv(Context *context, Sampler *sampler, GLenum pname, const GLint *params)
1927*8975f5c5SAndroid Build Coastguard Worker {
1928*8975f5c5SAndroid Build Coastguard Worker SetSamplerParameterBase<false>(context, sampler, pname, params);
1929*8975f5c5SAndroid Build Coastguard Worker }
1930*8975f5c5SAndroid Build Coastguard Worker
SetSamplerParameterIiv(Context * context,Sampler * sampler,GLenum pname,const GLint * params)1931*8975f5c5SAndroid Build Coastguard Worker void SetSamplerParameterIiv(Context *context, Sampler *sampler, GLenum pname, const GLint *params)
1932*8975f5c5SAndroid Build Coastguard Worker {
1933*8975f5c5SAndroid Build Coastguard Worker SetSamplerParameterBase<true>(context, sampler, pname, params);
1934*8975f5c5SAndroid Build Coastguard Worker }
1935*8975f5c5SAndroid Build Coastguard Worker
SetSamplerParameterIuiv(Context * context,Sampler * sampler,GLenum pname,const GLuint * params)1936*8975f5c5SAndroid Build Coastguard Worker void SetSamplerParameterIuiv(Context *context, Sampler *sampler, GLenum pname, const GLuint *params)
1937*8975f5c5SAndroid Build Coastguard Worker {
1938*8975f5c5SAndroid Build Coastguard Worker SetSamplerParameterBase<true>(context, sampler, pname, params);
1939*8975f5c5SAndroid Build Coastguard Worker }
1940*8975f5c5SAndroid Build Coastguard Worker
SetFramebufferParameteri(const Context * context,Framebuffer * framebuffer,GLenum pname,GLint param)1941*8975f5c5SAndroid Build Coastguard Worker void SetFramebufferParameteri(const Context *context,
1942*8975f5c5SAndroid Build Coastguard Worker Framebuffer *framebuffer,
1943*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
1944*8975f5c5SAndroid Build Coastguard Worker GLint param)
1945*8975f5c5SAndroid Build Coastguard Worker {
1946*8975f5c5SAndroid Build Coastguard Worker ASSERT(framebuffer);
1947*8975f5c5SAndroid Build Coastguard Worker
1948*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1949*8975f5c5SAndroid Build Coastguard Worker {
1950*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_WIDTH:
1951*8975f5c5SAndroid Build Coastguard Worker framebuffer->setDefaultWidth(context, param);
1952*8975f5c5SAndroid Build Coastguard Worker break;
1953*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_HEIGHT:
1954*8975f5c5SAndroid Build Coastguard Worker framebuffer->setDefaultHeight(context, param);
1955*8975f5c5SAndroid Build Coastguard Worker break;
1956*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_SAMPLES:
1957*8975f5c5SAndroid Build Coastguard Worker framebuffer->setDefaultSamples(context, param);
1958*8975f5c5SAndroid Build Coastguard Worker break;
1959*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
1960*8975f5c5SAndroid Build Coastguard Worker framebuffer->setDefaultFixedSampleLocations(context, ConvertToBool(param));
1961*8975f5c5SAndroid Build Coastguard Worker break;
1962*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT:
1963*8975f5c5SAndroid Build Coastguard Worker framebuffer->setDefaultLayers(param);
1964*8975f5c5SAndroid Build Coastguard Worker break;
1965*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_FLIP_Y_MESA:
1966*8975f5c5SAndroid Build Coastguard Worker framebuffer->setFlipY(ConvertToBool(param));
1967*8975f5c5SAndroid Build Coastguard Worker break;
1968*8975f5c5SAndroid Build Coastguard Worker default:
1969*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1970*8975f5c5SAndroid Build Coastguard Worker break;
1971*8975f5c5SAndroid Build Coastguard Worker }
1972*8975f5c5SAndroid Build Coastguard Worker }
1973*8975f5c5SAndroid Build Coastguard Worker
SetProgramParameteri(const Context * context,Program * program,GLenum pname,GLint value)1974*8975f5c5SAndroid Build Coastguard Worker void SetProgramParameteri(const Context *context, Program *program, GLenum pname, GLint value)
1975*8975f5c5SAndroid Build Coastguard Worker {
1976*8975f5c5SAndroid Build Coastguard Worker ASSERT(program);
1977*8975f5c5SAndroid Build Coastguard Worker
1978*8975f5c5SAndroid Build Coastguard Worker switch (pname)
1979*8975f5c5SAndroid Build Coastguard Worker {
1980*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
1981*8975f5c5SAndroid Build Coastguard Worker program->setBinaryRetrievableHint(ConvertToBool(value));
1982*8975f5c5SAndroid Build Coastguard Worker break;
1983*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_SEPARABLE:
1984*8975f5c5SAndroid Build Coastguard Worker program->setSeparable(context, ConvertToBool(value));
1985*8975f5c5SAndroid Build Coastguard Worker break;
1986*8975f5c5SAndroid Build Coastguard Worker default:
1987*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1988*8975f5c5SAndroid Build Coastguard Worker break;
1989*8975f5c5SAndroid Build Coastguard Worker }
1990*8975f5c5SAndroid Build Coastguard Worker }
1991*8975f5c5SAndroid Build Coastguard Worker
GetUniformResourceProperty(const Program * program,GLuint index,const GLenum prop)1992*8975f5c5SAndroid Build Coastguard Worker GLint GetUniformResourceProperty(const Program *program, GLuint index, const GLenum prop)
1993*8975f5c5SAndroid Build Coastguard Worker {
1994*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
1995*8975f5c5SAndroid Build Coastguard Worker const LinkedUniform &uniform = executable.getUniformByIndex(index);
1996*8975f5c5SAndroid Build Coastguard Worker
1997*8975f5c5SAndroid Build Coastguard Worker GLenum resourceProp = GetUniformPropertyEnum(prop);
1998*8975f5c5SAndroid Build Coastguard Worker switch (resourceProp)
1999*8975f5c5SAndroid Build Coastguard Worker {
2000*8975f5c5SAndroid Build Coastguard Worker case GL_TYPE:
2001*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(uniform.getType());
2002*8975f5c5SAndroid Build Coastguard Worker
2003*8975f5c5SAndroid Build Coastguard Worker case GL_ARRAY_SIZE:
2004*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(uniform.getBasicTypeElementCount());
2005*8975f5c5SAndroid Build Coastguard Worker
2006*8975f5c5SAndroid Build Coastguard Worker case GL_NAME_LENGTH:
2007*8975f5c5SAndroid Build Coastguard Worker return clampCast<GLint>(executable.getUniformNameByIndex(index).size() + 1u);
2008*8975f5c5SAndroid Build Coastguard Worker
2009*8975f5c5SAndroid Build Coastguard Worker case GL_LOCATION:
2010*8975f5c5SAndroid Build Coastguard Worker return executable.getUniformLocation(executable.getUniformNameByIndex(index)).value;
2011*8975f5c5SAndroid Build Coastguard Worker
2012*8975f5c5SAndroid Build Coastguard Worker case GL_BLOCK_INDEX:
2013*8975f5c5SAndroid Build Coastguard Worker return (uniform.isAtomicCounter() ? -1 : uniform.getBufferIndex());
2014*8975f5c5SAndroid Build Coastguard Worker
2015*8975f5c5SAndroid Build Coastguard Worker case GL_OFFSET:
2016*8975f5c5SAndroid Build Coastguard Worker return uniform.pod.flagBits.isBlock ? uniform.pod.blockOffset : -1;
2017*8975f5c5SAndroid Build Coastguard Worker
2018*8975f5c5SAndroid Build Coastguard Worker case GL_ARRAY_STRIDE:
2019*8975f5c5SAndroid Build Coastguard Worker return uniform.pod.flagBits.isBlock ? uniform.pod.blockArrayStride : -1;
2020*8975f5c5SAndroid Build Coastguard Worker
2021*8975f5c5SAndroid Build Coastguard Worker case GL_MATRIX_STRIDE:
2022*8975f5c5SAndroid Build Coastguard Worker return uniform.pod.flagBits.isBlock ? uniform.pod.blockMatrixStride : -1;
2023*8975f5c5SAndroid Build Coastguard Worker
2024*8975f5c5SAndroid Build Coastguard Worker case GL_IS_ROW_MAJOR:
2025*8975f5c5SAndroid Build Coastguard Worker return uniform.pod.flagBits.blockIsRowMajorMatrix ? 1 : 0;
2026*8975f5c5SAndroid Build Coastguard Worker
2027*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_VERTEX_SHADER:
2028*8975f5c5SAndroid Build Coastguard Worker return uniform.isActive(ShaderType::Vertex);
2029*8975f5c5SAndroid Build Coastguard Worker
2030*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_FRAGMENT_SHADER:
2031*8975f5c5SAndroid Build Coastguard Worker return uniform.isActive(ShaderType::Fragment);
2032*8975f5c5SAndroid Build Coastguard Worker
2033*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_COMPUTE_SHADER:
2034*8975f5c5SAndroid Build Coastguard Worker return uniform.isActive(ShaderType::Compute);
2035*8975f5c5SAndroid Build Coastguard Worker
2036*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
2037*8975f5c5SAndroid Build Coastguard Worker return uniform.isActive(ShaderType::Geometry);
2038*8975f5c5SAndroid Build Coastguard Worker
2039*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT:
2040*8975f5c5SAndroid Build Coastguard Worker return uniform.isActive(ShaderType::TessControl);
2041*8975f5c5SAndroid Build Coastguard Worker
2042*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT:
2043*8975f5c5SAndroid Build Coastguard Worker return uniform.isActive(ShaderType::TessEvaluation);
2044*8975f5c5SAndroid Build Coastguard Worker
2045*8975f5c5SAndroid Build Coastguard Worker case GL_ATOMIC_COUNTER_BUFFER_INDEX:
2046*8975f5c5SAndroid Build Coastguard Worker return (uniform.isAtomicCounter() ? uniform.getBufferIndex() : -1);
2047*8975f5c5SAndroid Build Coastguard Worker
2048*8975f5c5SAndroid Build Coastguard Worker default:
2049*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2050*8975f5c5SAndroid Build Coastguard Worker return 0;
2051*8975f5c5SAndroid Build Coastguard Worker }
2052*8975f5c5SAndroid Build Coastguard Worker }
2053*8975f5c5SAndroid Build Coastguard Worker
GetBufferVariableResourceProperty(const Program * program,GLuint index,const GLenum prop)2054*8975f5c5SAndroid Build Coastguard Worker GLint GetBufferVariableResourceProperty(const Program *program, GLuint index, const GLenum prop)
2055*8975f5c5SAndroid Build Coastguard Worker {
2056*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
2057*8975f5c5SAndroid Build Coastguard Worker const BufferVariable &bufferVariable = executable.getBufferVariableByIndex(index);
2058*8975f5c5SAndroid Build Coastguard Worker
2059*8975f5c5SAndroid Build Coastguard Worker switch (prop)
2060*8975f5c5SAndroid Build Coastguard Worker {
2061*8975f5c5SAndroid Build Coastguard Worker case GL_TYPE:
2062*8975f5c5SAndroid Build Coastguard Worker case GL_ARRAY_SIZE:
2063*8975f5c5SAndroid Build Coastguard Worker case GL_NAME_LENGTH:
2064*8975f5c5SAndroid Build Coastguard Worker return GetCommonVariableProperty(bufferVariable, prop);
2065*8975f5c5SAndroid Build Coastguard Worker
2066*8975f5c5SAndroid Build Coastguard Worker case GL_BLOCK_INDEX:
2067*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.pod.bufferIndex;
2068*8975f5c5SAndroid Build Coastguard Worker
2069*8975f5c5SAndroid Build Coastguard Worker case GL_OFFSET:
2070*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.pod.blockInfo.offset;
2071*8975f5c5SAndroid Build Coastguard Worker
2072*8975f5c5SAndroid Build Coastguard Worker case GL_ARRAY_STRIDE:
2073*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.pod.blockInfo.arrayStride;
2074*8975f5c5SAndroid Build Coastguard Worker
2075*8975f5c5SAndroid Build Coastguard Worker case GL_MATRIX_STRIDE:
2076*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.pod.blockInfo.matrixStride;
2077*8975f5c5SAndroid Build Coastguard Worker
2078*8975f5c5SAndroid Build Coastguard Worker case GL_IS_ROW_MAJOR:
2079*8975f5c5SAndroid Build Coastguard Worker return static_cast<GLint>(bufferVariable.pod.blockInfo.isRowMajorMatrix);
2080*8975f5c5SAndroid Build Coastguard Worker
2081*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_VERTEX_SHADER:
2082*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.isActive(ShaderType::Vertex);
2083*8975f5c5SAndroid Build Coastguard Worker
2084*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_FRAGMENT_SHADER:
2085*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.isActive(ShaderType::Fragment);
2086*8975f5c5SAndroid Build Coastguard Worker
2087*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_COMPUTE_SHADER:
2088*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.isActive(ShaderType::Compute);
2089*8975f5c5SAndroid Build Coastguard Worker
2090*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
2091*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.isActive(ShaderType::Geometry);
2092*8975f5c5SAndroid Build Coastguard Worker
2093*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT:
2094*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.isActive(ShaderType::TessControl);
2095*8975f5c5SAndroid Build Coastguard Worker
2096*8975f5c5SAndroid Build Coastguard Worker case GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT:
2097*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.isActive(ShaderType::TessEvaluation);
2098*8975f5c5SAndroid Build Coastguard Worker
2099*8975f5c5SAndroid Build Coastguard Worker case GL_TOP_LEVEL_ARRAY_SIZE:
2100*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.pod.topLevelArraySize;
2101*8975f5c5SAndroid Build Coastguard Worker
2102*8975f5c5SAndroid Build Coastguard Worker case GL_TOP_LEVEL_ARRAY_STRIDE:
2103*8975f5c5SAndroid Build Coastguard Worker return bufferVariable.pod.blockInfo.topLevelArrayStride;
2104*8975f5c5SAndroid Build Coastguard Worker
2105*8975f5c5SAndroid Build Coastguard Worker default:
2106*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2107*8975f5c5SAndroid Build Coastguard Worker return 0;
2108*8975f5c5SAndroid Build Coastguard Worker }
2109*8975f5c5SAndroid Build Coastguard Worker }
2110*8975f5c5SAndroid Build Coastguard Worker
QueryProgramResourceIndex(const Program * program,GLenum programInterface,const GLchar * name)2111*8975f5c5SAndroid Build Coastguard Worker GLuint QueryProgramResourceIndex(const Program *program,
2112*8975f5c5SAndroid Build Coastguard Worker GLenum programInterface,
2113*8975f5c5SAndroid Build Coastguard Worker const GLchar *name)
2114*8975f5c5SAndroid Build Coastguard Worker {
2115*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
2116*8975f5c5SAndroid Build Coastguard Worker
2117*8975f5c5SAndroid Build Coastguard Worker switch (programInterface)
2118*8975f5c5SAndroid Build Coastguard Worker {
2119*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_INPUT:
2120*8975f5c5SAndroid Build Coastguard Worker return executable.getInputResourceIndex(name);
2121*8975f5c5SAndroid Build Coastguard Worker
2122*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_OUTPUT:
2123*8975f5c5SAndroid Build Coastguard Worker return executable.getOutputResourceIndex(name);
2124*8975f5c5SAndroid Build Coastguard Worker
2125*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM:
2126*8975f5c5SAndroid Build Coastguard Worker return executable.getUniformIndexFromName(name);
2127*8975f5c5SAndroid Build Coastguard Worker
2128*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_VARIABLE:
2129*8975f5c5SAndroid Build Coastguard Worker return executable.getBufferVariableIndexFromName(name);
2130*8975f5c5SAndroid Build Coastguard Worker
2131*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BLOCK:
2132*8975f5c5SAndroid Build Coastguard Worker return executable.getShaderStorageBlockIndex(name);
2133*8975f5c5SAndroid Build Coastguard Worker
2134*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK:
2135*8975f5c5SAndroid Build Coastguard Worker return executable.getUniformBlockIndex(name);
2136*8975f5c5SAndroid Build Coastguard Worker
2137*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_VARYING:
2138*8975f5c5SAndroid Build Coastguard Worker return executable.getTransformFeedbackVaryingResourceIndex(name);
2139*8975f5c5SAndroid Build Coastguard Worker
2140*8975f5c5SAndroid Build Coastguard Worker default:
2141*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2142*8975f5c5SAndroid Build Coastguard Worker return GL_INVALID_INDEX;
2143*8975f5c5SAndroid Build Coastguard Worker }
2144*8975f5c5SAndroid Build Coastguard Worker }
2145*8975f5c5SAndroid Build Coastguard Worker
QueryProgramResourceName(const Context * context,const Program * program,GLenum programInterface,GLuint index,GLsizei bufSize,GLsizei * length,GLchar * name)2146*8975f5c5SAndroid Build Coastguard Worker void QueryProgramResourceName(const Context *context,
2147*8975f5c5SAndroid Build Coastguard Worker const Program *program,
2148*8975f5c5SAndroid Build Coastguard Worker GLenum programInterface,
2149*8975f5c5SAndroid Build Coastguard Worker GLuint index,
2150*8975f5c5SAndroid Build Coastguard Worker GLsizei bufSize,
2151*8975f5c5SAndroid Build Coastguard Worker GLsizei *length,
2152*8975f5c5SAndroid Build Coastguard Worker GLchar *name)
2153*8975f5c5SAndroid Build Coastguard Worker {
2154*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
2155*8975f5c5SAndroid Build Coastguard Worker
2156*8975f5c5SAndroid Build Coastguard Worker switch (programInterface)
2157*8975f5c5SAndroid Build Coastguard Worker {
2158*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_INPUT:
2159*8975f5c5SAndroid Build Coastguard Worker executable.getInputResourceName(index, bufSize, length, name);
2160*8975f5c5SAndroid Build Coastguard Worker break;
2161*8975f5c5SAndroid Build Coastguard Worker
2162*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_OUTPUT:
2163*8975f5c5SAndroid Build Coastguard Worker executable.getOutputResourceName(index, bufSize, length, name);
2164*8975f5c5SAndroid Build Coastguard Worker break;
2165*8975f5c5SAndroid Build Coastguard Worker
2166*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM:
2167*8975f5c5SAndroid Build Coastguard Worker executable.getUniformResourceName(index, bufSize, length, name);
2168*8975f5c5SAndroid Build Coastguard Worker break;
2169*8975f5c5SAndroid Build Coastguard Worker
2170*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_VARIABLE:
2171*8975f5c5SAndroid Build Coastguard Worker executable.getBufferVariableResourceName(index, bufSize, length, name);
2172*8975f5c5SAndroid Build Coastguard Worker break;
2173*8975f5c5SAndroid Build Coastguard Worker
2174*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BLOCK:
2175*8975f5c5SAndroid Build Coastguard Worker executable.getActiveShaderStorageBlockName(index, bufSize, length, name);
2176*8975f5c5SAndroid Build Coastguard Worker break;
2177*8975f5c5SAndroid Build Coastguard Worker
2178*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK:
2179*8975f5c5SAndroid Build Coastguard Worker executable.getActiveUniformBlockName(context, {index}, bufSize, length, name);
2180*8975f5c5SAndroid Build Coastguard Worker break;
2181*8975f5c5SAndroid Build Coastguard Worker
2182*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_VARYING:
2183*8975f5c5SAndroid Build Coastguard Worker executable.getTransformFeedbackVarying(index, bufSize, length, nullptr, nullptr, name);
2184*8975f5c5SAndroid Build Coastguard Worker break;
2185*8975f5c5SAndroid Build Coastguard Worker
2186*8975f5c5SAndroid Build Coastguard Worker default:
2187*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2188*8975f5c5SAndroid Build Coastguard Worker }
2189*8975f5c5SAndroid Build Coastguard Worker }
2190*8975f5c5SAndroid Build Coastguard Worker
QueryProgramResourceLocation(const Program * program,GLenum programInterface,const GLchar * name)2191*8975f5c5SAndroid Build Coastguard Worker GLint QueryProgramResourceLocation(const Program *program,
2192*8975f5c5SAndroid Build Coastguard Worker GLenum programInterface,
2193*8975f5c5SAndroid Build Coastguard Worker const GLchar *name)
2194*8975f5c5SAndroid Build Coastguard Worker {
2195*8975f5c5SAndroid Build Coastguard Worker const ProgramExecutable &executable = program->getExecutable();
2196*8975f5c5SAndroid Build Coastguard Worker
2197*8975f5c5SAndroid Build Coastguard Worker switch (programInterface)
2198*8975f5c5SAndroid Build Coastguard Worker {
2199*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_INPUT:
2200*8975f5c5SAndroid Build Coastguard Worker return executable.getInputResourceLocation(name);
2201*8975f5c5SAndroid Build Coastguard Worker
2202*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_OUTPUT:
2203*8975f5c5SAndroid Build Coastguard Worker return executable.getOutputResourceLocation(name);
2204*8975f5c5SAndroid Build Coastguard Worker
2205*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM:
2206*8975f5c5SAndroid Build Coastguard Worker return executable.getUniformLocation(name).value;
2207*8975f5c5SAndroid Build Coastguard Worker
2208*8975f5c5SAndroid Build Coastguard Worker default:
2209*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2210*8975f5c5SAndroid Build Coastguard Worker return -1;
2211*8975f5c5SAndroid Build Coastguard Worker }
2212*8975f5c5SAndroid Build Coastguard Worker }
2213*8975f5c5SAndroid Build Coastguard Worker
QueryProgramResourceiv(const Program * program,GLenum programInterface,UniformBlockIndex index,GLsizei propCount,const GLenum * props,GLsizei bufSize,GLsizei * length,GLint * params)2214*8975f5c5SAndroid Build Coastguard Worker void QueryProgramResourceiv(const Program *program,
2215*8975f5c5SAndroid Build Coastguard Worker GLenum programInterface,
2216*8975f5c5SAndroid Build Coastguard Worker UniformBlockIndex index,
2217*8975f5c5SAndroid Build Coastguard Worker GLsizei propCount,
2218*8975f5c5SAndroid Build Coastguard Worker const GLenum *props,
2219*8975f5c5SAndroid Build Coastguard Worker GLsizei bufSize,
2220*8975f5c5SAndroid Build Coastguard Worker GLsizei *length,
2221*8975f5c5SAndroid Build Coastguard Worker GLint *params)
2222*8975f5c5SAndroid Build Coastguard Worker {
2223*8975f5c5SAndroid Build Coastguard Worker if (!program->isLinked())
2224*8975f5c5SAndroid Build Coastguard Worker {
2225*8975f5c5SAndroid Build Coastguard Worker return;
2226*8975f5c5SAndroid Build Coastguard Worker }
2227*8975f5c5SAndroid Build Coastguard Worker
2228*8975f5c5SAndroid Build Coastguard Worker if (length != nullptr)
2229*8975f5c5SAndroid Build Coastguard Worker {
2230*8975f5c5SAndroid Build Coastguard Worker *length = 0;
2231*8975f5c5SAndroid Build Coastguard Worker }
2232*8975f5c5SAndroid Build Coastguard Worker
2233*8975f5c5SAndroid Build Coastguard Worker if (bufSize == 0)
2234*8975f5c5SAndroid Build Coastguard Worker {
2235*8975f5c5SAndroid Build Coastguard Worker // No room to write the results
2236*8975f5c5SAndroid Build Coastguard Worker return;
2237*8975f5c5SAndroid Build Coastguard Worker }
2238*8975f5c5SAndroid Build Coastguard Worker
2239*8975f5c5SAndroid Build Coastguard Worker GLsizei pos = 0;
2240*8975f5c5SAndroid Build Coastguard Worker for (GLsizei i = 0; i < propCount; i++)
2241*8975f5c5SAndroid Build Coastguard Worker {
2242*8975f5c5SAndroid Build Coastguard Worker switch (programInterface)
2243*8975f5c5SAndroid Build Coastguard Worker {
2244*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_INPUT:
2245*8975f5c5SAndroid Build Coastguard Worker params[i] = GetInputResourceProperty(program, index.value, props[i]);
2246*8975f5c5SAndroid Build Coastguard Worker ++pos;
2247*8975f5c5SAndroid Build Coastguard Worker break;
2248*8975f5c5SAndroid Build Coastguard Worker
2249*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_OUTPUT:
2250*8975f5c5SAndroid Build Coastguard Worker params[i] = GetOutputResourceProperty(program, index.value, props[i]);
2251*8975f5c5SAndroid Build Coastguard Worker ++pos;
2252*8975f5c5SAndroid Build Coastguard Worker break;
2253*8975f5c5SAndroid Build Coastguard Worker
2254*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM:
2255*8975f5c5SAndroid Build Coastguard Worker params[i] = GetUniformResourceProperty(program, index.value, props[i]);
2256*8975f5c5SAndroid Build Coastguard Worker ++pos;
2257*8975f5c5SAndroid Build Coastguard Worker break;
2258*8975f5c5SAndroid Build Coastguard Worker
2259*8975f5c5SAndroid Build Coastguard Worker case GL_BUFFER_VARIABLE:
2260*8975f5c5SAndroid Build Coastguard Worker params[i] = GetBufferVariableResourceProperty(program, index.value, props[i]);
2261*8975f5c5SAndroid Build Coastguard Worker ++pos;
2262*8975f5c5SAndroid Build Coastguard Worker break;
2263*8975f5c5SAndroid Build Coastguard Worker
2264*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BLOCK:
2265*8975f5c5SAndroid Build Coastguard Worker GetUniformBlockResourceProperty(program, index.value, props[i], params, bufSize,
2266*8975f5c5SAndroid Build Coastguard Worker &pos);
2267*8975f5c5SAndroid Build Coastguard Worker break;
2268*8975f5c5SAndroid Build Coastguard Worker
2269*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BLOCK:
2270*8975f5c5SAndroid Build Coastguard Worker GetShaderStorageBlockResourceProperty(program, index.value, props[i], params,
2271*8975f5c5SAndroid Build Coastguard Worker bufSize, &pos);
2272*8975f5c5SAndroid Build Coastguard Worker break;
2273*8975f5c5SAndroid Build Coastguard Worker
2274*8975f5c5SAndroid Build Coastguard Worker case GL_ATOMIC_COUNTER_BUFFER:
2275*8975f5c5SAndroid Build Coastguard Worker GetAtomicCounterBufferResourceProperty(program, index.value, props[i], params,
2276*8975f5c5SAndroid Build Coastguard Worker bufSize, &pos);
2277*8975f5c5SAndroid Build Coastguard Worker break;
2278*8975f5c5SAndroid Build Coastguard Worker
2279*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_VARYING:
2280*8975f5c5SAndroid Build Coastguard Worker params[i] =
2281*8975f5c5SAndroid Build Coastguard Worker GetTransformFeedbackVaryingResourceProperty(program, index.value, props[i]);
2282*8975f5c5SAndroid Build Coastguard Worker ++pos;
2283*8975f5c5SAndroid Build Coastguard Worker break;
2284*8975f5c5SAndroid Build Coastguard Worker
2285*8975f5c5SAndroid Build Coastguard Worker default:
2286*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2287*8975f5c5SAndroid Build Coastguard Worker params[i] = GL_INVALID_VALUE;
2288*8975f5c5SAndroid Build Coastguard Worker }
2289*8975f5c5SAndroid Build Coastguard Worker if (pos == bufSize)
2290*8975f5c5SAndroid Build Coastguard Worker {
2291*8975f5c5SAndroid Build Coastguard Worker // Most properties return one value, but GL_ACTIVE_VARIABLES returns an array of values.
2292*8975f5c5SAndroid Build Coastguard Worker // This checks not to break buffer bounds for such case.
2293*8975f5c5SAndroid Build Coastguard Worker break;
2294*8975f5c5SAndroid Build Coastguard Worker }
2295*8975f5c5SAndroid Build Coastguard Worker }
2296*8975f5c5SAndroid Build Coastguard Worker
2297*8975f5c5SAndroid Build Coastguard Worker if (length != nullptr)
2298*8975f5c5SAndroid Build Coastguard Worker {
2299*8975f5c5SAndroid Build Coastguard Worker *length = pos;
2300*8975f5c5SAndroid Build Coastguard Worker }
2301*8975f5c5SAndroid Build Coastguard Worker }
2302*8975f5c5SAndroid Build Coastguard Worker
QueryProgramInterfaceiv(const Program * program,GLenum programInterface,GLenum pname,GLint * params)2303*8975f5c5SAndroid Build Coastguard Worker void QueryProgramInterfaceiv(const Program *program,
2304*8975f5c5SAndroid Build Coastguard Worker GLenum programInterface,
2305*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
2306*8975f5c5SAndroid Build Coastguard Worker GLint *params)
2307*8975f5c5SAndroid Build Coastguard Worker {
2308*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2309*8975f5c5SAndroid Build Coastguard Worker {
2310*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_RESOURCES:
2311*8975f5c5SAndroid Build Coastguard Worker *params = QueryProgramInterfaceActiveResources(program, programInterface);
2312*8975f5c5SAndroid Build Coastguard Worker break;
2313*8975f5c5SAndroid Build Coastguard Worker
2314*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_NAME_LENGTH:
2315*8975f5c5SAndroid Build Coastguard Worker *params = QueryProgramInterfaceMaxNameLength(program, programInterface);
2316*8975f5c5SAndroid Build Coastguard Worker break;
2317*8975f5c5SAndroid Build Coastguard Worker
2318*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_NUM_ACTIVE_VARIABLES:
2319*8975f5c5SAndroid Build Coastguard Worker *params = QueryProgramInterfaceMaxNumActiveVariables(program, programInterface);
2320*8975f5c5SAndroid Build Coastguard Worker break;
2321*8975f5c5SAndroid Build Coastguard Worker
2322*8975f5c5SAndroid Build Coastguard Worker default:
2323*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2324*8975f5c5SAndroid Build Coastguard Worker }
2325*8975f5c5SAndroid Build Coastguard Worker }
2326*8975f5c5SAndroid Build Coastguard Worker
SetMemoryObjectParameteriv(const Context * context,MemoryObject * memoryObject,GLenum pname,const GLint * params)2327*8975f5c5SAndroid Build Coastguard Worker angle::Result SetMemoryObjectParameteriv(const Context *context,
2328*8975f5c5SAndroid Build Coastguard Worker MemoryObject *memoryObject,
2329*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
2330*8975f5c5SAndroid Build Coastguard Worker const GLint *params)
2331*8975f5c5SAndroid Build Coastguard Worker {
2332*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2333*8975f5c5SAndroid Build Coastguard Worker {
2334*8975f5c5SAndroid Build Coastguard Worker case GL_DEDICATED_MEMORY_OBJECT_EXT:
2335*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(memoryObject->setDedicatedMemory(context, ConvertToBool(params[0])));
2336*8975f5c5SAndroid Build Coastguard Worker break;
2337*8975f5c5SAndroid Build Coastguard Worker
2338*8975f5c5SAndroid Build Coastguard Worker case GL_PROTECTED_MEMORY_OBJECT_EXT:
2339*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(memoryObject->setProtectedMemory(context, ConvertToBool(params[0])));
2340*8975f5c5SAndroid Build Coastguard Worker break;
2341*8975f5c5SAndroid Build Coastguard Worker
2342*8975f5c5SAndroid Build Coastguard Worker default:
2343*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2344*8975f5c5SAndroid Build Coastguard Worker }
2345*8975f5c5SAndroid Build Coastguard Worker
2346*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
2347*8975f5c5SAndroid Build Coastguard Worker }
2348*8975f5c5SAndroid Build Coastguard Worker
QueryMemoryObjectParameteriv(const MemoryObject * memoryObject,GLenum pname,GLint * params)2349*8975f5c5SAndroid Build Coastguard Worker void QueryMemoryObjectParameteriv(const MemoryObject *memoryObject, GLenum pname, GLint *params)
2350*8975f5c5SAndroid Build Coastguard Worker {
2351*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2352*8975f5c5SAndroid Build Coastguard Worker {
2353*8975f5c5SAndroid Build Coastguard Worker case GL_DEDICATED_MEMORY_OBJECT_EXT:
2354*8975f5c5SAndroid Build Coastguard Worker *params = memoryObject->isDedicatedMemory();
2355*8975f5c5SAndroid Build Coastguard Worker break;
2356*8975f5c5SAndroid Build Coastguard Worker
2357*8975f5c5SAndroid Build Coastguard Worker case GL_PROTECTED_MEMORY_OBJECT_EXT:
2358*8975f5c5SAndroid Build Coastguard Worker *params = memoryObject->isProtectedMemory();
2359*8975f5c5SAndroid Build Coastguard Worker break;
2360*8975f5c5SAndroid Build Coastguard Worker
2361*8975f5c5SAndroid Build Coastguard Worker default:
2362*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2363*8975f5c5SAndroid Build Coastguard Worker }
2364*8975f5c5SAndroid Build Coastguard Worker }
2365*8975f5c5SAndroid Build Coastguard Worker
ParamToVertexArrayType(GLenum param)2366*8975f5c5SAndroid Build Coastguard Worker ClientVertexArrayType ParamToVertexArrayType(GLenum param)
2367*8975f5c5SAndroid Build Coastguard Worker {
2368*8975f5c5SAndroid Build Coastguard Worker switch (param)
2369*8975f5c5SAndroid Build Coastguard Worker {
2370*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY:
2371*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_BUFFER_BINDING:
2372*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_STRIDE:
2373*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_SIZE:
2374*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_TYPE:
2375*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_POINTER:
2376*8975f5c5SAndroid Build Coastguard Worker return ClientVertexArrayType::Vertex;
2377*8975f5c5SAndroid Build Coastguard Worker case GL_NORMAL_ARRAY:
2378*8975f5c5SAndroid Build Coastguard Worker case GL_NORMAL_ARRAY_BUFFER_BINDING:
2379*8975f5c5SAndroid Build Coastguard Worker case GL_NORMAL_ARRAY_STRIDE:
2380*8975f5c5SAndroid Build Coastguard Worker case GL_NORMAL_ARRAY_TYPE:
2381*8975f5c5SAndroid Build Coastguard Worker case GL_NORMAL_ARRAY_POINTER:
2382*8975f5c5SAndroid Build Coastguard Worker return ClientVertexArrayType::Normal;
2383*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY:
2384*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY_BUFFER_BINDING:
2385*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY_STRIDE:
2386*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY_SIZE:
2387*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY_TYPE:
2388*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY_POINTER:
2389*8975f5c5SAndroid Build Coastguard Worker return ClientVertexArrayType::Color;
2390*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_ARRAY_OES:
2391*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
2392*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_ARRAY_STRIDE_OES:
2393*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_ARRAY_TYPE_OES:
2394*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_ARRAY_POINTER_OES:
2395*8975f5c5SAndroid Build Coastguard Worker return ClientVertexArrayType::PointSize;
2396*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY:
2397*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
2398*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY_STRIDE:
2399*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY_SIZE:
2400*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY_TYPE:
2401*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY_POINTER:
2402*8975f5c5SAndroid Build Coastguard Worker return ClientVertexArrayType::TextureCoord;
2403*8975f5c5SAndroid Build Coastguard Worker default:
2404*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2405*8975f5c5SAndroid Build Coastguard Worker return ClientVertexArrayType::InvalidEnum;
2406*8975f5c5SAndroid Build Coastguard Worker }
2407*8975f5c5SAndroid Build Coastguard Worker }
2408*8975f5c5SAndroid Build Coastguard Worker
SetLightModelParameters(GLES1State * state,GLenum pname,const GLfloat * params)2409*8975f5c5SAndroid Build Coastguard Worker void SetLightModelParameters(GLES1State *state, GLenum pname, const GLfloat *params)
2410*8975f5c5SAndroid Build Coastguard Worker {
2411*8975f5c5SAndroid Build Coastguard Worker LightModelParameters &lightModel = state->lightModelParameters();
2412*8975f5c5SAndroid Build Coastguard Worker
2413*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2414*8975f5c5SAndroid Build Coastguard Worker {
2415*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT_MODEL_AMBIENT:
2416*8975f5c5SAndroid Build Coastguard Worker lightModel.color = ColorF::fromData(params);
2417*8975f5c5SAndroid Build Coastguard Worker break;
2418*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT_MODEL_TWO_SIDE:
2419*8975f5c5SAndroid Build Coastguard Worker lightModel.twoSided = *params == 1.0f ? true : false;
2420*8975f5c5SAndroid Build Coastguard Worker break;
2421*8975f5c5SAndroid Build Coastguard Worker default:
2422*8975f5c5SAndroid Build Coastguard Worker break;
2423*8975f5c5SAndroid Build Coastguard Worker }
2424*8975f5c5SAndroid Build Coastguard Worker }
2425*8975f5c5SAndroid Build Coastguard Worker
GetLightModelParameters(const GLES1State * state,GLenum pname,GLfloat * params)2426*8975f5c5SAndroid Build Coastguard Worker void GetLightModelParameters(const GLES1State *state, GLenum pname, GLfloat *params)
2427*8975f5c5SAndroid Build Coastguard Worker {
2428*8975f5c5SAndroid Build Coastguard Worker const LightModelParameters &lightModel = state->lightModelParameters();
2429*8975f5c5SAndroid Build Coastguard Worker
2430*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2431*8975f5c5SAndroid Build Coastguard Worker {
2432*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT_MODEL_TWO_SIDE:
2433*8975f5c5SAndroid Build Coastguard Worker *params = lightModel.twoSided ? 1.0f : 0.0f;
2434*8975f5c5SAndroid Build Coastguard Worker break;
2435*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT_MODEL_AMBIENT:
2436*8975f5c5SAndroid Build Coastguard Worker lightModel.color.writeData(params);
2437*8975f5c5SAndroid Build Coastguard Worker break;
2438*8975f5c5SAndroid Build Coastguard Worker default:
2439*8975f5c5SAndroid Build Coastguard Worker break;
2440*8975f5c5SAndroid Build Coastguard Worker }
2441*8975f5c5SAndroid Build Coastguard Worker }
2442*8975f5c5SAndroid Build Coastguard Worker
IsLightModelTwoSided(const GLES1State * state)2443*8975f5c5SAndroid Build Coastguard Worker bool IsLightModelTwoSided(const GLES1State *state)
2444*8975f5c5SAndroid Build Coastguard Worker {
2445*8975f5c5SAndroid Build Coastguard Worker return state->lightModelParameters().twoSided;
2446*8975f5c5SAndroid Build Coastguard Worker }
2447*8975f5c5SAndroid Build Coastguard Worker
SetLightParameters(GLES1State * state,GLenum light,LightParameter pname,const GLfloat * params)2448*8975f5c5SAndroid Build Coastguard Worker void SetLightParameters(GLES1State *state,
2449*8975f5c5SAndroid Build Coastguard Worker GLenum light,
2450*8975f5c5SAndroid Build Coastguard Worker LightParameter pname,
2451*8975f5c5SAndroid Build Coastguard Worker const GLfloat *params)
2452*8975f5c5SAndroid Build Coastguard Worker {
2453*8975f5c5SAndroid Build Coastguard Worker uint32_t lightIndex = light - GL_LIGHT0;
2454*8975f5c5SAndroid Build Coastguard Worker
2455*8975f5c5SAndroid Build Coastguard Worker LightParameters &lightParams = state->lightParameters(lightIndex);
2456*8975f5c5SAndroid Build Coastguard Worker
2457*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2458*8975f5c5SAndroid Build Coastguard Worker {
2459*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Ambient:
2460*8975f5c5SAndroid Build Coastguard Worker lightParams.ambient = ColorF::fromData(params);
2461*8975f5c5SAndroid Build Coastguard Worker break;
2462*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Diffuse:
2463*8975f5c5SAndroid Build Coastguard Worker lightParams.diffuse = ColorF::fromData(params);
2464*8975f5c5SAndroid Build Coastguard Worker break;
2465*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Specular:
2466*8975f5c5SAndroid Build Coastguard Worker lightParams.specular = ColorF::fromData(params);
2467*8975f5c5SAndroid Build Coastguard Worker break;
2468*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Position:
2469*8975f5c5SAndroid Build Coastguard Worker {
2470*8975f5c5SAndroid Build Coastguard Worker angle::Mat4 mv = state->getModelviewMatrix();
2471*8975f5c5SAndroid Build Coastguard Worker angle::Vector4 transformedPos =
2472*8975f5c5SAndroid Build Coastguard Worker mv.product(angle::Vector4(params[0], params[1], params[2], params[3]));
2473*8975f5c5SAndroid Build Coastguard Worker lightParams.position[0] = transformedPos[0];
2474*8975f5c5SAndroid Build Coastguard Worker lightParams.position[1] = transformedPos[1];
2475*8975f5c5SAndroid Build Coastguard Worker lightParams.position[2] = transformedPos[2];
2476*8975f5c5SAndroid Build Coastguard Worker lightParams.position[3] = transformedPos[3];
2477*8975f5c5SAndroid Build Coastguard Worker }
2478*8975f5c5SAndroid Build Coastguard Worker break;
2479*8975f5c5SAndroid Build Coastguard Worker case LightParameter::SpotDirection:
2480*8975f5c5SAndroid Build Coastguard Worker {
2481*8975f5c5SAndroid Build Coastguard Worker angle::Mat4 mv = state->getModelviewMatrix();
2482*8975f5c5SAndroid Build Coastguard Worker angle::Vector4 transformedPos =
2483*8975f5c5SAndroid Build Coastguard Worker mv.product(angle::Vector4(params[0], params[1], params[2], 0.0f));
2484*8975f5c5SAndroid Build Coastguard Worker lightParams.direction[0] = transformedPos[0];
2485*8975f5c5SAndroid Build Coastguard Worker lightParams.direction[1] = transformedPos[1];
2486*8975f5c5SAndroid Build Coastguard Worker lightParams.direction[2] = transformedPos[2];
2487*8975f5c5SAndroid Build Coastguard Worker }
2488*8975f5c5SAndroid Build Coastguard Worker break;
2489*8975f5c5SAndroid Build Coastguard Worker case LightParameter::SpotExponent:
2490*8975f5c5SAndroid Build Coastguard Worker lightParams.spotlightExponent = *params;
2491*8975f5c5SAndroid Build Coastguard Worker break;
2492*8975f5c5SAndroid Build Coastguard Worker case LightParameter::SpotCutoff:
2493*8975f5c5SAndroid Build Coastguard Worker lightParams.spotlightCutoffAngle = *params;
2494*8975f5c5SAndroid Build Coastguard Worker break;
2495*8975f5c5SAndroid Build Coastguard Worker case LightParameter::ConstantAttenuation:
2496*8975f5c5SAndroid Build Coastguard Worker lightParams.attenuationConst = *params;
2497*8975f5c5SAndroid Build Coastguard Worker break;
2498*8975f5c5SAndroid Build Coastguard Worker case LightParameter::LinearAttenuation:
2499*8975f5c5SAndroid Build Coastguard Worker lightParams.attenuationLinear = *params;
2500*8975f5c5SAndroid Build Coastguard Worker break;
2501*8975f5c5SAndroid Build Coastguard Worker case LightParameter::QuadraticAttenuation:
2502*8975f5c5SAndroid Build Coastguard Worker lightParams.attenuationQuadratic = *params;
2503*8975f5c5SAndroid Build Coastguard Worker break;
2504*8975f5c5SAndroid Build Coastguard Worker default:
2505*8975f5c5SAndroid Build Coastguard Worker return;
2506*8975f5c5SAndroid Build Coastguard Worker }
2507*8975f5c5SAndroid Build Coastguard Worker }
2508*8975f5c5SAndroid Build Coastguard Worker
GetLightParameters(const GLES1State * state,GLenum light,LightParameter pname,GLfloat * params)2509*8975f5c5SAndroid Build Coastguard Worker void GetLightParameters(const GLES1State *state,
2510*8975f5c5SAndroid Build Coastguard Worker GLenum light,
2511*8975f5c5SAndroid Build Coastguard Worker LightParameter pname,
2512*8975f5c5SAndroid Build Coastguard Worker GLfloat *params)
2513*8975f5c5SAndroid Build Coastguard Worker {
2514*8975f5c5SAndroid Build Coastguard Worker uint32_t lightIndex = light - GL_LIGHT0;
2515*8975f5c5SAndroid Build Coastguard Worker const LightParameters &lightParams = state->lightParameters(lightIndex);
2516*8975f5c5SAndroid Build Coastguard Worker
2517*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2518*8975f5c5SAndroid Build Coastguard Worker {
2519*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Ambient:
2520*8975f5c5SAndroid Build Coastguard Worker lightParams.ambient.writeData(params);
2521*8975f5c5SAndroid Build Coastguard Worker break;
2522*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Diffuse:
2523*8975f5c5SAndroid Build Coastguard Worker lightParams.diffuse.writeData(params);
2524*8975f5c5SAndroid Build Coastguard Worker break;
2525*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Specular:
2526*8975f5c5SAndroid Build Coastguard Worker lightParams.specular.writeData(params);
2527*8975f5c5SAndroid Build Coastguard Worker break;
2528*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Position:
2529*8975f5c5SAndroid Build Coastguard Worker memcpy(params, lightParams.position.data(), 4 * sizeof(GLfloat));
2530*8975f5c5SAndroid Build Coastguard Worker break;
2531*8975f5c5SAndroid Build Coastguard Worker case LightParameter::SpotDirection:
2532*8975f5c5SAndroid Build Coastguard Worker memcpy(params, lightParams.direction.data(), 3 * sizeof(GLfloat));
2533*8975f5c5SAndroid Build Coastguard Worker break;
2534*8975f5c5SAndroid Build Coastguard Worker case LightParameter::SpotExponent:
2535*8975f5c5SAndroid Build Coastguard Worker *params = lightParams.spotlightExponent;
2536*8975f5c5SAndroid Build Coastguard Worker break;
2537*8975f5c5SAndroid Build Coastguard Worker case LightParameter::SpotCutoff:
2538*8975f5c5SAndroid Build Coastguard Worker *params = lightParams.spotlightCutoffAngle;
2539*8975f5c5SAndroid Build Coastguard Worker break;
2540*8975f5c5SAndroid Build Coastguard Worker case LightParameter::ConstantAttenuation:
2541*8975f5c5SAndroid Build Coastguard Worker *params = lightParams.attenuationConst;
2542*8975f5c5SAndroid Build Coastguard Worker break;
2543*8975f5c5SAndroid Build Coastguard Worker case LightParameter::LinearAttenuation:
2544*8975f5c5SAndroid Build Coastguard Worker *params = lightParams.attenuationLinear;
2545*8975f5c5SAndroid Build Coastguard Worker break;
2546*8975f5c5SAndroid Build Coastguard Worker case LightParameter::QuadraticAttenuation:
2547*8975f5c5SAndroid Build Coastguard Worker *params = lightParams.attenuationQuadratic;
2548*8975f5c5SAndroid Build Coastguard Worker break;
2549*8975f5c5SAndroid Build Coastguard Worker default:
2550*8975f5c5SAndroid Build Coastguard Worker break;
2551*8975f5c5SAndroid Build Coastguard Worker }
2552*8975f5c5SAndroid Build Coastguard Worker }
2553*8975f5c5SAndroid Build Coastguard Worker
SetMaterialParameters(GLES1State * state,GLenum face,MaterialParameter pname,const GLfloat * params)2554*8975f5c5SAndroid Build Coastguard Worker void SetMaterialParameters(GLES1State *state,
2555*8975f5c5SAndroid Build Coastguard Worker GLenum face,
2556*8975f5c5SAndroid Build Coastguard Worker MaterialParameter pname,
2557*8975f5c5SAndroid Build Coastguard Worker const GLfloat *params)
2558*8975f5c5SAndroid Build Coastguard Worker {
2559*8975f5c5SAndroid Build Coastguard Worker // Note: Ambient and diffuse colors are inherited from glColor when COLOR_MATERIAL is enabled,
2560*8975f5c5SAndroid Build Coastguard Worker // and can only be modified by this function if that is disabled:
2561*8975f5c5SAndroid Build Coastguard Worker //
2562*8975f5c5SAndroid Build Coastguard Worker // > the replaced values remain until changed by either sending a new color or by setting a
2563*8975f5c5SAndroid Build Coastguard Worker // > new material value when COLOR_MATERIAL is not currently enabled, to override that
2564*8975f5c5SAndroid Build Coastguard Worker // particular value.
2565*8975f5c5SAndroid Build Coastguard Worker
2566*8975f5c5SAndroid Build Coastguard Worker MaterialParameters &material = state->materialParameters();
2567*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2568*8975f5c5SAndroid Build Coastguard Worker {
2569*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Ambient:
2570*8975f5c5SAndroid Build Coastguard Worker if (!state->isColorMaterialEnabled())
2571*8975f5c5SAndroid Build Coastguard Worker {
2572*8975f5c5SAndroid Build Coastguard Worker material.ambient = ColorF::fromData(params);
2573*8975f5c5SAndroid Build Coastguard Worker }
2574*8975f5c5SAndroid Build Coastguard Worker break;
2575*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Diffuse:
2576*8975f5c5SAndroid Build Coastguard Worker if (!state->isColorMaterialEnabled())
2577*8975f5c5SAndroid Build Coastguard Worker {
2578*8975f5c5SAndroid Build Coastguard Worker material.diffuse = ColorF::fromData(params);
2579*8975f5c5SAndroid Build Coastguard Worker }
2580*8975f5c5SAndroid Build Coastguard Worker break;
2581*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::AmbientAndDiffuse:
2582*8975f5c5SAndroid Build Coastguard Worker if (!state->isColorMaterialEnabled())
2583*8975f5c5SAndroid Build Coastguard Worker {
2584*8975f5c5SAndroid Build Coastguard Worker material.ambient = ColorF::fromData(params);
2585*8975f5c5SAndroid Build Coastguard Worker material.diffuse = ColorF::fromData(params);
2586*8975f5c5SAndroid Build Coastguard Worker }
2587*8975f5c5SAndroid Build Coastguard Worker break;
2588*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Specular:
2589*8975f5c5SAndroid Build Coastguard Worker material.specular = ColorF::fromData(params);
2590*8975f5c5SAndroid Build Coastguard Worker break;
2591*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Emission:
2592*8975f5c5SAndroid Build Coastguard Worker material.emissive = ColorF::fromData(params);
2593*8975f5c5SAndroid Build Coastguard Worker break;
2594*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Shininess:
2595*8975f5c5SAndroid Build Coastguard Worker material.specularExponent = *params;
2596*8975f5c5SAndroid Build Coastguard Worker break;
2597*8975f5c5SAndroid Build Coastguard Worker default:
2598*8975f5c5SAndroid Build Coastguard Worker return;
2599*8975f5c5SAndroid Build Coastguard Worker }
2600*8975f5c5SAndroid Build Coastguard Worker }
2601*8975f5c5SAndroid Build Coastguard Worker
GetMaterialParameters(const GLES1State * state,GLenum face,MaterialParameter pname,GLfloat * params)2602*8975f5c5SAndroid Build Coastguard Worker void GetMaterialParameters(const GLES1State *state,
2603*8975f5c5SAndroid Build Coastguard Worker GLenum face,
2604*8975f5c5SAndroid Build Coastguard Worker MaterialParameter pname,
2605*8975f5c5SAndroid Build Coastguard Worker GLfloat *params)
2606*8975f5c5SAndroid Build Coastguard Worker {
2607*8975f5c5SAndroid Build Coastguard Worker const ColorF ¤tColor = state->getCurrentColor();
2608*8975f5c5SAndroid Build Coastguard Worker const MaterialParameters &material = state->materialParameters();
2609*8975f5c5SAndroid Build Coastguard Worker const bool colorMaterialEnabled = state->isColorMaterialEnabled();
2610*8975f5c5SAndroid Build Coastguard Worker
2611*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2612*8975f5c5SAndroid Build Coastguard Worker {
2613*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Ambient:
2614*8975f5c5SAndroid Build Coastguard Worker if (colorMaterialEnabled)
2615*8975f5c5SAndroid Build Coastguard Worker {
2616*8975f5c5SAndroid Build Coastguard Worker currentColor.writeData(params);
2617*8975f5c5SAndroid Build Coastguard Worker }
2618*8975f5c5SAndroid Build Coastguard Worker else
2619*8975f5c5SAndroid Build Coastguard Worker {
2620*8975f5c5SAndroid Build Coastguard Worker material.ambient.writeData(params);
2621*8975f5c5SAndroid Build Coastguard Worker }
2622*8975f5c5SAndroid Build Coastguard Worker break;
2623*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Diffuse:
2624*8975f5c5SAndroid Build Coastguard Worker if (colorMaterialEnabled)
2625*8975f5c5SAndroid Build Coastguard Worker {
2626*8975f5c5SAndroid Build Coastguard Worker currentColor.writeData(params);
2627*8975f5c5SAndroid Build Coastguard Worker }
2628*8975f5c5SAndroid Build Coastguard Worker else
2629*8975f5c5SAndroid Build Coastguard Worker {
2630*8975f5c5SAndroid Build Coastguard Worker material.diffuse.writeData(params);
2631*8975f5c5SAndroid Build Coastguard Worker }
2632*8975f5c5SAndroid Build Coastguard Worker break;
2633*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Specular:
2634*8975f5c5SAndroid Build Coastguard Worker material.specular.writeData(params);
2635*8975f5c5SAndroid Build Coastguard Worker break;
2636*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Emission:
2637*8975f5c5SAndroid Build Coastguard Worker material.emissive.writeData(params);
2638*8975f5c5SAndroid Build Coastguard Worker break;
2639*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Shininess:
2640*8975f5c5SAndroid Build Coastguard Worker *params = material.specularExponent;
2641*8975f5c5SAndroid Build Coastguard Worker break;
2642*8975f5c5SAndroid Build Coastguard Worker default:
2643*8975f5c5SAndroid Build Coastguard Worker return;
2644*8975f5c5SAndroid Build Coastguard Worker }
2645*8975f5c5SAndroid Build Coastguard Worker }
2646*8975f5c5SAndroid Build Coastguard Worker
GetLightModelParameterCount(GLenum pname)2647*8975f5c5SAndroid Build Coastguard Worker unsigned int GetLightModelParameterCount(GLenum pname)
2648*8975f5c5SAndroid Build Coastguard Worker {
2649*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2650*8975f5c5SAndroid Build Coastguard Worker {
2651*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT_MODEL_AMBIENT:
2652*8975f5c5SAndroid Build Coastguard Worker return 4;
2653*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT_MODEL_TWO_SIDE:
2654*8975f5c5SAndroid Build Coastguard Worker return 1;
2655*8975f5c5SAndroid Build Coastguard Worker default:
2656*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2657*8975f5c5SAndroid Build Coastguard Worker return 0;
2658*8975f5c5SAndroid Build Coastguard Worker }
2659*8975f5c5SAndroid Build Coastguard Worker }
2660*8975f5c5SAndroid Build Coastguard Worker
GetLightParameterCount(LightParameter pname)2661*8975f5c5SAndroid Build Coastguard Worker unsigned int GetLightParameterCount(LightParameter pname)
2662*8975f5c5SAndroid Build Coastguard Worker {
2663*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2664*8975f5c5SAndroid Build Coastguard Worker {
2665*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Ambient:
2666*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Diffuse:
2667*8975f5c5SAndroid Build Coastguard Worker case LightParameter::AmbientAndDiffuse:
2668*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Specular:
2669*8975f5c5SAndroid Build Coastguard Worker case LightParameter::Position:
2670*8975f5c5SAndroid Build Coastguard Worker return 4;
2671*8975f5c5SAndroid Build Coastguard Worker case LightParameter::SpotDirection:
2672*8975f5c5SAndroid Build Coastguard Worker return 3;
2673*8975f5c5SAndroid Build Coastguard Worker case LightParameter::SpotExponent:
2674*8975f5c5SAndroid Build Coastguard Worker case LightParameter::SpotCutoff:
2675*8975f5c5SAndroid Build Coastguard Worker case LightParameter::ConstantAttenuation:
2676*8975f5c5SAndroid Build Coastguard Worker case LightParameter::LinearAttenuation:
2677*8975f5c5SAndroid Build Coastguard Worker case LightParameter::QuadraticAttenuation:
2678*8975f5c5SAndroid Build Coastguard Worker return 1;
2679*8975f5c5SAndroid Build Coastguard Worker default:
2680*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2681*8975f5c5SAndroid Build Coastguard Worker return 0;
2682*8975f5c5SAndroid Build Coastguard Worker }
2683*8975f5c5SAndroid Build Coastguard Worker }
2684*8975f5c5SAndroid Build Coastguard Worker
GetMaterialParameterCount(MaterialParameter pname)2685*8975f5c5SAndroid Build Coastguard Worker unsigned int GetMaterialParameterCount(MaterialParameter pname)
2686*8975f5c5SAndroid Build Coastguard Worker {
2687*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2688*8975f5c5SAndroid Build Coastguard Worker {
2689*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Ambient:
2690*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Diffuse:
2691*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::AmbientAndDiffuse:
2692*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Specular:
2693*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Emission:
2694*8975f5c5SAndroid Build Coastguard Worker return 4;
2695*8975f5c5SAndroid Build Coastguard Worker case MaterialParameter::Shininess:
2696*8975f5c5SAndroid Build Coastguard Worker return 1;
2697*8975f5c5SAndroid Build Coastguard Worker default:
2698*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2699*8975f5c5SAndroid Build Coastguard Worker return 0;
2700*8975f5c5SAndroid Build Coastguard Worker }
2701*8975f5c5SAndroid Build Coastguard Worker }
2702*8975f5c5SAndroid Build Coastguard Worker
SetFogParameters(GLES1State * state,GLenum pname,const GLfloat * params)2703*8975f5c5SAndroid Build Coastguard Worker void SetFogParameters(GLES1State *state, GLenum pname, const GLfloat *params)
2704*8975f5c5SAndroid Build Coastguard Worker {
2705*8975f5c5SAndroid Build Coastguard Worker FogParameters &fog = state->fogParameters();
2706*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2707*8975f5c5SAndroid Build Coastguard Worker {
2708*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_MODE:
2709*8975f5c5SAndroid Build Coastguard Worker fog.mode = FromGLenum<FogMode>(static_cast<GLenum>(params[0]));
2710*8975f5c5SAndroid Build Coastguard Worker break;
2711*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_DENSITY:
2712*8975f5c5SAndroid Build Coastguard Worker fog.density = params[0];
2713*8975f5c5SAndroid Build Coastguard Worker break;
2714*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_START:
2715*8975f5c5SAndroid Build Coastguard Worker fog.start = params[0];
2716*8975f5c5SAndroid Build Coastguard Worker break;
2717*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_END:
2718*8975f5c5SAndroid Build Coastguard Worker fog.end = params[0];
2719*8975f5c5SAndroid Build Coastguard Worker break;
2720*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_COLOR:
2721*8975f5c5SAndroid Build Coastguard Worker fog.color = ColorF::fromData(params);
2722*8975f5c5SAndroid Build Coastguard Worker break;
2723*8975f5c5SAndroid Build Coastguard Worker default:
2724*8975f5c5SAndroid Build Coastguard Worker return;
2725*8975f5c5SAndroid Build Coastguard Worker }
2726*8975f5c5SAndroid Build Coastguard Worker }
2727*8975f5c5SAndroid Build Coastguard Worker
GetFogParameters(const GLES1State * state,GLenum pname,GLfloat * params)2728*8975f5c5SAndroid Build Coastguard Worker void GetFogParameters(const GLES1State *state, GLenum pname, GLfloat *params)
2729*8975f5c5SAndroid Build Coastguard Worker {
2730*8975f5c5SAndroid Build Coastguard Worker const FogParameters &fog = state->fogParameters();
2731*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2732*8975f5c5SAndroid Build Coastguard Worker {
2733*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_MODE:
2734*8975f5c5SAndroid Build Coastguard Worker params[0] = static_cast<GLfloat>(ToGLenum(fog.mode));
2735*8975f5c5SAndroid Build Coastguard Worker break;
2736*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_DENSITY:
2737*8975f5c5SAndroid Build Coastguard Worker params[0] = fog.density;
2738*8975f5c5SAndroid Build Coastguard Worker break;
2739*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_START:
2740*8975f5c5SAndroid Build Coastguard Worker params[0] = fog.start;
2741*8975f5c5SAndroid Build Coastguard Worker break;
2742*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_END:
2743*8975f5c5SAndroid Build Coastguard Worker params[0] = fog.end;
2744*8975f5c5SAndroid Build Coastguard Worker break;
2745*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_COLOR:
2746*8975f5c5SAndroid Build Coastguard Worker fog.color.writeData(params);
2747*8975f5c5SAndroid Build Coastguard Worker break;
2748*8975f5c5SAndroid Build Coastguard Worker default:
2749*8975f5c5SAndroid Build Coastguard Worker return;
2750*8975f5c5SAndroid Build Coastguard Worker }
2751*8975f5c5SAndroid Build Coastguard Worker }
2752*8975f5c5SAndroid Build Coastguard Worker
GetFogParameterCount(GLenum pname)2753*8975f5c5SAndroid Build Coastguard Worker unsigned int GetFogParameterCount(GLenum pname)
2754*8975f5c5SAndroid Build Coastguard Worker {
2755*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2756*8975f5c5SAndroid Build Coastguard Worker {
2757*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_MODE:
2758*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_DENSITY:
2759*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_START:
2760*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_END:
2761*8975f5c5SAndroid Build Coastguard Worker return 1;
2762*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_COLOR:
2763*8975f5c5SAndroid Build Coastguard Worker return 4;
2764*8975f5c5SAndroid Build Coastguard Worker default:
2765*8975f5c5SAndroid Build Coastguard Worker return 0;
2766*8975f5c5SAndroid Build Coastguard Worker }
2767*8975f5c5SAndroid Build Coastguard Worker }
2768*8975f5c5SAndroid Build Coastguard Worker
GetTextureEnvParameterCount(TextureEnvParameter pname)2769*8975f5c5SAndroid Build Coastguard Worker unsigned int GetTextureEnvParameterCount(TextureEnvParameter pname)
2770*8975f5c5SAndroid Build Coastguard Worker {
2771*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2772*8975f5c5SAndroid Build Coastguard Worker {
2773*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Mode:
2774*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::CombineRgb:
2775*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::CombineAlpha:
2776*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src0Rgb:
2777*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src1Rgb:
2778*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src2Rgb:
2779*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src0Alpha:
2780*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src1Alpha:
2781*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src2Alpha:
2782*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op0Rgb:
2783*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op1Rgb:
2784*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op2Rgb:
2785*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op0Alpha:
2786*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op1Alpha:
2787*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op2Alpha:
2788*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::RgbScale:
2789*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::AlphaScale:
2790*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::PointCoordReplace:
2791*8975f5c5SAndroid Build Coastguard Worker return 1;
2792*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Color:
2793*8975f5c5SAndroid Build Coastguard Worker return 4;
2794*8975f5c5SAndroid Build Coastguard Worker default:
2795*8975f5c5SAndroid Build Coastguard Worker return 0;
2796*8975f5c5SAndroid Build Coastguard Worker }
2797*8975f5c5SAndroid Build Coastguard Worker }
2798*8975f5c5SAndroid Build Coastguard Worker
ConvertTextureEnvFromInt(TextureEnvParameter pname,const GLint * input,GLfloat * output)2799*8975f5c5SAndroid Build Coastguard Worker void ConvertTextureEnvFromInt(TextureEnvParameter pname, const GLint *input, GLfloat *output)
2800*8975f5c5SAndroid Build Coastguard Worker {
2801*8975f5c5SAndroid Build Coastguard Worker if (IsTextureEnvEnumParameter(pname))
2802*8975f5c5SAndroid Build Coastguard Worker {
2803*8975f5c5SAndroid Build Coastguard Worker ConvertGLenumValue(input[0], output);
2804*8975f5c5SAndroid Build Coastguard Worker return;
2805*8975f5c5SAndroid Build Coastguard Worker }
2806*8975f5c5SAndroid Build Coastguard Worker
2807*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2808*8975f5c5SAndroid Build Coastguard Worker {
2809*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::RgbScale:
2810*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::AlphaScale:
2811*8975f5c5SAndroid Build Coastguard Worker output[0] = static_cast<GLfloat>(input[0]);
2812*8975f5c5SAndroid Build Coastguard Worker break;
2813*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Color:
2814*8975f5c5SAndroid Build Coastguard Worker for (int i = 0; i < 4; i++)
2815*8975f5c5SAndroid Build Coastguard Worker {
2816*8975f5c5SAndroid Build Coastguard Worker output[i] = input[i] / 255.0f;
2817*8975f5c5SAndroid Build Coastguard Worker }
2818*8975f5c5SAndroid Build Coastguard Worker break;
2819*8975f5c5SAndroid Build Coastguard Worker default:
2820*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2821*8975f5c5SAndroid Build Coastguard Worker break;
2822*8975f5c5SAndroid Build Coastguard Worker }
2823*8975f5c5SAndroid Build Coastguard Worker }
2824*8975f5c5SAndroid Build Coastguard Worker
ConvertTextureEnvFromFixed(TextureEnvParameter pname,const GLfixed * input,GLfloat * output)2825*8975f5c5SAndroid Build Coastguard Worker void ConvertTextureEnvFromFixed(TextureEnvParameter pname, const GLfixed *input, GLfloat *output)
2826*8975f5c5SAndroid Build Coastguard Worker {
2827*8975f5c5SAndroid Build Coastguard Worker if (IsTextureEnvEnumParameter(pname))
2828*8975f5c5SAndroid Build Coastguard Worker {
2829*8975f5c5SAndroid Build Coastguard Worker ConvertGLenumValue(input[0], output);
2830*8975f5c5SAndroid Build Coastguard Worker return;
2831*8975f5c5SAndroid Build Coastguard Worker }
2832*8975f5c5SAndroid Build Coastguard Worker
2833*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2834*8975f5c5SAndroid Build Coastguard Worker {
2835*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::RgbScale:
2836*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::AlphaScale:
2837*8975f5c5SAndroid Build Coastguard Worker output[0] = ConvertFixedToFloat(input[0]);
2838*8975f5c5SAndroid Build Coastguard Worker break;
2839*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Color:
2840*8975f5c5SAndroid Build Coastguard Worker for (int i = 0; i < 4; i++)
2841*8975f5c5SAndroid Build Coastguard Worker {
2842*8975f5c5SAndroid Build Coastguard Worker output[i] = ConvertFixedToFloat(input[i]);
2843*8975f5c5SAndroid Build Coastguard Worker }
2844*8975f5c5SAndroid Build Coastguard Worker break;
2845*8975f5c5SAndroid Build Coastguard Worker default:
2846*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2847*8975f5c5SAndroid Build Coastguard Worker break;
2848*8975f5c5SAndroid Build Coastguard Worker }
2849*8975f5c5SAndroid Build Coastguard Worker }
2850*8975f5c5SAndroid Build Coastguard Worker
ConvertTextureEnvToInt(TextureEnvParameter pname,const GLfloat * input,GLint * output)2851*8975f5c5SAndroid Build Coastguard Worker void ConvertTextureEnvToInt(TextureEnvParameter pname, const GLfloat *input, GLint *output)
2852*8975f5c5SAndroid Build Coastguard Worker {
2853*8975f5c5SAndroid Build Coastguard Worker if (IsTextureEnvEnumParameter(pname))
2854*8975f5c5SAndroid Build Coastguard Worker {
2855*8975f5c5SAndroid Build Coastguard Worker ConvertGLenumValue(input[0], output);
2856*8975f5c5SAndroid Build Coastguard Worker return;
2857*8975f5c5SAndroid Build Coastguard Worker }
2858*8975f5c5SAndroid Build Coastguard Worker
2859*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2860*8975f5c5SAndroid Build Coastguard Worker {
2861*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::RgbScale:
2862*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::AlphaScale:
2863*8975f5c5SAndroid Build Coastguard Worker output[0] = static_cast<GLint>(input[0]);
2864*8975f5c5SAndroid Build Coastguard Worker break;
2865*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Color:
2866*8975f5c5SAndroid Build Coastguard Worker for (int i = 0; i < 4; i++)
2867*8975f5c5SAndroid Build Coastguard Worker {
2868*8975f5c5SAndroid Build Coastguard Worker output[i] = static_cast<GLint>(input[i] * 255.0f);
2869*8975f5c5SAndroid Build Coastguard Worker }
2870*8975f5c5SAndroid Build Coastguard Worker break;
2871*8975f5c5SAndroid Build Coastguard Worker default:
2872*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2873*8975f5c5SAndroid Build Coastguard Worker break;
2874*8975f5c5SAndroid Build Coastguard Worker }
2875*8975f5c5SAndroid Build Coastguard Worker }
2876*8975f5c5SAndroid Build Coastguard Worker
ConvertTextureEnvToFixed(TextureEnvParameter pname,const GLfloat * input,GLfixed * output)2877*8975f5c5SAndroid Build Coastguard Worker void ConvertTextureEnvToFixed(TextureEnvParameter pname, const GLfloat *input, GLfixed *output)
2878*8975f5c5SAndroid Build Coastguard Worker {
2879*8975f5c5SAndroid Build Coastguard Worker if (IsTextureEnvEnumParameter(pname))
2880*8975f5c5SAndroid Build Coastguard Worker {
2881*8975f5c5SAndroid Build Coastguard Worker ConvertGLenumValue(input[0], output);
2882*8975f5c5SAndroid Build Coastguard Worker return;
2883*8975f5c5SAndroid Build Coastguard Worker }
2884*8975f5c5SAndroid Build Coastguard Worker
2885*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2886*8975f5c5SAndroid Build Coastguard Worker {
2887*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::RgbScale:
2888*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::AlphaScale:
2889*8975f5c5SAndroid Build Coastguard Worker output[0] = ConvertFloatToFixed(input[0]);
2890*8975f5c5SAndroid Build Coastguard Worker break;
2891*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Color:
2892*8975f5c5SAndroid Build Coastguard Worker for (int i = 0; i < 4; i++)
2893*8975f5c5SAndroid Build Coastguard Worker {
2894*8975f5c5SAndroid Build Coastguard Worker output[i] = ConvertFloatToFixed(input[i]);
2895*8975f5c5SAndroid Build Coastguard Worker }
2896*8975f5c5SAndroid Build Coastguard Worker break;
2897*8975f5c5SAndroid Build Coastguard Worker default:
2898*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2899*8975f5c5SAndroid Build Coastguard Worker break;
2900*8975f5c5SAndroid Build Coastguard Worker }
2901*8975f5c5SAndroid Build Coastguard Worker }
2902*8975f5c5SAndroid Build Coastguard Worker
SetTextureEnv(unsigned int unit,GLES1State * state,TextureEnvTarget target,TextureEnvParameter pname,const GLfloat * params)2903*8975f5c5SAndroid Build Coastguard Worker void SetTextureEnv(unsigned int unit,
2904*8975f5c5SAndroid Build Coastguard Worker GLES1State *state,
2905*8975f5c5SAndroid Build Coastguard Worker TextureEnvTarget target,
2906*8975f5c5SAndroid Build Coastguard Worker TextureEnvParameter pname,
2907*8975f5c5SAndroid Build Coastguard Worker const GLfloat *params)
2908*8975f5c5SAndroid Build Coastguard Worker {
2909*8975f5c5SAndroid Build Coastguard Worker TextureEnvironmentParameters &env = state->textureEnvironment(unit);
2910*8975f5c5SAndroid Build Coastguard Worker GLenum asEnum = ConvertToGLenum(params[0]);
2911*8975f5c5SAndroid Build Coastguard Worker
2912*8975f5c5SAndroid Build Coastguard Worker switch (target)
2913*8975f5c5SAndroid Build Coastguard Worker {
2914*8975f5c5SAndroid Build Coastguard Worker case TextureEnvTarget::Env:
2915*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2916*8975f5c5SAndroid Build Coastguard Worker {
2917*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Mode:
2918*8975f5c5SAndroid Build Coastguard Worker env.mode = FromGLenum<TextureEnvMode>(asEnum);
2919*8975f5c5SAndroid Build Coastguard Worker break;
2920*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::CombineRgb:
2921*8975f5c5SAndroid Build Coastguard Worker env.combineRgb = FromGLenum<TextureCombine>(asEnum);
2922*8975f5c5SAndroid Build Coastguard Worker break;
2923*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::CombineAlpha:
2924*8975f5c5SAndroid Build Coastguard Worker env.combineAlpha = FromGLenum<TextureCombine>(asEnum);
2925*8975f5c5SAndroid Build Coastguard Worker break;
2926*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src0Rgb:
2927*8975f5c5SAndroid Build Coastguard Worker env.src0Rgb = FromGLenum<TextureSrc>(asEnum);
2928*8975f5c5SAndroid Build Coastguard Worker break;
2929*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src1Rgb:
2930*8975f5c5SAndroid Build Coastguard Worker env.src1Rgb = FromGLenum<TextureSrc>(asEnum);
2931*8975f5c5SAndroid Build Coastguard Worker break;
2932*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src2Rgb:
2933*8975f5c5SAndroid Build Coastguard Worker env.src2Rgb = FromGLenum<TextureSrc>(asEnum);
2934*8975f5c5SAndroid Build Coastguard Worker break;
2935*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src0Alpha:
2936*8975f5c5SAndroid Build Coastguard Worker env.src0Alpha = FromGLenum<TextureSrc>(asEnum);
2937*8975f5c5SAndroid Build Coastguard Worker break;
2938*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src1Alpha:
2939*8975f5c5SAndroid Build Coastguard Worker env.src1Alpha = FromGLenum<TextureSrc>(asEnum);
2940*8975f5c5SAndroid Build Coastguard Worker break;
2941*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src2Alpha:
2942*8975f5c5SAndroid Build Coastguard Worker env.src2Alpha = FromGLenum<TextureSrc>(asEnum);
2943*8975f5c5SAndroid Build Coastguard Worker break;
2944*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op0Rgb:
2945*8975f5c5SAndroid Build Coastguard Worker env.op0Rgb = FromGLenum<TextureOp>(asEnum);
2946*8975f5c5SAndroid Build Coastguard Worker break;
2947*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op1Rgb:
2948*8975f5c5SAndroid Build Coastguard Worker env.op1Rgb = FromGLenum<TextureOp>(asEnum);
2949*8975f5c5SAndroid Build Coastguard Worker break;
2950*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op2Rgb:
2951*8975f5c5SAndroid Build Coastguard Worker env.op2Rgb = FromGLenum<TextureOp>(asEnum);
2952*8975f5c5SAndroid Build Coastguard Worker break;
2953*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op0Alpha:
2954*8975f5c5SAndroid Build Coastguard Worker env.op0Alpha = FromGLenum<TextureOp>(asEnum);
2955*8975f5c5SAndroid Build Coastguard Worker break;
2956*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op1Alpha:
2957*8975f5c5SAndroid Build Coastguard Worker env.op1Alpha = FromGLenum<TextureOp>(asEnum);
2958*8975f5c5SAndroid Build Coastguard Worker break;
2959*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op2Alpha:
2960*8975f5c5SAndroid Build Coastguard Worker env.op2Alpha = FromGLenum<TextureOp>(asEnum);
2961*8975f5c5SAndroid Build Coastguard Worker break;
2962*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Color:
2963*8975f5c5SAndroid Build Coastguard Worker env.color = ColorF::fromData(params);
2964*8975f5c5SAndroid Build Coastguard Worker break;
2965*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::RgbScale:
2966*8975f5c5SAndroid Build Coastguard Worker env.rgbScale = params[0];
2967*8975f5c5SAndroid Build Coastguard Worker break;
2968*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::AlphaScale:
2969*8975f5c5SAndroid Build Coastguard Worker env.alphaScale = params[0];
2970*8975f5c5SAndroid Build Coastguard Worker break;
2971*8975f5c5SAndroid Build Coastguard Worker default:
2972*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2973*8975f5c5SAndroid Build Coastguard Worker break;
2974*8975f5c5SAndroid Build Coastguard Worker }
2975*8975f5c5SAndroid Build Coastguard Worker break;
2976*8975f5c5SAndroid Build Coastguard Worker case TextureEnvTarget::PointSprite:
2977*8975f5c5SAndroid Build Coastguard Worker switch (pname)
2978*8975f5c5SAndroid Build Coastguard Worker {
2979*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::PointCoordReplace:
2980*8975f5c5SAndroid Build Coastguard Worker env.pointSpriteCoordReplace = static_cast<bool>(params[0]);
2981*8975f5c5SAndroid Build Coastguard Worker break;
2982*8975f5c5SAndroid Build Coastguard Worker default:
2983*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2984*8975f5c5SAndroid Build Coastguard Worker break;
2985*8975f5c5SAndroid Build Coastguard Worker }
2986*8975f5c5SAndroid Build Coastguard Worker break;
2987*8975f5c5SAndroid Build Coastguard Worker default:
2988*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
2989*8975f5c5SAndroid Build Coastguard Worker break;
2990*8975f5c5SAndroid Build Coastguard Worker }
2991*8975f5c5SAndroid Build Coastguard Worker }
2992*8975f5c5SAndroid Build Coastguard Worker
GetTextureEnv(unsigned int unit,const GLES1State * state,TextureEnvTarget target,TextureEnvParameter pname,GLfloat * params)2993*8975f5c5SAndroid Build Coastguard Worker void GetTextureEnv(unsigned int unit,
2994*8975f5c5SAndroid Build Coastguard Worker const GLES1State *state,
2995*8975f5c5SAndroid Build Coastguard Worker TextureEnvTarget target,
2996*8975f5c5SAndroid Build Coastguard Worker TextureEnvParameter pname,
2997*8975f5c5SAndroid Build Coastguard Worker GLfloat *params)
2998*8975f5c5SAndroid Build Coastguard Worker {
2999*8975f5c5SAndroid Build Coastguard Worker const TextureEnvironmentParameters &env = state->textureEnvironment(unit);
3000*8975f5c5SAndroid Build Coastguard Worker
3001*8975f5c5SAndroid Build Coastguard Worker switch (target)
3002*8975f5c5SAndroid Build Coastguard Worker {
3003*8975f5c5SAndroid Build Coastguard Worker case TextureEnvTarget::Env:
3004*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3005*8975f5c5SAndroid Build Coastguard Worker {
3006*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Mode:
3007*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.mode, params);
3008*8975f5c5SAndroid Build Coastguard Worker break;
3009*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::CombineRgb:
3010*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.combineRgb, params);
3011*8975f5c5SAndroid Build Coastguard Worker break;
3012*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::CombineAlpha:
3013*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.combineAlpha, params);
3014*8975f5c5SAndroid Build Coastguard Worker break;
3015*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src0Rgb:
3016*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.src0Rgb, params);
3017*8975f5c5SAndroid Build Coastguard Worker break;
3018*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src1Rgb:
3019*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.src1Rgb, params);
3020*8975f5c5SAndroid Build Coastguard Worker break;
3021*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src2Rgb:
3022*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.src2Rgb, params);
3023*8975f5c5SAndroid Build Coastguard Worker break;
3024*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src0Alpha:
3025*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.src0Alpha, params);
3026*8975f5c5SAndroid Build Coastguard Worker break;
3027*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src1Alpha:
3028*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.src1Alpha, params);
3029*8975f5c5SAndroid Build Coastguard Worker break;
3030*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Src2Alpha:
3031*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.src2Alpha, params);
3032*8975f5c5SAndroid Build Coastguard Worker break;
3033*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op0Rgb:
3034*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.op0Rgb, params);
3035*8975f5c5SAndroid Build Coastguard Worker break;
3036*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op1Rgb:
3037*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.op1Rgb, params);
3038*8975f5c5SAndroid Build Coastguard Worker break;
3039*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op2Rgb:
3040*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.op2Rgb, params);
3041*8975f5c5SAndroid Build Coastguard Worker break;
3042*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op0Alpha:
3043*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.op0Alpha, params);
3044*8975f5c5SAndroid Build Coastguard Worker break;
3045*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op1Alpha:
3046*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.op1Alpha, params);
3047*8975f5c5SAndroid Build Coastguard Worker break;
3048*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Op2Alpha:
3049*8975f5c5SAndroid Build Coastguard Worker ConvertPackedEnum(env.op2Alpha, params);
3050*8975f5c5SAndroid Build Coastguard Worker break;
3051*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::Color:
3052*8975f5c5SAndroid Build Coastguard Worker env.color.writeData(params);
3053*8975f5c5SAndroid Build Coastguard Worker break;
3054*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::RgbScale:
3055*8975f5c5SAndroid Build Coastguard Worker *params = env.rgbScale;
3056*8975f5c5SAndroid Build Coastguard Worker break;
3057*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::AlphaScale:
3058*8975f5c5SAndroid Build Coastguard Worker *params = env.alphaScale;
3059*8975f5c5SAndroid Build Coastguard Worker break;
3060*8975f5c5SAndroid Build Coastguard Worker default:
3061*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
3062*8975f5c5SAndroid Build Coastguard Worker break;
3063*8975f5c5SAndroid Build Coastguard Worker }
3064*8975f5c5SAndroid Build Coastguard Worker break;
3065*8975f5c5SAndroid Build Coastguard Worker case TextureEnvTarget::PointSprite:
3066*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3067*8975f5c5SAndroid Build Coastguard Worker {
3068*8975f5c5SAndroid Build Coastguard Worker case TextureEnvParameter::PointCoordReplace:
3069*8975f5c5SAndroid Build Coastguard Worker *params = static_cast<GLfloat>(env.pointSpriteCoordReplace);
3070*8975f5c5SAndroid Build Coastguard Worker break;
3071*8975f5c5SAndroid Build Coastguard Worker default:
3072*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
3073*8975f5c5SAndroid Build Coastguard Worker break;
3074*8975f5c5SAndroid Build Coastguard Worker }
3075*8975f5c5SAndroid Build Coastguard Worker break;
3076*8975f5c5SAndroid Build Coastguard Worker default:
3077*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
3078*8975f5c5SAndroid Build Coastguard Worker break;
3079*8975f5c5SAndroid Build Coastguard Worker }
3080*8975f5c5SAndroid Build Coastguard Worker }
3081*8975f5c5SAndroid Build Coastguard Worker
GetPointParameterCount(PointParameter pname)3082*8975f5c5SAndroid Build Coastguard Worker unsigned int GetPointParameterCount(PointParameter pname)
3083*8975f5c5SAndroid Build Coastguard Worker {
3084*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3085*8975f5c5SAndroid Build Coastguard Worker {
3086*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointSizeMin:
3087*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointSizeMax:
3088*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointFadeThresholdSize:
3089*8975f5c5SAndroid Build Coastguard Worker return 1;
3090*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointDistanceAttenuation:
3091*8975f5c5SAndroid Build Coastguard Worker return 3;
3092*8975f5c5SAndroid Build Coastguard Worker default:
3093*8975f5c5SAndroid Build Coastguard Worker return 0;
3094*8975f5c5SAndroid Build Coastguard Worker }
3095*8975f5c5SAndroid Build Coastguard Worker }
3096*8975f5c5SAndroid Build Coastguard Worker
SetPointParameter(GLES1State * state,PointParameter pname,const GLfloat * params)3097*8975f5c5SAndroid Build Coastguard Worker void SetPointParameter(GLES1State *state, PointParameter pname, const GLfloat *params)
3098*8975f5c5SAndroid Build Coastguard Worker {
3099*8975f5c5SAndroid Build Coastguard Worker
3100*8975f5c5SAndroid Build Coastguard Worker PointParameters &pointParams = state->pointParameters();
3101*8975f5c5SAndroid Build Coastguard Worker
3102*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3103*8975f5c5SAndroid Build Coastguard Worker {
3104*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointSizeMin:
3105*8975f5c5SAndroid Build Coastguard Worker pointParams.pointSizeMin = params[0];
3106*8975f5c5SAndroid Build Coastguard Worker break;
3107*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointSizeMax:
3108*8975f5c5SAndroid Build Coastguard Worker pointParams.pointSizeMax = params[0];
3109*8975f5c5SAndroid Build Coastguard Worker break;
3110*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointFadeThresholdSize:
3111*8975f5c5SAndroid Build Coastguard Worker pointParams.pointFadeThresholdSize = params[0];
3112*8975f5c5SAndroid Build Coastguard Worker break;
3113*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointDistanceAttenuation:
3114*8975f5c5SAndroid Build Coastguard Worker for (unsigned int i = 0; i < 3; i++)
3115*8975f5c5SAndroid Build Coastguard Worker {
3116*8975f5c5SAndroid Build Coastguard Worker pointParams.pointDistanceAttenuation[i] = params[i];
3117*8975f5c5SAndroid Build Coastguard Worker }
3118*8975f5c5SAndroid Build Coastguard Worker break;
3119*8975f5c5SAndroid Build Coastguard Worker default:
3120*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
3121*8975f5c5SAndroid Build Coastguard Worker }
3122*8975f5c5SAndroid Build Coastguard Worker }
3123*8975f5c5SAndroid Build Coastguard Worker
GetPointParameter(const GLES1State * state,PointParameter pname,GLfloat * params)3124*8975f5c5SAndroid Build Coastguard Worker void GetPointParameter(const GLES1State *state, PointParameter pname, GLfloat *params)
3125*8975f5c5SAndroid Build Coastguard Worker {
3126*8975f5c5SAndroid Build Coastguard Worker const PointParameters &pointParams = state->pointParameters();
3127*8975f5c5SAndroid Build Coastguard Worker
3128*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3129*8975f5c5SAndroid Build Coastguard Worker {
3130*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointSizeMin:
3131*8975f5c5SAndroid Build Coastguard Worker params[0] = pointParams.pointSizeMin;
3132*8975f5c5SAndroid Build Coastguard Worker break;
3133*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointSizeMax:
3134*8975f5c5SAndroid Build Coastguard Worker params[0] = pointParams.pointSizeMax;
3135*8975f5c5SAndroid Build Coastguard Worker break;
3136*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointFadeThresholdSize:
3137*8975f5c5SAndroid Build Coastguard Worker params[0] = pointParams.pointFadeThresholdSize;
3138*8975f5c5SAndroid Build Coastguard Worker break;
3139*8975f5c5SAndroid Build Coastguard Worker case PointParameter::PointDistanceAttenuation:
3140*8975f5c5SAndroid Build Coastguard Worker for (unsigned int i = 0; i < 3; i++)
3141*8975f5c5SAndroid Build Coastguard Worker {
3142*8975f5c5SAndroid Build Coastguard Worker params[i] = pointParams.pointDistanceAttenuation[i];
3143*8975f5c5SAndroid Build Coastguard Worker }
3144*8975f5c5SAndroid Build Coastguard Worker break;
3145*8975f5c5SAndroid Build Coastguard Worker default:
3146*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
3147*8975f5c5SAndroid Build Coastguard Worker }
3148*8975f5c5SAndroid Build Coastguard Worker }
3149*8975f5c5SAndroid Build Coastguard Worker
SetPointSize(GLES1State * state,GLfloat size)3150*8975f5c5SAndroid Build Coastguard Worker void SetPointSize(GLES1State *state, GLfloat size)
3151*8975f5c5SAndroid Build Coastguard Worker {
3152*8975f5c5SAndroid Build Coastguard Worker PointParameters ¶ms = state->pointParameters();
3153*8975f5c5SAndroid Build Coastguard Worker params.pointSize = size;
3154*8975f5c5SAndroid Build Coastguard Worker }
3155*8975f5c5SAndroid Build Coastguard Worker
GetPointSize(const GLES1State * state,GLfloat * sizeOut)3156*8975f5c5SAndroid Build Coastguard Worker void GetPointSize(const GLES1State *state, GLfloat *sizeOut)
3157*8975f5c5SAndroid Build Coastguard Worker {
3158*8975f5c5SAndroid Build Coastguard Worker const PointParameters ¶ms = state->pointParameters();
3159*8975f5c5SAndroid Build Coastguard Worker *sizeOut = params.pointSize;
3160*8975f5c5SAndroid Build Coastguard Worker }
3161*8975f5c5SAndroid Build Coastguard Worker
GetTexParameterCount(GLenum pname)3162*8975f5c5SAndroid Build Coastguard Worker unsigned int GetTexParameterCount(GLenum pname)
3163*8975f5c5SAndroid Build Coastguard Worker {
3164*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3165*8975f5c5SAndroid Build Coastguard Worker {
3166*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_CROP_RECT_OES:
3167*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BORDER_COLOR:
3168*8975f5c5SAndroid Build Coastguard Worker return 4;
3169*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAG_FILTER:
3170*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_FILTER:
3171*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_S:
3172*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_T:
3173*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_USAGE_ANGLE:
3174*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_ANISOTROPY_EXT:
3175*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_IMMUTABLE_FORMAT:
3176*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_WRAP_R:
3177*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_IMMUTABLE_LEVELS:
3178*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_R:
3179*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_G:
3180*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_B:
3181*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SWIZZLE_A:
3182*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BASE_LEVEL:
3183*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_LEVEL:
3184*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MIN_LOD:
3185*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MAX_LOD:
3186*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_MODE:
3187*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COMPARE_FUNC:
3188*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_SRGB_DECODE_EXT:
3189*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_STENCIL_TEXTURE_MODE:
3190*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_NATIVE_ID_ANGLE:
3191*8975f5c5SAndroid Build Coastguard Worker case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
3192*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERABILITY_VALIDATION_ANGLE:
3193*8975f5c5SAndroid Build Coastguard Worker return 1;
3194*8975f5c5SAndroid Build Coastguard Worker default:
3195*8975f5c5SAndroid Build Coastguard Worker return 0;
3196*8975f5c5SAndroid Build Coastguard Worker }
3197*8975f5c5SAndroid Build Coastguard Worker }
3198*8975f5c5SAndroid Build Coastguard Worker
GetQueryParameterInfo(const State & glState,GLenum pname,GLenum * type,unsigned int * numParams)3199*8975f5c5SAndroid Build Coastguard Worker bool GetQueryParameterInfo(const State &glState,
3200*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
3201*8975f5c5SAndroid Build Coastguard Worker GLenum *type,
3202*8975f5c5SAndroid Build Coastguard Worker unsigned int *numParams)
3203*8975f5c5SAndroid Build Coastguard Worker {
3204*8975f5c5SAndroid Build Coastguard Worker const Caps &caps = glState.getCaps();
3205*8975f5c5SAndroid Build Coastguard Worker const Extensions &extensions = glState.getExtensions();
3206*8975f5c5SAndroid Build Coastguard Worker GLint clientMajorVersion = glState.getClientMajorVersion();
3207*8975f5c5SAndroid Build Coastguard Worker
3208*8975f5c5SAndroid Build Coastguard Worker // Please note: the query type returned for DEPTH_CLEAR_VALUE in this implementation
3209*8975f5c5SAndroid Build Coastguard Worker // is FLOAT rather than INT, as would be suggested by the GL ES 2.0 spec. This is due
3210*8975f5c5SAndroid Build Coastguard Worker // to the fact that it is stored internally as a float, and so would require conversion
3211*8975f5c5SAndroid Build Coastguard Worker // if returned from Context::getIntegerv. Since this conversion is already implemented
3212*8975f5c5SAndroid Build Coastguard Worker // in the case that one calls glGetIntegerv to retrieve a float-typed state variable, we
3213*8975f5c5SAndroid Build Coastguard Worker // place DEPTH_CLEAR_VALUE with the floats. This should make no difference to the calling
3214*8975f5c5SAndroid Build Coastguard Worker // application.
3215*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3216*8975f5c5SAndroid Build Coastguard Worker {
3217*8975f5c5SAndroid Build Coastguard Worker case GL_COMPRESSED_TEXTURE_FORMATS:
3218*8975f5c5SAndroid Build Coastguard Worker {
3219*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3220*8975f5c5SAndroid Build Coastguard Worker *numParams = static_cast<unsigned int>(caps.compressedTextureFormats.size());
3221*8975f5c5SAndroid Build Coastguard Worker return true;
3222*8975f5c5SAndroid Build Coastguard Worker }
3223*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_BINARY_FORMATS:
3224*8975f5c5SAndroid Build Coastguard Worker {
3225*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3226*8975f5c5SAndroid Build Coastguard Worker *numParams = static_cast<unsigned int>(caps.shaderBinaryFormats.size());
3227*8975f5c5SAndroid Build Coastguard Worker return true;
3228*8975f5c5SAndroid Build Coastguard Worker }
3229*8975f5c5SAndroid Build Coastguard Worker
3230*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_ATTRIBS:
3231*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_UNIFORM_VECTORS:
3232*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VARYING_VECTORS:
3233*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
3234*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:
3235*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TEXTURE_IMAGE_UNITS:
3236*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
3237*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_RENDERBUFFER_SIZE:
3238*8975f5c5SAndroid Build Coastguard Worker case GL_NUM_SHADER_BINARY_FORMATS:
3239*8975f5c5SAndroid Build Coastguard Worker case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
3240*8975f5c5SAndroid Build Coastguard Worker case GL_ARRAY_BUFFER_BINDING:
3241*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_BINDING: // GL_FRAMEBUFFER_BINDING now equivalent to
3242*8975f5c5SAndroid Build Coastguard Worker // GL_DRAW_FRAMEBUFFER_BINDING
3243*8975f5c5SAndroid Build Coastguard Worker case GL_RENDERBUFFER_BINDING:
3244*8975f5c5SAndroid Build Coastguard Worker case GL_CURRENT_PROGRAM:
3245*8975f5c5SAndroid Build Coastguard Worker case GL_PACK_ALIGNMENT:
3246*8975f5c5SAndroid Build Coastguard Worker case GL_UNPACK_ALIGNMENT:
3247*8975f5c5SAndroid Build Coastguard Worker case GL_GENERATE_MIPMAP_HINT:
3248*8975f5c5SAndroid Build Coastguard Worker case GL_RED_BITS:
3249*8975f5c5SAndroid Build Coastguard Worker case GL_GREEN_BITS:
3250*8975f5c5SAndroid Build Coastguard Worker case GL_BLUE_BITS:
3251*8975f5c5SAndroid Build Coastguard Worker case GL_ALPHA_BITS:
3252*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_BITS:
3253*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_BITS:
3254*8975f5c5SAndroid Build Coastguard Worker case GL_ELEMENT_ARRAY_BUFFER_BINDING:
3255*8975f5c5SAndroid Build Coastguard Worker case GL_CULL_FACE_MODE:
3256*8975f5c5SAndroid Build Coastguard Worker case GL_FRONT_FACE:
3257*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_TEXTURE:
3258*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_FUNC:
3259*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_VALUE_MASK:
3260*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_REF:
3261*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_FAIL:
3262*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_PASS_DEPTH_FAIL:
3263*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_PASS_DEPTH_PASS:
3264*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_BACK_FUNC:
3265*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_BACK_VALUE_MASK:
3266*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_BACK_REF:
3267*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_BACK_FAIL:
3268*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
3269*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_BACK_PASS_DEPTH_PASS:
3270*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_FUNC:
3271*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_SRC_RGB:
3272*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_SRC_ALPHA:
3273*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_DST_RGB:
3274*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_DST_ALPHA:
3275*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_EQUATION_RGB:
3276*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_EQUATION_ALPHA:
3277*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_WRITEMASK:
3278*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_BACK_WRITEMASK:
3279*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_CLEAR_VALUE:
3280*8975f5c5SAndroid Build Coastguard Worker case GL_SUBPIXEL_BITS:
3281*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TEXTURE_SIZE:
3282*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_CUBE_MAP_TEXTURE_SIZE:
3283*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLE_BUFFERS:
3284*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLES:
3285*8975f5c5SAndroid Build Coastguard Worker case GL_IMPLEMENTATION_COLOR_READ_TYPE:
3286*8975f5c5SAndroid Build Coastguard Worker case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
3287*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_2D:
3288*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_CUBE_MAP:
3289*8975f5c5SAndroid Build Coastguard Worker case GL_RESET_NOTIFICATION_STRATEGY_EXT:
3290*8975f5c5SAndroid Build Coastguard Worker case GL_QUERY_COUNTER_BITS_EXT:
3291*8975f5c5SAndroid Build Coastguard Worker {
3292*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3293*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3294*8975f5c5SAndroid Build Coastguard Worker return true;
3295*8975f5c5SAndroid Build Coastguard Worker }
3296*8975f5c5SAndroid Build Coastguard Worker case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
3297*8975f5c5SAndroid Build Coastguard Worker {
3298*8975f5c5SAndroid Build Coastguard Worker if (!extensions.packReverseRowOrderANGLE)
3299*8975f5c5SAndroid Build Coastguard Worker {
3300*8975f5c5SAndroid Build Coastguard Worker return false;
3301*8975f5c5SAndroid Build Coastguard Worker }
3302*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3303*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3304*8975f5c5SAndroid Build Coastguard Worker return true;
3305*8975f5c5SAndroid Build Coastguard Worker }
3306*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_RECTANGLE_TEXTURE_SIZE_ANGLE:
3307*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_RECTANGLE_ANGLE:
3308*8975f5c5SAndroid Build Coastguard Worker {
3309*8975f5c5SAndroid Build Coastguard Worker if (!extensions.textureRectangleANGLE)
3310*8975f5c5SAndroid Build Coastguard Worker {
3311*8975f5c5SAndroid Build Coastguard Worker return false;
3312*8975f5c5SAndroid Build Coastguard Worker }
3313*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3314*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3315*8975f5c5SAndroid Build Coastguard Worker return true;
3316*8975f5c5SAndroid Build Coastguard Worker }
3317*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_DRAW_BUFFERS_EXT:
3318*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COLOR_ATTACHMENTS_EXT:
3319*8975f5c5SAndroid Build Coastguard Worker {
3320*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.drawBuffersEXT)
3321*8975f5c5SAndroid Build Coastguard Worker {
3322*8975f5c5SAndroid Build Coastguard Worker return false;
3323*8975f5c5SAndroid Build Coastguard Worker }
3324*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3325*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3326*8975f5c5SAndroid Build Coastguard Worker return true;
3327*8975f5c5SAndroid Build Coastguard Worker }
3328*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_ADVANCED_COHERENT_KHR:
3329*8975f5c5SAndroid Build Coastguard Worker {
3330*8975f5c5SAndroid Build Coastguard Worker if (clientMajorVersion < 2 || !extensions.blendEquationAdvancedCoherentKHR)
3331*8975f5c5SAndroid Build Coastguard Worker {
3332*8975f5c5SAndroid Build Coastguard Worker return false;
3333*8975f5c5SAndroid Build Coastguard Worker }
3334*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3335*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3336*8975f5c5SAndroid Build Coastguard Worker return true;
3337*8975f5c5SAndroid Build Coastguard Worker }
3338*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VIEWPORT_DIMS:
3339*8975f5c5SAndroid Build Coastguard Worker {
3340*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3341*8975f5c5SAndroid Build Coastguard Worker *numParams = 2;
3342*8975f5c5SAndroid Build Coastguard Worker return true;
3343*8975f5c5SAndroid Build Coastguard Worker }
3344*8975f5c5SAndroid Build Coastguard Worker case GL_VIEWPORT:
3345*8975f5c5SAndroid Build Coastguard Worker case GL_SCISSOR_BOX:
3346*8975f5c5SAndroid Build Coastguard Worker {
3347*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3348*8975f5c5SAndroid Build Coastguard Worker *numParams = 4;
3349*8975f5c5SAndroid Build Coastguard Worker return true;
3350*8975f5c5SAndroid Build Coastguard Worker }
3351*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_COMPILER:
3352*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLE_COVERAGE_INVERT:
3353*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_WRITEMASK:
3354*8975f5c5SAndroid Build Coastguard Worker case GL_CULL_FACE: // CULL_FACE through DITHER are natural to IsEnabled,
3355*8975f5c5SAndroid Build Coastguard Worker case GL_POLYGON_OFFSET_FILL: // but can be retrieved through the Get{Type}v queries.
3356*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLE_ALPHA_TO_COVERAGE: // For this purpose, they are treated here as
3357*8975f5c5SAndroid Build Coastguard Worker // bool-natural
3358*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLE_COVERAGE:
3359*8975f5c5SAndroid Build Coastguard Worker case GL_SCISSOR_TEST:
3360*8975f5c5SAndroid Build Coastguard Worker case GL_STENCIL_TEST:
3361*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_TEST:
3362*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND:
3363*8975f5c5SAndroid Build Coastguard Worker case GL_DITHER:
3364*8975f5c5SAndroid Build Coastguard Worker case GL_CONTEXT_ROBUST_ACCESS_EXT:
3365*8975f5c5SAndroid Build Coastguard Worker {
3366*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3367*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3368*8975f5c5SAndroid Build Coastguard Worker return true;
3369*8975f5c5SAndroid Build Coastguard Worker }
3370*8975f5c5SAndroid Build Coastguard Worker case GL_POLYGON_OFFSET_POINT_NV:
3371*8975f5c5SAndroid Build Coastguard Worker {
3372*8975f5c5SAndroid Build Coastguard Worker if (!extensions.polygonModeNV)
3373*8975f5c5SAndroid Build Coastguard Worker {
3374*8975f5c5SAndroid Build Coastguard Worker return false;
3375*8975f5c5SAndroid Build Coastguard Worker }
3376*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3377*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3378*8975f5c5SAndroid Build Coastguard Worker return true;
3379*8975f5c5SAndroid Build Coastguard Worker }
3380*8975f5c5SAndroid Build Coastguard Worker case GL_POLYGON_OFFSET_LINE_NV: // = GL_POLYGON_OFFSET_LINE_ANGLE
3381*8975f5c5SAndroid Build Coastguard Worker {
3382*8975f5c5SAndroid Build Coastguard Worker if (!extensions.polygonModeAny())
3383*8975f5c5SAndroid Build Coastguard Worker {
3384*8975f5c5SAndroid Build Coastguard Worker return false;
3385*8975f5c5SAndroid Build Coastguard Worker }
3386*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3387*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3388*8975f5c5SAndroid Build Coastguard Worker return true;
3389*8975f5c5SAndroid Build Coastguard Worker }
3390*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_CLAMP_EXT:
3391*8975f5c5SAndroid Build Coastguard Worker {
3392*8975f5c5SAndroid Build Coastguard Worker if (!extensions.depthClampEXT)
3393*8975f5c5SAndroid Build Coastguard Worker {
3394*8975f5c5SAndroid Build Coastguard Worker return false;
3395*8975f5c5SAndroid Build Coastguard Worker }
3396*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3397*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3398*8975f5c5SAndroid Build Coastguard Worker return true;
3399*8975f5c5SAndroid Build Coastguard Worker }
3400*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_LOGIC_OP:
3401*8975f5c5SAndroid Build Coastguard Worker {
3402*8975f5c5SAndroid Build Coastguard Worker if (clientMajorVersion == 1)
3403*8975f5c5SAndroid Build Coastguard Worker {
3404*8975f5c5SAndroid Build Coastguard Worker // Handle logicOp in GLES1 through GLES1 state management.
3405*8975f5c5SAndroid Build Coastguard Worker break;
3406*8975f5c5SAndroid Build Coastguard Worker }
3407*8975f5c5SAndroid Build Coastguard Worker
3408*8975f5c5SAndroid Build Coastguard Worker if (!extensions.logicOpANGLE)
3409*8975f5c5SAndroid Build Coastguard Worker {
3410*8975f5c5SAndroid Build Coastguard Worker return false;
3411*8975f5c5SAndroid Build Coastguard Worker }
3412*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3413*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3414*8975f5c5SAndroid Build Coastguard Worker return true;
3415*8975f5c5SAndroid Build Coastguard Worker }
3416*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_WRITEMASK:
3417*8975f5c5SAndroid Build Coastguard Worker {
3418*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3419*8975f5c5SAndroid Build Coastguard Worker *numParams = 4;
3420*8975f5c5SAndroid Build Coastguard Worker return true;
3421*8975f5c5SAndroid Build Coastguard Worker }
3422*8975f5c5SAndroid Build Coastguard Worker case GL_POLYGON_OFFSET_FACTOR:
3423*8975f5c5SAndroid Build Coastguard Worker case GL_POLYGON_OFFSET_UNITS:
3424*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLE_COVERAGE_VALUE:
3425*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_CLEAR_VALUE:
3426*8975f5c5SAndroid Build Coastguard Worker case GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY:
3427*8975f5c5SAndroid Build Coastguard Worker case GL_LINE_WIDTH:
3428*8975f5c5SAndroid Build Coastguard Worker {
3429*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3430*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3431*8975f5c5SAndroid Build Coastguard Worker return true;
3432*8975f5c5SAndroid Build Coastguard Worker }
3433*8975f5c5SAndroid Build Coastguard Worker case GL_POLYGON_OFFSET_CLAMP_EXT:
3434*8975f5c5SAndroid Build Coastguard Worker if (!extensions.polygonOffsetClampEXT)
3435*8975f5c5SAndroid Build Coastguard Worker {
3436*8975f5c5SAndroid Build Coastguard Worker return false;
3437*8975f5c5SAndroid Build Coastguard Worker }
3438*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3439*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3440*8975f5c5SAndroid Build Coastguard Worker return true;
3441*8975f5c5SAndroid Build Coastguard Worker case GL_ALIASED_LINE_WIDTH_RANGE:
3442*8975f5c5SAndroid Build Coastguard Worker case GL_MULTISAMPLE_LINE_WIDTH_RANGE:
3443*8975f5c5SAndroid Build Coastguard Worker case GL_ALIASED_POINT_SIZE_RANGE:
3444*8975f5c5SAndroid Build Coastguard Worker case GL_DEPTH_RANGE:
3445*8975f5c5SAndroid Build Coastguard Worker {
3446*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3447*8975f5c5SAndroid Build Coastguard Worker *numParams = 2;
3448*8975f5c5SAndroid Build Coastguard Worker return true;
3449*8975f5c5SAndroid Build Coastguard Worker }
3450*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_CLEAR_VALUE:
3451*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_COLOR:
3452*8975f5c5SAndroid Build Coastguard Worker {
3453*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3454*8975f5c5SAndroid Build Coastguard Worker *numParams = 4;
3455*8975f5c5SAndroid Build Coastguard Worker return true;
3456*8975f5c5SAndroid Build Coastguard Worker }
3457*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
3458*8975f5c5SAndroid Build Coastguard Worker if (!extensions.textureFilterAnisotropicEXT)
3459*8975f5c5SAndroid Build Coastguard Worker {
3460*8975f5c5SAndroid Build Coastguard Worker return false;
3461*8975f5c5SAndroid Build Coastguard Worker }
3462*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3463*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3464*8975f5c5SAndroid Build Coastguard Worker return true;
3465*8975f5c5SAndroid Build Coastguard Worker case GL_TIMESTAMP_EXT:
3466*8975f5c5SAndroid Build Coastguard Worker if (!extensions.disjointTimerQueryEXT)
3467*8975f5c5SAndroid Build Coastguard Worker {
3468*8975f5c5SAndroid Build Coastguard Worker return false;
3469*8975f5c5SAndroid Build Coastguard Worker }
3470*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT_64_ANGLEX;
3471*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3472*8975f5c5SAndroid Build Coastguard Worker return true;
3473*8975f5c5SAndroid Build Coastguard Worker case GL_GPU_DISJOINT_EXT:
3474*8975f5c5SAndroid Build Coastguard Worker if (!extensions.disjointTimerQueryEXT)
3475*8975f5c5SAndroid Build Coastguard Worker {
3476*8975f5c5SAndroid Build Coastguard Worker return false;
3477*8975f5c5SAndroid Build Coastguard Worker }
3478*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3479*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3480*8975f5c5SAndroid Build Coastguard Worker return true;
3481*8975f5c5SAndroid Build Coastguard Worker case GL_COVERAGE_MODULATION_CHROMIUM:
3482*8975f5c5SAndroid Build Coastguard Worker if (!extensions.framebufferMixedSamplesCHROMIUM)
3483*8975f5c5SAndroid Build Coastguard Worker {
3484*8975f5c5SAndroid Build Coastguard Worker return false;
3485*8975f5c5SAndroid Build Coastguard Worker }
3486*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3487*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3488*8975f5c5SAndroid Build Coastguard Worker return true;
3489*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_EXTERNAL_OES:
3490*8975f5c5SAndroid Build Coastguard Worker if (!extensions.EGLStreamConsumerExternalNV && !extensions.EGLImageExternalOES)
3491*8975f5c5SAndroid Build Coastguard Worker {
3492*8975f5c5SAndroid Build Coastguard Worker return false;
3493*8975f5c5SAndroid Build Coastguard Worker }
3494*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3495*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3496*8975f5c5SAndroid Build Coastguard Worker return true;
3497*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_CLIP_DISTANCES_EXT: // case GL_MAX_CLIP_PLANES
3498*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_DISTANCE0_EXT:
3499*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_DISTANCE1_EXT:
3500*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_DISTANCE2_EXT:
3501*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_DISTANCE3_EXT:
3502*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_DISTANCE4_EXT:
3503*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_DISTANCE5_EXT:
3504*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_DISTANCE6_EXT:
3505*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_DISTANCE7_EXT:
3506*8975f5c5SAndroid Build Coastguard Worker if (clientMajorVersion < 2)
3507*8975f5c5SAndroid Build Coastguard Worker {
3508*8975f5c5SAndroid Build Coastguard Worker break;
3509*8975f5c5SAndroid Build Coastguard Worker }
3510*8975f5c5SAndroid Build Coastguard Worker if (!extensions.clipDistanceAPPLE && !extensions.clipCullDistanceAny())
3511*8975f5c5SAndroid Build Coastguard Worker {
3512*8975f5c5SAndroid Build Coastguard Worker // NOTE(hqle): if client version is 1. GL_MAX_CLIP_DISTANCES_EXT is equal
3513*8975f5c5SAndroid Build Coastguard Worker // to GL_MAX_CLIP_PLANES which is a valid enum.
3514*8975f5c5SAndroid Build Coastguard Worker return false;
3515*8975f5c5SAndroid Build Coastguard Worker }
3516*8975f5c5SAndroid Build Coastguard Worker *type = (pname == GL_MAX_CLIP_DISTANCES_EXT) ? GL_INT : GL_BOOL;
3517*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3518*8975f5c5SAndroid Build Coastguard Worker return true;
3519*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_CULL_DISTANCES_EXT:
3520*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES_EXT:
3521*8975f5c5SAndroid Build Coastguard Worker if (!extensions.clipCullDistanceAny())
3522*8975f5c5SAndroid Build Coastguard Worker {
3523*8975f5c5SAndroid Build Coastguard Worker return false;
3524*8975f5c5SAndroid Build Coastguard Worker }
3525*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3526*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3527*8975f5c5SAndroid Build Coastguard Worker return true;
3528*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_ORIGIN_EXT:
3529*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_DEPTH_MODE_EXT:
3530*8975f5c5SAndroid Build Coastguard Worker if (!extensions.clipControlEXT)
3531*8975f5c5SAndroid Build Coastguard Worker {
3532*8975f5c5SAndroid Build Coastguard Worker return false;
3533*8975f5c5SAndroid Build Coastguard Worker }
3534*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3535*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3536*8975f5c5SAndroid Build Coastguard Worker return true;
3537*8975f5c5SAndroid Build Coastguard Worker case GL_POLYGON_MODE_NV: // = GL_POLYGON_MODE_ANGLE
3538*8975f5c5SAndroid Build Coastguard Worker {
3539*8975f5c5SAndroid Build Coastguard Worker if (!extensions.polygonModeAny())
3540*8975f5c5SAndroid Build Coastguard Worker {
3541*8975f5c5SAndroid Build Coastguard Worker return false;
3542*8975f5c5SAndroid Build Coastguard Worker }
3543*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3544*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3545*8975f5c5SAndroid Build Coastguard Worker return true;
3546*8975f5c5SAndroid Build Coastguard Worker }
3547*8975f5c5SAndroid Build Coastguard Worker case GL_PRIMITIVE_BOUNDING_BOX:
3548*8975f5c5SAndroid Build Coastguard Worker if (!extensions.primitiveBoundingBoxAny())
3549*8975f5c5SAndroid Build Coastguard Worker {
3550*8975f5c5SAndroid Build Coastguard Worker return false;
3551*8975f5c5SAndroid Build Coastguard Worker }
3552*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3553*8975f5c5SAndroid Build Coastguard Worker *numParams = 8;
3554*8975f5c5SAndroid Build Coastguard Worker return true;
3555*8975f5c5SAndroid Build Coastguard Worker case GL_SHADING_RATE_QCOM:
3556*8975f5c5SAndroid Build Coastguard Worker if (!extensions.shadingRateQCOM)
3557*8975f5c5SAndroid Build Coastguard Worker {
3558*8975f5c5SAndroid Build Coastguard Worker return false;
3559*8975f5c5SAndroid Build Coastguard Worker }
3560*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3561*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3562*8975f5c5SAndroid Build Coastguard Worker return true;
3563*8975f5c5SAndroid Build Coastguard Worker }
3564*8975f5c5SAndroid Build Coastguard Worker
3565*8975f5c5SAndroid Build Coastguard Worker if (glState.getClientVersion() >= Version(3, 2))
3566*8975f5c5SAndroid Build Coastguard Worker {
3567*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3568*8975f5c5SAndroid Build Coastguard Worker {
3569*8975f5c5SAndroid Build Coastguard Worker case GL_CONTEXT_FLAGS:
3570*8975f5c5SAndroid Build Coastguard Worker {
3571*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3572*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3573*8975f5c5SAndroid Build Coastguard Worker return true;
3574*8975f5c5SAndroid Build Coastguard Worker }
3575*8975f5c5SAndroid Build Coastguard Worker }
3576*8975f5c5SAndroid Build Coastguard Worker }
3577*8975f5c5SAndroid Build Coastguard Worker
3578*8975f5c5SAndroid Build Coastguard Worker if (extensions.debugKHR)
3579*8975f5c5SAndroid Build Coastguard Worker {
3580*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3581*8975f5c5SAndroid Build Coastguard Worker {
3582*8975f5c5SAndroid Build Coastguard Worker case GL_DEBUG_LOGGED_MESSAGES:
3583*8975f5c5SAndroid Build Coastguard Worker case GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH:
3584*8975f5c5SAndroid Build Coastguard Worker case GL_DEBUG_GROUP_STACK_DEPTH:
3585*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_DEBUG_MESSAGE_LENGTH:
3586*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_DEBUG_LOGGED_MESSAGES:
3587*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_DEBUG_GROUP_STACK_DEPTH:
3588*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_LABEL_LENGTH:
3589*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3590*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3591*8975f5c5SAndroid Build Coastguard Worker return true;
3592*8975f5c5SAndroid Build Coastguard Worker
3593*8975f5c5SAndroid Build Coastguard Worker case GL_DEBUG_OUTPUT_SYNCHRONOUS:
3594*8975f5c5SAndroid Build Coastguard Worker case GL_DEBUG_OUTPUT:
3595*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3596*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3597*8975f5c5SAndroid Build Coastguard Worker return true;
3598*8975f5c5SAndroid Build Coastguard Worker }
3599*8975f5c5SAndroid Build Coastguard Worker }
3600*8975f5c5SAndroid Build Coastguard Worker
3601*8975f5c5SAndroid Build Coastguard Worker if (extensions.multisampleCompatibilityEXT)
3602*8975f5c5SAndroid Build Coastguard Worker {
3603*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3604*8975f5c5SAndroid Build Coastguard Worker {
3605*8975f5c5SAndroid Build Coastguard Worker case GL_MULTISAMPLE_EXT:
3606*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLE_ALPHA_TO_ONE_EXT:
3607*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3608*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3609*8975f5c5SAndroid Build Coastguard Worker return true;
3610*8975f5c5SAndroid Build Coastguard Worker }
3611*8975f5c5SAndroid Build Coastguard Worker }
3612*8975f5c5SAndroid Build Coastguard Worker
3613*8975f5c5SAndroid Build Coastguard Worker if (extensions.bindGeneratesResourceCHROMIUM)
3614*8975f5c5SAndroid Build Coastguard Worker {
3615*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3616*8975f5c5SAndroid Build Coastguard Worker {
3617*8975f5c5SAndroid Build Coastguard Worker case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
3618*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3619*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3620*8975f5c5SAndroid Build Coastguard Worker return true;
3621*8975f5c5SAndroid Build Coastguard Worker }
3622*8975f5c5SAndroid Build Coastguard Worker }
3623*8975f5c5SAndroid Build Coastguard Worker
3624*8975f5c5SAndroid Build Coastguard Worker if (extensions.clientArraysANGLE)
3625*8975f5c5SAndroid Build Coastguard Worker {
3626*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3627*8975f5c5SAndroid Build Coastguard Worker {
3628*8975f5c5SAndroid Build Coastguard Worker case GL_CLIENT_ARRAYS_ANGLE:
3629*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3630*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3631*8975f5c5SAndroid Build Coastguard Worker return true;
3632*8975f5c5SAndroid Build Coastguard Worker }
3633*8975f5c5SAndroid Build Coastguard Worker }
3634*8975f5c5SAndroid Build Coastguard Worker
3635*8975f5c5SAndroid Build Coastguard Worker if (extensions.sRGBWriteControlEXT)
3636*8975f5c5SAndroid Build Coastguard Worker {
3637*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3638*8975f5c5SAndroid Build Coastguard Worker {
3639*8975f5c5SAndroid Build Coastguard Worker case GL_FRAMEBUFFER_SRGB_EXT:
3640*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3641*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3642*8975f5c5SAndroid Build Coastguard Worker return true;
3643*8975f5c5SAndroid Build Coastguard Worker }
3644*8975f5c5SAndroid Build Coastguard Worker }
3645*8975f5c5SAndroid Build Coastguard Worker
3646*8975f5c5SAndroid Build Coastguard Worker if (extensions.robustResourceInitializationANGLE &&
3647*8975f5c5SAndroid Build Coastguard Worker pname == GL_ROBUST_RESOURCE_INITIALIZATION_ANGLE)
3648*8975f5c5SAndroid Build Coastguard Worker {
3649*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3650*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3651*8975f5c5SAndroid Build Coastguard Worker return true;
3652*8975f5c5SAndroid Build Coastguard Worker }
3653*8975f5c5SAndroid Build Coastguard Worker
3654*8975f5c5SAndroid Build Coastguard Worker if (extensions.programCacheControlANGLE && pname == GL_PROGRAM_CACHE_ENABLED_ANGLE)
3655*8975f5c5SAndroid Build Coastguard Worker {
3656*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3657*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3658*8975f5c5SAndroid Build Coastguard Worker return true;
3659*8975f5c5SAndroid Build Coastguard Worker }
3660*8975f5c5SAndroid Build Coastguard Worker
3661*8975f5c5SAndroid Build Coastguard Worker if (extensions.parallelShaderCompileKHR && pname == GL_MAX_SHADER_COMPILER_THREADS_KHR)
3662*8975f5c5SAndroid Build Coastguard Worker {
3663*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3664*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3665*8975f5c5SAndroid Build Coastguard Worker return true;
3666*8975f5c5SAndroid Build Coastguard Worker }
3667*8975f5c5SAndroid Build Coastguard Worker
3668*8975f5c5SAndroid Build Coastguard Worker if (extensions.blendFuncExtendedEXT && pname == GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT)
3669*8975f5c5SAndroid Build Coastguard Worker {
3670*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3671*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3672*8975f5c5SAndroid Build Coastguard Worker return true;
3673*8975f5c5SAndroid Build Coastguard Worker }
3674*8975f5c5SAndroid Build Coastguard Worker
3675*8975f5c5SAndroid Build Coastguard Worker if (extensions.robustFragmentShaderOutputANGLE &&
3676*8975f5c5SAndroid Build Coastguard Worker pname == GL_ROBUST_FRAGMENT_SHADER_OUTPUT_ANGLE)
3677*8975f5c5SAndroid Build Coastguard Worker {
3678*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3679*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3680*8975f5c5SAndroid Build Coastguard Worker return true;
3681*8975f5c5SAndroid Build Coastguard Worker }
3682*8975f5c5SAndroid Build Coastguard Worker
3683*8975f5c5SAndroid Build Coastguard Worker // Check for ES3.0+ parameter names which are also exposed as ES2 extensions
3684*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3685*8975f5c5SAndroid Build Coastguard Worker {
3686*8975f5c5SAndroid Build Coastguard Worker // GL_DRAW_FRAMEBUFFER_BINDING equivalent to GL_FRAMEBUFFER_BINDING
3687*8975f5c5SAndroid Build Coastguard Worker case GL_READ_FRAMEBUFFER_BINDING:
3688*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.framebufferBlitAny())
3689*8975f5c5SAndroid Build Coastguard Worker {
3690*8975f5c5SAndroid Build Coastguard Worker return false;
3691*8975f5c5SAndroid Build Coastguard Worker }
3692*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3693*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3694*8975f5c5SAndroid Build Coastguard Worker return true;
3695*8975f5c5SAndroid Build Coastguard Worker
3696*8975f5c5SAndroid Build Coastguard Worker case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
3697*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.getProgramBinaryOES)
3698*8975f5c5SAndroid Build Coastguard Worker {
3699*8975f5c5SAndroid Build Coastguard Worker return false;
3700*8975f5c5SAndroid Build Coastguard Worker }
3701*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3702*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3703*8975f5c5SAndroid Build Coastguard Worker return true;
3704*8975f5c5SAndroid Build Coastguard Worker
3705*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_BINARY_FORMATS_OES:
3706*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.getProgramBinaryOES)
3707*8975f5c5SAndroid Build Coastguard Worker {
3708*8975f5c5SAndroid Build Coastguard Worker return false;
3709*8975f5c5SAndroid Build Coastguard Worker }
3710*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3711*8975f5c5SAndroid Build Coastguard Worker *numParams = static_cast<unsigned int>(caps.programBinaryFormats.size());
3712*8975f5c5SAndroid Build Coastguard Worker return true;
3713*8975f5c5SAndroid Build Coastguard Worker
3714*8975f5c5SAndroid Build Coastguard Worker case GL_PACK_ROW_LENGTH:
3715*8975f5c5SAndroid Build Coastguard Worker case GL_PACK_SKIP_ROWS:
3716*8975f5c5SAndroid Build Coastguard Worker case GL_PACK_SKIP_PIXELS:
3717*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.packSubimageNV)
3718*8975f5c5SAndroid Build Coastguard Worker {
3719*8975f5c5SAndroid Build Coastguard Worker return false;
3720*8975f5c5SAndroid Build Coastguard Worker }
3721*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3722*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3723*8975f5c5SAndroid Build Coastguard Worker return true;
3724*8975f5c5SAndroid Build Coastguard Worker case GL_UNPACK_ROW_LENGTH:
3725*8975f5c5SAndroid Build Coastguard Worker case GL_UNPACK_SKIP_ROWS:
3726*8975f5c5SAndroid Build Coastguard Worker case GL_UNPACK_SKIP_PIXELS:
3727*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.unpackSubimageEXT)
3728*8975f5c5SAndroid Build Coastguard Worker {
3729*8975f5c5SAndroid Build Coastguard Worker return false;
3730*8975f5c5SAndroid Build Coastguard Worker }
3731*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3732*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3733*8975f5c5SAndroid Build Coastguard Worker return true;
3734*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_BINDING:
3735*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.vertexArrayObjectOES)
3736*8975f5c5SAndroid Build Coastguard Worker {
3737*8975f5c5SAndroid Build Coastguard Worker return false;
3738*8975f5c5SAndroid Build Coastguard Worker }
3739*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3740*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3741*8975f5c5SAndroid Build Coastguard Worker return true;
3742*8975f5c5SAndroid Build Coastguard Worker case GL_PIXEL_PACK_BUFFER_BINDING:
3743*8975f5c5SAndroid Build Coastguard Worker case GL_PIXEL_UNPACK_BUFFER_BINDING:
3744*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.pixelBufferObjectNV)
3745*8975f5c5SAndroid Build Coastguard Worker {
3746*8975f5c5SAndroid Build Coastguard Worker return false;
3747*8975f5c5SAndroid Build Coastguard Worker }
3748*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3749*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3750*8975f5c5SAndroid Build Coastguard Worker return true;
3751*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_SAMPLES:
3752*8975f5c5SAndroid Build Coastguard Worker static_assert(GL_MAX_SAMPLES_ANGLE == GL_MAX_SAMPLES,
3753*8975f5c5SAndroid Build Coastguard Worker "GL_MAX_SAMPLES_ANGLE not equal to GL_MAX_SAMPLES");
3754*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !(extensions.framebufferMultisampleANGLE ||
3755*8975f5c5SAndroid Build Coastguard Worker extensions.multisampledRenderToTextureEXT))
3756*8975f5c5SAndroid Build Coastguard Worker {
3757*8975f5c5SAndroid Build Coastguard Worker return false;
3758*8975f5c5SAndroid Build Coastguard Worker }
3759*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3760*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3761*8975f5c5SAndroid Build Coastguard Worker return true;
3762*8975f5c5SAndroid Build Coastguard Worker case GL_FRAGMENT_SHADER_DERIVATIVE_HINT:
3763*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.standardDerivativesOES)
3764*8975f5c5SAndroid Build Coastguard Worker {
3765*8975f5c5SAndroid Build Coastguard Worker return false;
3766*8975f5c5SAndroid Build Coastguard Worker }
3767*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3768*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3769*8975f5c5SAndroid Build Coastguard Worker return true;
3770*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_3D:
3771*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.texture3DOES)
3772*8975f5c5SAndroid Build Coastguard Worker {
3773*8975f5c5SAndroid Build Coastguard Worker return false;
3774*8975f5c5SAndroid Build Coastguard Worker }
3775*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3776*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3777*8975f5c5SAndroid Build Coastguard Worker return true;
3778*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_3D_TEXTURE_SIZE:
3779*8975f5c5SAndroid Build Coastguard Worker if ((clientMajorVersion < 3) && !extensions.texture3DOES)
3780*8975f5c5SAndroid Build Coastguard Worker {
3781*8975f5c5SAndroid Build Coastguard Worker return false;
3782*8975f5c5SAndroid Build Coastguard Worker }
3783*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3784*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3785*8975f5c5SAndroid Build Coastguard Worker return true;
3786*8975f5c5SAndroid Build Coastguard Worker }
3787*8975f5c5SAndroid Build Coastguard Worker
3788*8975f5c5SAndroid Build Coastguard Worker if (pname >= GL_DRAW_BUFFER0_EXT && pname <= GL_DRAW_BUFFER15_EXT)
3789*8975f5c5SAndroid Build Coastguard Worker {
3790*8975f5c5SAndroid Build Coastguard Worker if ((glState.getClientVersion() < Version(3, 0)) && !extensions.drawBuffersEXT)
3791*8975f5c5SAndroid Build Coastguard Worker {
3792*8975f5c5SAndroid Build Coastguard Worker return false;
3793*8975f5c5SAndroid Build Coastguard Worker }
3794*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3795*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3796*8975f5c5SAndroid Build Coastguard Worker return true;
3797*8975f5c5SAndroid Build Coastguard Worker }
3798*8975f5c5SAndroid Build Coastguard Worker
3799*8975f5c5SAndroid Build Coastguard Worker if ((extensions.multiview2OVR || extensions.multiviewOVR) && pname == GL_MAX_VIEWS_OVR)
3800*8975f5c5SAndroid Build Coastguard Worker {
3801*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3802*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3803*8975f5c5SAndroid Build Coastguard Worker return true;
3804*8975f5c5SAndroid Build Coastguard Worker }
3805*8975f5c5SAndroid Build Coastguard Worker
3806*8975f5c5SAndroid Build Coastguard Worker if (extensions.provokingVertexANGLE && pname == GL_PROVOKING_VERTEX_ANGLE)
3807*8975f5c5SAndroid Build Coastguard Worker {
3808*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3809*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3810*8975f5c5SAndroid Build Coastguard Worker return true;
3811*8975f5c5SAndroid Build Coastguard Worker }
3812*8975f5c5SAndroid Build Coastguard Worker
3813*8975f5c5SAndroid Build Coastguard Worker if (extensions.shaderFramebufferFetchARM &&
3814*8975f5c5SAndroid Build Coastguard Worker (pname == GL_FETCH_PER_SAMPLE_ARM || pname == GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM))
3815*8975f5c5SAndroid Build Coastguard Worker {
3816*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3817*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3818*8975f5c5SAndroid Build Coastguard Worker return true;
3819*8975f5c5SAndroid Build Coastguard Worker }
3820*8975f5c5SAndroid Build Coastguard Worker
3821*8975f5c5SAndroid Build Coastguard Worker if (glState.getClientVersion() < Version(2, 0))
3822*8975f5c5SAndroid Build Coastguard Worker {
3823*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3824*8975f5c5SAndroid Build Coastguard Worker {
3825*8975f5c5SAndroid Build Coastguard Worker case GL_ALPHA_TEST_FUNC:
3826*8975f5c5SAndroid Build Coastguard Worker case GL_CLIENT_ACTIVE_TEXTURE:
3827*8975f5c5SAndroid Build Coastguard Worker case GL_MATRIX_MODE:
3828*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TEXTURE_UNITS:
3829*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_MODELVIEW_STACK_DEPTH:
3830*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_PROJECTION_STACK_DEPTH:
3831*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TEXTURE_STACK_DEPTH:
3832*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_LIGHTS:
3833*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_CLIP_PLANES:
3834*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_STRIDE:
3835*8975f5c5SAndroid Build Coastguard Worker case GL_NORMAL_ARRAY_STRIDE:
3836*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY_STRIDE:
3837*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY_STRIDE:
3838*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_SIZE:
3839*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY_SIZE:
3840*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY_SIZE:
3841*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_TYPE:
3842*8975f5c5SAndroid Build Coastguard Worker case GL_NORMAL_ARRAY_TYPE:
3843*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY_TYPE:
3844*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY_TYPE:
3845*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY_BUFFER_BINDING:
3846*8975f5c5SAndroid Build Coastguard Worker case GL_NORMAL_ARRAY_BUFFER_BINDING:
3847*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY_BUFFER_BINDING:
3848*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
3849*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_ARRAY_STRIDE_OES:
3850*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_ARRAY_TYPE_OES:
3851*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
3852*8975f5c5SAndroid Build Coastguard Worker case GL_SHADE_MODEL:
3853*8975f5c5SAndroid Build Coastguard Worker case GL_MODELVIEW_STACK_DEPTH:
3854*8975f5c5SAndroid Build Coastguard Worker case GL_PROJECTION_STACK_DEPTH:
3855*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_STACK_DEPTH:
3856*8975f5c5SAndroid Build Coastguard Worker case GL_LOGIC_OP_MODE:
3857*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_SRC:
3858*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_DST:
3859*8975f5c5SAndroid Build Coastguard Worker case GL_PERSPECTIVE_CORRECTION_HINT:
3860*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SMOOTH_HINT:
3861*8975f5c5SAndroid Build Coastguard Worker case GL_LINE_SMOOTH_HINT:
3862*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_HINT:
3863*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3864*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3865*8975f5c5SAndroid Build Coastguard Worker return true;
3866*8975f5c5SAndroid Build Coastguard Worker case GL_ALPHA_TEST_REF:
3867*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_DENSITY:
3868*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_START:
3869*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_END:
3870*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_MODE:
3871*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE:
3872*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_MIN:
3873*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_MAX:
3874*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_FADE_THRESHOLD_SIZE:
3875*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3876*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3877*8975f5c5SAndroid Build Coastguard Worker return true;
3878*8975f5c5SAndroid Build Coastguard Worker case GL_SMOOTH_POINT_SIZE_RANGE:
3879*8975f5c5SAndroid Build Coastguard Worker case GL_SMOOTH_LINE_WIDTH_RANGE:
3880*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3881*8975f5c5SAndroid Build Coastguard Worker *numParams = 2;
3882*8975f5c5SAndroid Build Coastguard Worker return true;
3883*8975f5c5SAndroid Build Coastguard Worker case GL_CURRENT_COLOR:
3884*8975f5c5SAndroid Build Coastguard Worker case GL_CURRENT_TEXTURE_COORDS:
3885*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT_MODEL_AMBIENT:
3886*8975f5c5SAndroid Build Coastguard Worker case GL_FOG_COLOR:
3887*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3888*8975f5c5SAndroid Build Coastguard Worker *numParams = 4;
3889*8975f5c5SAndroid Build Coastguard Worker return true;
3890*8975f5c5SAndroid Build Coastguard Worker case GL_CURRENT_NORMAL:
3891*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_DISTANCE_ATTENUATION:
3892*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3893*8975f5c5SAndroid Build Coastguard Worker *numParams = 3;
3894*8975f5c5SAndroid Build Coastguard Worker return true;
3895*8975f5c5SAndroid Build Coastguard Worker case GL_MODELVIEW_MATRIX:
3896*8975f5c5SAndroid Build Coastguard Worker case GL_PROJECTION_MATRIX:
3897*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_MATRIX:
3898*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
3899*8975f5c5SAndroid Build Coastguard Worker *numParams = 16;
3900*8975f5c5SAndroid Build Coastguard Worker return true;
3901*8975f5c5SAndroid Build Coastguard Worker case GL_ALPHA_TEST:
3902*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_PLANE0:
3903*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_PLANE1:
3904*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_PLANE2:
3905*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_PLANE3:
3906*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_PLANE4:
3907*8975f5c5SAndroid Build Coastguard Worker case GL_CLIP_PLANE5:
3908*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_ARRAY:
3909*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_LOGIC_OP:
3910*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_MATERIAL:
3911*8975f5c5SAndroid Build Coastguard Worker case GL_FOG:
3912*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT_MODEL_TWO_SIDE:
3913*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT0:
3914*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT1:
3915*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT2:
3916*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT3:
3917*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT4:
3918*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT5:
3919*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT6:
3920*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHT7:
3921*8975f5c5SAndroid Build Coastguard Worker case GL_LIGHTING:
3922*8975f5c5SAndroid Build Coastguard Worker case GL_LINE_SMOOTH:
3923*8975f5c5SAndroid Build Coastguard Worker case GL_NORMAL_ARRAY:
3924*8975f5c5SAndroid Build Coastguard Worker case GL_NORMALIZE:
3925*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SIZE_ARRAY_OES:
3926*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SMOOTH:
3927*8975f5c5SAndroid Build Coastguard Worker case GL_POINT_SPRITE_OES:
3928*8975f5c5SAndroid Build Coastguard Worker case GL_RESCALE_NORMAL:
3929*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_2D:
3930*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP:
3931*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_COORD_ARRAY:
3932*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_ARRAY:
3933*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
3934*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3935*8975f5c5SAndroid Build Coastguard Worker return true;
3936*8975f5c5SAndroid Build Coastguard Worker }
3937*8975f5c5SAndroid Build Coastguard Worker }
3938*8975f5c5SAndroid Build Coastguard Worker
3939*8975f5c5SAndroid Build Coastguard Worker if (glState.getClientVersion() < Version(3, 0))
3940*8975f5c5SAndroid Build Coastguard Worker {
3941*8975f5c5SAndroid Build Coastguard Worker return false;
3942*8975f5c5SAndroid Build Coastguard Worker }
3943*8975f5c5SAndroid Build Coastguard Worker
3944*8975f5c5SAndroid Build Coastguard Worker // Check for ES3.0+ parameter names
3945*8975f5c5SAndroid Build Coastguard Worker switch (pname)
3946*8975f5c5SAndroid Build Coastguard Worker {
3947*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_UNIFORM_BUFFER_BINDINGS:
3948*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
3949*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BUFFER_BINDING:
3950*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_BINDING:
3951*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
3952*8975f5c5SAndroid Build Coastguard Worker case GL_COPY_READ_BUFFER_BINDING:
3953*8975f5c5SAndroid Build Coastguard Worker case GL_COPY_WRITE_BUFFER_BINDING:
3954*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLER_BINDING:
3955*8975f5c5SAndroid Build Coastguard Worker case GL_READ_BUFFER:
3956*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_3D:
3957*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_2D_ARRAY:
3958*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_ARRAY_TEXTURE_LAYERS:
3959*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_UNIFORM_BLOCKS:
3960*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
3961*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_UNIFORM_BLOCKS:
3962*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_OUTPUT_COMPONENTS:
3963*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAGMENT_INPUT_COMPONENTS:
3964*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VARYING_COMPONENTS:
3965*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_UNIFORM_COMPONENTS:
3966*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
3967*8975f5c5SAndroid Build Coastguard Worker case GL_MIN_PROGRAM_TEXEL_OFFSET:
3968*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_PROGRAM_TEXEL_OFFSET:
3969*8975f5c5SAndroid Build Coastguard Worker case GL_NUM_EXTENSIONS:
3970*8975f5c5SAndroid Build Coastguard Worker case GL_MAJOR_VERSION:
3971*8975f5c5SAndroid Build Coastguard Worker case GL_MINOR_VERSION:
3972*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_ELEMENTS_INDICES:
3973*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_ELEMENTS_VERTICES:
3974*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
3975*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
3976*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
3977*8975f5c5SAndroid Build Coastguard Worker case GL_UNPACK_IMAGE_HEIGHT:
3978*8975f5c5SAndroid Build Coastguard Worker case GL_UNPACK_SKIP_IMAGES:
3979*8975f5c5SAndroid Build Coastguard Worker {
3980*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
3981*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3982*8975f5c5SAndroid Build Coastguard Worker return true;
3983*8975f5c5SAndroid Build Coastguard Worker }
3984*8975f5c5SAndroid Build Coastguard Worker
3985*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_ELEMENT_INDEX:
3986*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_UNIFORM_BLOCK_SIZE:
3987*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
3988*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
3989*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_SERVER_WAIT_TIMEOUT:
3990*8975f5c5SAndroid Build Coastguard Worker {
3991*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT_64_ANGLEX;
3992*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
3993*8975f5c5SAndroid Build Coastguard Worker return true;
3994*8975f5c5SAndroid Build Coastguard Worker }
3995*8975f5c5SAndroid Build Coastguard Worker
3996*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_ACTIVE:
3997*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_PAUSED:
3998*8975f5c5SAndroid Build Coastguard Worker case GL_PRIMITIVE_RESTART_FIXED_INDEX:
3999*8975f5c5SAndroid Build Coastguard Worker case GL_RASTERIZER_DISCARD:
4000*8975f5c5SAndroid Build Coastguard Worker {
4001*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
4002*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4003*8975f5c5SAndroid Build Coastguard Worker return true;
4004*8975f5c5SAndroid Build Coastguard Worker }
4005*8975f5c5SAndroid Build Coastguard Worker
4006*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TEXTURE_LOD_BIAS:
4007*8975f5c5SAndroid Build Coastguard Worker {
4008*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
4009*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4010*8975f5c5SAndroid Build Coastguard Worker return true;
4011*8975f5c5SAndroid Build Coastguard Worker }
4012*8975f5c5SAndroid Build Coastguard Worker }
4013*8975f5c5SAndroid Build Coastguard Worker
4014*8975f5c5SAndroid Build Coastguard Worker if (extensions.shaderMultisampleInterpolationOES)
4015*8975f5c5SAndroid Build Coastguard Worker {
4016*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4017*8975f5c5SAndroid Build Coastguard Worker {
4018*8975f5c5SAndroid Build Coastguard Worker case GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES:
4019*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES:
4020*8975f5c5SAndroid Build Coastguard Worker {
4021*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
4022*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4023*8975f5c5SAndroid Build Coastguard Worker return true;
4024*8975f5c5SAndroid Build Coastguard Worker }
4025*8975f5c5SAndroid Build Coastguard Worker case GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES:
4026*8975f5c5SAndroid Build Coastguard Worker {
4027*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4028*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4029*8975f5c5SAndroid Build Coastguard Worker return true;
4030*8975f5c5SAndroid Build Coastguard Worker }
4031*8975f5c5SAndroid Build Coastguard Worker }
4032*8975f5c5SAndroid Build Coastguard Worker }
4033*8975f5c5SAndroid Build Coastguard Worker
4034*8975f5c5SAndroid Build Coastguard Worker if (extensions.requestExtensionANGLE)
4035*8975f5c5SAndroid Build Coastguard Worker {
4036*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4037*8975f5c5SAndroid Build Coastguard Worker {
4038*8975f5c5SAndroid Build Coastguard Worker case GL_NUM_REQUESTABLE_EXTENSIONS_ANGLE:
4039*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4040*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4041*8975f5c5SAndroid Build Coastguard Worker return true;
4042*8975f5c5SAndroid Build Coastguard Worker }
4043*8975f5c5SAndroid Build Coastguard Worker }
4044*8975f5c5SAndroid Build Coastguard Worker
4045*8975f5c5SAndroid Build Coastguard Worker if (glState.getClientVersion() >= Version(3, 1) || extensions.textureMultisampleANGLE)
4046*8975f5c5SAndroid Build Coastguard Worker {
4047*8975f5c5SAndroid Build Coastguard Worker static_assert(GL_SAMPLE_MASK_ANGLE == GL_SAMPLE_MASK);
4048*8975f5c5SAndroid Build Coastguard Worker static_assert(GL_MAX_SAMPLE_MASK_WORDS_ANGLE == GL_MAX_SAMPLE_MASK_WORDS);
4049*8975f5c5SAndroid Build Coastguard Worker static_assert(GL_MAX_COLOR_TEXTURE_SAMPLES_ANGLE == GL_MAX_COLOR_TEXTURE_SAMPLES);
4050*8975f5c5SAndroid Build Coastguard Worker static_assert(GL_MAX_DEPTH_TEXTURE_SAMPLES_ANGLE == GL_MAX_DEPTH_TEXTURE_SAMPLES);
4051*8975f5c5SAndroid Build Coastguard Worker static_assert(GL_MAX_INTEGER_SAMPLES_ANGLE == GL_MAX_INTEGER_SAMPLES);
4052*8975f5c5SAndroid Build Coastguard Worker static_assert(GL_TEXTURE_BINDING_2D_MULTISAMPLE_ANGLE == GL_TEXTURE_BINDING_2D_MULTISAMPLE);
4053*8975f5c5SAndroid Build Coastguard Worker
4054*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4055*8975f5c5SAndroid Build Coastguard Worker {
4056*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLE_MASK:
4057*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
4058*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4059*8975f5c5SAndroid Build Coastguard Worker return true;
4060*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_SAMPLE_MASK_WORDS:
4061*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COLOR_TEXTURE_SAMPLES:
4062*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_DEPTH_TEXTURE_SAMPLES:
4063*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_INTEGER_SAMPLES:
4064*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_2D_MULTISAMPLE:
4065*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4066*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4067*8975f5c5SAndroid Build Coastguard Worker return true;
4068*8975f5c5SAndroid Build Coastguard Worker }
4069*8975f5c5SAndroid Build Coastguard Worker }
4070*8975f5c5SAndroid Build Coastguard Worker
4071*8975f5c5SAndroid Build Coastguard Worker if (extensions.textureCubeMapArrayAny())
4072*8975f5c5SAndroid Build Coastguard Worker {
4073*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4074*8975f5c5SAndroid Build Coastguard Worker {
4075*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_CUBE_MAP_ARRAY:
4076*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4077*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4078*8975f5c5SAndroid Build Coastguard Worker return true;
4079*8975f5c5SAndroid Build Coastguard Worker }
4080*8975f5c5SAndroid Build Coastguard Worker }
4081*8975f5c5SAndroid Build Coastguard Worker
4082*8975f5c5SAndroid Build Coastguard Worker if (extensions.textureBufferAny())
4083*8975f5c5SAndroid Build Coastguard Worker {
4084*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4085*8975f5c5SAndroid Build Coastguard Worker {
4086*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BUFFER_BINDING:
4087*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_BUFFER:
4088*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
4089*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TEXTURE_BUFFER_SIZE:
4090*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4091*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4092*8975f5c5SAndroid Build Coastguard Worker return true;
4093*8975f5c5SAndroid Build Coastguard Worker }
4094*8975f5c5SAndroid Build Coastguard Worker }
4095*8975f5c5SAndroid Build Coastguard Worker
4096*8975f5c5SAndroid Build Coastguard Worker if (extensions.shaderPixelLocalStorageANGLE)
4097*8975f5c5SAndroid Build Coastguard Worker {
4098*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4099*8975f5c5SAndroid Build Coastguard Worker {
4100*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_PIXEL_LOCAL_STORAGE_PLANES_ANGLE:
4101*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COLOR_ATTACHMENTS_WITH_ACTIVE_PIXEL_LOCAL_STORAGE_ANGLE:
4102*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_DRAW_BUFFERS_AND_PIXEL_LOCAL_STORAGE_PLANES_ANGLE:
4103*8975f5c5SAndroid Build Coastguard Worker case GL_PIXEL_LOCAL_STORAGE_ACTIVE_PLANES_ANGLE:
4104*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4105*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4106*8975f5c5SAndroid Build Coastguard Worker return true;
4107*8975f5c5SAndroid Build Coastguard Worker }
4108*8975f5c5SAndroid Build Coastguard Worker }
4109*8975f5c5SAndroid Build Coastguard Worker
4110*8975f5c5SAndroid Build Coastguard Worker if (glState.getClientVersion() >= Version(3, 2) ||
4111*8975f5c5SAndroid Build Coastguard Worker extensions.textureStorageMultisample2dArrayOES)
4112*8975f5c5SAndroid Build Coastguard Worker {
4113*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4114*8975f5c5SAndroid Build Coastguard Worker {
4115*8975f5c5SAndroid Build Coastguard Worker case GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY:
4116*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4117*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4118*8975f5c5SAndroid Build Coastguard Worker return true;
4119*8975f5c5SAndroid Build Coastguard Worker }
4120*8975f5c5SAndroid Build Coastguard Worker }
4121*8975f5c5SAndroid Build Coastguard Worker
4122*8975f5c5SAndroid Build Coastguard Worker if (glState.getClientVersion() < Version(3, 1))
4123*8975f5c5SAndroid Build Coastguard Worker {
4124*8975f5c5SAndroid Build Coastguard Worker return false;
4125*8975f5c5SAndroid Build Coastguard Worker }
4126*8975f5c5SAndroid Build Coastguard Worker
4127*8975f5c5SAndroid Build Coastguard Worker // Check for ES3.1+ parameter names
4128*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4129*8975f5c5SAndroid Build Coastguard Worker {
4130*8975f5c5SAndroid Build Coastguard Worker case GL_ATOMIC_COUNTER_BUFFER_BINDING:
4131*8975f5c5SAndroid Build Coastguard Worker case GL_DRAW_INDIRECT_BUFFER_BINDING:
4132*8975f5c5SAndroid Build Coastguard Worker case GL_DISPATCH_INDIRECT_BUFFER_BINDING:
4133*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAMEBUFFER_WIDTH:
4134*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAMEBUFFER_HEIGHT:
4135*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAMEBUFFER_SAMPLES:
4136*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET:
4137*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_ATTRIB_BINDINGS:
4138*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_ATTRIB_STRIDE:
4139*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS:
4140*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_ATOMIC_COUNTERS:
4141*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_IMAGE_UNIFORMS:
4142*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS:
4143*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS:
4144*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAGMENT_ATOMIC_COUNTERS:
4145*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAGMENT_IMAGE_UNIFORMS:
4146*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS:
4147*8975f5c5SAndroid Build Coastguard Worker case GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET:
4148*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET:
4149*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS:
4150*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_UNIFORM_BLOCKS:
4151*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS:
4152*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_SHARED_MEMORY_SIZE:
4153*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_UNIFORM_COMPONENTS:
4154*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS:
4155*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_ATOMIC_COUNTERS:
4156*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_IMAGE_UNIFORMS:
4157*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS:
4158*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS:
4159*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
4160*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_UNIFORM_LOCATIONS:
4161*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS:
4162*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE:
4163*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS:
4164*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_ATOMIC_COUNTERS:
4165*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_IMAGE_UNITS:
4166*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_IMAGE_UNIFORMS:
4167*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS:
4168*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS:
4169*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BUFFER_BINDING:
4170*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT:
4171*8975f5c5SAndroid Build Coastguard Worker case GL_PROGRAM_PIPELINE_BINDING:
4172*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4173*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4174*8975f5c5SAndroid Build Coastguard Worker return true;
4175*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_SHADER_STORAGE_BLOCK_SIZE:
4176*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT_64_ANGLEX;
4177*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4178*8975f5c5SAndroid Build Coastguard Worker return true;
4179*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLE_SHADING:
4180*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
4181*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4182*8975f5c5SAndroid Build Coastguard Worker return true;
4183*8975f5c5SAndroid Build Coastguard Worker case GL_MIN_SAMPLE_SHADING_VALUE:
4184*8975f5c5SAndroid Build Coastguard Worker *type = GL_FLOAT;
4185*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4186*8975f5c5SAndroid Build Coastguard Worker return true;
4187*8975f5c5SAndroid Build Coastguard Worker }
4188*8975f5c5SAndroid Build Coastguard Worker
4189*8975f5c5SAndroid Build Coastguard Worker if (extensions.geometryShaderAny())
4190*8975f5c5SAndroid Build Coastguard Worker {
4191*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4192*8975f5c5SAndroid Build Coastguard Worker {
4193*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_FRAMEBUFFER_LAYERS_EXT:
4194*8975f5c5SAndroid Build Coastguard Worker case GL_LAYER_PROVOKING_VERTEX_EXT:
4195*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT:
4196*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT:
4197*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT:
4198*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT:
4199*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT:
4200*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT:
4201*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT:
4202*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT:
4203*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT:
4204*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT:
4205*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT:
4206*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT:
4207*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT:
4208*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4209*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4210*8975f5c5SAndroid Build Coastguard Worker return true;
4211*8975f5c5SAndroid Build Coastguard Worker }
4212*8975f5c5SAndroid Build Coastguard Worker }
4213*8975f5c5SAndroid Build Coastguard Worker
4214*8975f5c5SAndroid Build Coastguard Worker if (extensions.tessellationShaderAny())
4215*8975f5c5SAndroid Build Coastguard Worker {
4216*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4217*8975f5c5SAndroid Build Coastguard Worker {
4218*8975f5c5SAndroid Build Coastguard Worker case GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED:
4219*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
4220*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4221*8975f5c5SAndroid Build Coastguard Worker return true;
4222*8975f5c5SAndroid Build Coastguard Worker case GL_PATCH_VERTICES:
4223*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_PATCH_VERTICES_EXT:
4224*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_GEN_LEVEL_EXT:
4225*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT:
4226*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT:
4227*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT:
4228*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT:
4229*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT:
4230*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_PATCH_COMPONENTS_EXT:
4231*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT:
4232*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT:
4233*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT:
4234*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT:
4235*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT:
4236*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT:
4237*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT:
4238*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT:
4239*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT:
4240*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT:
4241*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT:
4242*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT:
4243*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT:
4244*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT:
4245*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT:
4246*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT:
4247*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4248*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4249*8975f5c5SAndroid Build Coastguard Worker return true;
4250*8975f5c5SAndroid Build Coastguard Worker }
4251*8975f5c5SAndroid Build Coastguard Worker }
4252*8975f5c5SAndroid Build Coastguard Worker
4253*8975f5c5SAndroid Build Coastguard Worker return false;
4254*8975f5c5SAndroid Build Coastguard Worker }
4255*8975f5c5SAndroid Build Coastguard Worker
GetIndexedQueryParameterInfo(const State & glState,GLenum target,GLenum * type,unsigned int * numParams)4256*8975f5c5SAndroid Build Coastguard Worker bool GetIndexedQueryParameterInfo(const State &glState,
4257*8975f5c5SAndroid Build Coastguard Worker GLenum target,
4258*8975f5c5SAndroid Build Coastguard Worker GLenum *type,
4259*8975f5c5SAndroid Build Coastguard Worker unsigned int *numParams)
4260*8975f5c5SAndroid Build Coastguard Worker {
4261*8975f5c5SAndroid Build Coastguard Worker const Extensions &extensions = glState.getExtensions();
4262*8975f5c5SAndroid Build Coastguard Worker const Version &clientVersion = glState.getClientVersion();
4263*8975f5c5SAndroid Build Coastguard Worker
4264*8975f5c5SAndroid Build Coastguard Worker ASSERT(clientVersion >= ES_3_0);
4265*8975f5c5SAndroid Build Coastguard Worker
4266*8975f5c5SAndroid Build Coastguard Worker switch (target)
4267*8975f5c5SAndroid Build Coastguard Worker {
4268*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
4269*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BUFFER_BINDING:
4270*8975f5c5SAndroid Build Coastguard Worker {
4271*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4272*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4273*8975f5c5SAndroid Build Coastguard Worker return true;
4274*8975f5c5SAndroid Build Coastguard Worker }
4275*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_BUFFER_START:
4276*8975f5c5SAndroid Build Coastguard Worker case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
4277*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BUFFER_START:
4278*8975f5c5SAndroid Build Coastguard Worker case GL_UNIFORM_BUFFER_SIZE:
4279*8975f5c5SAndroid Build Coastguard Worker {
4280*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT_64_ANGLEX;
4281*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4282*8975f5c5SAndroid Build Coastguard Worker return true;
4283*8975f5c5SAndroid Build Coastguard Worker }
4284*8975f5c5SAndroid Build Coastguard Worker }
4285*8975f5c5SAndroid Build Coastguard Worker
4286*8975f5c5SAndroid Build Coastguard Worker if (clientVersion >= ES_3_1 || extensions.textureMultisampleANGLE)
4287*8975f5c5SAndroid Build Coastguard Worker {
4288*8975f5c5SAndroid Build Coastguard Worker static_assert(GL_SAMPLE_MASK_VALUE_ANGLE == GL_SAMPLE_MASK_VALUE);
4289*8975f5c5SAndroid Build Coastguard Worker switch (target)
4290*8975f5c5SAndroid Build Coastguard Worker {
4291*8975f5c5SAndroid Build Coastguard Worker case GL_SAMPLE_MASK_VALUE:
4292*8975f5c5SAndroid Build Coastguard Worker {
4293*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4294*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4295*8975f5c5SAndroid Build Coastguard Worker return true;
4296*8975f5c5SAndroid Build Coastguard Worker }
4297*8975f5c5SAndroid Build Coastguard Worker }
4298*8975f5c5SAndroid Build Coastguard Worker }
4299*8975f5c5SAndroid Build Coastguard Worker
4300*8975f5c5SAndroid Build Coastguard Worker if (clientVersion >= ES_3_2 || extensions.drawBuffersIndexedAny())
4301*8975f5c5SAndroid Build Coastguard Worker {
4302*8975f5c5SAndroid Build Coastguard Worker switch (target)
4303*8975f5c5SAndroid Build Coastguard Worker {
4304*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_SRC_RGB:
4305*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_SRC_ALPHA:
4306*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_DST_RGB:
4307*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_DST_ALPHA:
4308*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_EQUATION_RGB:
4309*8975f5c5SAndroid Build Coastguard Worker case GL_BLEND_EQUATION_ALPHA:
4310*8975f5c5SAndroid Build Coastguard Worker {
4311*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4312*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4313*8975f5c5SAndroid Build Coastguard Worker return true;
4314*8975f5c5SAndroid Build Coastguard Worker }
4315*8975f5c5SAndroid Build Coastguard Worker case GL_COLOR_WRITEMASK:
4316*8975f5c5SAndroid Build Coastguard Worker {
4317*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
4318*8975f5c5SAndroid Build Coastguard Worker *numParams = 4;
4319*8975f5c5SAndroid Build Coastguard Worker return true;
4320*8975f5c5SAndroid Build Coastguard Worker }
4321*8975f5c5SAndroid Build Coastguard Worker }
4322*8975f5c5SAndroid Build Coastguard Worker }
4323*8975f5c5SAndroid Build Coastguard Worker
4324*8975f5c5SAndroid Build Coastguard Worker if (clientVersion < ES_3_1)
4325*8975f5c5SAndroid Build Coastguard Worker {
4326*8975f5c5SAndroid Build Coastguard Worker return false;
4327*8975f5c5SAndroid Build Coastguard Worker }
4328*8975f5c5SAndroid Build Coastguard Worker
4329*8975f5c5SAndroid Build Coastguard Worker switch (target)
4330*8975f5c5SAndroid Build Coastguard Worker {
4331*8975f5c5SAndroid Build Coastguard Worker case GL_IMAGE_BINDING_LAYERED:
4332*8975f5c5SAndroid Build Coastguard Worker {
4333*8975f5c5SAndroid Build Coastguard Worker *type = GL_BOOL;
4334*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4335*8975f5c5SAndroid Build Coastguard Worker return true;
4336*8975f5c5SAndroid Build Coastguard Worker }
4337*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_WORK_GROUP_COUNT:
4338*8975f5c5SAndroid Build Coastguard Worker case GL_MAX_COMPUTE_WORK_GROUP_SIZE:
4339*8975f5c5SAndroid Build Coastguard Worker case GL_ATOMIC_COUNTER_BUFFER_BINDING:
4340*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BUFFER_BINDING:
4341*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_BINDING_BUFFER:
4342*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_BINDING_DIVISOR:
4343*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_BINDING_OFFSET:
4344*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_BINDING_STRIDE:
4345*8975f5c5SAndroid Build Coastguard Worker case GL_IMAGE_BINDING_NAME:
4346*8975f5c5SAndroid Build Coastguard Worker case GL_IMAGE_BINDING_LEVEL:
4347*8975f5c5SAndroid Build Coastguard Worker case GL_IMAGE_BINDING_LAYER:
4348*8975f5c5SAndroid Build Coastguard Worker case GL_IMAGE_BINDING_ACCESS:
4349*8975f5c5SAndroid Build Coastguard Worker case GL_IMAGE_BINDING_FORMAT:
4350*8975f5c5SAndroid Build Coastguard Worker {
4351*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT;
4352*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4353*8975f5c5SAndroid Build Coastguard Worker return true;
4354*8975f5c5SAndroid Build Coastguard Worker }
4355*8975f5c5SAndroid Build Coastguard Worker case GL_ATOMIC_COUNTER_BUFFER_START:
4356*8975f5c5SAndroid Build Coastguard Worker case GL_ATOMIC_COUNTER_BUFFER_SIZE:
4357*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BUFFER_START:
4358*8975f5c5SAndroid Build Coastguard Worker case GL_SHADER_STORAGE_BUFFER_SIZE:
4359*8975f5c5SAndroid Build Coastguard Worker {
4360*8975f5c5SAndroid Build Coastguard Worker *type = GL_INT_64_ANGLEX;
4361*8975f5c5SAndroid Build Coastguard Worker *numParams = 1;
4362*8975f5c5SAndroid Build Coastguard Worker return true;
4363*8975f5c5SAndroid Build Coastguard Worker }
4364*8975f5c5SAndroid Build Coastguard Worker }
4365*8975f5c5SAndroid Build Coastguard Worker
4366*8975f5c5SAndroid Build Coastguard Worker return false;
4367*8975f5c5SAndroid Build Coastguard Worker }
4368*8975f5c5SAndroid Build Coastguard Worker
QueryProgramPipelineiv(const Context * context,ProgramPipeline * programPipeline,GLenum pname,GLint * params)4369*8975f5c5SAndroid Build Coastguard Worker void QueryProgramPipelineiv(const Context *context,
4370*8975f5c5SAndroid Build Coastguard Worker ProgramPipeline *programPipeline,
4371*8975f5c5SAndroid Build Coastguard Worker GLenum pname,
4372*8975f5c5SAndroid Build Coastguard Worker GLint *params)
4373*8975f5c5SAndroid Build Coastguard Worker {
4374*8975f5c5SAndroid Build Coastguard Worker if (!params)
4375*8975f5c5SAndroid Build Coastguard Worker {
4376*8975f5c5SAndroid Build Coastguard Worker // Can't write the result anywhere, so just return immediately.
4377*8975f5c5SAndroid Build Coastguard Worker return;
4378*8975f5c5SAndroid Build Coastguard Worker }
4379*8975f5c5SAndroid Build Coastguard Worker
4380*8975f5c5SAndroid Build Coastguard Worker switch (pname)
4381*8975f5c5SAndroid Build Coastguard Worker {
4382*8975f5c5SAndroid Build Coastguard Worker case GL_ACTIVE_PROGRAM:
4383*8975f5c5SAndroid Build Coastguard Worker {
4384*8975f5c5SAndroid Build Coastguard Worker // the name of the active program object of the program pipeline object is returned in
4385*8975f5c5SAndroid Build Coastguard Worker // params
4386*8975f5c5SAndroid Build Coastguard Worker *params = 0;
4387*8975f5c5SAndroid Build Coastguard Worker if (programPipeline)
4388*8975f5c5SAndroid Build Coastguard Worker {
4389*8975f5c5SAndroid Build Coastguard Worker const Program *program = programPipeline->getActiveShaderProgram();
4390*8975f5c5SAndroid Build Coastguard Worker if (program)
4391*8975f5c5SAndroid Build Coastguard Worker {
4392*8975f5c5SAndroid Build Coastguard Worker *params = program->id().value;
4393*8975f5c5SAndroid Build Coastguard Worker }
4394*8975f5c5SAndroid Build Coastguard Worker }
4395*8975f5c5SAndroid Build Coastguard Worker break;
4396*8975f5c5SAndroid Build Coastguard Worker }
4397*8975f5c5SAndroid Build Coastguard Worker
4398*8975f5c5SAndroid Build Coastguard Worker case GL_VERTEX_SHADER:
4399*8975f5c5SAndroid Build Coastguard Worker {
4400*8975f5c5SAndroid Build Coastguard Worker // the name of the current program object for the vertex shader type of the program
4401*8975f5c5SAndroid Build Coastguard Worker // pipeline object is returned in params
4402*8975f5c5SAndroid Build Coastguard Worker GetShaderProgramId(programPipeline, ShaderType::Vertex, params);
4403*8975f5c5SAndroid Build Coastguard Worker break;
4404*8975f5c5SAndroid Build Coastguard Worker }
4405*8975f5c5SAndroid Build Coastguard Worker
4406*8975f5c5SAndroid Build Coastguard Worker case GL_FRAGMENT_SHADER:
4407*8975f5c5SAndroid Build Coastguard Worker {
4408*8975f5c5SAndroid Build Coastguard Worker // the name of the current program object for the fragment shader type of the program
4409*8975f5c5SAndroid Build Coastguard Worker // pipeline object is returned in params
4410*8975f5c5SAndroid Build Coastguard Worker GetShaderProgramId(programPipeline, ShaderType::Fragment, params);
4411*8975f5c5SAndroid Build Coastguard Worker break;
4412*8975f5c5SAndroid Build Coastguard Worker }
4413*8975f5c5SAndroid Build Coastguard Worker
4414*8975f5c5SAndroid Build Coastguard Worker case GL_TESS_CONTROL_SHADER:
4415*8975f5c5SAndroid Build Coastguard Worker {
4416*8975f5c5SAndroid Build Coastguard Worker // the name of the current program object for the tessellation control shader type of
4417*8975f5c5SAndroid Build Coastguard Worker // the program pipeline object is returned in params
4418*8975f5c5SAndroid Build Coastguard Worker GetShaderProgramId(programPipeline, ShaderType::TessControl, params);
4419*8975f5c5SAndroid Build Coastguard Worker break;
4420*8975f5c5SAndroid Build Coastguard Worker }
4421*8975f5c5SAndroid Build Coastguard Worker
4422*8975f5c5SAndroid Build Coastguard Worker case GL_TESS_EVALUATION_SHADER:
4423*8975f5c5SAndroid Build Coastguard Worker {
4424*8975f5c5SAndroid Build Coastguard Worker // the name of the current program object for the tessellation evaluation shader type of
4425*8975f5c5SAndroid Build Coastguard Worker // the program pipeline object is returned in params
4426*8975f5c5SAndroid Build Coastguard Worker GetShaderProgramId(programPipeline, ShaderType::TessEvaluation, params);
4427*8975f5c5SAndroid Build Coastguard Worker break;
4428*8975f5c5SAndroid Build Coastguard Worker }
4429*8975f5c5SAndroid Build Coastguard Worker
4430*8975f5c5SAndroid Build Coastguard Worker case GL_COMPUTE_SHADER:
4431*8975f5c5SAndroid Build Coastguard Worker {
4432*8975f5c5SAndroid Build Coastguard Worker // the name of the current program object for the compute shader type of the program
4433*8975f5c5SAndroid Build Coastguard Worker // pipeline object is returned in params
4434*8975f5c5SAndroid Build Coastguard Worker GetShaderProgramId(programPipeline, ShaderType::Compute, params);
4435*8975f5c5SAndroid Build Coastguard Worker break;
4436*8975f5c5SAndroid Build Coastguard Worker }
4437*8975f5c5SAndroid Build Coastguard Worker
4438*8975f5c5SAndroid Build Coastguard Worker case GL_GEOMETRY_SHADER:
4439*8975f5c5SAndroid Build Coastguard Worker {
4440*8975f5c5SAndroid Build Coastguard Worker // the name of the current program object for the geometry shader type of the program
4441*8975f5c5SAndroid Build Coastguard Worker // pipeline object is returned in params
4442*8975f5c5SAndroid Build Coastguard Worker GetShaderProgramId(programPipeline, ShaderType::Geometry, params);
4443*8975f5c5SAndroid Build Coastguard Worker break;
4444*8975f5c5SAndroid Build Coastguard Worker }
4445*8975f5c5SAndroid Build Coastguard Worker
4446*8975f5c5SAndroid Build Coastguard Worker case GL_INFO_LOG_LENGTH:
4447*8975f5c5SAndroid Build Coastguard Worker {
4448*8975f5c5SAndroid Build Coastguard Worker // the length of the info log, including the null terminator, is returned in params. If
4449*8975f5c5SAndroid Build Coastguard Worker // there is no info log, zero is returned.
4450*8975f5c5SAndroid Build Coastguard Worker *params = 0;
4451*8975f5c5SAndroid Build Coastguard Worker if (programPipeline)
4452*8975f5c5SAndroid Build Coastguard Worker {
4453*8975f5c5SAndroid Build Coastguard Worker *params = programPipeline->getInfoLogLength();
4454*8975f5c5SAndroid Build Coastguard Worker }
4455*8975f5c5SAndroid Build Coastguard Worker break;
4456*8975f5c5SAndroid Build Coastguard Worker }
4457*8975f5c5SAndroid Build Coastguard Worker
4458*8975f5c5SAndroid Build Coastguard Worker case GL_VALIDATE_STATUS:
4459*8975f5c5SAndroid Build Coastguard Worker {
4460*8975f5c5SAndroid Build Coastguard Worker // the validation status of pipeline, as determined by glValidateProgramPipeline, is
4461*8975f5c5SAndroid Build Coastguard Worker // returned in params
4462*8975f5c5SAndroid Build Coastguard Worker *params = 0;
4463*8975f5c5SAndroid Build Coastguard Worker if (programPipeline)
4464*8975f5c5SAndroid Build Coastguard Worker {
4465*8975f5c5SAndroid Build Coastguard Worker *params = programPipeline->isValid();
4466*8975f5c5SAndroid Build Coastguard Worker }
4467*8975f5c5SAndroid Build Coastguard Worker break;
4468*8975f5c5SAndroid Build Coastguard Worker }
4469*8975f5c5SAndroid Build Coastguard Worker
4470*8975f5c5SAndroid Build Coastguard Worker default:
4471*8975f5c5SAndroid Build Coastguard Worker break;
4472*8975f5c5SAndroid Build Coastguard Worker }
4473*8975f5c5SAndroid Build Coastguard Worker }
4474*8975f5c5SAndroid Build Coastguard Worker
4475*8975f5c5SAndroid Build Coastguard Worker } // namespace gl
4476*8975f5c5SAndroid Build Coastguard Worker
4477*8975f5c5SAndroid Build Coastguard Worker namespace egl
4478*8975f5c5SAndroid Build Coastguard Worker {
4479*8975f5c5SAndroid Build Coastguard Worker
QueryConfigAttrib(const Config * config,EGLint attribute,EGLint * value)4480*8975f5c5SAndroid Build Coastguard Worker void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value)
4481*8975f5c5SAndroid Build Coastguard Worker {
4482*8975f5c5SAndroid Build Coastguard Worker ASSERT(config != nullptr);
4483*8975f5c5SAndroid Build Coastguard Worker switch (attribute)
4484*8975f5c5SAndroid Build Coastguard Worker {
4485*8975f5c5SAndroid Build Coastguard Worker case EGL_BUFFER_SIZE:
4486*8975f5c5SAndroid Build Coastguard Worker *value = config->bufferSize;
4487*8975f5c5SAndroid Build Coastguard Worker break;
4488*8975f5c5SAndroid Build Coastguard Worker case EGL_ALPHA_SIZE:
4489*8975f5c5SAndroid Build Coastguard Worker *value = config->alphaSize;
4490*8975f5c5SAndroid Build Coastguard Worker break;
4491*8975f5c5SAndroid Build Coastguard Worker case EGL_BLUE_SIZE:
4492*8975f5c5SAndroid Build Coastguard Worker *value = config->blueSize;
4493*8975f5c5SAndroid Build Coastguard Worker break;
4494*8975f5c5SAndroid Build Coastguard Worker case EGL_GREEN_SIZE:
4495*8975f5c5SAndroid Build Coastguard Worker *value = config->greenSize;
4496*8975f5c5SAndroid Build Coastguard Worker break;
4497*8975f5c5SAndroid Build Coastguard Worker case EGL_RED_SIZE:
4498*8975f5c5SAndroid Build Coastguard Worker *value = config->redSize;
4499*8975f5c5SAndroid Build Coastguard Worker break;
4500*8975f5c5SAndroid Build Coastguard Worker case EGL_DEPTH_SIZE:
4501*8975f5c5SAndroid Build Coastguard Worker *value = config->depthSize;
4502*8975f5c5SAndroid Build Coastguard Worker break;
4503*8975f5c5SAndroid Build Coastguard Worker case EGL_STENCIL_SIZE:
4504*8975f5c5SAndroid Build Coastguard Worker *value = config->stencilSize;
4505*8975f5c5SAndroid Build Coastguard Worker break;
4506*8975f5c5SAndroid Build Coastguard Worker case EGL_CONFIG_CAVEAT:
4507*8975f5c5SAndroid Build Coastguard Worker *value = config->configCaveat;
4508*8975f5c5SAndroid Build Coastguard Worker break;
4509*8975f5c5SAndroid Build Coastguard Worker case EGL_CONFIG_ID:
4510*8975f5c5SAndroid Build Coastguard Worker *value = config->configID;
4511*8975f5c5SAndroid Build Coastguard Worker break;
4512*8975f5c5SAndroid Build Coastguard Worker case EGL_LEVEL:
4513*8975f5c5SAndroid Build Coastguard Worker *value = config->level;
4514*8975f5c5SAndroid Build Coastguard Worker break;
4515*8975f5c5SAndroid Build Coastguard Worker case EGL_NATIVE_RENDERABLE:
4516*8975f5c5SAndroid Build Coastguard Worker *value = config->nativeRenderable;
4517*8975f5c5SAndroid Build Coastguard Worker break;
4518*8975f5c5SAndroid Build Coastguard Worker case EGL_NATIVE_VISUAL_ID:
4519*8975f5c5SAndroid Build Coastguard Worker *value = config->nativeVisualID;
4520*8975f5c5SAndroid Build Coastguard Worker break;
4521*8975f5c5SAndroid Build Coastguard Worker case EGL_NATIVE_VISUAL_TYPE:
4522*8975f5c5SAndroid Build Coastguard Worker *value = config->nativeVisualType;
4523*8975f5c5SAndroid Build Coastguard Worker break;
4524*8975f5c5SAndroid Build Coastguard Worker case EGL_SAMPLES:
4525*8975f5c5SAndroid Build Coastguard Worker *value = config->samples;
4526*8975f5c5SAndroid Build Coastguard Worker break;
4527*8975f5c5SAndroid Build Coastguard Worker case EGL_SAMPLE_BUFFERS:
4528*8975f5c5SAndroid Build Coastguard Worker *value = config->sampleBuffers;
4529*8975f5c5SAndroid Build Coastguard Worker break;
4530*8975f5c5SAndroid Build Coastguard Worker case EGL_SURFACE_TYPE:
4531*8975f5c5SAndroid Build Coastguard Worker *value = config->surfaceType;
4532*8975f5c5SAndroid Build Coastguard Worker break;
4533*8975f5c5SAndroid Build Coastguard Worker case EGL_BIND_TO_TEXTURE_TARGET_ANGLE:
4534*8975f5c5SAndroid Build Coastguard Worker *value = config->bindToTextureTarget;
4535*8975f5c5SAndroid Build Coastguard Worker break;
4536*8975f5c5SAndroid Build Coastguard Worker case EGL_TRANSPARENT_TYPE:
4537*8975f5c5SAndroid Build Coastguard Worker *value = config->transparentType;
4538*8975f5c5SAndroid Build Coastguard Worker break;
4539*8975f5c5SAndroid Build Coastguard Worker case EGL_TRANSPARENT_BLUE_VALUE:
4540*8975f5c5SAndroid Build Coastguard Worker *value = config->transparentBlueValue;
4541*8975f5c5SAndroid Build Coastguard Worker break;
4542*8975f5c5SAndroid Build Coastguard Worker case EGL_TRANSPARENT_GREEN_VALUE:
4543*8975f5c5SAndroid Build Coastguard Worker *value = config->transparentGreenValue;
4544*8975f5c5SAndroid Build Coastguard Worker break;
4545*8975f5c5SAndroid Build Coastguard Worker case EGL_TRANSPARENT_RED_VALUE:
4546*8975f5c5SAndroid Build Coastguard Worker *value = config->transparentRedValue;
4547*8975f5c5SAndroid Build Coastguard Worker break;
4548*8975f5c5SAndroid Build Coastguard Worker case EGL_BIND_TO_TEXTURE_RGB:
4549*8975f5c5SAndroid Build Coastguard Worker *value = config->bindToTextureRGB;
4550*8975f5c5SAndroid Build Coastguard Worker break;
4551*8975f5c5SAndroid Build Coastguard Worker case EGL_BIND_TO_TEXTURE_RGBA:
4552*8975f5c5SAndroid Build Coastguard Worker *value = config->bindToTextureRGBA;
4553*8975f5c5SAndroid Build Coastguard Worker break;
4554*8975f5c5SAndroid Build Coastguard Worker case EGL_MIN_SWAP_INTERVAL:
4555*8975f5c5SAndroid Build Coastguard Worker *value = config->minSwapInterval;
4556*8975f5c5SAndroid Build Coastguard Worker break;
4557*8975f5c5SAndroid Build Coastguard Worker case EGL_MAX_SWAP_INTERVAL:
4558*8975f5c5SAndroid Build Coastguard Worker *value = config->maxSwapInterval;
4559*8975f5c5SAndroid Build Coastguard Worker break;
4560*8975f5c5SAndroid Build Coastguard Worker case EGL_LUMINANCE_SIZE:
4561*8975f5c5SAndroid Build Coastguard Worker *value = config->luminanceSize;
4562*8975f5c5SAndroid Build Coastguard Worker break;
4563*8975f5c5SAndroid Build Coastguard Worker case EGL_ALPHA_MASK_SIZE:
4564*8975f5c5SAndroid Build Coastguard Worker *value = config->alphaMaskSize;
4565*8975f5c5SAndroid Build Coastguard Worker break;
4566*8975f5c5SAndroid Build Coastguard Worker case EGL_COLOR_BUFFER_TYPE:
4567*8975f5c5SAndroid Build Coastguard Worker *value = config->colorBufferType;
4568*8975f5c5SAndroid Build Coastguard Worker break;
4569*8975f5c5SAndroid Build Coastguard Worker case EGL_RENDERABLE_TYPE:
4570*8975f5c5SAndroid Build Coastguard Worker *value = config->renderableType;
4571*8975f5c5SAndroid Build Coastguard Worker break;
4572*8975f5c5SAndroid Build Coastguard Worker case EGL_MATCH_NATIVE_PIXMAP:
4573*8975f5c5SAndroid Build Coastguard Worker *value = false;
4574*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
4575*8975f5c5SAndroid Build Coastguard Worker break;
4576*8975f5c5SAndroid Build Coastguard Worker case EGL_CONFORMANT:
4577*8975f5c5SAndroid Build Coastguard Worker *value = config->conformant;
4578*8975f5c5SAndroid Build Coastguard Worker break;
4579*8975f5c5SAndroid Build Coastguard Worker case EGL_MAX_PBUFFER_WIDTH:
4580*8975f5c5SAndroid Build Coastguard Worker *value = config->maxPBufferWidth;
4581*8975f5c5SAndroid Build Coastguard Worker break;
4582*8975f5c5SAndroid Build Coastguard Worker case EGL_MAX_PBUFFER_HEIGHT:
4583*8975f5c5SAndroid Build Coastguard Worker *value = config->maxPBufferHeight;
4584*8975f5c5SAndroid Build Coastguard Worker break;
4585*8975f5c5SAndroid Build Coastguard Worker case EGL_MAX_PBUFFER_PIXELS:
4586*8975f5c5SAndroid Build Coastguard Worker *value = config->maxPBufferPixels;
4587*8975f5c5SAndroid Build Coastguard Worker break;
4588*8975f5c5SAndroid Build Coastguard Worker case EGL_OPTIMAL_SURFACE_ORIENTATION_ANGLE:
4589*8975f5c5SAndroid Build Coastguard Worker *value = config->optimalOrientation;
4590*8975f5c5SAndroid Build Coastguard Worker break;
4591*8975f5c5SAndroid Build Coastguard Worker case EGL_COLOR_COMPONENT_TYPE_EXT:
4592*8975f5c5SAndroid Build Coastguard Worker *value = config->colorComponentType;
4593*8975f5c5SAndroid Build Coastguard Worker break;
4594*8975f5c5SAndroid Build Coastguard Worker case EGL_RECORDABLE_ANDROID:
4595*8975f5c5SAndroid Build Coastguard Worker *value = config->recordable;
4596*8975f5c5SAndroid Build Coastguard Worker break;
4597*8975f5c5SAndroid Build Coastguard Worker case EGL_FRAMEBUFFER_TARGET_ANDROID:
4598*8975f5c5SAndroid Build Coastguard Worker *value = config->framebufferTarget;
4599*8975f5c5SAndroid Build Coastguard Worker break;
4600*8975f5c5SAndroid Build Coastguard Worker case EGL_MATCH_FORMAT_KHR:
4601*8975f5c5SAndroid Build Coastguard Worker *value = config->matchFormat;
4602*8975f5c5SAndroid Build Coastguard Worker break;
4603*8975f5c5SAndroid Build Coastguard Worker default:
4604*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
4605*8975f5c5SAndroid Build Coastguard Worker break;
4606*8975f5c5SAndroid Build Coastguard Worker }
4607*8975f5c5SAndroid Build Coastguard Worker }
4608*8975f5c5SAndroid Build Coastguard Worker
QueryContextAttrib(const gl::Context * context,EGLint attribute,EGLint * value)4609*8975f5c5SAndroid Build Coastguard Worker void QueryContextAttrib(const gl::Context *context, EGLint attribute, EGLint *value)
4610*8975f5c5SAndroid Build Coastguard Worker {
4611*8975f5c5SAndroid Build Coastguard Worker switch (attribute)
4612*8975f5c5SAndroid Build Coastguard Worker {
4613*8975f5c5SAndroid Build Coastguard Worker case EGL_CONFIG_ID:
4614*8975f5c5SAndroid Build Coastguard Worker if (context->getConfig() != EGL_NO_CONFIG_KHR)
4615*8975f5c5SAndroid Build Coastguard Worker {
4616*8975f5c5SAndroid Build Coastguard Worker *value = context->getConfig()->configID;
4617*8975f5c5SAndroid Build Coastguard Worker }
4618*8975f5c5SAndroid Build Coastguard Worker else
4619*8975f5c5SAndroid Build Coastguard Worker {
4620*8975f5c5SAndroid Build Coastguard Worker *value = 0;
4621*8975f5c5SAndroid Build Coastguard Worker }
4622*8975f5c5SAndroid Build Coastguard Worker break;
4623*8975f5c5SAndroid Build Coastguard Worker case EGL_CONTEXT_CLIENT_TYPE:
4624*8975f5c5SAndroid Build Coastguard Worker *value = EGL_OPENGL_ES_API;
4625*8975f5c5SAndroid Build Coastguard Worker break;
4626*8975f5c5SAndroid Build Coastguard Worker case EGL_CONTEXT_MAJOR_VERSION:
4627*8975f5c5SAndroid Build Coastguard Worker static_assert(EGL_CONTEXT_MAJOR_VERSION == EGL_CONTEXT_CLIENT_VERSION);
4628*8975f5c5SAndroid Build Coastguard Worker *value = context->getClientMajorVersion();
4629*8975f5c5SAndroid Build Coastguard Worker break;
4630*8975f5c5SAndroid Build Coastguard Worker case EGL_CONTEXT_MINOR_VERSION:
4631*8975f5c5SAndroid Build Coastguard Worker *value = context->getClientMinorVersion();
4632*8975f5c5SAndroid Build Coastguard Worker break;
4633*8975f5c5SAndroid Build Coastguard Worker case EGL_RENDER_BUFFER:
4634*8975f5c5SAndroid Build Coastguard Worker *value = context->getRenderBuffer();
4635*8975f5c5SAndroid Build Coastguard Worker break;
4636*8975f5c5SAndroid Build Coastguard Worker case EGL_ROBUST_RESOURCE_INITIALIZATION_ANGLE:
4637*8975f5c5SAndroid Build Coastguard Worker *value = context->isRobustResourceInitEnabled();
4638*8975f5c5SAndroid Build Coastguard Worker break;
4639*8975f5c5SAndroid Build Coastguard Worker case EGL_CONTEXT_PRIORITY_LEVEL_IMG:
4640*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLint>(context->getContextPriority());
4641*8975f5c5SAndroid Build Coastguard Worker break;
4642*8975f5c5SAndroid Build Coastguard Worker case EGL_PROTECTED_CONTENT_EXT:
4643*8975f5c5SAndroid Build Coastguard Worker *value = context->getState().hasProtectedContent();
4644*8975f5c5SAndroid Build Coastguard Worker break;
4645*8975f5c5SAndroid Build Coastguard Worker default:
4646*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
4647*8975f5c5SAndroid Build Coastguard Worker break;
4648*8975f5c5SAndroid Build Coastguard Worker }
4649*8975f5c5SAndroid Build Coastguard Worker }
4650*8975f5c5SAndroid Build Coastguard Worker
QuerySurfaceAttrib(const Display * display,const gl::Context * context,Surface * surface,EGLint attribute,EGLint * value)4651*8975f5c5SAndroid Build Coastguard Worker egl::Error QuerySurfaceAttrib(const Display *display,
4652*8975f5c5SAndroid Build Coastguard Worker const gl::Context *context,
4653*8975f5c5SAndroid Build Coastguard Worker Surface *surface,
4654*8975f5c5SAndroid Build Coastguard Worker EGLint attribute,
4655*8975f5c5SAndroid Build Coastguard Worker EGLint *value)
4656*8975f5c5SAndroid Build Coastguard Worker {
4657*8975f5c5SAndroid Build Coastguard Worker switch (attribute)
4658*8975f5c5SAndroid Build Coastguard Worker {
4659*8975f5c5SAndroid Build Coastguard Worker case EGL_GL_COLORSPACE:
4660*8975f5c5SAndroid Build Coastguard Worker *value = surface->getGLColorspace();
4661*8975f5c5SAndroid Build Coastguard Worker break;
4662*8975f5c5SAndroid Build Coastguard Worker case EGL_VG_ALPHA_FORMAT:
4663*8975f5c5SAndroid Build Coastguard Worker *value = surface->getVGAlphaFormat();
4664*8975f5c5SAndroid Build Coastguard Worker break;
4665*8975f5c5SAndroid Build Coastguard Worker case EGL_VG_COLORSPACE:
4666*8975f5c5SAndroid Build Coastguard Worker *value = surface->getVGColorspace();
4667*8975f5c5SAndroid Build Coastguard Worker break;
4668*8975f5c5SAndroid Build Coastguard Worker case EGL_CONFIG_ID:
4669*8975f5c5SAndroid Build Coastguard Worker *value = surface->getConfig()->configID;
4670*8975f5c5SAndroid Build Coastguard Worker break;
4671*8975f5c5SAndroid Build Coastguard Worker case EGL_HEIGHT:
4672*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(surface->getUserHeight(display, value));
4673*8975f5c5SAndroid Build Coastguard Worker break;
4674*8975f5c5SAndroid Build Coastguard Worker case EGL_HORIZONTAL_RESOLUTION:
4675*8975f5c5SAndroid Build Coastguard Worker *value = surface->getHorizontalResolution();
4676*8975f5c5SAndroid Build Coastguard Worker break;
4677*8975f5c5SAndroid Build Coastguard Worker case EGL_LARGEST_PBUFFER:
4678*8975f5c5SAndroid Build Coastguard Worker // The EGL spec states that value is not written if the surface is not a pbuffer
4679*8975f5c5SAndroid Build Coastguard Worker if (surface->getType() == EGL_PBUFFER_BIT)
4680*8975f5c5SAndroid Build Coastguard Worker {
4681*8975f5c5SAndroid Build Coastguard Worker *value = surface->getLargestPbuffer();
4682*8975f5c5SAndroid Build Coastguard Worker }
4683*8975f5c5SAndroid Build Coastguard Worker break;
4684*8975f5c5SAndroid Build Coastguard Worker case EGL_MIPMAP_TEXTURE:
4685*8975f5c5SAndroid Build Coastguard Worker // The EGL spec states that value is not written if the surface is not a pbuffer
4686*8975f5c5SAndroid Build Coastguard Worker if (surface->getType() == EGL_PBUFFER_BIT)
4687*8975f5c5SAndroid Build Coastguard Worker {
4688*8975f5c5SAndroid Build Coastguard Worker *value = surface->getMipmapTexture();
4689*8975f5c5SAndroid Build Coastguard Worker }
4690*8975f5c5SAndroid Build Coastguard Worker break;
4691*8975f5c5SAndroid Build Coastguard Worker case EGL_MIPMAP_LEVEL:
4692*8975f5c5SAndroid Build Coastguard Worker // The EGL spec states that value is not written if the surface is not a pbuffer
4693*8975f5c5SAndroid Build Coastguard Worker if (surface->getType() == EGL_PBUFFER_BIT)
4694*8975f5c5SAndroid Build Coastguard Worker {
4695*8975f5c5SAndroid Build Coastguard Worker *value = surface->getMipmapLevel();
4696*8975f5c5SAndroid Build Coastguard Worker }
4697*8975f5c5SAndroid Build Coastguard Worker break;
4698*8975f5c5SAndroid Build Coastguard Worker case EGL_MULTISAMPLE_RESOLVE:
4699*8975f5c5SAndroid Build Coastguard Worker *value = surface->getMultisampleResolve();
4700*8975f5c5SAndroid Build Coastguard Worker break;
4701*8975f5c5SAndroid Build Coastguard Worker case EGL_PIXEL_ASPECT_RATIO:
4702*8975f5c5SAndroid Build Coastguard Worker *value = surface->getPixelAspectRatio();
4703*8975f5c5SAndroid Build Coastguard Worker break;
4704*8975f5c5SAndroid Build Coastguard Worker case EGL_RENDER_BUFFER:
4705*8975f5c5SAndroid Build Coastguard Worker *value = surface->getRenderBuffer();
4706*8975f5c5SAndroid Build Coastguard Worker break;
4707*8975f5c5SAndroid Build Coastguard Worker case EGL_SWAP_BEHAVIOR:
4708*8975f5c5SAndroid Build Coastguard Worker *value = surface->getSwapBehavior();
4709*8975f5c5SAndroid Build Coastguard Worker break;
4710*8975f5c5SAndroid Build Coastguard Worker case EGL_TEXTURE_FORMAT:
4711*8975f5c5SAndroid Build Coastguard Worker // The EGL spec states that value is not written if the surface is not a pbuffer
4712*8975f5c5SAndroid Build Coastguard Worker if (surface->getType() == EGL_PBUFFER_BIT)
4713*8975f5c5SAndroid Build Coastguard Worker {
4714*8975f5c5SAndroid Build Coastguard Worker *value = ToEGLenum(surface->getTextureFormat());
4715*8975f5c5SAndroid Build Coastguard Worker }
4716*8975f5c5SAndroid Build Coastguard Worker break;
4717*8975f5c5SAndroid Build Coastguard Worker case EGL_TEXTURE_TARGET:
4718*8975f5c5SAndroid Build Coastguard Worker // The EGL spec states that value is not written if the surface is not a pbuffer
4719*8975f5c5SAndroid Build Coastguard Worker if (surface->getType() == EGL_PBUFFER_BIT)
4720*8975f5c5SAndroid Build Coastguard Worker {
4721*8975f5c5SAndroid Build Coastguard Worker *value = surface->getTextureTarget();
4722*8975f5c5SAndroid Build Coastguard Worker }
4723*8975f5c5SAndroid Build Coastguard Worker break;
4724*8975f5c5SAndroid Build Coastguard Worker case EGL_VERTICAL_RESOLUTION:
4725*8975f5c5SAndroid Build Coastguard Worker *value = surface->getVerticalResolution();
4726*8975f5c5SAndroid Build Coastguard Worker break;
4727*8975f5c5SAndroid Build Coastguard Worker case EGL_WIDTH:
4728*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(surface->getUserWidth(display, value));
4729*8975f5c5SAndroid Build Coastguard Worker break;
4730*8975f5c5SAndroid Build Coastguard Worker case EGL_POST_SUB_BUFFER_SUPPORTED_NV:
4731*8975f5c5SAndroid Build Coastguard Worker *value = surface->isPostSubBufferSupported();
4732*8975f5c5SAndroid Build Coastguard Worker break;
4733*8975f5c5SAndroid Build Coastguard Worker case EGL_FIXED_SIZE_ANGLE:
4734*8975f5c5SAndroid Build Coastguard Worker *value = surface->isFixedSize();
4735*8975f5c5SAndroid Build Coastguard Worker break;
4736*8975f5c5SAndroid Build Coastguard Worker case EGL_SURFACE_ORIENTATION_ANGLE:
4737*8975f5c5SAndroid Build Coastguard Worker *value = surface->getOrientation();
4738*8975f5c5SAndroid Build Coastguard Worker break;
4739*8975f5c5SAndroid Build Coastguard Worker case EGL_DIRECT_COMPOSITION_ANGLE:
4740*8975f5c5SAndroid Build Coastguard Worker *value = surface->directComposition();
4741*8975f5c5SAndroid Build Coastguard Worker break;
4742*8975f5c5SAndroid Build Coastguard Worker case EGL_ROBUST_RESOURCE_INITIALIZATION_ANGLE:
4743*8975f5c5SAndroid Build Coastguard Worker *value = surface->isRobustResourceInitEnabled();
4744*8975f5c5SAndroid Build Coastguard Worker break;
4745*8975f5c5SAndroid Build Coastguard Worker case EGL_TIMESTAMPS_ANDROID:
4746*8975f5c5SAndroid Build Coastguard Worker *value = surface->isTimestampsEnabled();
4747*8975f5c5SAndroid Build Coastguard Worker break;
4748*8975f5c5SAndroid Build Coastguard Worker case EGL_BUFFER_AGE_EXT:
4749*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(surface->getBufferAge(context, value));
4750*8975f5c5SAndroid Build Coastguard Worker break;
4751*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PITCH_KHR:
4752*8975f5c5SAndroid Build Coastguard Worker *value = surface->getBitmapPitch();
4753*8975f5c5SAndroid Build Coastguard Worker break;
4754*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_ORIGIN_KHR:
4755*8975f5c5SAndroid Build Coastguard Worker *value = surface->getBitmapOrigin();
4756*8975f5c5SAndroid Build Coastguard Worker break;
4757*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_RED_OFFSET_KHR:
4758*8975f5c5SAndroid Build Coastguard Worker *value = surface->getRedOffset();
4759*8975f5c5SAndroid Build Coastguard Worker break;
4760*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR:
4761*8975f5c5SAndroid Build Coastguard Worker *value = surface->getGreenOffset();
4762*8975f5c5SAndroid Build Coastguard Worker break;
4763*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR:
4764*8975f5c5SAndroid Build Coastguard Worker *value = surface->getBlueOffset();
4765*8975f5c5SAndroid Build Coastguard Worker break;
4766*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR:
4767*8975f5c5SAndroid Build Coastguard Worker *value = surface->getAlphaOffset();
4768*8975f5c5SAndroid Build Coastguard Worker break;
4769*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR:
4770*8975f5c5SAndroid Build Coastguard Worker *value = surface->getLuminanceOffset();
4771*8975f5c5SAndroid Build Coastguard Worker break;
4772*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_SIZE_KHR:
4773*8975f5c5SAndroid Build Coastguard Worker *value = surface->getBitmapPixelSize();
4774*8975f5c5SAndroid Build Coastguard Worker break;
4775*8975f5c5SAndroid Build Coastguard Worker case EGL_PROTECTED_CONTENT_EXT:
4776*8975f5c5SAndroid Build Coastguard Worker *value = surface->hasProtectedContent();
4777*8975f5c5SAndroid Build Coastguard Worker break;
4778*8975f5c5SAndroid Build Coastguard Worker default:
4779*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
4780*8975f5c5SAndroid Build Coastguard Worker break;
4781*8975f5c5SAndroid Build Coastguard Worker }
4782*8975f5c5SAndroid Build Coastguard Worker return NoError();
4783*8975f5c5SAndroid Build Coastguard Worker }
4784*8975f5c5SAndroid Build Coastguard Worker
QuerySurfaceAttrib64KHR(const Display * display,const gl::Context * context,Surface * surface,EGLint attribute,EGLAttribKHR * value)4785*8975f5c5SAndroid Build Coastguard Worker egl::Error QuerySurfaceAttrib64KHR(const Display *display,
4786*8975f5c5SAndroid Build Coastguard Worker const gl::Context *context,
4787*8975f5c5SAndroid Build Coastguard Worker Surface *surface,
4788*8975f5c5SAndroid Build Coastguard Worker EGLint attribute,
4789*8975f5c5SAndroid Build Coastguard Worker EGLAttribKHR *value)
4790*8975f5c5SAndroid Build Coastguard Worker {
4791*8975f5c5SAndroid Build Coastguard Worker switch (attribute)
4792*8975f5c5SAndroid Build Coastguard Worker {
4793*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PITCH_KHR:
4794*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLAttribKHR>(surface->getBitmapPitch());
4795*8975f5c5SAndroid Build Coastguard Worker break;
4796*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_ORIGIN_KHR:
4797*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLAttribKHR>(surface->getBitmapOrigin());
4798*8975f5c5SAndroid Build Coastguard Worker break;
4799*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_RED_OFFSET_KHR:
4800*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLAttribKHR>(surface->getRedOffset());
4801*8975f5c5SAndroid Build Coastguard Worker break;
4802*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR:
4803*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLAttribKHR>(surface->getGreenOffset());
4804*8975f5c5SAndroid Build Coastguard Worker break;
4805*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR:
4806*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLAttribKHR>(surface->getBlueOffset());
4807*8975f5c5SAndroid Build Coastguard Worker break;
4808*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR:
4809*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLAttribKHR>(surface->getAlphaOffset());
4810*8975f5c5SAndroid Build Coastguard Worker break;
4811*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR:
4812*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLAttribKHR>(surface->getLuminanceOffset());
4813*8975f5c5SAndroid Build Coastguard Worker break;
4814*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_PIXEL_SIZE_KHR:
4815*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLAttribKHR>(surface->getBitmapPixelSize());
4816*8975f5c5SAndroid Build Coastguard Worker break;
4817*8975f5c5SAndroid Build Coastguard Worker case EGL_BITMAP_POINTER_KHR:
4818*8975f5c5SAndroid Build Coastguard Worker *value = surface->getBitmapPointer();
4819*8975f5c5SAndroid Build Coastguard Worker break;
4820*8975f5c5SAndroid Build Coastguard Worker default:
4821*8975f5c5SAndroid Build Coastguard Worker {
4822*8975f5c5SAndroid Build Coastguard Worker EGLint intValue = 0;
4823*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(QuerySurfaceAttrib(display, context, surface, attribute, &intValue));
4824*8975f5c5SAndroid Build Coastguard Worker *value = static_cast<EGLAttribKHR>(intValue);
4825*8975f5c5SAndroid Build Coastguard Worker }
4826*8975f5c5SAndroid Build Coastguard Worker break;
4827*8975f5c5SAndroid Build Coastguard Worker }
4828*8975f5c5SAndroid Build Coastguard Worker return NoError();
4829*8975f5c5SAndroid Build Coastguard Worker }
4830*8975f5c5SAndroid Build Coastguard Worker
SetSurfaceAttrib(Surface * surface,EGLint attribute,EGLint value)4831*8975f5c5SAndroid Build Coastguard Worker egl::Error SetSurfaceAttrib(Surface *surface, EGLint attribute, EGLint value)
4832*8975f5c5SAndroid Build Coastguard Worker {
4833*8975f5c5SAndroid Build Coastguard Worker switch (attribute)
4834*8975f5c5SAndroid Build Coastguard Worker {
4835*8975f5c5SAndroid Build Coastguard Worker case EGL_MIPMAP_LEVEL:
4836*8975f5c5SAndroid Build Coastguard Worker surface->setMipmapLevel(value);
4837*8975f5c5SAndroid Build Coastguard Worker break;
4838*8975f5c5SAndroid Build Coastguard Worker case EGL_MULTISAMPLE_RESOLVE:
4839*8975f5c5SAndroid Build Coastguard Worker surface->setMultisampleResolve(value);
4840*8975f5c5SAndroid Build Coastguard Worker break;
4841*8975f5c5SAndroid Build Coastguard Worker case EGL_SWAP_BEHAVIOR:
4842*8975f5c5SAndroid Build Coastguard Worker surface->setSwapBehavior(value);
4843*8975f5c5SAndroid Build Coastguard Worker break;
4844*8975f5c5SAndroid Build Coastguard Worker case EGL_WIDTH:
4845*8975f5c5SAndroid Build Coastguard Worker surface->setFixedWidth(value);
4846*8975f5c5SAndroid Build Coastguard Worker break;
4847*8975f5c5SAndroid Build Coastguard Worker case EGL_HEIGHT:
4848*8975f5c5SAndroid Build Coastguard Worker surface->setFixedHeight(value);
4849*8975f5c5SAndroid Build Coastguard Worker break;
4850*8975f5c5SAndroid Build Coastguard Worker case EGL_TIMESTAMPS_ANDROID:
4851*8975f5c5SAndroid Build Coastguard Worker surface->setTimestampsEnabled(value != EGL_FALSE);
4852*8975f5c5SAndroid Build Coastguard Worker break;
4853*8975f5c5SAndroid Build Coastguard Worker case EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID:
4854*8975f5c5SAndroid Build Coastguard Worker return surface->setAutoRefreshEnabled(value != EGL_FALSE);
4855*8975f5c5SAndroid Build Coastguard Worker case EGL_RENDER_BUFFER:
4856*8975f5c5SAndroid Build Coastguard Worker return surface->setRenderBuffer(value);
4857*8975f5c5SAndroid Build Coastguard Worker default:
4858*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
4859*8975f5c5SAndroid Build Coastguard Worker break;
4860*8975f5c5SAndroid Build Coastguard Worker }
4861*8975f5c5SAndroid Build Coastguard Worker return NoError();
4862*8975f5c5SAndroid Build Coastguard Worker }
4863*8975f5c5SAndroid Build Coastguard Worker
GetSyncAttrib(Display * display,SyncID sync,EGLint attribute,EGLint * value)4864*8975f5c5SAndroid Build Coastguard Worker Error GetSyncAttrib(Display *display, SyncID sync, EGLint attribute, EGLint *value)
4865*8975f5c5SAndroid Build Coastguard Worker {
4866*8975f5c5SAndroid Build Coastguard Worker const egl::Sync *syncObj = display->getSync(sync);
4867*8975f5c5SAndroid Build Coastguard Worker switch (attribute)
4868*8975f5c5SAndroid Build Coastguard Worker {
4869*8975f5c5SAndroid Build Coastguard Worker case EGL_SYNC_TYPE_KHR:
4870*8975f5c5SAndroid Build Coastguard Worker *value = syncObj->getType();
4871*8975f5c5SAndroid Build Coastguard Worker return NoError();
4872*8975f5c5SAndroid Build Coastguard Worker
4873*8975f5c5SAndroid Build Coastguard Worker case EGL_SYNC_STATUS_KHR:
4874*8975f5c5SAndroid Build Coastguard Worker return syncObj->getStatus(display, value);
4875*8975f5c5SAndroid Build Coastguard Worker
4876*8975f5c5SAndroid Build Coastguard Worker case EGL_SYNC_CONDITION_KHR:
4877*8975f5c5SAndroid Build Coastguard Worker *value = syncObj->getCondition();
4878*8975f5c5SAndroid Build Coastguard Worker return NoError();
4879*8975f5c5SAndroid Build Coastguard Worker
4880*8975f5c5SAndroid Build Coastguard Worker default:
4881*8975f5c5SAndroid Build Coastguard Worker break;
4882*8975f5c5SAndroid Build Coastguard Worker }
4883*8975f5c5SAndroid Build Coastguard Worker
4884*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
4885*8975f5c5SAndroid Build Coastguard Worker return NoError();
4886*8975f5c5SAndroid Build Coastguard Worker }
4887*8975f5c5SAndroid Build Coastguard Worker } // namespace egl
4888