xref: /aosp_15_r20/external/angle/src/libANGLE/context_private_call.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2023 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // context_private_call.cpp:
8 //   Helpers that set/get state that is entirely locally accessed by the context.
9 
10 #include "libANGLE/context_private_call_autogen.h"
11 
12 #include "common/debug.h"
13 #include "libANGLE/queryconversions.h"
14 #include "libANGLE/queryutils.h"
15 
16 namespace
17 {
FixedMatrixToMat4(const GLfixed * m)18 angle::Mat4 FixedMatrixToMat4(const GLfixed *m)
19 {
20     angle::Mat4 matrixAsFloat;
21     GLfloat *floatData = matrixAsFloat.data();
22 
23     for (int i = 0; i < 16; i++)
24     {
25         floatData[i] = gl::ConvertFixedToFloat(m[i]);
26     }
27 
28     return matrixAsFloat;
29 }
30 }  // namespace
31 
32 namespace gl
33 {
ContextPrivateClearColor(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)34 void ContextPrivateClearColor(PrivateState *privateState,
35                               PrivateStateCache *privateStateCache,
36                               GLfloat red,
37                               GLfloat green,
38                               GLfloat blue,
39                               GLfloat alpha)
40 {
41     privateState->setColorClearValue(red, green, blue, alpha);
42 }
43 
ContextPrivateClearDepthf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat depth)44 void ContextPrivateClearDepthf(PrivateState *privateState,
45                                PrivateStateCache *privateStateCache,
46                                GLfloat depth)
47 {
48     privateState->setDepthClearValue(clamp01(depth));
49 }
50 
ContextPrivateClearStencil(PrivateState * privateState,PrivateStateCache * privateStateCache,GLint stencil)51 void ContextPrivateClearStencil(PrivateState *privateState,
52                                 PrivateStateCache *privateStateCache,
53                                 GLint stencil)
54 {
55     privateState->setStencilClearValue(stencil);
56 }
57 
ContextPrivateClearColorx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed red,GLfixed green,GLfixed blue,GLfixed alpha)58 void ContextPrivateClearColorx(PrivateState *privateState,
59                                PrivateStateCache *privateStateCache,
60                                GLfixed red,
61                                GLfixed green,
62                                GLfixed blue,
63                                GLfixed alpha)
64 {
65     ContextPrivateClearColor(privateState, privateStateCache, ConvertFixedToFloat(red),
66                              ConvertFixedToFloat(green), ConvertFixedToFloat(blue),
67                              ConvertFixedToFloat(alpha));
68 }
69 
ContextPrivateClearDepthx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed depth)70 void ContextPrivateClearDepthx(PrivateState *privateState,
71                                PrivateStateCache *privateStateCache,
72                                GLfixed depth)
73 {
74     ContextPrivateClearDepthf(privateState, privateStateCache, ConvertFixedToFloat(depth));
75 }
76 
ContextPrivateColorMask(PrivateState * privateState,PrivateStateCache * privateStateCache,GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)77 void ContextPrivateColorMask(PrivateState *privateState,
78                              PrivateStateCache *privateStateCache,
79                              GLboolean red,
80                              GLboolean green,
81                              GLboolean blue,
82                              GLboolean alpha)
83 {
84     privateState->setColorMask(ConvertToBool(red), ConvertToBool(green), ConvertToBool(blue),
85                                ConvertToBool(alpha));
86     privateStateCache->onColorMaskChange();
87 }
88 
ContextPrivateColorMaski(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLboolean r,GLboolean g,GLboolean b,GLboolean a)89 void ContextPrivateColorMaski(PrivateState *privateState,
90                               PrivateStateCache *privateStateCache,
91                               GLuint index,
92                               GLboolean r,
93                               GLboolean g,
94                               GLboolean b,
95                               GLboolean a)
96 {
97     privateState->setColorMaskIndexed(ConvertToBool(r), ConvertToBool(g), ConvertToBool(b),
98                                       ConvertToBool(a), index);
99     privateStateCache->onColorMaskChange();
100 }
101 
ContextPrivateDepthMask(PrivateState * privateState,PrivateStateCache * privateStateCache,GLboolean flag)102 void ContextPrivateDepthMask(PrivateState *privateState,
103                              PrivateStateCache *privateStateCache,
104                              GLboolean flag)
105 {
106     privateState->setDepthMask(ConvertToBool(flag));
107 }
108 
ContextPrivateDisable(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum cap)109 void ContextPrivateDisable(PrivateState *privateState,
110                            PrivateStateCache *privateStateCache,
111                            GLenum cap)
112 {
113     privateState->setEnableFeature(cap, false);
114     privateStateCache->onCapChange();
115 }
116 
ContextPrivateDisablei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLuint index)117 void ContextPrivateDisablei(PrivateState *privateState,
118                             PrivateStateCache *privateStateCache,
119                             GLenum target,
120                             GLuint index)
121 {
122     privateState->setEnableFeatureIndexed(target, false, index);
123     privateStateCache->onCapChange();
124 }
125 
ContextPrivateEnable(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum cap)126 void ContextPrivateEnable(PrivateState *privateState,
127                           PrivateStateCache *privateStateCache,
128                           GLenum cap)
129 {
130     privateState->setEnableFeature(cap, true);
131     privateStateCache->onCapChange();
132 }
133 
ContextPrivateEnablei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLuint index)134 void ContextPrivateEnablei(PrivateState *privateState,
135                            PrivateStateCache *privateStateCache,
136                            GLenum target,
137                            GLuint index)
138 {
139     privateState->setEnableFeatureIndexed(target, true, index);
140     privateStateCache->onCapChange();
141 }
142 
ContextPrivateActiveTexture(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum texture)143 void ContextPrivateActiveTexture(PrivateState *privateState,
144                                  PrivateStateCache *privateStateCache,
145                                  GLenum texture)
146 {
147     privateState->setActiveSampler(texture - GL_TEXTURE0);
148 }
149 
ContextPrivateCullFace(PrivateState * privateState,PrivateStateCache * privateStateCache,CullFaceMode mode)150 void ContextPrivateCullFace(PrivateState *privateState,
151                             PrivateStateCache *privateStateCache,
152                             CullFaceMode mode)
153 {
154     privateState->setCullMode(mode);
155 }
156 
ContextPrivateDepthFunc(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum func)157 void ContextPrivateDepthFunc(PrivateState *privateState,
158                              PrivateStateCache *privateStateCache,
159                              GLenum func)
160 {
161     privateState->setDepthFunc(func);
162 }
163 
ContextPrivateDepthRangef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat zNear,GLfloat zFar)164 void ContextPrivateDepthRangef(PrivateState *privateState,
165                                PrivateStateCache *privateStateCache,
166                                GLfloat zNear,
167                                GLfloat zFar)
168 {
169     privateState->setDepthRange(clamp01(zNear), clamp01(zFar));
170 }
171 
ContextPrivateDepthRangex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed zNear,GLfixed zFar)172 void ContextPrivateDepthRangex(PrivateState *privateState,
173                                PrivateStateCache *privateStateCache,
174                                GLfixed zNear,
175                                GLfixed zFar)
176 {
177     ContextPrivateDepthRangef(privateState, privateStateCache, ConvertFixedToFloat(zNear),
178                               ConvertFixedToFloat(zFar));
179 }
180 
ContextPrivateFrontFace(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum mode)181 void ContextPrivateFrontFace(PrivateState *privateState,
182                              PrivateStateCache *privateStateCache,
183                              GLenum mode)
184 {
185     privateState->setFrontFace(mode);
186 }
187 
ContextPrivateLineWidth(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat width)188 void ContextPrivateLineWidth(PrivateState *privateState,
189                              PrivateStateCache *privateStateCache,
190                              GLfloat width)
191 {
192     privateState->setLineWidth(width);
193 }
194 
ContextPrivateLineWidthx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed width)195 void ContextPrivateLineWidthx(PrivateState *privateState,
196                               PrivateStateCache *privateStateCache,
197                               GLfixed width)
198 {
199     ContextPrivateLineWidth(privateState, privateStateCache, ConvertFixedToFloat(width));
200 }
201 
ContextPrivatePolygonOffset(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat factor,GLfloat units)202 void ContextPrivatePolygonOffset(PrivateState *privateState,
203                                  PrivateStateCache *privateStateCache,
204                                  GLfloat factor,
205                                  GLfloat units)
206 {
207     privateState->setPolygonOffsetParams(factor, units, 0.0f);
208 }
209 
ContextPrivatePolygonOffsetClamp(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat factor,GLfloat units,GLfloat clamp)210 void ContextPrivatePolygonOffsetClamp(PrivateState *privateState,
211                                       PrivateStateCache *privateStateCache,
212                                       GLfloat factor,
213                                       GLfloat units,
214                                       GLfloat clamp)
215 {
216     privateState->setPolygonOffsetParams(factor, units, clamp);
217 }
218 
ContextPrivatePolygonOffsetx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed factor,GLfixed units)219 void ContextPrivatePolygonOffsetx(PrivateState *privateState,
220                                   PrivateStateCache *privateStateCache,
221                                   GLfixed factor,
222                                   GLfixed units)
223 {
224     ContextPrivatePolygonOffsetClamp(privateState, privateStateCache, ConvertFixedToFloat(factor),
225                                      ConvertFixedToFloat(units), 0.0f);
226 }
227 
ContextPrivateSampleCoverage(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat value,GLboolean invert)228 void ContextPrivateSampleCoverage(PrivateState *privateState,
229                                   PrivateStateCache *privateStateCache,
230                                   GLfloat value,
231                                   GLboolean invert)
232 {
233     privateState->setSampleCoverageParams(clamp01(value), ConvertToBool(invert));
234 }
235 
ContextPrivateSampleCoveragex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLclampx value,GLboolean invert)236 void ContextPrivateSampleCoveragex(PrivateState *privateState,
237                                    PrivateStateCache *privateStateCache,
238                                    GLclampx value,
239                                    GLboolean invert)
240 {
241     ContextPrivateSampleCoverage(privateState, privateStateCache, ConvertFixedToFloat(value),
242                                  invert);
243 }
244 
ContextPrivateScissor(PrivateState * privateState,PrivateStateCache * privateStateCache,GLint x,GLint y,GLsizei width,GLsizei height)245 void ContextPrivateScissor(PrivateState *privateState,
246                            PrivateStateCache *privateStateCache,
247                            GLint x,
248                            GLint y,
249                            GLsizei width,
250                            GLsizei height)
251 {
252     privateState->setScissorParams(x, y, width, height);
253 }
254 
ContextPrivateVertexAttrib1f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLfloat x)255 void ContextPrivateVertexAttrib1f(PrivateState *privateState,
256                                   PrivateStateCache *privateStateCache,
257                                   GLuint index,
258                                   GLfloat x)
259 {
260     GLfloat vals[4] = {x, 0, 0, 1};
261     privateState->setVertexAttribf(index, vals);
262     privateStateCache->onDefaultVertexAttributeChange();
263 }
264 
ContextPrivateVertexAttrib1fv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLfloat * values)265 void ContextPrivateVertexAttrib1fv(PrivateState *privateState,
266                                    PrivateStateCache *privateStateCache,
267                                    GLuint index,
268                                    const GLfloat *values)
269 {
270     GLfloat vals[4] = {values[0], 0, 0, 1};
271     privateState->setVertexAttribf(index, vals);
272     privateStateCache->onDefaultVertexAttributeChange();
273 }
274 
ContextPrivateVertexAttrib2f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLfloat x,GLfloat y)275 void ContextPrivateVertexAttrib2f(PrivateState *privateState,
276                                   PrivateStateCache *privateStateCache,
277                                   GLuint index,
278                                   GLfloat x,
279                                   GLfloat y)
280 {
281     GLfloat vals[4] = {x, y, 0, 1};
282     privateState->setVertexAttribf(index, vals);
283     privateStateCache->onDefaultVertexAttributeChange();
284 }
285 
ContextPrivateVertexAttrib2fv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLfloat * values)286 void ContextPrivateVertexAttrib2fv(PrivateState *privateState,
287                                    PrivateStateCache *privateStateCache,
288                                    GLuint index,
289                                    const GLfloat *values)
290 {
291     GLfloat vals[4] = {values[0], values[1], 0, 1};
292     privateState->setVertexAttribf(index, vals);
293     privateStateCache->onDefaultVertexAttributeChange();
294 }
295 
ContextPrivateVertexAttrib3f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLfloat x,GLfloat y,GLfloat z)296 void ContextPrivateVertexAttrib3f(PrivateState *privateState,
297                                   PrivateStateCache *privateStateCache,
298                                   GLuint index,
299                                   GLfloat x,
300                                   GLfloat y,
301                                   GLfloat z)
302 {
303     GLfloat vals[4] = {x, y, z, 1};
304     privateState->setVertexAttribf(index, vals);
305     privateStateCache->onDefaultVertexAttributeChange();
306 }
307 
ContextPrivateVertexAttrib3fv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLfloat * values)308 void ContextPrivateVertexAttrib3fv(PrivateState *privateState,
309                                    PrivateStateCache *privateStateCache,
310                                    GLuint index,
311                                    const GLfloat *values)
312 {
313     GLfloat vals[4] = {values[0], values[1], values[2], 1};
314     privateState->setVertexAttribf(index, vals);
315     privateStateCache->onDefaultVertexAttributeChange();
316 }
317 
ContextPrivateVertexAttrib4f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLfloat x,GLfloat y,GLfloat z,GLfloat w)318 void ContextPrivateVertexAttrib4f(PrivateState *privateState,
319                                   PrivateStateCache *privateStateCache,
320                                   GLuint index,
321                                   GLfloat x,
322                                   GLfloat y,
323                                   GLfloat z,
324                                   GLfloat w)
325 {
326     GLfloat vals[4] = {x, y, z, w};
327     privateState->setVertexAttribf(index, vals);
328     privateStateCache->onDefaultVertexAttributeChange();
329 }
330 
ContextPrivateVertexAttrib4fv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLfloat * values)331 void ContextPrivateVertexAttrib4fv(PrivateState *privateState,
332                                    PrivateStateCache *privateStateCache,
333                                    GLuint index,
334                                    const GLfloat *values)
335 {
336     privateState->setVertexAttribf(index, values);
337     privateStateCache->onDefaultVertexAttributeChange();
338 }
339 
ContextPrivateVertexAttribI4i(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLint x,GLint y,GLint z,GLint w)340 void ContextPrivateVertexAttribI4i(PrivateState *privateState,
341                                    PrivateStateCache *privateStateCache,
342                                    GLuint index,
343                                    GLint x,
344                                    GLint y,
345                                    GLint z,
346                                    GLint w)
347 {
348     GLint vals[4] = {x, y, z, w};
349     privateState->setVertexAttribi(index, vals);
350     privateStateCache->onDefaultVertexAttributeChange();
351 }
352 
ContextPrivateVertexAttribI4iv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLint * values)353 void ContextPrivateVertexAttribI4iv(PrivateState *privateState,
354                                     PrivateStateCache *privateStateCache,
355                                     GLuint index,
356                                     const GLint *values)
357 {
358     privateState->setVertexAttribi(index, values);
359     privateStateCache->onDefaultVertexAttributeChange();
360 }
361 
ContextPrivateVertexAttribI4ui(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLuint x,GLuint y,GLuint z,GLuint w)362 void ContextPrivateVertexAttribI4ui(PrivateState *privateState,
363                                     PrivateStateCache *privateStateCache,
364                                     GLuint index,
365                                     GLuint x,
366                                     GLuint y,
367                                     GLuint z,
368                                     GLuint w)
369 {
370     GLuint vals[4] = {x, y, z, w};
371     privateState->setVertexAttribu(index, vals);
372     privateStateCache->onDefaultVertexAttributeChange();
373 }
374 
ContextPrivateVertexAttribI4uiv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLuint * values)375 void ContextPrivateVertexAttribI4uiv(PrivateState *privateState,
376                                      PrivateStateCache *privateStateCache,
377                                      GLuint index,
378                                      const GLuint *values)
379 {
380     privateState->setVertexAttribu(index, values);
381     privateStateCache->onDefaultVertexAttributeChange();
382 }
383 
ContextPrivateViewport(PrivateState * privateState,PrivateStateCache * privateStateCache,GLint x,GLint y,GLsizei width,GLsizei height)384 void ContextPrivateViewport(PrivateState *privateState,
385                             PrivateStateCache *privateStateCache,
386                             GLint x,
387                             GLint y,
388                             GLsizei width,
389                             GLsizei height)
390 {
391     privateState->setViewportParams(x, y, width, height);
392 }
393 
ContextPrivateSampleMaski(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint maskNumber,GLbitfield mask)394 void ContextPrivateSampleMaski(PrivateState *privateState,
395                                PrivateStateCache *privateStateCache,
396                                GLuint maskNumber,
397                                GLbitfield mask)
398 {
399     privateState->setSampleMaskParams(maskNumber, mask);
400 }
401 
ContextPrivateMinSampleShading(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat value)402 void ContextPrivateMinSampleShading(PrivateState *privateState,
403                                     PrivateStateCache *privateStateCache,
404                                     GLfloat value)
405 {
406     privateState->setMinSampleShading(value);
407 }
408 
ContextPrivatePrimitiveBoundingBox(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat minX,GLfloat minY,GLfloat minZ,GLfloat minW,GLfloat maxX,GLfloat maxY,GLfloat maxZ,GLfloat maxW)409 void ContextPrivatePrimitiveBoundingBox(PrivateState *privateState,
410                                         PrivateStateCache *privateStateCache,
411                                         GLfloat minX,
412                                         GLfloat minY,
413                                         GLfloat minZ,
414                                         GLfloat minW,
415                                         GLfloat maxX,
416                                         GLfloat maxY,
417                                         GLfloat maxZ,
418                                         GLfloat maxW)
419 {
420     privateState->setBoundingBox(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
421 }
422 
ContextPrivateLogicOp(PrivateState * privateState,PrivateStateCache * privateStateCache,LogicalOperation opcode)423 void ContextPrivateLogicOp(PrivateState *privateState,
424                            PrivateStateCache *privateStateCache,
425                            LogicalOperation opcode)
426 {
427     privateState->getMutableGLES1State()->setLogicOp(opcode);
428 }
429 
ContextPrivateLogicOpANGLE(PrivateState * privateState,PrivateStateCache * privateStateCache,LogicalOperation opcode)430 void ContextPrivateLogicOpANGLE(PrivateState *privateState,
431                                 PrivateStateCache *privateStateCache,
432                                 LogicalOperation opcode)
433 {
434     privateState->setLogicOp(opcode);
435 }
436 
ContextPrivatePolygonMode(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,PolygonMode mode)437 void ContextPrivatePolygonMode(PrivateState *privateState,
438                                PrivateStateCache *privateStateCache,
439                                GLenum face,
440                                PolygonMode mode)
441 {
442     ASSERT(face == GL_FRONT_AND_BACK);
443     privateState->setPolygonMode(mode);
444 }
445 
ContextPrivatePolygonModeNV(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,PolygonMode mode)446 void ContextPrivatePolygonModeNV(PrivateState *privateState,
447                                  PrivateStateCache *privateStateCache,
448                                  GLenum face,
449                                  PolygonMode mode)
450 {
451     ContextPrivatePolygonMode(privateState, privateStateCache, face, mode);
452 }
453 
ContextPrivateProvokingVertex(PrivateState * privateState,PrivateStateCache * privateStateCache,ProvokingVertexConvention provokeMode)454 void ContextPrivateProvokingVertex(PrivateState *privateState,
455                                    PrivateStateCache *privateStateCache,
456                                    ProvokingVertexConvention provokeMode)
457 {
458     privateState->setProvokingVertex(provokeMode);
459 }
460 
ContextPrivateCoverageModulation(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum components)461 void ContextPrivateCoverageModulation(PrivateState *privateState,
462                                       PrivateStateCache *privateStateCache,
463                                       GLenum components)
464 {
465     privateState->setCoverageModulation(components);
466 }
467 
ContextPrivateClipControl(PrivateState * privateState,PrivateStateCache * privateStateCache,ClipOrigin origin,ClipDepthMode depth)468 void ContextPrivateClipControl(PrivateState *privateState,
469                                PrivateStateCache *privateStateCache,
470                                ClipOrigin origin,
471                                ClipDepthMode depth)
472 {
473     privateState->setClipControl(origin, depth);
474 }
475 
ContextPrivateShadingRate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum rate)476 void ContextPrivateShadingRate(PrivateState *privateState,
477                                PrivateStateCache *privateStateCache,
478                                GLenum rate)
479 {
480     privateState->setShadingRate(rate);
481 }
482 
ContextPrivateBlendColor(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)483 void ContextPrivateBlendColor(PrivateState *privateState,
484                               PrivateStateCache *privateStateCache,
485                               GLfloat red,
486                               GLfloat green,
487                               GLfloat blue,
488                               GLfloat alpha)
489 {
490     privateState->setBlendColor(red, green, blue, alpha);
491 }
492 
ContextPrivateBlendEquation(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum mode)493 void ContextPrivateBlendEquation(PrivateState *privateState,
494                                  PrivateStateCache *privateStateCache,
495                                  GLenum mode)
496 {
497     privateState->setBlendEquation(mode, mode);
498     if (privateState->getExtensions().blendEquationAdvancedKHR)
499     {
500         privateStateCache->onBlendEquationOrFuncChange();
501     }
502 }
503 
ContextPrivateBlendEquationi(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint buf,GLenum mode)504 void ContextPrivateBlendEquationi(PrivateState *privateState,
505                                   PrivateStateCache *privateStateCache,
506                                   GLuint buf,
507                                   GLenum mode)
508 {
509     privateState->setBlendEquationIndexed(mode, mode, buf);
510     if (privateState->getExtensions().blendEquationAdvancedKHR)
511     {
512         privateStateCache->onBlendEquationOrFuncChange();
513     }
514 }
515 
ContextPrivateBlendEquationSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum modeRGB,GLenum modeAlpha)516 void ContextPrivateBlendEquationSeparate(PrivateState *privateState,
517                                          PrivateStateCache *privateStateCache,
518                                          GLenum modeRGB,
519                                          GLenum modeAlpha)
520 {
521     privateState->setBlendEquation(modeRGB, modeAlpha);
522     if (privateState->getExtensions().blendEquationAdvancedKHR)
523     {
524         privateStateCache->onBlendEquationOrFuncChange();
525     }
526 }
527 
ContextPrivateBlendEquationSeparatei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint buf,GLenum modeRGB,GLenum modeAlpha)528 void ContextPrivateBlendEquationSeparatei(PrivateState *privateState,
529                                           PrivateStateCache *privateStateCache,
530                                           GLuint buf,
531                                           GLenum modeRGB,
532                                           GLenum modeAlpha)
533 {
534     privateState->setBlendEquationIndexed(modeRGB, modeAlpha, buf);
535     if (privateState->getExtensions().blendEquationAdvancedKHR)
536     {
537         privateStateCache->onBlendEquationOrFuncChange();
538     }
539 }
540 
ContextPrivateBlendFunc(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum sfactor,GLenum dfactor)541 void ContextPrivateBlendFunc(PrivateState *privateState,
542                              PrivateStateCache *privateStateCache,
543                              GLenum sfactor,
544                              GLenum dfactor)
545 {
546     privateState->setBlendFactors(sfactor, dfactor, sfactor, dfactor);
547     if (privateState->getExtensions().blendFuncExtendedEXT)
548     {
549         privateStateCache->onBlendEquationOrFuncChange();
550     }
551 }
552 
ContextPrivateBlendFunci(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint buf,GLenum src,GLenum dst)553 void ContextPrivateBlendFunci(PrivateState *privateState,
554                               PrivateStateCache *privateStateCache,
555                               GLuint buf,
556                               GLenum src,
557                               GLenum dst)
558 {
559     privateState->setBlendFactorsIndexed(src, dst, src, dst, buf);
560     if (privateState->noSimultaneousConstantColorAndAlphaBlendFunc() ||
561         privateState->getExtensions().blendFuncExtendedEXT)
562     {
563         privateStateCache->onBlendEquationOrFuncChange();
564     }
565 }
566 
ContextPrivateBlendFuncSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)567 void ContextPrivateBlendFuncSeparate(PrivateState *privateState,
568                                      PrivateStateCache *privateStateCache,
569                                      GLenum srcRGB,
570                                      GLenum dstRGB,
571                                      GLenum srcAlpha,
572                                      GLenum dstAlpha)
573 {
574     privateState->setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);
575     if (privateState->getExtensions().blendFuncExtendedEXT)
576     {
577         privateStateCache->onBlendEquationOrFuncChange();
578     }
579 }
580 
ContextPrivateBlendFuncSeparatei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint buf,GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)581 void ContextPrivateBlendFuncSeparatei(PrivateState *privateState,
582                                       PrivateStateCache *privateStateCache,
583                                       GLuint buf,
584                                       GLenum srcRGB,
585                                       GLenum dstRGB,
586                                       GLenum srcAlpha,
587                                       GLenum dstAlpha)
588 {
589     privateState->setBlendFactorsIndexed(srcRGB, dstRGB, srcAlpha, dstAlpha, buf);
590     if (privateState->noSimultaneousConstantColorAndAlphaBlendFunc() ||
591         privateState->getExtensions().blendFuncExtendedEXT)
592     {
593         privateStateCache->onBlendEquationOrFuncChange();
594     }
595 }
596 
ContextPrivateStencilFunc(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum func,GLint ref,GLuint mask)597 void ContextPrivateStencilFunc(PrivateState *privateState,
598                                PrivateStateCache *privateStateCache,
599                                GLenum func,
600                                GLint ref,
601                                GLuint mask)
602 {
603     ContextPrivateStencilFuncSeparate(privateState, privateStateCache, GL_FRONT_AND_BACK, func, ref,
604                                       mask);
605 }
606 
ContextPrivateStencilFuncSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,GLenum func,GLint ref,GLuint mask)607 void ContextPrivateStencilFuncSeparate(PrivateState *privateState,
608                                        PrivateStateCache *privateStateCache,
609                                        GLenum face,
610                                        GLenum func,
611                                        GLint ref,
612                                        GLuint mask)
613 {
614     GLint clampedRef = gl::clamp(ref, 0, std::numeric_limits<uint8_t>::max());
615     if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
616     {
617         privateState->setStencilParams(func, clampedRef, mask);
618     }
619 
620     if (face == GL_BACK || face == GL_FRONT_AND_BACK)
621     {
622         privateState->setStencilBackParams(func, clampedRef, mask);
623     }
624 
625     privateStateCache->onStencilStateChange();
626 }
627 
ContextPrivateStencilMask(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint mask)628 void ContextPrivateStencilMask(PrivateState *privateState,
629                                PrivateStateCache *privateStateCache,
630                                GLuint mask)
631 {
632     ContextPrivateStencilMaskSeparate(privateState, privateStateCache, GL_FRONT_AND_BACK, mask);
633 }
634 
ContextPrivateStencilMaskSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,GLuint mask)635 void ContextPrivateStencilMaskSeparate(PrivateState *privateState,
636                                        PrivateStateCache *privateStateCache,
637                                        GLenum face,
638                                        GLuint mask)
639 {
640     if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
641     {
642         privateState->setStencilWritemask(mask);
643     }
644 
645     if (face == GL_BACK || face == GL_FRONT_AND_BACK)
646     {
647         privateState->setStencilBackWritemask(mask);
648     }
649 
650     privateStateCache->onStencilStateChange();
651 }
652 
ContextPrivateStencilOp(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum fail,GLenum zfail,GLenum zpass)653 void ContextPrivateStencilOp(PrivateState *privateState,
654                              PrivateStateCache *privateStateCache,
655                              GLenum fail,
656                              GLenum zfail,
657                              GLenum zpass)
658 {
659     ContextPrivateStencilOpSeparate(privateState, privateStateCache, GL_FRONT_AND_BACK, fail, zfail,
660                                     zpass);
661 }
662 
ContextPrivateStencilOpSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,GLenum fail,GLenum zfail,GLenum zpass)663 void ContextPrivateStencilOpSeparate(PrivateState *privateState,
664                                      PrivateStateCache *privateStateCache,
665                                      GLenum face,
666                                      GLenum fail,
667                                      GLenum zfail,
668                                      GLenum zpass)
669 {
670     if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
671     {
672         privateState->setStencilOperations(fail, zfail, zpass);
673     }
674 
675     if (face == GL_BACK || face == GL_FRONT_AND_BACK)
676     {
677         privateState->setStencilBackOperations(fail, zfail, zpass);
678     }
679 }
680 
ContextPrivatePixelStorei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLint param)681 void ContextPrivatePixelStorei(PrivateState *privateState,
682                                PrivateStateCache *privateStateCache,
683                                GLenum pname,
684                                GLint param)
685 {
686     switch (pname)
687     {
688         case GL_UNPACK_ALIGNMENT:
689             privateState->setUnpackAlignment(param);
690             break;
691 
692         case GL_PACK_ALIGNMENT:
693             privateState->setPackAlignment(param);
694             break;
695 
696         case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
697             privateState->setPackReverseRowOrder(param != 0);
698             break;
699 
700         case GL_UNPACK_ROW_LENGTH:
701             ASSERT(privateState->getClientMajorVersion() >= 3 ||
702                    privateState->getExtensions().unpackSubimageEXT);
703             privateState->setUnpackRowLength(param);
704             break;
705 
706         case GL_UNPACK_IMAGE_HEIGHT:
707             ASSERT(privateState->getClientMajorVersion() >= 3);
708             privateState->setUnpackImageHeight(param);
709             break;
710 
711         case GL_UNPACK_SKIP_IMAGES:
712             ASSERT(privateState->getClientMajorVersion() >= 3);
713             privateState->setUnpackSkipImages(param);
714             break;
715 
716         case GL_UNPACK_SKIP_ROWS:
717             ASSERT((privateState->getClientMajorVersion() >= 3) ||
718                    privateState->getExtensions().unpackSubimageEXT);
719             privateState->setUnpackSkipRows(param);
720             break;
721 
722         case GL_UNPACK_SKIP_PIXELS:
723             ASSERT((privateState->getClientMajorVersion() >= 3) ||
724                    privateState->getExtensions().unpackSubimageEXT);
725             privateState->setUnpackSkipPixels(param);
726             break;
727 
728         case GL_PACK_ROW_LENGTH:
729             ASSERT((privateState->getClientMajorVersion() >= 3) ||
730                    privateState->getExtensions().packSubimageNV);
731             privateState->setPackRowLength(param);
732             break;
733 
734         case GL_PACK_SKIP_ROWS:
735             ASSERT((privateState->getClientMajorVersion() >= 3) ||
736                    privateState->getExtensions().packSubimageNV);
737             privateState->setPackSkipRows(param);
738             break;
739 
740         case GL_PACK_SKIP_PIXELS:
741             ASSERT((privateState->getClientMajorVersion() >= 3) ||
742                    privateState->getExtensions().packSubimageNV);
743             privateState->setPackSkipPixels(param);
744             break;
745 
746         default:
747             UNREACHABLE();
748             return;
749     }
750 }
751 
ContextPrivateHint(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLenum mode)752 void ContextPrivateHint(PrivateState *privateState,
753                         PrivateStateCache *privateStateCache,
754                         GLenum target,
755                         GLenum mode)
756 {
757     switch (target)
758     {
759         case GL_GENERATE_MIPMAP_HINT:
760             privateState->setGenerateMipmapHint(mode);
761             break;
762 
763         case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
764             privateState->setFragmentShaderDerivativeHint(mode);
765             break;
766 
767         case GL_PERSPECTIVE_CORRECTION_HINT:
768         case GL_POINT_SMOOTH_HINT:
769         case GL_LINE_SMOOTH_HINT:
770         case GL_FOG_HINT:
771             privateState->getMutableGLES1State()->setHint(target, mode);
772             break;
773         default:
774             UNREACHABLE();
775             return;
776     }
777 }
778 
ContextPrivateIsEnabled(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum cap)779 GLboolean ContextPrivateIsEnabled(PrivateState *privateState,
780                                   PrivateStateCache *privateStateCache,
781                                   GLenum cap)
782 {
783     return privateState->getEnableFeature(cap);
784 }
785 
ContextPrivateIsEnabledi(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLuint index)786 GLboolean ContextPrivateIsEnabledi(PrivateState *privateState,
787                                    PrivateStateCache *privateStateCache,
788                                    GLenum target,
789                                    GLuint index)
790 {
791     return privateState->getEnableFeatureIndexed(target, index);
792 }
793 
ContextPrivatePatchParameteri(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLint value)794 void ContextPrivatePatchParameteri(PrivateState *privateState,
795                                    PrivateStateCache *privateStateCache,
796                                    GLenum pname,
797                                    GLint value)
798 {
799     switch (pname)
800     {
801         case GL_PATCH_VERTICES:
802             privateState->setPatchVertices(value);
803             break;
804         default:
805             break;
806     }
807 }
808 
ContextPrivateAlphaFunc(PrivateState * privateState,PrivateStateCache * privateStateCache,AlphaTestFunc func,GLfloat ref)809 void ContextPrivateAlphaFunc(PrivateState *privateState,
810                              PrivateStateCache *privateStateCache,
811                              AlphaTestFunc func,
812                              GLfloat ref)
813 {
814     privateState->getMutableGLES1State()->setAlphaTestParameters(func, ref);
815 }
816 
ContextPrivateAlphaFuncx(PrivateState * privateState,PrivateStateCache * privateStateCache,AlphaTestFunc func,GLfixed ref)817 void ContextPrivateAlphaFuncx(PrivateState *privateState,
818                               PrivateStateCache *privateStateCache,
819                               AlphaTestFunc func,
820                               GLfixed ref)
821 {
822     ContextPrivateAlphaFunc(privateState, privateStateCache, func, ConvertFixedToFloat(ref));
823 }
824 
ContextPrivateClipPlanef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum p,const GLfloat * eqn)825 void ContextPrivateClipPlanef(PrivateState *privateState,
826                               PrivateStateCache *privateStateCache,
827                               GLenum p,
828                               const GLfloat *eqn)
829 {
830     privateState->getMutableGLES1State()->setClipPlane(p - GL_CLIP_PLANE0, eqn);
831 }
832 
ContextPrivateClipPlanex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum plane,const GLfixed * equation)833 void ContextPrivateClipPlanex(PrivateState *privateState,
834                               PrivateStateCache *privateStateCache,
835                               GLenum plane,
836                               const GLfixed *equation)
837 {
838     const GLfloat equationf[4] = {
839         ConvertFixedToFloat(equation[0]),
840         ConvertFixedToFloat(equation[1]),
841         ConvertFixedToFloat(equation[2]),
842         ConvertFixedToFloat(equation[3]),
843     };
844 
845     ContextPrivateClipPlanef(privateState, privateStateCache, plane, equationf);
846 }
847 
ContextPrivateColor4f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)848 void ContextPrivateColor4f(PrivateState *privateState,
849                            PrivateStateCache *privateStateCache,
850                            GLfloat red,
851                            GLfloat green,
852                            GLfloat blue,
853                            GLfloat alpha)
854 {
855     privateState->getMutableGLES1State()->setCurrentColor({red, green, blue, alpha});
856 }
857 
ContextPrivateColor4ub(PrivateState * privateState,PrivateStateCache * privateStateCache,GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)858 void ContextPrivateColor4ub(PrivateState *privateState,
859                             PrivateStateCache *privateStateCache,
860                             GLubyte red,
861                             GLubyte green,
862                             GLubyte blue,
863                             GLubyte alpha)
864 {
865     ContextPrivateColor4f(privateState, privateStateCache, normalizedToFloat<uint8_t>(red),
866                           normalizedToFloat<uint8_t>(green), normalizedToFloat<uint8_t>(blue),
867                           normalizedToFloat<uint8_t>(alpha));
868 }
869 
ContextPrivateColor4x(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed red,GLfixed green,GLfixed blue,GLfixed alpha)870 void ContextPrivateColor4x(PrivateState *privateState,
871                            PrivateStateCache *privateStateCache,
872                            GLfixed red,
873                            GLfixed green,
874                            GLfixed blue,
875                            GLfixed alpha)
876 {
877     ContextPrivateColor4f(privateState, privateStateCache, ConvertFixedToFloat(red),
878                           ConvertFixedToFloat(green), ConvertFixedToFloat(blue),
879                           ConvertFixedToFloat(alpha));
880 }
881 
ContextPrivateFogf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLfloat param)882 void ContextPrivateFogf(PrivateState *privateState,
883                         PrivateStateCache *privateStateCache,
884                         GLenum pname,
885                         GLfloat param)
886 {
887     ContextPrivateFogfv(privateState, privateStateCache, pname, &param);
888 }
889 
ContextPrivateFogfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,const GLfloat * params)890 void ContextPrivateFogfv(PrivateState *privateState,
891                          PrivateStateCache *privateStateCache,
892                          GLenum pname,
893                          const GLfloat *params)
894 {
895     SetFogParameters(privateState->getMutableGLES1State(), pname, params);
896 }
897 
ContextPrivateFogx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLfixed param)898 void ContextPrivateFogx(PrivateState *privateState,
899                         PrivateStateCache *privateStateCache,
900                         GLenum pname,
901                         GLfixed param)
902 {
903     if (GetFogParameterCount(pname) == 1)
904     {
905         GLfloat paramf = pname == GL_FOG_MODE ? ConvertToGLenum(param) : ConvertFixedToFloat(param);
906         ContextPrivateFogfv(privateState, privateStateCache, pname, &paramf);
907     }
908     else
909     {
910         UNREACHABLE();
911     }
912 }
913 
ContextPrivateFogxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,const GLfixed * params)914 void ContextPrivateFogxv(PrivateState *privateState,
915                          PrivateStateCache *privateStateCache,
916                          GLenum pname,
917                          const GLfixed *params)
918 {
919     int paramCount = GetFogParameterCount(pname);
920 
921     if (paramCount > 0)
922     {
923         GLfloat paramsf[4];
924         for (int i = 0; i < paramCount; i++)
925         {
926             paramsf[i] =
927                 pname == GL_FOG_MODE ? ConvertToGLenum(params[i]) : ConvertFixedToFloat(params[i]);
928         }
929         ContextPrivateFogfv(privateState, privateStateCache, pname, paramsf);
930     }
931     else
932     {
933         UNREACHABLE();
934     }
935 }
936 
ContextPrivateFrustumf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat l,GLfloat r,GLfloat b,GLfloat t,GLfloat n,GLfloat f)937 void ContextPrivateFrustumf(PrivateState *privateState,
938                             PrivateStateCache *privateStateCache,
939                             GLfloat l,
940                             GLfloat r,
941                             GLfloat b,
942                             GLfloat t,
943                             GLfloat n,
944                             GLfloat f)
945 {
946     privateState->getMutableGLES1State()->multMatrix(angle::Mat4::Frustum(l, r, b, t, n, f));
947 }
948 
ContextPrivateFrustumx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed l,GLfixed r,GLfixed b,GLfixed t,GLfixed n,GLfixed f)949 void ContextPrivateFrustumx(PrivateState *privateState,
950                             PrivateStateCache *privateStateCache,
951                             GLfixed l,
952                             GLfixed r,
953                             GLfixed b,
954                             GLfixed t,
955                             GLfixed n,
956                             GLfixed f)
957 {
958     ContextPrivateFrustumf(privateState, privateStateCache, ConvertFixedToFloat(l),
959                            ConvertFixedToFloat(r), ConvertFixedToFloat(b), ConvertFixedToFloat(t),
960                            ConvertFixedToFloat(n), ConvertFixedToFloat(f));
961 }
962 
ContextPrivateGetClipPlanef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum plane,GLfloat * equation)963 void ContextPrivateGetClipPlanef(PrivateState *privateState,
964                                  PrivateStateCache *privateStateCache,
965                                  GLenum plane,
966                                  GLfloat *equation)
967 {
968     privateState->gles1().getClipPlane(plane - GL_CLIP_PLANE0, equation);
969 }
970 
ContextPrivateGetClipPlanex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum plane,GLfixed * equation)971 void ContextPrivateGetClipPlanex(PrivateState *privateState,
972                                  PrivateStateCache *privateStateCache,
973                                  GLenum plane,
974                                  GLfixed *equation)
975 {
976     GLfloat equationf[4] = {};
977 
978     ContextPrivateGetClipPlanef(privateState, privateStateCache, plane, equationf);
979 
980     for (int i = 0; i < 4; i++)
981     {
982         equation[i] = ConvertFloatToFixed(equationf[i]);
983     }
984 }
985 
ContextPrivateGetLightfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,GLfloat * params)986 void ContextPrivateGetLightfv(PrivateState *privateState,
987                               PrivateStateCache *privateStateCache,
988                               GLenum light,
989                               LightParameter pname,
990                               GLfloat *params)
991 {
992     GetLightParameters(privateState->getMutableGLES1State(), light, pname, params);
993 }
994 
ContextPrivateGetLightxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,GLfixed * params)995 void ContextPrivateGetLightxv(PrivateState *privateState,
996                               PrivateStateCache *privateStateCache,
997                               GLenum light,
998                               LightParameter pname,
999                               GLfixed *params)
1000 {
1001     GLfloat paramsf[4];
1002     ContextPrivateGetLightfv(privateState, privateStateCache, light, pname, paramsf);
1003 
1004     for (unsigned int i = 0; i < GetLightParameterCount(pname); i++)
1005     {
1006         params[i] = ConvertFloatToFixed(paramsf[i]);
1007     }
1008 }
1009 
ContextPrivateGetMaterialfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfloat * params)1010 void ContextPrivateGetMaterialfv(PrivateState *privateState,
1011                                  PrivateStateCache *privateStateCache,
1012                                  GLenum face,
1013                                  MaterialParameter pname,
1014                                  GLfloat *params)
1015 {
1016     GetMaterialParameters(privateState->getMutableGLES1State(), face, pname, params);
1017 }
1018 
ContextPrivateGetMaterialxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfixed * params)1019 void ContextPrivateGetMaterialxv(PrivateState *privateState,
1020                                  PrivateStateCache *privateStateCache,
1021                                  GLenum face,
1022                                  MaterialParameter pname,
1023                                  GLfixed *params)
1024 {
1025     GLfloat paramsf[4];
1026     ContextPrivateGetMaterialfv(privateState, privateStateCache, face, pname, paramsf);
1027 
1028     for (unsigned int i = 0; i < GetMaterialParameterCount(pname); i++)
1029     {
1030         params[i] = ConvertFloatToFixed(paramsf[i]);
1031     }
1032 }
1033 
ContextPrivateGetTexEnvfv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfloat * params)1034 void ContextPrivateGetTexEnvfv(PrivateState *privateState,
1035                                PrivateStateCache *privateStateCache,
1036                                TextureEnvTarget target,
1037                                TextureEnvParameter pname,
1038                                GLfloat *params)
1039 {
1040     GetTextureEnv(privateState->getActiveSampler(), privateState->getMutableGLES1State(), target,
1041                   pname, params);
1042 }
1043 
ContextPrivateGetTexEnviv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLint * params)1044 void ContextPrivateGetTexEnviv(PrivateState *privateState,
1045                                PrivateStateCache *privateStateCache,
1046                                TextureEnvTarget target,
1047                                TextureEnvParameter pname,
1048                                GLint *params)
1049 {
1050     GLfloat paramsf[4];
1051     ContextPrivateGetTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1052     ConvertTextureEnvToInt(pname, paramsf, params);
1053 }
1054 
ContextPrivateGetTexEnvxv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfixed * params)1055 void ContextPrivateGetTexEnvxv(PrivateState *privateState,
1056                                PrivateStateCache *privateStateCache,
1057                                TextureEnvTarget target,
1058                                TextureEnvParameter pname,
1059                                GLfixed *params)
1060 {
1061     GLfloat paramsf[4];
1062     ContextPrivateGetTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1063     ConvertTextureEnvToFixed(pname, paramsf, params);
1064 }
1065 
ContextPrivateLightModelf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLfloat param)1066 void ContextPrivateLightModelf(PrivateState *privateState,
1067                                PrivateStateCache *privateStateCache,
1068                                GLenum pname,
1069                                GLfloat param)
1070 {
1071     ContextPrivateLightModelfv(privateState, privateStateCache, pname, &param);
1072 }
1073 
ContextPrivateLightModelfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,const GLfloat * params)1074 void ContextPrivateLightModelfv(PrivateState *privateState,
1075                                 PrivateStateCache *privateStateCache,
1076                                 GLenum pname,
1077                                 const GLfloat *params)
1078 {
1079     SetLightModelParameters(privateState->getMutableGLES1State(), pname, params);
1080 }
1081 
ContextPrivateLightModelx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLfixed param)1082 void ContextPrivateLightModelx(PrivateState *privateState,
1083                                PrivateStateCache *privateStateCache,
1084                                GLenum pname,
1085                                GLfixed param)
1086 {
1087     ContextPrivateLightModelf(privateState, privateStateCache, pname, ConvertFixedToFloat(param));
1088 }
1089 
ContextPrivateLightModelxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,const GLfixed * param)1090 void ContextPrivateLightModelxv(PrivateState *privateState,
1091                                 PrivateStateCache *privateStateCache,
1092                                 GLenum pname,
1093                                 const GLfixed *param)
1094 {
1095     GLfloat paramsf[4];
1096 
1097     for (unsigned int i = 0; i < GetLightModelParameterCount(pname); i++)
1098     {
1099         paramsf[i] = ConvertFixedToFloat(param[i]);
1100     }
1101 
1102     ContextPrivateLightModelfv(privateState, privateStateCache, pname, paramsf);
1103 }
1104 
ContextPrivateLightf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,GLfloat param)1105 void ContextPrivateLightf(PrivateState *privateState,
1106                           PrivateStateCache *privateStateCache,
1107                           GLenum light,
1108                           LightParameter pname,
1109                           GLfloat param)
1110 {
1111     ContextPrivateLightfv(privateState, privateStateCache, light, pname, &param);
1112 }
1113 
ContextPrivateLightfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,const GLfloat * params)1114 void ContextPrivateLightfv(PrivateState *privateState,
1115                            PrivateStateCache *privateStateCache,
1116                            GLenum light,
1117                            LightParameter pname,
1118                            const GLfloat *params)
1119 {
1120     SetLightParameters(privateState->getMutableGLES1State(), light, pname, params);
1121 }
1122 
ContextPrivateLightx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,GLfixed param)1123 void ContextPrivateLightx(PrivateState *privateState,
1124                           PrivateStateCache *privateStateCache,
1125                           GLenum light,
1126                           LightParameter pname,
1127                           GLfixed param)
1128 {
1129     ContextPrivateLightf(privateState, privateStateCache, light, pname, ConvertFixedToFloat(param));
1130 }
1131 
ContextPrivateLightxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,const GLfixed * params)1132 void ContextPrivateLightxv(PrivateState *privateState,
1133                            PrivateStateCache *privateStateCache,
1134                            GLenum light,
1135                            LightParameter pname,
1136                            const GLfixed *params)
1137 {
1138     GLfloat paramsf[4];
1139 
1140     for (unsigned int i = 0; i < GetLightParameterCount(pname); i++)
1141     {
1142         paramsf[i] = ConvertFixedToFloat(params[i]);
1143     }
1144 
1145     ContextPrivateLightfv(privateState, privateStateCache, light, pname, paramsf);
1146 }
1147 
ContextPrivateLoadIdentity(PrivateState * privateState,PrivateStateCache * privateStateCache)1148 void ContextPrivateLoadIdentity(PrivateState *privateState, PrivateStateCache *privateStateCache)
1149 {
1150     privateState->getMutableGLES1State()->loadMatrix(angle::Mat4());
1151 }
1152 
ContextPrivateLoadMatrixf(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfloat * m)1153 void ContextPrivateLoadMatrixf(PrivateState *privateState,
1154                                PrivateStateCache *privateStateCache,
1155                                const GLfloat *m)
1156 {
1157     privateState->getMutableGLES1State()->loadMatrix(angle::Mat4(m));
1158 }
1159 
ContextPrivateLoadMatrixx(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfixed * m)1160 void ContextPrivateLoadMatrixx(PrivateState *privateState,
1161                                PrivateStateCache *privateStateCache,
1162                                const GLfixed *m)
1163 {
1164     privateState->getMutableGLES1State()->loadMatrix(FixedMatrixToMat4(m));
1165 }
1166 
ContextPrivateMaterialf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfloat param)1167 void ContextPrivateMaterialf(PrivateState *privateState,
1168                              PrivateStateCache *privateStateCache,
1169                              GLenum face,
1170                              MaterialParameter pname,
1171                              GLfloat param)
1172 {
1173     ContextPrivateMaterialfv(privateState, privateStateCache, face, pname, &param);
1174 }
1175 
ContextPrivateMaterialfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,const GLfloat * params)1176 void ContextPrivateMaterialfv(PrivateState *privateState,
1177                               PrivateStateCache *privateStateCache,
1178                               GLenum face,
1179                               MaterialParameter pname,
1180                               const GLfloat *params)
1181 {
1182     SetMaterialParameters(privateState->getMutableGLES1State(), face, pname, params);
1183 }
1184 
ContextPrivateMaterialx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfixed param)1185 void ContextPrivateMaterialx(PrivateState *privateState,
1186                              PrivateStateCache *privateStateCache,
1187                              GLenum face,
1188                              MaterialParameter pname,
1189                              GLfixed param)
1190 {
1191     ContextPrivateMaterialf(privateState, privateStateCache, face, pname,
1192                             ConvertFixedToFloat(param));
1193 }
1194 
ContextPrivateMaterialxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,const GLfixed * param)1195 void ContextPrivateMaterialxv(PrivateState *privateState,
1196                               PrivateStateCache *privateStateCache,
1197                               GLenum face,
1198                               MaterialParameter pname,
1199                               const GLfixed *param)
1200 {
1201     GLfloat paramsf[4];
1202 
1203     for (unsigned int i = 0; i < GetMaterialParameterCount(pname); i++)
1204     {
1205         paramsf[i] = ConvertFixedToFloat(param[i]);
1206     }
1207 
1208     ContextPrivateMaterialfv(privateState, privateStateCache, face, pname, paramsf);
1209 }
1210 
ContextPrivateMatrixMode(PrivateState * privateState,PrivateStateCache * privateStateCache,MatrixType mode)1211 void ContextPrivateMatrixMode(PrivateState *privateState,
1212                               PrivateStateCache *privateStateCache,
1213                               MatrixType mode)
1214 {
1215     privateState->getMutableGLES1State()->setMatrixMode(mode);
1216 }
1217 
ContextPrivateMultMatrixf(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfloat * m)1218 void ContextPrivateMultMatrixf(PrivateState *privateState,
1219                                PrivateStateCache *privateStateCache,
1220                                const GLfloat *m)
1221 {
1222     privateState->getMutableGLES1State()->multMatrix(angle::Mat4(m));
1223 }
1224 
ContextPrivateMultMatrixx(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfixed * m)1225 void ContextPrivateMultMatrixx(PrivateState *privateState,
1226                                PrivateStateCache *privateStateCache,
1227                                const GLfixed *m)
1228 {
1229     privateState->getMutableGLES1State()->multMatrix(FixedMatrixToMat4(m));
1230 }
1231 
ContextPrivateMultiTexCoord4f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)1232 void ContextPrivateMultiTexCoord4f(PrivateState *privateState,
1233                                    PrivateStateCache *privateStateCache,
1234                                    GLenum target,
1235                                    GLfloat s,
1236                                    GLfloat t,
1237                                    GLfloat r,
1238                                    GLfloat q)
1239 {
1240     unsigned int unit = target - GL_TEXTURE0;
1241     ASSERT(target >= GL_TEXTURE0 && unit < privateState->getCaps().maxMultitextureUnits);
1242     privateState->getMutableGLES1State()->setCurrentTextureCoords(unit, {s, t, r, q});
1243 }
1244 
ContextPrivateMultiTexCoord4x(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum texture,GLfixed s,GLfixed t,GLfixed r,GLfixed q)1245 void ContextPrivateMultiTexCoord4x(PrivateState *privateState,
1246                                    PrivateStateCache *privateStateCache,
1247                                    GLenum texture,
1248                                    GLfixed s,
1249                                    GLfixed t,
1250                                    GLfixed r,
1251                                    GLfixed q)
1252 {
1253     ContextPrivateMultiTexCoord4f(privateState, privateStateCache, texture, ConvertFixedToFloat(s),
1254                                   ConvertFixedToFloat(t), ConvertFixedToFloat(r),
1255                                   ConvertFixedToFloat(q));
1256 }
1257 
ContextPrivateNormal3f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat nx,GLfloat ny,GLfloat nz)1258 void ContextPrivateNormal3f(PrivateState *privateState,
1259                             PrivateStateCache *privateStateCache,
1260                             GLfloat nx,
1261                             GLfloat ny,
1262                             GLfloat nz)
1263 {
1264     privateState->getMutableGLES1State()->setCurrentNormal({nx, ny, nz});
1265 }
1266 
ContextPrivateNormal3x(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed nx,GLfixed ny,GLfixed nz)1267 void ContextPrivateNormal3x(PrivateState *privateState,
1268                             PrivateStateCache *privateStateCache,
1269                             GLfixed nx,
1270                             GLfixed ny,
1271                             GLfixed nz)
1272 {
1273     ContextPrivateNormal3f(privateState, privateStateCache, ConvertFixedToFloat(nx),
1274                            ConvertFixedToFloat(ny), ConvertFixedToFloat(nz));
1275 }
1276 
ContextPrivateOrthof(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat left,GLfloat right,GLfloat bottom,GLfloat top,GLfloat zNear,GLfloat zFar)1277 void ContextPrivateOrthof(PrivateState *privateState,
1278                           PrivateStateCache *privateStateCache,
1279                           GLfloat left,
1280                           GLfloat right,
1281                           GLfloat bottom,
1282                           GLfloat top,
1283                           GLfloat zNear,
1284                           GLfloat zFar)
1285 {
1286     privateState->getMutableGLES1State()->multMatrix(
1287         angle::Mat4::Ortho(left, right, bottom, top, zNear, zFar));
1288 }
1289 
ContextPrivateOrthox(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed left,GLfixed right,GLfixed bottom,GLfixed top,GLfixed zNear,GLfixed zFar)1290 void ContextPrivateOrthox(PrivateState *privateState,
1291                           PrivateStateCache *privateStateCache,
1292                           GLfixed left,
1293                           GLfixed right,
1294                           GLfixed bottom,
1295                           GLfixed top,
1296                           GLfixed zNear,
1297                           GLfixed zFar)
1298 {
1299     ContextPrivateOrthof(privateState, privateStateCache, ConvertFixedToFloat(left),
1300                          ConvertFixedToFloat(right), ConvertFixedToFloat(bottom),
1301                          ConvertFixedToFloat(top), ConvertFixedToFloat(zNear),
1302                          ConvertFixedToFloat(zFar));
1303 }
1304 
ContextPrivatePointParameterf(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,GLfloat param)1305 void ContextPrivatePointParameterf(PrivateState *privateState,
1306                                    PrivateStateCache *privateStateCache,
1307                                    PointParameter pname,
1308                                    GLfloat param)
1309 {
1310     ContextPrivatePointParameterfv(privateState, privateStateCache, pname, &param);
1311 }
1312 
ContextPrivatePointParameterfv(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,const GLfloat * params)1313 void ContextPrivatePointParameterfv(PrivateState *privateState,
1314                                     PrivateStateCache *privateStateCache,
1315                                     PointParameter pname,
1316                                     const GLfloat *params)
1317 {
1318     SetPointParameter(privateState->getMutableGLES1State(), pname, params);
1319 }
1320 
ContextPrivatePointParameterx(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,GLfixed param)1321 void ContextPrivatePointParameterx(PrivateState *privateState,
1322                                    PrivateStateCache *privateStateCache,
1323                                    PointParameter pname,
1324                                    GLfixed param)
1325 {
1326     ContextPrivatePointParameterf(privateState, privateStateCache, pname,
1327                                   ConvertFixedToFloat(param));
1328 }
1329 
ContextPrivatePointParameterxv(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,const GLfixed * params)1330 void ContextPrivatePointParameterxv(PrivateState *privateState,
1331                                     PrivateStateCache *privateStateCache,
1332                                     PointParameter pname,
1333                                     const GLfixed *params)
1334 {
1335     GLfloat paramsf[4] = {};
1336     for (unsigned int i = 0; i < GetPointParameterCount(pname); i++)
1337     {
1338         paramsf[i] = ConvertFixedToFloat(params[i]);
1339     }
1340     ContextPrivatePointParameterfv(privateState, privateStateCache, pname, paramsf);
1341 }
1342 
ContextPrivatePointSize(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat size)1343 void ContextPrivatePointSize(PrivateState *privateState,
1344                              PrivateStateCache *privateStateCache,
1345                              GLfloat size)
1346 {
1347     SetPointSize(privateState->getMutableGLES1State(), size);
1348 }
1349 
ContextPrivatePointSizex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed size)1350 void ContextPrivatePointSizex(PrivateState *privateState,
1351                               PrivateStateCache *privateStateCache,
1352                               GLfixed size)
1353 {
1354     ContextPrivatePointSize(privateState, privateStateCache, ConvertFixedToFloat(size));
1355 }
1356 
ContextPrivatePopMatrix(PrivateState * privateState,PrivateStateCache * privateStateCache)1357 void ContextPrivatePopMatrix(PrivateState *privateState, PrivateStateCache *privateStateCache)
1358 {
1359     privateState->getMutableGLES1State()->popMatrix();
1360 }
1361 
ContextPrivatePushMatrix(PrivateState * privateState,PrivateStateCache * privateStateCache)1362 void ContextPrivatePushMatrix(PrivateState *privateState, PrivateStateCache *privateStateCache)
1363 {
1364     privateState->getMutableGLES1State()->pushMatrix();
1365 }
1366 
ContextPrivateRotatef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat angle,GLfloat x,GLfloat y,GLfloat z)1367 void ContextPrivateRotatef(PrivateState *privateState,
1368                            PrivateStateCache *privateStateCache,
1369                            GLfloat angle,
1370                            GLfloat x,
1371                            GLfloat y,
1372                            GLfloat z)
1373 {
1374     privateState->getMutableGLES1State()->multMatrix(
1375         angle::Mat4::Rotate(angle, angle::Vector3(x, y, z)));
1376 }
1377 
ContextPrivateRotatex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed angle,GLfixed x,GLfixed y,GLfixed z)1378 void ContextPrivateRotatex(PrivateState *privateState,
1379                            PrivateStateCache *privateStateCache,
1380                            GLfixed angle,
1381                            GLfixed x,
1382                            GLfixed y,
1383                            GLfixed z)
1384 {
1385     ContextPrivateRotatef(privateState, privateStateCache, ConvertFixedToFloat(angle),
1386                           ConvertFixedToFloat(x), ConvertFixedToFloat(y), ConvertFixedToFloat(z));
1387 }
1388 
ContextPrivateScalef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat x,GLfloat y,GLfloat z)1389 void ContextPrivateScalef(PrivateState *privateState,
1390                           PrivateStateCache *privateStateCache,
1391                           GLfloat x,
1392                           GLfloat y,
1393                           GLfloat z)
1394 {
1395     privateState->getMutableGLES1State()->multMatrix(angle::Mat4::Scale(angle::Vector3(x, y, z)));
1396 }
1397 
ContextPrivateScalex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed x,GLfixed y,GLfixed z)1398 void ContextPrivateScalex(PrivateState *privateState,
1399                           PrivateStateCache *privateStateCache,
1400                           GLfixed x,
1401                           GLfixed y,
1402                           GLfixed z)
1403 {
1404     ContextPrivateScalef(privateState, privateStateCache, ConvertFixedToFloat(x),
1405                          ConvertFixedToFloat(y), ConvertFixedToFloat(z));
1406 }
1407 
ContextPrivateShadeModel(PrivateState * privateState,PrivateStateCache * privateStateCache,ShadingModel model)1408 void ContextPrivateShadeModel(PrivateState *privateState,
1409                               PrivateStateCache *privateStateCache,
1410                               ShadingModel model)
1411 {
1412     privateState->getMutableGLES1State()->setShadeModel(model);
1413 }
1414 
ContextPrivateTexEnvf(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfloat param)1415 void ContextPrivateTexEnvf(PrivateState *privateState,
1416                            PrivateStateCache *privateStateCache,
1417                            TextureEnvTarget target,
1418                            TextureEnvParameter pname,
1419                            GLfloat param)
1420 {
1421     ContextPrivateTexEnvfv(privateState, privateStateCache, target, pname, &param);
1422 }
1423 
ContextPrivateTexEnvfv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,const GLfloat * params)1424 void ContextPrivateTexEnvfv(PrivateState *privateState,
1425                             PrivateStateCache *privateStateCache,
1426                             TextureEnvTarget target,
1427                             TextureEnvParameter pname,
1428                             const GLfloat *params)
1429 {
1430     SetTextureEnv(privateState->getActiveSampler(), privateState->getMutableGLES1State(), target,
1431                   pname, params);
1432 }
1433 
ContextPrivateTexEnvi(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLint param)1434 void ContextPrivateTexEnvi(PrivateState *privateState,
1435                            PrivateStateCache *privateStateCache,
1436                            TextureEnvTarget target,
1437                            TextureEnvParameter pname,
1438                            GLint param)
1439 {
1440     ContextPrivateTexEnviv(privateState, privateStateCache, target, pname, &param);
1441 }
1442 
ContextPrivateTexEnviv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,const GLint * params)1443 void ContextPrivateTexEnviv(PrivateState *privateState,
1444                             PrivateStateCache *privateStateCache,
1445                             TextureEnvTarget target,
1446                             TextureEnvParameter pname,
1447                             const GLint *params)
1448 {
1449     GLfloat paramsf[4] = {};
1450     ConvertTextureEnvFromInt(pname, params, paramsf);
1451     ContextPrivateTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1452 }
1453 
ContextPrivateTexEnvx(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfixed param)1454 void ContextPrivateTexEnvx(PrivateState *privateState,
1455                            PrivateStateCache *privateStateCache,
1456                            TextureEnvTarget target,
1457                            TextureEnvParameter pname,
1458                            GLfixed param)
1459 {
1460     ContextPrivateTexEnvxv(privateState, privateStateCache, target, pname, &param);
1461 }
1462 
ContextPrivateTexEnvxv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,const GLfixed * params)1463 void ContextPrivateTexEnvxv(PrivateState *privateState,
1464                             PrivateStateCache *privateStateCache,
1465                             TextureEnvTarget target,
1466                             TextureEnvParameter pname,
1467                             const GLfixed *params)
1468 {
1469     GLfloat paramsf[4] = {};
1470     ConvertTextureEnvFromFixed(pname, params, paramsf);
1471     ContextPrivateTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1472 }
1473 
ContextPrivateTranslatef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat x,GLfloat y,GLfloat z)1474 void ContextPrivateTranslatef(PrivateState *privateState,
1475                               PrivateStateCache *privateStateCache,
1476                               GLfloat x,
1477                               GLfloat y,
1478                               GLfloat z)
1479 {
1480     privateState->getMutableGLES1State()->multMatrix(
1481         angle::Mat4::Translate(angle::Vector3(x, y, z)));
1482 }
1483 
ContextPrivateTranslatex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed x,GLfixed y,GLfixed z)1484 void ContextPrivateTranslatex(PrivateState *privateState,
1485                               PrivateStateCache *privateStateCache,
1486                               GLfixed x,
1487                               GLfixed y,
1488                               GLfixed z)
1489 {
1490     ContextPrivateTranslatef(privateState, privateStateCache, ConvertFixedToFloat(x),
1491                              ConvertFixedToFloat(y), ConvertFixedToFloat(z));
1492 }
1493 }  // namespace gl
1494