• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
3 //
4 // Copyright 2020 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // entry_points_gles_ext_autogen.cpp:
9 //   Defines the GLES extension entry points.
10 
11 #include "libGLESv2/entry_points_gles_ext_autogen.h"
12 
13 #include "common/entry_points_enum_autogen.h"
14 #include "libANGLE/Context.h"
15 #include "libANGLE/Context.inl.h"
16 #include "libANGLE/capture/capture_gles_ext_autogen.h"
17 #include "libANGLE/capture/gl_enum_utils.h"
18 #include "libANGLE/entry_points_utils.h"
19 #include "libANGLE/validationESEXT.h"
20 #include "libGLESv2/global_state.h"
21 
22 using namespace gl;
23 
24 #include "libANGLE/capture/capture_gles_1_0_autogen.h"
25 #include "libANGLE/capture/capture_gles_2_0_autogen.h"
26 #include "libANGLE/capture/capture_gles_3_0_autogen.h"
27 #include "libANGLE/capture/capture_gles_3_1_autogen.h"
28 #include "libANGLE/capture/capture_gles_3_2_autogen.h"
29 #include "libANGLE/validationES1.h"
30 #include "libANGLE/validationES2.h"
31 #include "libANGLE/validationES3.h"
32 #include "libANGLE/validationES31.h"
33 #include "libANGLE/validationES32.h"
34 
35 using namespace gl;
36 
37 extern "C" {
38 
39 // GL_ANGLE_base_vertex_base_instance
GL_DrawArraysInstancedBaseInstanceANGLE(GLenum mode,GLint first,GLsizei count,GLsizei instanceCount,GLuint baseInstance)40 void GL_APIENTRY GL_DrawArraysInstancedBaseInstanceANGLE(GLenum mode,
41                                                          GLint first,
42                                                          GLsizei count,
43                                                          GLsizei instanceCount,
44                                                          GLuint baseInstance)
45 {
46     Context *context = GetValidGlobalContext();
47     EVENT(context, GLDrawArraysInstancedBaseInstanceANGLE,
48           "context = %d, mode = %s, first = %d, count = %d, instanceCount = %d, baseInstance = %u",
49           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), first, count,
50           instanceCount, baseInstance);
51 
52     if (context)
53     {
54         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
55         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
56         bool isCallValid                                      = (context->skipValidation() ||
57                             ValidateDrawArraysInstancedBaseInstanceANGLE(
58                                 context, angle::EntryPoint::GLDrawArraysInstancedBaseInstanceANGLE,
59                                 modePacked, first, count, instanceCount, baseInstance));
60         if (isCallValid)
61         {
62             context->drawArraysInstancedBaseInstance(modePacked, first, count, instanceCount,
63                                                      baseInstance);
64         }
65         ANGLE_CAPTURE(DrawArraysInstancedBaseInstanceANGLE, isCallValid, context, modePacked, first,
66                       count, instanceCount, baseInstance);
67     }
68     else
69     {
70         GenerateContextLostErrorOnCurrentGlobalContext();
71     }
72 }
73 
GL_DrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices,GLsizei instanceCounts,GLint baseVertex,GLuint baseInstance)74 void GL_APIENTRY GL_DrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode,
75                                                                      GLsizei count,
76                                                                      GLenum type,
77                                                                      const GLvoid *indices,
78                                                                      GLsizei instanceCounts,
79                                                                      GLint baseVertex,
80                                                                      GLuint baseInstance)
81 {
82     Context *context = GetValidGlobalContext();
83     EVENT(context, GLDrawElementsInstancedBaseVertexBaseInstanceANGLE,
84           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
85           ", instanceCounts = %d, baseVertex = %d, baseInstance = %u",
86           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), count,
87           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, instanceCounts,
88           baseVertex, baseInstance);
89 
90     if (context)
91     {
92         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
93         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
94         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
95         bool isCallValid =
96             (context->skipValidation() ||
97              ValidateDrawElementsInstancedBaseVertexBaseInstanceANGLE(
98                  context, angle::EntryPoint::GLDrawElementsInstancedBaseVertexBaseInstanceANGLE,
99                  modePacked, count, typePacked, indices, instanceCounts, baseVertex, baseInstance));
100         if (isCallValid)
101         {
102             context->drawElementsInstancedBaseVertexBaseInstance(
103                 modePacked, count, typePacked, indices, instanceCounts, baseVertex, baseInstance);
104         }
105         ANGLE_CAPTURE(DrawElementsInstancedBaseVertexBaseInstanceANGLE, isCallValid, context,
106                       modePacked, count, typePacked, indices, instanceCounts, baseVertex,
107                       baseInstance);
108     }
109     else
110     {
111         GenerateContextLostErrorOnCurrentGlobalContext();
112     }
113 }
114 
GL_MultiDrawArraysInstancedBaseInstanceANGLE(GLenum mode,const GLint * firsts,const GLsizei * counts,const GLsizei * instanceCounts,const GLuint * baseInstances,GLsizei drawcount)115 void GL_APIENTRY GL_MultiDrawArraysInstancedBaseInstanceANGLE(GLenum mode,
116                                                               const GLint *firsts,
117                                                               const GLsizei *counts,
118                                                               const GLsizei *instanceCounts,
119                                                               const GLuint *baseInstances,
120                                                               GLsizei drawcount)
121 {
122     Context *context = GetValidGlobalContext();
123     EVENT(context, GLMultiDrawArraysInstancedBaseInstanceANGLE,
124           "context = %d, mode = %s, firsts = 0x%016" PRIxPTR ", counts = 0x%016" PRIxPTR
125           ", instanceCounts = 0x%016" PRIxPTR ", baseInstances = 0x%016" PRIxPTR ", drawcount = %d",
126           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), (uintptr_t)firsts,
127           (uintptr_t)counts, (uintptr_t)instanceCounts, (uintptr_t)baseInstances, drawcount);
128 
129     if (context)
130     {
131         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
132         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
133         bool isCallValid =
134             (context->skipValidation() ||
135              ValidateMultiDrawArraysInstancedBaseInstanceANGLE(
136                  context, angle::EntryPoint::GLMultiDrawArraysInstancedBaseInstanceANGLE,
137                  modePacked, firsts, counts, instanceCounts, baseInstances, drawcount));
138         if (isCallValid)
139         {
140             context->multiDrawArraysInstancedBaseInstance(modePacked, firsts, counts,
141                                                           instanceCounts, baseInstances, drawcount);
142         }
143         ANGLE_CAPTURE(MultiDrawArraysInstancedBaseInstanceANGLE, isCallValid, context, modePacked,
144                       firsts, counts, instanceCounts, baseInstances, drawcount);
145     }
146     else
147     {
148         GenerateContextLostErrorOnCurrentGlobalContext();
149     }
150 }
151 
152 void GL_APIENTRY
GL_MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode,const GLsizei * counts,GLenum type,const GLvoid * const * indices,const GLsizei * instanceCounts,const GLint * baseVertices,const GLuint * baseInstances,GLsizei drawcount)153 GL_MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode,
154                                                          const GLsizei *counts,
155                                                          GLenum type,
156                                                          const GLvoid *const *indices,
157                                                          const GLsizei *instanceCounts,
158                                                          const GLint *baseVertices,
159                                                          const GLuint *baseInstances,
160                                                          GLsizei drawcount)
161 {
162     Context *context = GetValidGlobalContext();
163     EVENT(context, GLMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE,
164           "context = %d, mode = %s, counts = 0x%016" PRIxPTR ", type = %s, indices = 0x%016" PRIxPTR
165           ", instanceCounts = 0x%016" PRIxPTR ", baseVertices = 0x%016" PRIxPTR
166           ", baseInstances = 0x%016" PRIxPTR ", drawcount = %d",
167           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), (uintptr_t)counts,
168           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices,
169           (uintptr_t)instanceCounts, (uintptr_t)baseVertices, (uintptr_t)baseInstances, drawcount);
170 
171     if (context)
172     {
173         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
174         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
175         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
176         bool isCallValid =
177             (context->skipValidation() ||
178              ValidateMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(
179                  context,
180                  angle::EntryPoint::GLMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE,
181                  modePacked, counts, typePacked, indices, instanceCounts, baseVertices,
182                  baseInstances, drawcount));
183         if (isCallValid)
184         {
185             context->multiDrawElementsInstancedBaseVertexBaseInstance(
186                 modePacked, counts, typePacked, indices, instanceCounts, baseVertices,
187                 baseInstances, drawcount);
188         }
189         ANGLE_CAPTURE(MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE, isCallValid, context,
190                       modePacked, counts, typePacked, indices, instanceCounts, baseVertices,
191                       baseInstances, drawcount);
192     }
193     else
194     {
195         GenerateContextLostErrorOnCurrentGlobalContext();
196     }
197 }
198 
199 // GL_ANGLE_copy_texture_3d
GL_CopyTexture3DANGLE(GLuint sourceId,GLint sourceLevel,GLenum destTarget,GLuint destId,GLint destLevel,GLint internalFormat,GLenum destType,GLboolean unpackFlipY,GLboolean unpackPremultiplyAlpha,GLboolean unpackUnmultiplyAlpha)200 void GL_APIENTRY GL_CopyTexture3DANGLE(GLuint sourceId,
201                                        GLint sourceLevel,
202                                        GLenum destTarget,
203                                        GLuint destId,
204                                        GLint destLevel,
205                                        GLint internalFormat,
206                                        GLenum destType,
207                                        GLboolean unpackFlipY,
208                                        GLboolean unpackPremultiplyAlpha,
209                                        GLboolean unpackUnmultiplyAlpha)
210 {
211     Context *context = GetValidGlobalContext();
212     EVENT(context, GLCopyTexture3DANGLE,
213           "context = %d, sourceId = %u, sourceLevel = %d, destTarget = %s, destId = %u, destLevel "
214           "= %d, internalFormat = %d, destType = %s, unpackFlipY = %s, unpackPremultiplyAlpha = "
215           "%s, unpackUnmultiplyAlpha = %s",
216           CID(context), sourceId, sourceLevel,
217           GLenumToString(GLenumGroup::DefaultGroup, destTarget), destId, destLevel, internalFormat,
218           GLenumToString(GLenumGroup::DefaultGroup, destType), GLbooleanToString(unpackFlipY),
219           GLbooleanToString(unpackPremultiplyAlpha), GLbooleanToString(unpackUnmultiplyAlpha));
220 
221     if (context)
222     {
223         TextureID sourceIdPacked       = PackParam<TextureID>(sourceId);
224         TextureTarget destTargetPacked = PackParam<TextureTarget>(destTarget);
225         TextureID destIdPacked         = PackParam<TextureID>(destId);
226         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
227         bool isCallValid =
228             (context->skipValidation() ||
229              ValidateCopyTexture3DANGLE(context, angle::EntryPoint::GLCopyTexture3DANGLE,
230                                         sourceIdPacked, sourceLevel, destTargetPacked, destIdPacked,
231                                         destLevel, internalFormat, destType, unpackFlipY,
232                                         unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
233         if (isCallValid)
234         {
235             context->copyTexture3D(sourceIdPacked, sourceLevel, destTargetPacked, destIdPacked,
236                                    destLevel, internalFormat, destType, unpackFlipY,
237                                    unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
238         }
239         ANGLE_CAPTURE(CopyTexture3DANGLE, isCallValid, context, sourceIdPacked, sourceLevel,
240                       destTargetPacked, destIdPacked, destLevel, internalFormat, destType,
241                       unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
242     }
243     else
244     {
245         GenerateContextLostErrorOnCurrentGlobalContext();
246     }
247 }
248 
GL_CopySubTexture3DANGLE(GLuint sourceId,GLint sourceLevel,GLenum destTarget,GLuint destId,GLint destLevel,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLint z,GLint width,GLint height,GLint depth,GLboolean unpackFlipY,GLboolean unpackPremultiplyAlpha,GLboolean unpackUnmultiplyAlpha)249 void GL_APIENTRY GL_CopySubTexture3DANGLE(GLuint sourceId,
250                                           GLint sourceLevel,
251                                           GLenum destTarget,
252                                           GLuint destId,
253                                           GLint destLevel,
254                                           GLint xoffset,
255                                           GLint yoffset,
256                                           GLint zoffset,
257                                           GLint x,
258                                           GLint y,
259                                           GLint z,
260                                           GLint width,
261                                           GLint height,
262                                           GLint depth,
263                                           GLboolean unpackFlipY,
264                                           GLboolean unpackPremultiplyAlpha,
265                                           GLboolean unpackUnmultiplyAlpha)
266 {
267     Context *context = GetValidGlobalContext();
268     EVENT(context, GLCopySubTexture3DANGLE,
269           "context = %d, sourceId = %u, sourceLevel = %d, destTarget = %s, destId = %u, destLevel "
270           "= %d, xoffset = %d, yoffset = %d, zoffset = %d, x = %d, y = %d, z = %d, width = %d, "
271           "height = %d, depth = %d, unpackFlipY = %s, unpackPremultiplyAlpha = %s, "
272           "unpackUnmultiplyAlpha = %s",
273           CID(context), sourceId, sourceLevel,
274           GLenumToString(GLenumGroup::DefaultGroup, destTarget), destId, destLevel, xoffset,
275           yoffset, zoffset, x, y, z, width, height, depth, GLbooleanToString(unpackFlipY),
276           GLbooleanToString(unpackPremultiplyAlpha), GLbooleanToString(unpackUnmultiplyAlpha));
277 
278     if (context)
279     {
280         TextureID sourceIdPacked       = PackParam<TextureID>(sourceId);
281         TextureTarget destTargetPacked = PackParam<TextureTarget>(destTarget);
282         TextureID destIdPacked         = PackParam<TextureID>(destId);
283         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
284         bool isCallValid =
285             (context->skipValidation() ||
286              ValidateCopySubTexture3DANGLE(
287                  context, angle::EntryPoint::GLCopySubTexture3DANGLE, sourceIdPacked, sourceLevel,
288                  destTargetPacked, destIdPacked, destLevel, xoffset, yoffset, zoffset, x, y, z,
289                  width, height, depth, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
290         if (isCallValid)
291         {
292             context->copySubTexture3D(sourceIdPacked, sourceLevel, destTargetPacked, destIdPacked,
293                                       destLevel, xoffset, yoffset, zoffset, x, y, z, width, height,
294                                       depth, unpackFlipY, unpackPremultiplyAlpha,
295                                       unpackUnmultiplyAlpha);
296         }
297         ANGLE_CAPTURE(CopySubTexture3DANGLE, isCallValid, context, sourceIdPacked, sourceLevel,
298                       destTargetPacked, destIdPacked, destLevel, xoffset, yoffset, zoffset, x, y, z,
299                       width, height, depth, unpackFlipY, unpackPremultiplyAlpha,
300                       unpackUnmultiplyAlpha);
301     }
302     else
303     {
304         GenerateContextLostErrorOnCurrentGlobalContext();
305     }
306 }
307 
308 // GL_ANGLE_depth_texture
309 
310 // GL_ANGLE_framebuffer_blit
GL_BlitFramebufferANGLE(GLint srcX0,GLint srcY0,GLint srcX1,GLint srcY1,GLint dstX0,GLint dstY0,GLint dstX1,GLint dstY1,GLbitfield mask,GLenum filter)311 void GL_APIENTRY GL_BlitFramebufferANGLE(GLint srcX0,
312                                          GLint srcY0,
313                                          GLint srcX1,
314                                          GLint srcY1,
315                                          GLint dstX0,
316                                          GLint dstY0,
317                                          GLint dstX1,
318                                          GLint dstY1,
319                                          GLbitfield mask,
320                                          GLenum filter)
321 {
322     Context *context = GetValidGlobalContext();
323     EVENT(context, GLBlitFramebufferANGLE,
324           "context = %d, srcX0 = %d, srcY0 = %d, srcX1 = %d, srcY1 = %d, dstX0 = %d, dstY0 = %d, "
325           "dstX1 = %d, dstY1 = %d, mask = %s, filter = %s",
326           CID(context), srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
327           GLbitfieldToString(GLenumGroup::ClearBufferMask, mask).c_str(),
328           GLenumToString(GLenumGroup::BlitFramebufferFilter, filter));
329 
330     if (context)
331     {
332         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
333         bool isCallValid                                      = (context->skipValidation() ||
334                             ValidateBlitFramebufferANGLE(
335                                 context, angle::EntryPoint::GLBlitFramebufferANGLE, srcX0, srcY0,
336                                 srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter));
337         if (isCallValid)
338         {
339             context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
340                                      filter);
341         }
342         ANGLE_CAPTURE(BlitFramebufferANGLE, isCallValid, context, srcX0, srcY0, srcX1, srcY1, dstX0,
343                       dstY0, dstX1, dstY1, mask, filter);
344     }
345     else
346     {
347         GenerateContextLostErrorOnCurrentGlobalContext();
348     }
349 }
350 
351 // GL_ANGLE_framebuffer_multisample
GL_RenderbufferStorageMultisampleANGLE(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height)352 void GL_APIENTRY GL_RenderbufferStorageMultisampleANGLE(GLenum target,
353                                                         GLsizei samples,
354                                                         GLenum internalformat,
355                                                         GLsizei width,
356                                                         GLsizei height)
357 {
358     Context *context = GetValidGlobalContext();
359     EVENT(context, GLRenderbufferStorageMultisampleANGLE,
360           "context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d",
361           CID(context), GLenumToString(GLenumGroup::RenderbufferTarget, target), samples,
362           GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height);
363 
364     if (context)
365     {
366         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
367         bool isCallValid                                      = (context->skipValidation() ||
368                             ValidateRenderbufferStorageMultisampleANGLE(
369                                 context, angle::EntryPoint::GLRenderbufferStorageMultisampleANGLE,
370                                 target, samples, internalformat, width, height));
371         if (isCallValid)
372         {
373             context->renderbufferStorageMultisample(target, samples, internalformat, width, height);
374         }
375         ANGLE_CAPTURE(RenderbufferStorageMultisampleANGLE, isCallValid, context, target, samples,
376                       internalformat, width, height);
377     }
378     else
379     {
380         GenerateContextLostErrorOnCurrentGlobalContext();
381     }
382 }
383 
384 // GL_ANGLE_get_image
385 void GL_APIENTRY
GL_GetTexImageANGLE(GLenum target,GLint level,GLenum format,GLenum type,void * pixels)386 GL_GetTexImageANGLE(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
387 {
388     Context *context = GetValidGlobalContext();
389     EVENT(context, GLGetTexImageANGLE,
390           "context = %d, target = %s, level = %d, format = %s, type = %s, pixels = 0x%016" PRIxPTR
391           "",
392           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level,
393           GLenumToString(GLenumGroup::PixelFormat, format),
394           GLenumToString(GLenumGroup::PixelType, type), (uintptr_t)pixels);
395 
396     if (context)
397     {
398         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
399         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
400         bool isCallValid                                      = (context->skipValidation() ||
401                             ValidateGetTexImageANGLE(context, angle::EntryPoint::GLGetTexImageANGLE,
402                                                      targetPacked, level, format, type, pixels));
403         if (isCallValid)
404         {
405             context->getTexImage(targetPacked, level, format, type, pixels);
406         }
407         ANGLE_CAPTURE(GetTexImageANGLE, isCallValid, context, targetPacked, level, format, type,
408                       pixels);
409     }
410     else
411     {
412         GenerateContextLostErrorOnCurrentGlobalContext();
413     }
414 }
415 
GL_GetCompressedTexImageANGLE(GLenum target,GLint level,void * pixels)416 void GL_APIENTRY GL_GetCompressedTexImageANGLE(GLenum target, GLint level, void *pixels)
417 {
418     Context *context = GetValidGlobalContext();
419     EVENT(context, GLGetCompressedTexImageANGLE,
420           "context = %d, target = %s, level = %d, pixels = 0x%016" PRIxPTR "", CID(context),
421           GLenumToString(GLenumGroup::TextureTarget, target), level, (uintptr_t)pixels);
422 
423     if (context)
424     {
425         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
426         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
427         bool isCallValid                                      = (context->skipValidation() ||
428                             ValidateGetCompressedTexImageANGLE(
429                                 context, angle::EntryPoint::GLGetCompressedTexImageANGLE,
430                                 targetPacked, level, pixels));
431         if (isCallValid)
432         {
433             context->getCompressedTexImage(targetPacked, level, pixels);
434         }
435         ANGLE_CAPTURE(GetCompressedTexImageANGLE, isCallValid, context, targetPacked, level,
436                       pixels);
437     }
438     else
439     {
440         GenerateContextLostErrorOnCurrentGlobalContext();
441     }
442 }
443 
GL_GetRenderbufferImageANGLE(GLenum target,GLenum format,GLenum type,void * pixels)444 void GL_APIENTRY GL_GetRenderbufferImageANGLE(GLenum target,
445                                               GLenum format,
446                                               GLenum type,
447                                               void *pixels)
448 {
449     Context *context = GetValidGlobalContext();
450     EVENT(context, GLGetRenderbufferImageANGLE,
451           "context = %d, target = %s, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",
452           CID(context), GLenumToString(GLenumGroup::RenderbufferTarget, target),
453           GLenumToString(GLenumGroup::PixelFormat, format),
454           GLenumToString(GLenumGroup::PixelType, type), (uintptr_t)pixels);
455 
456     if (context)
457     {
458         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
459         bool isCallValid                                      = (context->skipValidation() ||
460                             ValidateGetRenderbufferImageANGLE(
461                                 context, angle::EntryPoint::GLGetRenderbufferImageANGLE, target,
462                                 format, type, pixels));
463         if (isCallValid)
464         {
465             context->getRenderbufferImage(target, format, type, pixels);
466         }
467         ANGLE_CAPTURE(GetRenderbufferImageANGLE, isCallValid, context, target, format, type,
468                       pixels);
469     }
470     else
471     {
472         GenerateContextLostErrorOnCurrentGlobalContext();
473     }
474 }
475 
476 // GL_ANGLE_get_tex_level_parameter
GL_GetTexLevelParameterivANGLE(GLenum target,GLint level,GLenum pname,GLint * params)477 void GL_APIENTRY GL_GetTexLevelParameterivANGLE(GLenum target,
478                                                 GLint level,
479                                                 GLenum pname,
480                                                 GLint *params)
481 {
482     Context *context = GetValidGlobalContext();
483     EVENT(context, GLGetTexLevelParameterivANGLE,
484           "context = %d, target = %s, level = %d, pname = %s, params = 0x%016" PRIxPTR "",
485           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level,
486           GLenumToString(GLenumGroup::GetTextureParameter, pname), (uintptr_t)params);
487 
488     if (context)
489     {
490         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
491         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
492         bool isCallValid                                      = (context->skipValidation() ||
493                             ValidateGetTexLevelParameterivANGLE(
494                                 context, angle::EntryPoint::GLGetTexLevelParameterivANGLE,
495                                 targetPacked, level, pname, params));
496         if (isCallValid)
497         {
498             context->getTexLevelParameteriv(targetPacked, level, pname, params);
499         }
500         ANGLE_CAPTURE(GetTexLevelParameterivANGLE, isCallValid, context, targetPacked, level, pname,
501                       params);
502     }
503     else
504     {
505         GenerateContextLostErrorOnCurrentGlobalContext();
506     }
507 }
508 
GL_GetTexLevelParameterfvANGLE(GLenum target,GLint level,GLenum pname,GLfloat * params)509 void GL_APIENTRY GL_GetTexLevelParameterfvANGLE(GLenum target,
510                                                 GLint level,
511                                                 GLenum pname,
512                                                 GLfloat *params)
513 {
514     Context *context = GetValidGlobalContext();
515     EVENT(context, GLGetTexLevelParameterfvANGLE,
516           "context = %d, target = %s, level = %d, pname = %s, params = 0x%016" PRIxPTR "",
517           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level,
518           GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)params);
519 
520     if (context)
521     {
522         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
523         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
524         bool isCallValid                                      = (context->skipValidation() ||
525                             ValidateGetTexLevelParameterfvANGLE(
526                                 context, angle::EntryPoint::GLGetTexLevelParameterfvANGLE,
527                                 targetPacked, level, pname, params));
528         if (isCallValid)
529         {
530             context->getTexLevelParameterfv(targetPacked, level, pname, params);
531         }
532         ANGLE_CAPTURE(GetTexLevelParameterfvANGLE, isCallValid, context, targetPacked, level, pname,
533                       params);
534     }
535     else
536     {
537         GenerateContextLostErrorOnCurrentGlobalContext();
538     }
539 }
540 
541 // GL_ANGLE_instanced_arrays
GL_DrawArraysInstancedANGLE(GLenum mode,GLint first,GLsizei count,GLsizei primcount)542 void GL_APIENTRY GL_DrawArraysInstancedANGLE(GLenum mode,
543                                              GLint first,
544                                              GLsizei count,
545                                              GLsizei primcount)
546 {
547     Context *context = GetValidGlobalContext();
548     EVENT(context, GLDrawArraysInstancedANGLE,
549           "context = %d, mode = %s, first = %d, count = %d, primcount = %d", CID(context),
550           GLenumToString(GLenumGroup::PrimitiveType, mode), first, count, primcount);
551 
552     if (context)
553     {
554         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
555         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
556         bool isCallValid                                      = (context->skipValidation() ||
557                             ValidateDrawArraysInstancedANGLE(
558                                 context, angle::EntryPoint::GLDrawArraysInstancedANGLE, modePacked,
559                                 first, count, primcount));
560         if (isCallValid)
561         {
562             context->drawArraysInstanced(modePacked, first, count, primcount);
563         }
564         ANGLE_CAPTURE(DrawArraysInstancedANGLE, isCallValid, context, modePacked, first, count,
565                       primcount);
566     }
567     else
568     {
569         GenerateContextLostErrorOnCurrentGlobalContext();
570     }
571 }
572 
GL_DrawElementsInstancedANGLE(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei primcount)573 void GL_APIENTRY GL_DrawElementsInstancedANGLE(GLenum mode,
574                                                GLsizei count,
575                                                GLenum type,
576                                                const void *indices,
577                                                GLsizei primcount)
578 {
579     Context *context = GetValidGlobalContext();
580     EVENT(context, GLDrawElementsInstancedANGLE,
581           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
582           ", primcount = %d",
583           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), count,
584           GLenumToString(GLenumGroup::PrimitiveType, type), (uintptr_t)indices, primcount);
585 
586     if (context)
587     {
588         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
589         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
590         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
591         bool isCallValid                                      = (context->skipValidation() ||
592                             ValidateDrawElementsInstancedANGLE(
593                                 context, angle::EntryPoint::GLDrawElementsInstancedANGLE,
594                                 modePacked, count, typePacked, indices, primcount));
595         if (isCallValid)
596         {
597             context->drawElementsInstanced(modePacked, count, typePacked, indices, primcount);
598         }
599         ANGLE_CAPTURE(DrawElementsInstancedANGLE, isCallValid, context, modePacked, count,
600                       typePacked, indices, primcount);
601     }
602     else
603     {
604         GenerateContextLostErrorOnCurrentGlobalContext();
605     }
606 }
607 
GL_VertexAttribDivisorANGLE(GLuint index,GLuint divisor)608 void GL_APIENTRY GL_VertexAttribDivisorANGLE(GLuint index, GLuint divisor)
609 {
610     Context *context = GetValidGlobalContext();
611     EVENT(context, GLVertexAttribDivisorANGLE, "context = %d, index = %u, divisor = %u",
612           CID(context), index, divisor);
613 
614     if (context)
615     {
616         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
617         bool isCallValid =
618             (context->skipValidation() ||
619              ValidateVertexAttribDivisorANGLE(
620                  context, angle::EntryPoint::GLVertexAttribDivisorANGLE, index, divisor));
621         if (isCallValid)
622         {
623             context->vertexAttribDivisor(index, divisor);
624         }
625         ANGLE_CAPTURE(VertexAttribDivisorANGLE, isCallValid, context, index, divisor);
626     }
627     else
628     {
629         GenerateContextLostErrorOnCurrentGlobalContext();
630     }
631 }
632 
633 // GL_ANGLE_memory_object_flags
GL_TexStorageMemFlags2DANGLE(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height,GLuint memory,GLuint64 offset,GLbitfield createFlags,GLbitfield usageFlags,const void * imageCreateInfoPNext)634 void GL_APIENTRY GL_TexStorageMemFlags2DANGLE(GLenum target,
635                                               GLsizei levels,
636                                               GLenum internalFormat,
637                                               GLsizei width,
638                                               GLsizei height,
639                                               GLuint memory,
640                                               GLuint64 offset,
641                                               GLbitfield createFlags,
642                                               GLbitfield usageFlags,
643                                               const void *imageCreateInfoPNext)
644 {
645     Context *context = GetValidGlobalContext();
646     EVENT(context, GLTexStorageMemFlags2DANGLE,
647           "context = %d, target = %s, levels = %d, internalFormat = %s, width = %d, height = %d, "
648           "memory = %u, offset = %llu, createFlags = %s, usageFlags = %s, imageCreateInfoPNext = "
649           "0x%016" PRIxPTR "",
650           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), levels,
651           GLenumToString(GLenumGroup::DefaultGroup, internalFormat), width, height, memory,
652           static_cast<unsigned long long>(offset),
653           GLbitfieldToString(GLenumGroup::DefaultGroup, createFlags).c_str(),
654           GLbitfieldToString(GLenumGroup::DefaultGroup, usageFlags).c_str(),
655           (uintptr_t)imageCreateInfoPNext);
656 
657     if (context)
658     {
659         TextureType targetPacked                              = PackParam<TextureType>(target);
660         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
661         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
662         bool isCallValid                                      = (context->skipValidation() ||
663                             ValidateTexStorageMemFlags2DANGLE(
664                                 context, angle::EntryPoint::GLTexStorageMemFlags2DANGLE,
665                                 targetPacked, levels, internalFormat, width, height, memoryPacked,
666                                 offset, createFlags, usageFlags, imageCreateInfoPNext));
667         if (isCallValid)
668         {
669             context->texStorageMemFlags2D(targetPacked, levels, internalFormat, width, height,
670                                           memoryPacked, offset, createFlags, usageFlags,
671                                           imageCreateInfoPNext);
672         }
673         ANGLE_CAPTURE(TexStorageMemFlags2DANGLE, isCallValid, context, targetPacked, levels,
674                       internalFormat, width, height, memoryPacked, offset, createFlags, usageFlags,
675                       imageCreateInfoPNext);
676     }
677     else
678     {
679         GenerateContextLostErrorOnCurrentGlobalContext();
680     }
681 }
682 
GL_TexStorageMemFlags2DMultisampleANGLE(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLboolean fixedSampleLocations,GLuint memory,GLuint64 offset,GLbitfield createFlags,GLbitfield usageFlags,const void * imageCreateInfoPNext)683 void GL_APIENTRY GL_TexStorageMemFlags2DMultisampleANGLE(GLenum target,
684                                                          GLsizei samples,
685                                                          GLenum internalFormat,
686                                                          GLsizei width,
687                                                          GLsizei height,
688                                                          GLboolean fixedSampleLocations,
689                                                          GLuint memory,
690                                                          GLuint64 offset,
691                                                          GLbitfield createFlags,
692                                                          GLbitfield usageFlags,
693                                                          const void *imageCreateInfoPNext)
694 {
695     Context *context = GetValidGlobalContext();
696     EVENT(context, GLTexStorageMemFlags2DMultisampleANGLE,
697           "context = %d, target = %s, samples = %d, internalFormat = %s, width = %d, height = %d, "
698           "fixedSampleLocations = %s, memory = %u, offset = %llu, createFlags = %s, usageFlags = "
699           "%s, imageCreateInfoPNext = 0x%016" PRIxPTR "",
700           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), samples,
701           GLenumToString(GLenumGroup::DefaultGroup, internalFormat), width, height,
702           GLbooleanToString(fixedSampleLocations), memory, static_cast<unsigned long long>(offset),
703           GLbitfieldToString(GLenumGroup::DefaultGroup, createFlags).c_str(),
704           GLbitfieldToString(GLenumGroup::DefaultGroup, usageFlags).c_str(),
705           (uintptr_t)imageCreateInfoPNext);
706 
707     if (context)
708     {
709         TextureType targetPacked                              = PackParam<TextureType>(target);
710         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
711         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
712         bool isCallValid =
713             (context->skipValidation() ||
714              ValidateTexStorageMemFlags2DMultisampleANGLE(
715                  context, angle::EntryPoint::GLTexStorageMemFlags2DMultisampleANGLE, targetPacked,
716                  samples, internalFormat, width, height, fixedSampleLocations, memoryPacked, offset,
717                  createFlags, usageFlags, imageCreateInfoPNext));
718         if (isCallValid)
719         {
720             context->texStorageMemFlags2DMultisample(
721                 targetPacked, samples, internalFormat, width, height, fixedSampleLocations,
722                 memoryPacked, offset, createFlags, usageFlags, imageCreateInfoPNext);
723         }
724         ANGLE_CAPTURE(TexStorageMemFlags2DMultisampleANGLE, isCallValid, context, targetPacked,
725                       samples, internalFormat, width, height, fixedSampleLocations, memoryPacked,
726                       offset, createFlags, usageFlags, imageCreateInfoPNext);
727     }
728     else
729     {
730         GenerateContextLostErrorOnCurrentGlobalContext();
731     }
732 }
733 
GL_TexStorageMemFlags3DANGLE(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLuint memory,GLuint64 offset,GLbitfield createFlags,GLbitfield usageFlags,const void * imageCreateInfoPNext)734 void GL_APIENTRY GL_TexStorageMemFlags3DANGLE(GLenum target,
735                                               GLsizei levels,
736                                               GLenum internalFormat,
737                                               GLsizei width,
738                                               GLsizei height,
739                                               GLsizei depth,
740                                               GLuint memory,
741                                               GLuint64 offset,
742                                               GLbitfield createFlags,
743                                               GLbitfield usageFlags,
744                                               const void *imageCreateInfoPNext)
745 {
746     Context *context = GetValidGlobalContext();
747     EVENT(context, GLTexStorageMemFlags3DANGLE,
748           "context = %d, target = %s, levels = %d, internalFormat = %s, width = %d, height = %d, "
749           "depth = %d, memory = %u, offset = %llu, createFlags = %s, usageFlags = %s, "
750           "imageCreateInfoPNext = 0x%016" PRIxPTR "",
751           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), levels,
752           GLenumToString(GLenumGroup::DefaultGroup, internalFormat), width, height, depth, memory,
753           static_cast<unsigned long long>(offset),
754           GLbitfieldToString(GLenumGroup::DefaultGroup, createFlags).c_str(),
755           GLbitfieldToString(GLenumGroup::DefaultGroup, usageFlags).c_str(),
756           (uintptr_t)imageCreateInfoPNext);
757 
758     if (context)
759     {
760         TextureType targetPacked                              = PackParam<TextureType>(target);
761         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
762         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
763         bool isCallValid =
764             (context->skipValidation() ||
765              ValidateTexStorageMemFlags3DANGLE(
766                  context, angle::EntryPoint::GLTexStorageMemFlags3DANGLE, targetPacked, levels,
767                  internalFormat, width, height, depth, memoryPacked, offset, createFlags,
768                  usageFlags, imageCreateInfoPNext));
769         if (isCallValid)
770         {
771             context->texStorageMemFlags3D(targetPacked, levels, internalFormat, width, height,
772                                           depth, memoryPacked, offset, createFlags, usageFlags,
773                                           imageCreateInfoPNext);
774         }
775         ANGLE_CAPTURE(TexStorageMemFlags3DANGLE, isCallValid, context, targetPacked, levels,
776                       internalFormat, width, height, depth, memoryPacked, offset, createFlags,
777                       usageFlags, imageCreateInfoPNext);
778     }
779     else
780     {
781         GenerateContextLostErrorOnCurrentGlobalContext();
782     }
783 }
784 
GL_TexStorageMemFlags3DMultisampleANGLE(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLboolean fixedSampleLocations,GLuint memory,GLuint64 offset,GLbitfield createFlags,GLbitfield usageFlags,const void * imageCreateInfoPNext)785 void GL_APIENTRY GL_TexStorageMemFlags3DMultisampleANGLE(GLenum target,
786                                                          GLsizei samples,
787                                                          GLenum internalFormat,
788                                                          GLsizei width,
789                                                          GLsizei height,
790                                                          GLsizei depth,
791                                                          GLboolean fixedSampleLocations,
792                                                          GLuint memory,
793                                                          GLuint64 offset,
794                                                          GLbitfield createFlags,
795                                                          GLbitfield usageFlags,
796                                                          const void *imageCreateInfoPNext)
797 {
798     Context *context = GetValidGlobalContext();
799     EVENT(context, GLTexStorageMemFlags3DMultisampleANGLE,
800           "context = %d, target = %s, samples = %d, internalFormat = %s, width = %d, height = %d, "
801           "depth = %d, fixedSampleLocations = %s, memory = %u, offset = %llu, createFlags = %s, "
802           "usageFlags = %s, imageCreateInfoPNext = 0x%016" PRIxPTR "",
803           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), samples,
804           GLenumToString(GLenumGroup::DefaultGroup, internalFormat), width, height, depth,
805           GLbooleanToString(fixedSampleLocations), memory, static_cast<unsigned long long>(offset),
806           GLbitfieldToString(GLenumGroup::DefaultGroup, createFlags).c_str(),
807           GLbitfieldToString(GLenumGroup::DefaultGroup, usageFlags).c_str(),
808           (uintptr_t)imageCreateInfoPNext);
809 
810     if (context)
811     {
812         TextureType targetPacked                              = PackParam<TextureType>(target);
813         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
814         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
815         bool isCallValid =
816             (context->skipValidation() ||
817              ValidateTexStorageMemFlags3DMultisampleANGLE(
818                  context, angle::EntryPoint::GLTexStorageMemFlags3DMultisampleANGLE, targetPacked,
819                  samples, internalFormat, width, height, depth, fixedSampleLocations, memoryPacked,
820                  offset, createFlags, usageFlags, imageCreateInfoPNext));
821         if (isCallValid)
822         {
823             context->texStorageMemFlags3DMultisample(
824                 targetPacked, samples, internalFormat, width, height, depth, fixedSampleLocations,
825                 memoryPacked, offset, createFlags, usageFlags, imageCreateInfoPNext);
826         }
827         ANGLE_CAPTURE(TexStorageMemFlags3DMultisampleANGLE, isCallValid, context, targetPacked,
828                       samples, internalFormat, width, height, depth, fixedSampleLocations,
829                       memoryPacked, offset, createFlags, usageFlags, imageCreateInfoPNext);
830     }
831     else
832     {
833         GenerateContextLostErrorOnCurrentGlobalContext();
834     }
835 }
836 
837 // GL_ANGLE_memory_object_fuchsia
GL_ImportMemoryZirconHandleANGLE(GLuint memory,GLuint64 size,GLenum handleType,GLuint handle)838 void GL_APIENTRY GL_ImportMemoryZirconHandleANGLE(GLuint memory,
839                                                   GLuint64 size,
840                                                   GLenum handleType,
841                                                   GLuint handle)
842 {
843     Context *context = GetValidGlobalContext();
844     EVENT(context, GLImportMemoryZirconHandleANGLE,
845           "context = %d, memory = %u, size = %llu, handleType = %s, handle = %u", CID(context),
846           memory, static_cast<unsigned long long>(size),
847           GLenumToString(GLenumGroup::ExternalHandleType, handleType), handle);
848 
849     if (context)
850     {
851         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
852         HandleType handleTypePacked                           = PackParam<HandleType>(handleType);
853         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
854         bool isCallValid                                      = (context->skipValidation() ||
855                             ValidateImportMemoryZirconHandleANGLE(
856                                 context, angle::EntryPoint::GLImportMemoryZirconHandleANGLE,
857                                 memoryPacked, size, handleTypePacked, handle));
858         if (isCallValid)
859         {
860             context->importMemoryZirconHandle(memoryPacked, size, handleTypePacked, handle);
861         }
862         ANGLE_CAPTURE(ImportMemoryZirconHandleANGLE, isCallValid, context, memoryPacked, size,
863                       handleTypePacked, handle);
864     }
865     else
866     {
867         GenerateContextLostErrorOnCurrentGlobalContext();
868     }
869 }
870 
871 // GL_ANGLE_multi_draw
GL_MultiDrawArraysANGLE(GLenum mode,const GLint * firsts,const GLsizei * counts,GLsizei drawcount)872 void GL_APIENTRY GL_MultiDrawArraysANGLE(GLenum mode,
873                                          const GLint *firsts,
874                                          const GLsizei *counts,
875                                          GLsizei drawcount)
876 {
877     Context *context = GetValidGlobalContext();
878     EVENT(context, GLMultiDrawArraysANGLE,
879           "context = %d, mode = %s, firsts = 0x%016" PRIxPTR ", counts = 0x%016" PRIxPTR
880           ", drawcount = %d",
881           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), (uintptr_t)firsts,
882           (uintptr_t)counts, drawcount);
883 
884     if (context)
885     {
886         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
887         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
888         bool isCallValid =
889             (context->skipValidation() ||
890              ValidateMultiDrawArraysANGLE(context, angle::EntryPoint::GLMultiDrawArraysANGLE,
891                                           modePacked, firsts, counts, drawcount));
892         if (isCallValid)
893         {
894             context->multiDrawArrays(modePacked, firsts, counts, drawcount);
895         }
896         ANGLE_CAPTURE(MultiDrawArraysANGLE, isCallValid, context, modePacked, firsts, counts,
897                       drawcount);
898     }
899     else
900     {
901         GenerateContextLostErrorOnCurrentGlobalContext();
902     }
903 }
904 
GL_MultiDrawArraysInstancedANGLE(GLenum mode,const GLint * firsts,const GLsizei * counts,const GLsizei * instanceCounts,GLsizei drawcount)905 void GL_APIENTRY GL_MultiDrawArraysInstancedANGLE(GLenum mode,
906                                                   const GLint *firsts,
907                                                   const GLsizei *counts,
908                                                   const GLsizei *instanceCounts,
909                                                   GLsizei drawcount)
910 {
911     Context *context = GetValidGlobalContext();
912     EVENT(context, GLMultiDrawArraysInstancedANGLE,
913           "context = %d, mode = %s, firsts = 0x%016" PRIxPTR ", counts = 0x%016" PRIxPTR
914           ", instanceCounts = 0x%016" PRIxPTR ", drawcount = %d",
915           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), (uintptr_t)firsts,
916           (uintptr_t)counts, (uintptr_t)instanceCounts, drawcount);
917 
918     if (context)
919     {
920         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
921         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
922         bool isCallValid                                      = (context->skipValidation() ||
923                             ValidateMultiDrawArraysInstancedANGLE(
924                                 context, angle::EntryPoint::GLMultiDrawArraysInstancedANGLE,
925                                 modePacked, firsts, counts, instanceCounts, drawcount));
926         if (isCallValid)
927         {
928             context->multiDrawArraysInstanced(modePacked, firsts, counts, instanceCounts,
929                                               drawcount);
930         }
931         ANGLE_CAPTURE(MultiDrawArraysInstancedANGLE, isCallValid, context, modePacked, firsts,
932                       counts, instanceCounts, drawcount);
933     }
934     else
935     {
936         GenerateContextLostErrorOnCurrentGlobalContext();
937     }
938 }
939 
GL_MultiDrawElementsANGLE(GLenum mode,const GLsizei * counts,GLenum type,const GLvoid * const * indices,GLsizei drawcount)940 void GL_APIENTRY GL_MultiDrawElementsANGLE(GLenum mode,
941                                            const GLsizei *counts,
942                                            GLenum type,
943                                            const GLvoid *const *indices,
944                                            GLsizei drawcount)
945 {
946     Context *context = GetValidGlobalContext();
947     EVENT(context, GLMultiDrawElementsANGLE,
948           "context = %d, mode = %s, counts = 0x%016" PRIxPTR ", type = %s, indices = 0x%016" PRIxPTR
949           ", drawcount = %d",
950           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), (uintptr_t)counts,
951           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, drawcount);
952 
953     if (context)
954     {
955         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
956         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
957         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
958         bool isCallValid =
959             (context->skipValidation() ||
960              ValidateMultiDrawElementsANGLE(context, angle::EntryPoint::GLMultiDrawElementsANGLE,
961                                             modePacked, counts, typePacked, indices, drawcount));
962         if (isCallValid)
963         {
964             context->multiDrawElements(modePacked, counts, typePacked, indices, drawcount);
965         }
966         ANGLE_CAPTURE(MultiDrawElementsANGLE, isCallValid, context, modePacked, counts, typePacked,
967                       indices, drawcount);
968     }
969     else
970     {
971         GenerateContextLostErrorOnCurrentGlobalContext();
972     }
973 }
974 
GL_MultiDrawElementsInstancedANGLE(GLenum mode,const GLsizei * counts,GLenum type,const GLvoid * const * indices,const GLsizei * instanceCounts,GLsizei drawcount)975 void GL_APIENTRY GL_MultiDrawElementsInstancedANGLE(GLenum mode,
976                                                     const GLsizei *counts,
977                                                     GLenum type,
978                                                     const GLvoid *const *indices,
979                                                     const GLsizei *instanceCounts,
980                                                     GLsizei drawcount)
981 {
982     Context *context = GetValidGlobalContext();
983     EVENT(context, GLMultiDrawElementsInstancedANGLE,
984           "context = %d, mode = %s, counts = 0x%016" PRIxPTR ", type = %s, indices = 0x%016" PRIxPTR
985           ", instanceCounts = 0x%016" PRIxPTR ", drawcount = %d",
986           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), (uintptr_t)counts,
987           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices,
988           (uintptr_t)instanceCounts, drawcount);
989 
990     if (context)
991     {
992         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
993         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
994         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
995         bool isCallValid =
996             (context->skipValidation() ||
997              ValidateMultiDrawElementsInstancedANGLE(
998                  context, angle::EntryPoint::GLMultiDrawElementsInstancedANGLE, modePacked, counts,
999                  typePacked, indices, instanceCounts, drawcount));
1000         if (isCallValid)
1001         {
1002             context->multiDrawElementsInstanced(modePacked, counts, typePacked, indices,
1003                                                 instanceCounts, drawcount);
1004         }
1005         ANGLE_CAPTURE(MultiDrawElementsInstancedANGLE, isCallValid, context, modePacked, counts,
1006                       typePacked, indices, instanceCounts, drawcount);
1007     }
1008     else
1009     {
1010         GenerateContextLostErrorOnCurrentGlobalContext();
1011     }
1012 }
1013 
1014 // GL_ANGLE_pack_reverse_row_order
1015 
1016 // GL_ANGLE_program_binary
1017 
1018 // GL_ANGLE_provoking_vertex
GL_ProvokingVertexANGLE(GLenum mode)1019 void GL_APIENTRY GL_ProvokingVertexANGLE(GLenum mode)
1020 {
1021     Context *context = GetValidGlobalContext();
1022     EVENT(context, GLProvokingVertexANGLE, "context = %d, mode = %s", CID(context),
1023           GLenumToString(GLenumGroup::VertexProvokingMode, mode));
1024 
1025     if (context)
1026     {
1027         ProvokingVertexConvention modePacked = PackParam<ProvokingVertexConvention>(mode);
1028         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1029         bool isCallValid                                      = (context->skipValidation() ||
1030                             ValidateProvokingVertexANGLE(
1031                                 context, angle::EntryPoint::GLProvokingVertexANGLE, modePacked));
1032         if (isCallValid)
1033         {
1034             context->provokingVertex(modePacked);
1035         }
1036         ANGLE_CAPTURE(ProvokingVertexANGLE, isCallValid, context, modePacked);
1037     }
1038     else
1039     {
1040         GenerateContextLostErrorOnCurrentGlobalContext();
1041     }
1042 }
1043 
1044 // GL_ANGLE_request_extension
GL_RequestExtensionANGLE(const GLchar * name)1045 void GL_APIENTRY GL_RequestExtensionANGLE(const GLchar *name)
1046 {
1047     Context *context = GetValidGlobalContext();
1048     EVENT(context, GLRequestExtensionANGLE, "context = %d, name = 0x%016" PRIxPTR "", CID(context),
1049           (uintptr_t)name);
1050 
1051     if (context)
1052     {
1053         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1054         bool isCallValid                                      = (context->skipValidation() ||
1055                             ValidateRequestExtensionANGLE(
1056                                 context, angle::EntryPoint::GLRequestExtensionANGLE, name));
1057         if (isCallValid)
1058         {
1059             context->requestExtension(name);
1060         }
1061         ANGLE_CAPTURE(RequestExtensionANGLE, isCallValid, context, name);
1062     }
1063     else
1064     {
1065         GenerateContextLostErrorOnCurrentGlobalContext();
1066     }
1067 }
1068 
GL_DisableExtensionANGLE(const GLchar * name)1069 void GL_APIENTRY GL_DisableExtensionANGLE(const GLchar *name)
1070 {
1071     Context *context = GetValidGlobalContext();
1072     EVENT(context, GLDisableExtensionANGLE, "context = %d, name = 0x%016" PRIxPTR "", CID(context),
1073           (uintptr_t)name);
1074 
1075     if (context)
1076     {
1077         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1078         bool isCallValid                                      = (context->skipValidation() ||
1079                             ValidateDisableExtensionANGLE(
1080                                 context, angle::EntryPoint::GLDisableExtensionANGLE, name));
1081         if (isCallValid)
1082         {
1083             context->disableExtension(name);
1084         }
1085         ANGLE_CAPTURE(DisableExtensionANGLE, isCallValid, context, name);
1086     }
1087     else
1088     {
1089         GenerateContextLostErrorOnCurrentGlobalContext();
1090     }
1091 }
1092 
1093 // GL_ANGLE_robust_client_memory
GL_GetBooleanvRobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,GLboolean * params)1094 void GL_APIENTRY GL_GetBooleanvRobustANGLE(GLenum pname,
1095                                            GLsizei bufSize,
1096                                            GLsizei *length,
1097                                            GLboolean *params)
1098 {
1099     Context *context = GetValidGlobalContext();
1100     EVENT(context, GLGetBooleanvRobustANGLE,
1101           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1102           ", params = 0x%016" PRIxPTR "",
1103           CID(context), GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
1104           (uintptr_t)length, (uintptr_t)params);
1105 
1106     if (context)
1107     {
1108         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1109         bool isCallValid =
1110             (context->skipValidation() ||
1111              ValidateGetBooleanvRobustANGLE(context, angle::EntryPoint::GLGetBooleanvRobustANGLE,
1112                                             pname, bufSize, length, params));
1113         if (isCallValid)
1114         {
1115             context->getBooleanvRobust(pname, bufSize, length, params);
1116         }
1117         ANGLE_CAPTURE(GetBooleanvRobustANGLE, isCallValid, context, pname, bufSize, length, params);
1118     }
1119     else
1120     {
1121         GenerateContextLostErrorOnCurrentGlobalContext();
1122     }
1123 }
1124 
GL_GetBufferParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1125 void GL_APIENTRY GL_GetBufferParameterivRobustANGLE(GLenum target,
1126                                                     GLenum pname,
1127                                                     GLsizei bufSize,
1128                                                     GLsizei *length,
1129                                                     GLint *params)
1130 {
1131     Context *context = GetValidGlobalContext();
1132     EVENT(context, GLGetBufferParameterivRobustANGLE,
1133           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1134           ", params = 0x%016" PRIxPTR "",
1135           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
1136           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
1137           (uintptr_t)params);
1138 
1139     if (context)
1140     {
1141         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
1142         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1143         bool isCallValid                                      = (context->skipValidation() ||
1144                             ValidateGetBufferParameterivRobustANGLE(
1145                                 context, angle::EntryPoint::GLGetBufferParameterivRobustANGLE,
1146                                 targetPacked, pname, bufSize, length, params));
1147         if (isCallValid)
1148         {
1149             context->getBufferParameterivRobust(targetPacked, pname, bufSize, length, params);
1150         }
1151         ANGLE_CAPTURE(GetBufferParameterivRobustANGLE, isCallValid, context, targetPacked, pname,
1152                       bufSize, length, params);
1153     }
1154     else
1155     {
1156         GenerateContextLostErrorOnCurrentGlobalContext();
1157     }
1158 }
1159 
GL_GetFloatvRobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)1160 void GL_APIENTRY GL_GetFloatvRobustANGLE(GLenum pname,
1161                                          GLsizei bufSize,
1162                                          GLsizei *length,
1163                                          GLfloat *params)
1164 {
1165     Context *context = GetValidGlobalContext();
1166     EVENT(context, GLGetFloatvRobustANGLE,
1167           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1168           ", params = 0x%016" PRIxPTR "",
1169           CID(context), GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
1170           (uintptr_t)length, (uintptr_t)params);
1171 
1172     if (context)
1173     {
1174         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1175         bool isCallValid =
1176             (context->skipValidation() ||
1177              ValidateGetFloatvRobustANGLE(context, angle::EntryPoint::GLGetFloatvRobustANGLE, pname,
1178                                           bufSize, length, params));
1179         if (isCallValid)
1180         {
1181             context->getFloatvRobust(pname, bufSize, length, params);
1182         }
1183         ANGLE_CAPTURE(GetFloatvRobustANGLE, isCallValid, context, pname, bufSize, length, params);
1184     }
1185     else
1186     {
1187         GenerateContextLostErrorOnCurrentGlobalContext();
1188     }
1189 }
1190 
GL_GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,GLenum attachment,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1191 void GL_APIENTRY GL_GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
1192                                                                    GLenum attachment,
1193                                                                    GLenum pname,
1194                                                                    GLsizei bufSize,
1195                                                                    GLsizei *length,
1196                                                                    GLint *params)
1197 {
1198     Context *context = GetValidGlobalContext();
1199     EVENT(context, GLGetFramebufferAttachmentParameterivRobustANGLE,
1200           "context = %d, target = %s, attachment = %s, pname = %s, bufSize = %d, length = "
1201           "0x%016" PRIxPTR ", params = 0x%016" PRIxPTR "",
1202           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
1203           GLenumToString(GLenumGroup::DefaultGroup, attachment),
1204           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
1205           (uintptr_t)params);
1206 
1207     if (context)
1208     {
1209         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1210         bool isCallValid =
1211             (context->skipValidation() ||
1212              ValidateGetFramebufferAttachmentParameterivRobustANGLE(
1213                  context, angle::EntryPoint::GLGetFramebufferAttachmentParameterivRobustANGLE,
1214                  target, attachment, pname, bufSize, length, params));
1215         if (isCallValid)
1216         {
1217             context->getFramebufferAttachmentParameterivRobust(target, attachment, pname, bufSize,
1218                                                                length, params);
1219         }
1220         ANGLE_CAPTURE(GetFramebufferAttachmentParameterivRobustANGLE, isCallValid, context, target,
1221                       attachment, pname, bufSize, length, params);
1222     }
1223     else
1224     {
1225         GenerateContextLostErrorOnCurrentGlobalContext();
1226     }
1227 }
1228 
GL_GetIntegervRobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,GLint * data)1229 void GL_APIENTRY GL_GetIntegervRobustANGLE(GLenum pname,
1230                                            GLsizei bufSize,
1231                                            GLsizei *length,
1232                                            GLint *data)
1233 {
1234     Context *context = GetValidGlobalContext();
1235     EVENT(context, GLGetIntegervRobustANGLE,
1236           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1237           ", data = 0x%016" PRIxPTR "",
1238           CID(context), GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
1239           (uintptr_t)length, (uintptr_t)data);
1240 
1241     if (context)
1242     {
1243         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1244         bool isCallValid =
1245             (context->skipValidation() ||
1246              ValidateGetIntegervRobustANGLE(context, angle::EntryPoint::GLGetIntegervRobustANGLE,
1247                                             pname, bufSize, length, data));
1248         if (isCallValid)
1249         {
1250             context->getIntegervRobust(pname, bufSize, length, data);
1251         }
1252         ANGLE_CAPTURE(GetIntegervRobustANGLE, isCallValid, context, pname, bufSize, length, data);
1253     }
1254     else
1255     {
1256         GenerateContextLostErrorOnCurrentGlobalContext();
1257     }
1258 }
1259 
GL_GetProgramivRobustANGLE(GLuint program,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1260 void GL_APIENTRY GL_GetProgramivRobustANGLE(GLuint program,
1261                                             GLenum pname,
1262                                             GLsizei bufSize,
1263                                             GLsizei *length,
1264                                             GLint *params)
1265 {
1266     Context *context = GetGlobalContext();
1267     EVENT(context, GLGetProgramivRobustANGLE,
1268           "context = %d, program = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1269           ", params = 0x%016" PRIxPTR "",
1270           CID(context), program, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
1271           (uintptr_t)length, (uintptr_t)params);
1272 
1273     if (context)
1274     {
1275         ShaderProgramID programPacked                         = PackParam<ShaderProgramID>(program);
1276         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1277         bool isCallValid =
1278             (context->skipValidation() ||
1279              ValidateGetProgramivRobustANGLE(context, angle::EntryPoint::GLGetProgramivRobustANGLE,
1280                                              programPacked, pname, bufSize, length, params));
1281         if (isCallValid)
1282         {
1283             context->getProgramivRobust(programPacked, pname, bufSize, length, params);
1284         }
1285         ANGLE_CAPTURE(GetProgramivRobustANGLE, isCallValid, context, programPacked, pname, bufSize,
1286                       length, params);
1287     }
1288     else
1289     {}
1290 }
1291 
GL_GetRenderbufferParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1292 void GL_APIENTRY GL_GetRenderbufferParameterivRobustANGLE(GLenum target,
1293                                                           GLenum pname,
1294                                                           GLsizei bufSize,
1295                                                           GLsizei *length,
1296                                                           GLint *params)
1297 {
1298     Context *context = GetValidGlobalContext();
1299     EVENT(context, GLGetRenderbufferParameterivRobustANGLE,
1300           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1301           ", params = 0x%016" PRIxPTR "",
1302           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
1303           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
1304           (uintptr_t)params);
1305 
1306     if (context)
1307     {
1308         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1309         bool isCallValid                                      = (context->skipValidation() ||
1310                             ValidateGetRenderbufferParameterivRobustANGLE(
1311                                 context, angle::EntryPoint::GLGetRenderbufferParameterivRobustANGLE,
1312                                 target, pname, bufSize, length, params));
1313         if (isCallValid)
1314         {
1315             context->getRenderbufferParameterivRobust(target, pname, bufSize, length, params);
1316         }
1317         ANGLE_CAPTURE(GetRenderbufferParameterivRobustANGLE, isCallValid, context, target, pname,
1318                       bufSize, length, params);
1319     }
1320     else
1321     {
1322         GenerateContextLostErrorOnCurrentGlobalContext();
1323     }
1324 }
1325 
GL_GetShaderivRobustANGLE(GLuint shader,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1326 void GL_APIENTRY GL_GetShaderivRobustANGLE(GLuint shader,
1327                                            GLenum pname,
1328                                            GLsizei bufSize,
1329                                            GLsizei *length,
1330                                            GLint *params)
1331 {
1332     Context *context = GetGlobalContext();
1333     EVENT(context, GLGetShaderivRobustANGLE,
1334           "context = %d, shader = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1335           ", params = 0x%016" PRIxPTR "",
1336           CID(context), shader, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
1337           (uintptr_t)length, (uintptr_t)params);
1338 
1339     if (context)
1340     {
1341         ShaderProgramID shaderPacked                          = PackParam<ShaderProgramID>(shader);
1342         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1343         bool isCallValid =
1344             (context->skipValidation() ||
1345              ValidateGetShaderivRobustANGLE(context, angle::EntryPoint::GLGetShaderivRobustANGLE,
1346                                             shaderPacked, pname, bufSize, length, params));
1347         if (isCallValid)
1348         {
1349             context->getShaderivRobust(shaderPacked, pname, bufSize, length, params);
1350         }
1351         ANGLE_CAPTURE(GetShaderivRobustANGLE, isCallValid, context, shaderPacked, pname, bufSize,
1352                       length, params);
1353     }
1354     else
1355     {}
1356 }
1357 
GL_GetTexParameterfvRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)1358 void GL_APIENTRY GL_GetTexParameterfvRobustANGLE(GLenum target,
1359                                                  GLenum pname,
1360                                                  GLsizei bufSize,
1361                                                  GLsizei *length,
1362                                                  GLfloat *params)
1363 {
1364     Context *context = GetValidGlobalContext();
1365     EVENT(context, GLGetTexParameterfvRobustANGLE,
1366           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1367           ", params = 0x%016" PRIxPTR "",
1368           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
1369           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
1370           (uintptr_t)params);
1371 
1372     if (context)
1373     {
1374         TextureType targetPacked                              = PackParam<TextureType>(target);
1375         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1376         bool isCallValid                                      = (context->skipValidation() ||
1377                             ValidateGetTexParameterfvRobustANGLE(
1378                                 context, angle::EntryPoint::GLGetTexParameterfvRobustANGLE,
1379                                 targetPacked, pname, bufSize, length, params));
1380         if (isCallValid)
1381         {
1382             context->getTexParameterfvRobust(targetPacked, pname, bufSize, length, params);
1383         }
1384         ANGLE_CAPTURE(GetTexParameterfvRobustANGLE, isCallValid, context, targetPacked, pname,
1385                       bufSize, length, params);
1386     }
1387     else
1388     {
1389         GenerateContextLostErrorOnCurrentGlobalContext();
1390     }
1391 }
1392 
GL_GetTexParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1393 void GL_APIENTRY GL_GetTexParameterivRobustANGLE(GLenum target,
1394                                                  GLenum pname,
1395                                                  GLsizei bufSize,
1396                                                  GLsizei *length,
1397                                                  GLint *params)
1398 {
1399     Context *context = GetValidGlobalContext();
1400     EVENT(context, GLGetTexParameterivRobustANGLE,
1401           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1402           ", params = 0x%016" PRIxPTR "",
1403           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
1404           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
1405           (uintptr_t)params);
1406 
1407     if (context)
1408     {
1409         TextureType targetPacked                              = PackParam<TextureType>(target);
1410         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1411         bool isCallValid                                      = (context->skipValidation() ||
1412                             ValidateGetTexParameterivRobustANGLE(
1413                                 context, angle::EntryPoint::GLGetTexParameterivRobustANGLE,
1414                                 targetPacked, pname, bufSize, length, params));
1415         if (isCallValid)
1416         {
1417             context->getTexParameterivRobust(targetPacked, pname, bufSize, length, params);
1418         }
1419         ANGLE_CAPTURE(GetTexParameterivRobustANGLE, isCallValid, context, targetPacked, pname,
1420                       bufSize, length, params);
1421     }
1422     else
1423     {
1424         GenerateContextLostErrorOnCurrentGlobalContext();
1425     }
1426 }
1427 
GL_GetUniformfvRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLfloat * params)1428 void GL_APIENTRY GL_GetUniformfvRobustANGLE(GLuint program,
1429                                             GLint location,
1430                                             GLsizei bufSize,
1431                                             GLsizei *length,
1432                                             GLfloat *params)
1433 {
1434     Context *context = GetValidGlobalContext();
1435     EVENT(context, GLGetUniformfvRobustANGLE,
1436           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
1437           ", params = 0x%016" PRIxPTR "",
1438           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
1439 
1440     if (context)
1441     {
1442         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1443         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1444         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1445         bool isCallValid                                      = (context->skipValidation() ||
1446                             ValidateGetUniformfvRobustANGLE(
1447                                 context, angle::EntryPoint::GLGetUniformfvRobustANGLE,
1448                                 programPacked, locationPacked, bufSize, length, params));
1449         if (isCallValid)
1450         {
1451             context->getUniformfvRobust(programPacked, locationPacked, bufSize, length, params);
1452         }
1453         ANGLE_CAPTURE(GetUniformfvRobustANGLE, isCallValid, context, programPacked, locationPacked,
1454                       bufSize, length, params);
1455     }
1456     else
1457     {
1458         GenerateContextLostErrorOnCurrentGlobalContext();
1459     }
1460 }
1461 
GL_GetUniformivRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLint * params)1462 void GL_APIENTRY GL_GetUniformivRobustANGLE(GLuint program,
1463                                             GLint location,
1464                                             GLsizei bufSize,
1465                                             GLsizei *length,
1466                                             GLint *params)
1467 {
1468     Context *context = GetValidGlobalContext();
1469     EVENT(context, GLGetUniformivRobustANGLE,
1470           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
1471           ", params = 0x%016" PRIxPTR "",
1472           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
1473 
1474     if (context)
1475     {
1476         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1477         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1478         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1479         bool isCallValid                                      = (context->skipValidation() ||
1480                             ValidateGetUniformivRobustANGLE(
1481                                 context, angle::EntryPoint::GLGetUniformivRobustANGLE,
1482                                 programPacked, locationPacked, bufSize, length, params));
1483         if (isCallValid)
1484         {
1485             context->getUniformivRobust(programPacked, locationPacked, bufSize, length, params);
1486         }
1487         ANGLE_CAPTURE(GetUniformivRobustANGLE, isCallValid, context, programPacked, locationPacked,
1488                       bufSize, length, params);
1489     }
1490     else
1491     {
1492         GenerateContextLostErrorOnCurrentGlobalContext();
1493     }
1494 }
1495 
GL_GetVertexAttribfvRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)1496 void GL_APIENTRY GL_GetVertexAttribfvRobustANGLE(GLuint index,
1497                                                  GLenum pname,
1498                                                  GLsizei bufSize,
1499                                                  GLsizei *length,
1500                                                  GLfloat *params)
1501 {
1502     Context *context = GetValidGlobalContext();
1503     EVENT(context, GLGetVertexAttribfvRobustANGLE,
1504           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1505           ", params = 0x%016" PRIxPTR "",
1506           CID(context), index, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
1507           (uintptr_t)length, (uintptr_t)params);
1508 
1509     if (context)
1510     {
1511         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1512         bool isCallValid                                      = (context->skipValidation() ||
1513                             ValidateGetVertexAttribfvRobustANGLE(
1514                                 context, angle::EntryPoint::GLGetVertexAttribfvRobustANGLE, index,
1515                                 pname, bufSize, length, params));
1516         if (isCallValid)
1517         {
1518             context->getVertexAttribfvRobust(index, pname, bufSize, length, params);
1519         }
1520         ANGLE_CAPTURE(GetVertexAttribfvRobustANGLE, isCallValid, context, index, pname, bufSize,
1521                       length, params);
1522     }
1523     else
1524     {
1525         GenerateContextLostErrorOnCurrentGlobalContext();
1526     }
1527 }
1528 
GL_GetVertexAttribivRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1529 void GL_APIENTRY GL_GetVertexAttribivRobustANGLE(GLuint index,
1530                                                  GLenum pname,
1531                                                  GLsizei bufSize,
1532                                                  GLsizei *length,
1533                                                  GLint *params)
1534 {
1535     Context *context = GetValidGlobalContext();
1536     EVENT(context, GLGetVertexAttribivRobustANGLE,
1537           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1538           ", params = 0x%016" PRIxPTR "",
1539           CID(context), index, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
1540           (uintptr_t)length, (uintptr_t)params);
1541 
1542     if (context)
1543     {
1544         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1545         bool isCallValid                                      = (context->skipValidation() ||
1546                             ValidateGetVertexAttribivRobustANGLE(
1547                                 context, angle::EntryPoint::GLGetVertexAttribivRobustANGLE, index,
1548                                 pname, bufSize, length, params));
1549         if (isCallValid)
1550         {
1551             context->getVertexAttribivRobust(index, pname, bufSize, length, params);
1552         }
1553         ANGLE_CAPTURE(GetVertexAttribivRobustANGLE, isCallValid, context, index, pname, bufSize,
1554                       length, params);
1555     }
1556     else
1557     {
1558         GenerateContextLostErrorOnCurrentGlobalContext();
1559     }
1560 }
1561 
GL_GetVertexAttribPointervRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,void ** pointer)1562 void GL_APIENTRY GL_GetVertexAttribPointervRobustANGLE(GLuint index,
1563                                                        GLenum pname,
1564                                                        GLsizei bufSize,
1565                                                        GLsizei *length,
1566                                                        void **pointer)
1567 {
1568     Context *context = GetValidGlobalContext();
1569     EVENT(context, GLGetVertexAttribPointervRobustANGLE,
1570           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1571           ", pointer = 0x%016" PRIxPTR "",
1572           CID(context), index, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
1573           (uintptr_t)length, (uintptr_t)pointer);
1574 
1575     if (context)
1576     {
1577         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1578         bool isCallValid                                      = (context->skipValidation() ||
1579                             ValidateGetVertexAttribPointervRobustANGLE(
1580                                 context, angle::EntryPoint::GLGetVertexAttribPointervRobustANGLE,
1581                                 index, pname, bufSize, length, pointer));
1582         if (isCallValid)
1583         {
1584             context->getVertexAttribPointervRobust(index, pname, bufSize, length, pointer);
1585         }
1586         ANGLE_CAPTURE(GetVertexAttribPointervRobustANGLE, isCallValid, context, index, pname,
1587                       bufSize, length, pointer);
1588     }
1589     else
1590     {
1591         GenerateContextLostErrorOnCurrentGlobalContext();
1592     }
1593 }
1594 
GL_ReadPixelsRobustANGLE(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLsizei bufSize,GLsizei * length,GLsizei * columns,GLsizei * rows,void * pixels)1595 void GL_APIENTRY GL_ReadPixelsRobustANGLE(GLint x,
1596                                           GLint y,
1597                                           GLsizei width,
1598                                           GLsizei height,
1599                                           GLenum format,
1600                                           GLenum type,
1601                                           GLsizei bufSize,
1602                                           GLsizei *length,
1603                                           GLsizei *columns,
1604                                           GLsizei *rows,
1605                                           void *pixels)
1606 {
1607     Context *context = GetValidGlobalContext();
1608     EVENT(context, GLReadPixelsRobustANGLE,
1609           "context = %d, x = %d, y = %d, width = %d, height = %d, format = %s, type = %s, bufSize "
1610           "= %d, length = 0x%016" PRIxPTR ", columns = 0x%016" PRIxPTR ", rows = 0x%016" PRIxPTR
1611           ", pixels = 0x%016" PRIxPTR "",
1612           CID(context), x, y, width, height, GLenumToString(GLenumGroup::DefaultGroup, format),
1613           GLenumToString(GLenumGroup::DefaultGroup, type), bufSize, (uintptr_t)length,
1614           (uintptr_t)columns, (uintptr_t)rows, (uintptr_t)pixels);
1615 
1616     if (context)
1617     {
1618         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1619         bool isCallValid                                      = (context->skipValidation() ||
1620                             ValidateReadPixelsRobustANGLE(
1621                                 context, angle::EntryPoint::GLReadPixelsRobustANGLE, x, y, width,
1622                                 height, format, type, bufSize, length, columns, rows, pixels));
1623         if (isCallValid)
1624         {
1625             context->readPixelsRobust(x, y, width, height, format, type, bufSize, length, columns,
1626                                       rows, pixels);
1627         }
1628         ANGLE_CAPTURE(ReadPixelsRobustANGLE, isCallValid, context, x, y, width, height, format,
1629                       type, bufSize, length, columns, rows, pixels);
1630     }
1631     else
1632     {
1633         GenerateContextLostErrorOnCurrentGlobalContext();
1634     }
1635 }
1636 
GL_TexImage2DRobustANGLE(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,GLsizei bufSize,const void * pixels)1637 void GL_APIENTRY GL_TexImage2DRobustANGLE(GLenum target,
1638                                           GLint level,
1639                                           GLint internalformat,
1640                                           GLsizei width,
1641                                           GLsizei height,
1642                                           GLint border,
1643                                           GLenum format,
1644                                           GLenum type,
1645                                           GLsizei bufSize,
1646                                           const void *pixels)
1647 {
1648     Context *context = GetValidGlobalContext();
1649     EVENT(context, GLTexImage2DRobustANGLE,
1650           "context = %d, target = %s, level = %d, internalformat = %d, width = %d, height = %d, "
1651           "border = %d, format = %s, type = %s, bufSize = %d, pixels = 0x%016" PRIxPTR "",
1652           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level, internalformat,
1653           width, height, border, GLenumToString(GLenumGroup::DefaultGroup, format),
1654           GLenumToString(GLenumGroup::DefaultGroup, type), bufSize, (uintptr_t)pixels);
1655 
1656     if (context)
1657     {
1658         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
1659         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1660         bool isCallValid =
1661             (context->skipValidation() ||
1662              ValidateTexImage2DRobustANGLE(context, angle::EntryPoint::GLTexImage2DRobustANGLE,
1663                                            targetPacked, level, internalformat, width, height,
1664                                            border, format, type, bufSize, pixels));
1665         if (isCallValid)
1666         {
1667             context->texImage2DRobust(targetPacked, level, internalformat, width, height, border,
1668                                       format, type, bufSize, pixels);
1669         }
1670         ANGLE_CAPTURE(TexImage2DRobustANGLE, isCallValid, context, targetPacked, level,
1671                       internalformat, width, height, border, format, type, bufSize, pixels);
1672     }
1673     else
1674     {
1675         GenerateContextLostErrorOnCurrentGlobalContext();
1676     }
1677 }
1678 
GL_TexParameterfvRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,const GLfloat * params)1679 void GL_APIENTRY GL_TexParameterfvRobustANGLE(GLenum target,
1680                                               GLenum pname,
1681                                               GLsizei bufSize,
1682                                               const GLfloat *params)
1683 {
1684     Context *context = GetValidGlobalContext();
1685     EVENT(context, GLTexParameterfvRobustANGLE,
1686           "context = %d, target = %s, pname = %s, bufSize = %d, params = 0x%016" PRIxPTR "",
1687           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
1688           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)params);
1689 
1690     if (context)
1691     {
1692         TextureType targetPacked                              = PackParam<TextureType>(target);
1693         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1694         bool isCallValid                                      = (context->skipValidation() ||
1695                             ValidateTexParameterfvRobustANGLE(
1696                                 context, angle::EntryPoint::GLTexParameterfvRobustANGLE,
1697                                 targetPacked, pname, bufSize, params));
1698         if (isCallValid)
1699         {
1700             context->texParameterfvRobust(targetPacked, pname, bufSize, params);
1701         }
1702         ANGLE_CAPTURE(TexParameterfvRobustANGLE, isCallValid, context, targetPacked, pname, bufSize,
1703                       params);
1704     }
1705     else
1706     {
1707         GenerateContextLostErrorOnCurrentGlobalContext();
1708     }
1709 }
1710 
GL_TexParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,const GLint * params)1711 void GL_APIENTRY GL_TexParameterivRobustANGLE(GLenum target,
1712                                               GLenum pname,
1713                                               GLsizei bufSize,
1714                                               const GLint *params)
1715 {
1716     Context *context = GetValidGlobalContext();
1717     EVENT(context, GLTexParameterivRobustANGLE,
1718           "context = %d, target = %s, pname = %s, bufSize = %d, params = 0x%016" PRIxPTR "",
1719           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
1720           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)params);
1721 
1722     if (context)
1723     {
1724         TextureType targetPacked                              = PackParam<TextureType>(target);
1725         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1726         bool isCallValid                                      = (context->skipValidation() ||
1727                             ValidateTexParameterivRobustANGLE(
1728                                 context, angle::EntryPoint::GLTexParameterivRobustANGLE,
1729                                 targetPacked, pname, bufSize, params));
1730         if (isCallValid)
1731         {
1732             context->texParameterivRobust(targetPacked, pname, bufSize, params);
1733         }
1734         ANGLE_CAPTURE(TexParameterivRobustANGLE, isCallValid, context, targetPacked, pname, bufSize,
1735                       params);
1736     }
1737     else
1738     {
1739         GenerateContextLostErrorOnCurrentGlobalContext();
1740     }
1741 }
1742 
GL_TexSubImage2DRobustANGLE(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,GLsizei bufSize,const void * pixels)1743 void GL_APIENTRY GL_TexSubImage2DRobustANGLE(GLenum target,
1744                                              GLint level,
1745                                              GLint xoffset,
1746                                              GLint yoffset,
1747                                              GLsizei width,
1748                                              GLsizei height,
1749                                              GLenum format,
1750                                              GLenum type,
1751                                              GLsizei bufSize,
1752                                              const void *pixels)
1753 {
1754     Context *context = GetValidGlobalContext();
1755     EVENT(context, GLTexSubImage2DRobustANGLE,
1756           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, width = %d, height = "
1757           "%d, format = %s, type = %s, bufSize = %d, pixels = 0x%016" PRIxPTR "",
1758           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level, xoffset, yoffset,
1759           width, height, GLenumToString(GLenumGroup::DefaultGroup, format),
1760           GLenumToString(GLenumGroup::DefaultGroup, type), bufSize, (uintptr_t)pixels);
1761 
1762     if (context)
1763     {
1764         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
1765         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1766         bool isCallValid =
1767             (context->skipValidation() ||
1768              ValidateTexSubImage2DRobustANGLE(
1769                  context, angle::EntryPoint::GLTexSubImage2DRobustANGLE, targetPacked, level,
1770                  xoffset, yoffset, width, height, format, type, bufSize, pixels));
1771         if (isCallValid)
1772         {
1773             context->texSubImage2DRobust(targetPacked, level, xoffset, yoffset, width, height,
1774                                          format, type, bufSize, pixels);
1775         }
1776         ANGLE_CAPTURE(TexSubImage2DRobustANGLE, isCallValid, context, targetPacked, level, xoffset,
1777                       yoffset, width, height, format, type, bufSize, pixels);
1778     }
1779     else
1780     {
1781         GenerateContextLostErrorOnCurrentGlobalContext();
1782     }
1783 }
1784 
GL_TexImage3DRobustANGLE(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,GLsizei bufSize,const void * pixels)1785 void GL_APIENTRY GL_TexImage3DRobustANGLE(GLenum target,
1786                                           GLint level,
1787                                           GLint internalformat,
1788                                           GLsizei width,
1789                                           GLsizei height,
1790                                           GLsizei depth,
1791                                           GLint border,
1792                                           GLenum format,
1793                                           GLenum type,
1794                                           GLsizei bufSize,
1795                                           const void *pixels)
1796 {
1797     Context *context = GetValidGlobalContext();
1798     EVENT(context, GLTexImage3DRobustANGLE,
1799           "context = %d, target = %s, level = %d, internalformat = %d, width = %d, height = %d, "
1800           "depth = %d, border = %d, format = %s, type = %s, bufSize = %d, pixels = 0x%016" PRIxPTR
1801           "",
1802           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level, internalformat,
1803           width, height, depth, border, GLenumToString(GLenumGroup::DefaultGroup, format),
1804           GLenumToString(GLenumGroup::DefaultGroup, type), bufSize, (uintptr_t)pixels);
1805 
1806     if (context)
1807     {
1808         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
1809         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1810         bool isCallValid =
1811             (context->skipValidation() ||
1812              ValidateTexImage3DRobustANGLE(context, angle::EntryPoint::GLTexImage3DRobustANGLE,
1813                                            targetPacked, level, internalformat, width, height,
1814                                            depth, border, format, type, bufSize, pixels));
1815         if (isCallValid)
1816         {
1817             context->texImage3DRobust(targetPacked, level, internalformat, width, height, depth,
1818                                       border, format, type, bufSize, pixels);
1819         }
1820         ANGLE_CAPTURE(TexImage3DRobustANGLE, isCallValid, context, targetPacked, level,
1821                       internalformat, width, height, depth, border, format, type, bufSize, pixels);
1822     }
1823     else
1824     {
1825         GenerateContextLostErrorOnCurrentGlobalContext();
1826     }
1827 }
1828 
GL_TexSubImage3DRobustANGLE(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,GLsizei bufSize,const void * pixels)1829 void GL_APIENTRY GL_TexSubImage3DRobustANGLE(GLenum target,
1830                                              GLint level,
1831                                              GLint xoffset,
1832                                              GLint yoffset,
1833                                              GLint zoffset,
1834                                              GLsizei width,
1835                                              GLsizei height,
1836                                              GLsizei depth,
1837                                              GLenum format,
1838                                              GLenum type,
1839                                              GLsizei bufSize,
1840                                              const void *pixels)
1841 {
1842     Context *context = GetValidGlobalContext();
1843     EVENT(
1844         context, GLTexSubImage3DRobustANGLE,
1845         "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width = "
1846         "%d, height = %d, depth = %d, format = %s, type = %s, bufSize = %d, pixels = 0x%016" PRIxPTR
1847         "",
1848         CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level, xoffset, yoffset,
1849         zoffset, width, height, depth, GLenumToString(GLenumGroup::DefaultGroup, format),
1850         GLenumToString(GLenumGroup::DefaultGroup, type), bufSize, (uintptr_t)pixels);
1851 
1852     if (context)
1853     {
1854         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
1855         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1856         bool isCallValid =
1857             (context->skipValidation() ||
1858              ValidateTexSubImage3DRobustANGLE(
1859                  context, angle::EntryPoint::GLTexSubImage3DRobustANGLE, targetPacked, level,
1860                  xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels));
1861         if (isCallValid)
1862         {
1863             context->texSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset, width,
1864                                          height, depth, format, type, bufSize, pixels);
1865         }
1866         ANGLE_CAPTURE(TexSubImage3DRobustANGLE, isCallValid, context, targetPacked, level, xoffset,
1867                       yoffset, zoffset, width, height, depth, format, type, bufSize, pixels);
1868     }
1869     else
1870     {
1871         GenerateContextLostErrorOnCurrentGlobalContext();
1872     }
1873 }
1874 
GL_CompressedTexImage2DRobustANGLE(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,GLsizei dataSize,const GLvoid * data)1875 void GL_APIENTRY GL_CompressedTexImage2DRobustANGLE(GLenum target,
1876                                                     GLint level,
1877                                                     GLenum internalformat,
1878                                                     GLsizei width,
1879                                                     GLsizei height,
1880                                                     GLint border,
1881                                                     GLsizei imageSize,
1882                                                     GLsizei dataSize,
1883                                                     const GLvoid *data)
1884 {
1885     Context *context = GetValidGlobalContext();
1886     EVENT(context, GLCompressedTexImage2DRobustANGLE,
1887           "context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "
1888           "border = %d, imageSize = %d, dataSize = %d, data = 0x%016" PRIxPTR "",
1889           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level,
1890           GLenumToString(GLenumGroup::DefaultGroup, internalformat), width, height, border,
1891           imageSize, dataSize, (uintptr_t)data);
1892 
1893     if (context)
1894     {
1895         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
1896         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1897         bool isCallValid =
1898             (context->skipValidation() ||
1899              ValidateCompressedTexImage2DRobustANGLE(
1900                  context, angle::EntryPoint::GLCompressedTexImage2DRobustANGLE, targetPacked, level,
1901                  internalformat, width, height, border, imageSize, dataSize, data));
1902         if (isCallValid)
1903         {
1904             context->compressedTexImage2DRobust(targetPacked, level, internalformat, width, height,
1905                                                 border, imageSize, dataSize, data);
1906         }
1907         ANGLE_CAPTURE(CompressedTexImage2DRobustANGLE, isCallValid, context, targetPacked, level,
1908                       internalformat, width, height, border, imageSize, dataSize, data);
1909     }
1910     else
1911     {
1912         GenerateContextLostErrorOnCurrentGlobalContext();
1913     }
1914 }
1915 
GL_CompressedTexSubImage2DRobustANGLE(GLenum target,GLint level,GLsizei xoffset,GLsizei yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,GLsizei dataSize,const GLvoid * data)1916 void GL_APIENTRY GL_CompressedTexSubImage2DRobustANGLE(GLenum target,
1917                                                        GLint level,
1918                                                        GLsizei xoffset,
1919                                                        GLsizei yoffset,
1920                                                        GLsizei width,
1921                                                        GLsizei height,
1922                                                        GLenum format,
1923                                                        GLsizei imageSize,
1924                                                        GLsizei dataSize,
1925                                                        const GLvoid *data)
1926 {
1927     Context *context = GetValidGlobalContext();
1928     EVENT(context, GLCompressedTexSubImage2DRobustANGLE,
1929           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, width = %d, height = "
1930           "%d, format = %s, imageSize = %d, dataSize = %d, data = 0x%016" PRIxPTR "",
1931           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level, xoffset, yoffset,
1932           width, height, GLenumToString(GLenumGroup::DefaultGroup, format), imageSize, dataSize,
1933           (uintptr_t)data);
1934 
1935     if (context)
1936     {
1937         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
1938         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1939         bool isCallValid =
1940             (context->skipValidation() ||
1941              ValidateCompressedTexSubImage2DRobustANGLE(
1942                  context, angle::EntryPoint::GLCompressedTexSubImage2DRobustANGLE, targetPacked,
1943                  level, xoffset, yoffset, width, height, format, imageSize, dataSize, data));
1944         if (isCallValid)
1945         {
1946             context->compressedTexSubImage2DRobust(targetPacked, level, xoffset, yoffset, width,
1947                                                    height, format, imageSize, dataSize, data);
1948         }
1949         ANGLE_CAPTURE(CompressedTexSubImage2DRobustANGLE, isCallValid, context, targetPacked, level,
1950                       xoffset, yoffset, width, height, format, imageSize, dataSize, data);
1951     }
1952     else
1953     {
1954         GenerateContextLostErrorOnCurrentGlobalContext();
1955     }
1956 }
1957 
GL_CompressedTexImage3DRobustANGLE(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,GLsizei dataSize,const GLvoid * data)1958 void GL_APIENTRY GL_CompressedTexImage3DRobustANGLE(GLenum target,
1959                                                     GLint level,
1960                                                     GLenum internalformat,
1961                                                     GLsizei width,
1962                                                     GLsizei height,
1963                                                     GLsizei depth,
1964                                                     GLint border,
1965                                                     GLsizei imageSize,
1966                                                     GLsizei dataSize,
1967                                                     const GLvoid *data)
1968 {
1969     Context *context = GetValidGlobalContext();
1970     EVENT(context, GLCompressedTexImage3DRobustANGLE,
1971           "context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "
1972           "depth = %d, border = %d, imageSize = %d, dataSize = %d, data = 0x%016" PRIxPTR "",
1973           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level,
1974           GLenumToString(GLenumGroup::DefaultGroup, internalformat), width, height, depth, border,
1975           imageSize, dataSize, (uintptr_t)data);
1976 
1977     if (context)
1978     {
1979         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
1980         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
1981         bool isCallValid =
1982             (context->skipValidation() ||
1983              ValidateCompressedTexImage3DRobustANGLE(
1984                  context, angle::EntryPoint::GLCompressedTexImage3DRobustANGLE, targetPacked, level,
1985                  internalformat, width, height, depth, border, imageSize, dataSize, data));
1986         if (isCallValid)
1987         {
1988             context->compressedTexImage3DRobust(targetPacked, level, internalformat, width, height,
1989                                                 depth, border, imageSize, dataSize, data);
1990         }
1991         ANGLE_CAPTURE(CompressedTexImage3DRobustANGLE, isCallValid, context, targetPacked, level,
1992                       internalformat, width, height, depth, border, imageSize, dataSize, data);
1993     }
1994     else
1995     {
1996         GenerateContextLostErrorOnCurrentGlobalContext();
1997     }
1998 }
1999 
GL_CompressedTexSubImage3DRobustANGLE(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,GLsizei dataSize,const GLvoid * data)2000 void GL_APIENTRY GL_CompressedTexSubImage3DRobustANGLE(GLenum target,
2001                                                        GLint level,
2002                                                        GLint xoffset,
2003                                                        GLint yoffset,
2004                                                        GLint zoffset,
2005                                                        GLsizei width,
2006                                                        GLsizei height,
2007                                                        GLsizei depth,
2008                                                        GLenum format,
2009                                                        GLsizei imageSize,
2010                                                        GLsizei dataSize,
2011                                                        const GLvoid *data)
2012 {
2013     Context *context = GetValidGlobalContext();
2014     EVENT(context, GLCompressedTexSubImage3DRobustANGLE,
2015           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width "
2016           "= %d, height = %d, depth = %d, format = %s, imageSize = %d, dataSize = %d, data = "
2017           "0x%016" PRIxPTR "",
2018           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level, xoffset, yoffset,
2019           zoffset, width, height, depth, GLenumToString(GLenumGroup::DefaultGroup, format),
2020           imageSize, dataSize, (uintptr_t)data);
2021 
2022     if (context)
2023     {
2024         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
2025         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2026         bool isCallValid                                      = (context->skipValidation() ||
2027                             ValidateCompressedTexSubImage3DRobustANGLE(
2028                                 context, angle::EntryPoint::GLCompressedTexSubImage3DRobustANGLE,
2029                                 targetPacked, level, xoffset, yoffset, zoffset, width, height,
2030                                 depth, format, imageSize, dataSize, data));
2031         if (isCallValid)
2032         {
2033             context->compressedTexSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset,
2034                                                    width, height, depth, format, imageSize,
2035                                                    dataSize, data);
2036         }
2037         ANGLE_CAPTURE(CompressedTexSubImage3DRobustANGLE, isCallValid, context, targetPacked, level,
2038                       xoffset, yoffset, zoffset, width, height, depth, format, imageSize, dataSize,
2039                       data);
2040     }
2041     else
2042     {
2043         GenerateContextLostErrorOnCurrentGlobalContext();
2044     }
2045 }
2046 
GL_GetQueryivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2047 void GL_APIENTRY GL_GetQueryivRobustANGLE(GLenum target,
2048                                           GLenum pname,
2049                                           GLsizei bufSize,
2050                                           GLsizei *length,
2051                                           GLint *params)
2052 {
2053     Context *context = GetValidGlobalContext();
2054     EVENT(context, GLGetQueryivRobustANGLE,
2055           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2056           ", params = 0x%016" PRIxPTR "",
2057           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
2058           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
2059           (uintptr_t)params);
2060 
2061     if (context)
2062     {
2063         QueryType targetPacked                                = PackParam<QueryType>(target);
2064         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2065         bool isCallValid =
2066             (context->skipValidation() ||
2067              ValidateGetQueryivRobustANGLE(context, angle::EntryPoint::GLGetQueryivRobustANGLE,
2068                                            targetPacked, pname, bufSize, length, params));
2069         if (isCallValid)
2070         {
2071             context->getQueryivRobust(targetPacked, pname, bufSize, length, params);
2072         }
2073         ANGLE_CAPTURE(GetQueryivRobustANGLE, isCallValid, context, targetPacked, pname, bufSize,
2074                       length, params);
2075     }
2076     else
2077     {
2078         GenerateContextLostErrorOnCurrentGlobalContext();
2079     }
2080 }
2081 
GL_GetQueryObjectuivRobustANGLE(GLuint id,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint * params)2082 void GL_APIENTRY GL_GetQueryObjectuivRobustANGLE(GLuint id,
2083                                                  GLenum pname,
2084                                                  GLsizei bufSize,
2085                                                  GLsizei *length,
2086                                                  GLuint *params)
2087 {
2088     Context *context = GetValidGlobalContext();
2089     EVENT(context, GLGetQueryObjectuivRobustANGLE,
2090           "context = %d, id = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2091           ", params = 0x%016" PRIxPTR "",
2092           CID(context), id, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
2093           (uintptr_t)length, (uintptr_t)params);
2094 
2095     if (context)
2096     {
2097         QueryID idPacked                                      = PackParam<QueryID>(id);
2098         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2099         bool isCallValid                                      = (context->skipValidation() ||
2100                             ValidateGetQueryObjectuivRobustANGLE(
2101                                 context, angle::EntryPoint::GLGetQueryObjectuivRobustANGLE,
2102                                 idPacked, pname, bufSize, length, params));
2103         if (isCallValid)
2104         {
2105             context->getQueryObjectuivRobust(idPacked, pname, bufSize, length, params);
2106         }
2107         ANGLE_CAPTURE(GetQueryObjectuivRobustANGLE, isCallValid, context, idPacked, pname, bufSize,
2108                       length, params);
2109     }
2110     else
2111     {
2112         GenerateContextLostErrorOnCurrentGlobalContext();
2113     }
2114 }
2115 
GL_GetBufferPointervRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,void ** params)2116 void GL_APIENTRY GL_GetBufferPointervRobustANGLE(GLenum target,
2117                                                  GLenum pname,
2118                                                  GLsizei bufSize,
2119                                                  GLsizei *length,
2120                                                  void **params)
2121 {
2122     Context *context = GetValidGlobalContext();
2123     EVENT(context, GLGetBufferPointervRobustANGLE,
2124           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2125           ", params = 0x%016" PRIxPTR "",
2126           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
2127           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
2128           (uintptr_t)params);
2129 
2130     if (context)
2131     {
2132         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
2133         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2134         bool isCallValid                                      = (context->skipValidation() ||
2135                             ValidateGetBufferPointervRobustANGLE(
2136                                 context, angle::EntryPoint::GLGetBufferPointervRobustANGLE,
2137                                 targetPacked, pname, bufSize, length, params));
2138         if (isCallValid)
2139         {
2140             context->getBufferPointervRobust(targetPacked, pname, bufSize, length, params);
2141         }
2142         ANGLE_CAPTURE(GetBufferPointervRobustANGLE, isCallValid, context, targetPacked, pname,
2143                       bufSize, length, params);
2144     }
2145     else
2146     {
2147         GenerateContextLostErrorOnCurrentGlobalContext();
2148     }
2149 }
2150 
GL_GetIntegeri_vRobustANGLE(GLenum target,GLuint index,GLsizei bufSize,GLsizei * length,GLint * data)2151 void GL_APIENTRY GL_GetIntegeri_vRobustANGLE(GLenum target,
2152                                              GLuint index,
2153                                              GLsizei bufSize,
2154                                              GLsizei *length,
2155                                              GLint *data)
2156 {
2157     Context *context = GetValidGlobalContext();
2158     EVENT(context, GLGetIntegeri_vRobustANGLE,
2159           "context = %d, target = %s, index = %u, bufSize = %d, length = 0x%016" PRIxPTR
2160           ", data = 0x%016" PRIxPTR "",
2161           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), index, bufSize,
2162           (uintptr_t)length, (uintptr_t)data);
2163 
2164     if (context)
2165     {
2166         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2167         bool isCallValid                                      = (context->skipValidation() ||
2168                             ValidateGetIntegeri_vRobustANGLE(
2169                                 context, angle::EntryPoint::GLGetIntegeri_vRobustANGLE, target,
2170                                 index, bufSize, length, data));
2171         if (isCallValid)
2172         {
2173             context->getIntegeri_vRobust(target, index, bufSize, length, data);
2174         }
2175         ANGLE_CAPTURE(GetIntegeri_vRobustANGLE, isCallValid, context, target, index, bufSize,
2176                       length, data);
2177     }
2178     else
2179     {
2180         GenerateContextLostErrorOnCurrentGlobalContext();
2181     }
2182 }
2183 
GL_GetInternalformativRobustANGLE(GLenum target,GLenum internalformat,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2184 void GL_APIENTRY GL_GetInternalformativRobustANGLE(GLenum target,
2185                                                    GLenum internalformat,
2186                                                    GLenum pname,
2187                                                    GLsizei bufSize,
2188                                                    GLsizei *length,
2189                                                    GLint *params)
2190 {
2191     Context *context = GetValidGlobalContext();
2192     EVENT(context, GLGetInternalformativRobustANGLE,
2193           "context = %d, target = %s, internalformat = %s, pname = %s, bufSize = %d, length = "
2194           "0x%016" PRIxPTR ", params = 0x%016" PRIxPTR "",
2195           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
2196           GLenumToString(GLenumGroup::DefaultGroup, internalformat),
2197           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
2198           (uintptr_t)params);
2199 
2200     if (context)
2201     {
2202         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2203         bool isCallValid                                      = (context->skipValidation() ||
2204                             ValidateGetInternalformativRobustANGLE(
2205                                 context, angle::EntryPoint::GLGetInternalformativRobustANGLE,
2206                                 target, internalformat, pname, bufSize, length, params));
2207         if (isCallValid)
2208         {
2209             context->getInternalformativRobust(target, internalformat, pname, bufSize, length,
2210                                                params);
2211         }
2212         ANGLE_CAPTURE(GetInternalformativRobustANGLE, isCallValid, context, target, internalformat,
2213                       pname, bufSize, length, params);
2214     }
2215     else
2216     {
2217         GenerateContextLostErrorOnCurrentGlobalContext();
2218     }
2219 }
2220 
GL_GetVertexAttribIivRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2221 void GL_APIENTRY GL_GetVertexAttribIivRobustANGLE(GLuint index,
2222                                                   GLenum pname,
2223                                                   GLsizei bufSize,
2224                                                   GLsizei *length,
2225                                                   GLint *params)
2226 {
2227     Context *context = GetValidGlobalContext();
2228     EVENT(context, GLGetVertexAttribIivRobustANGLE,
2229           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2230           ", params = 0x%016" PRIxPTR "",
2231           CID(context), index, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
2232           (uintptr_t)length, (uintptr_t)params);
2233 
2234     if (context)
2235     {
2236         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2237         bool isCallValid                                      = (context->skipValidation() ||
2238                             ValidateGetVertexAttribIivRobustANGLE(
2239                                 context, angle::EntryPoint::GLGetVertexAttribIivRobustANGLE, index,
2240                                 pname, bufSize, length, params));
2241         if (isCallValid)
2242         {
2243             context->getVertexAttribIivRobust(index, pname, bufSize, length, params);
2244         }
2245         ANGLE_CAPTURE(GetVertexAttribIivRobustANGLE, isCallValid, context, index, pname, bufSize,
2246                       length, params);
2247     }
2248     else
2249     {
2250         GenerateContextLostErrorOnCurrentGlobalContext();
2251     }
2252 }
2253 
GL_GetVertexAttribIuivRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint * params)2254 void GL_APIENTRY GL_GetVertexAttribIuivRobustANGLE(GLuint index,
2255                                                    GLenum pname,
2256                                                    GLsizei bufSize,
2257                                                    GLsizei *length,
2258                                                    GLuint *params)
2259 {
2260     Context *context = GetValidGlobalContext();
2261     EVENT(context, GLGetVertexAttribIuivRobustANGLE,
2262           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2263           ", params = 0x%016" PRIxPTR "",
2264           CID(context), index, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
2265           (uintptr_t)length, (uintptr_t)params);
2266 
2267     if (context)
2268     {
2269         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2270         bool isCallValid                                      = (context->skipValidation() ||
2271                             ValidateGetVertexAttribIuivRobustANGLE(
2272                                 context, angle::EntryPoint::GLGetVertexAttribIuivRobustANGLE, index,
2273                                 pname, bufSize, length, params));
2274         if (isCallValid)
2275         {
2276             context->getVertexAttribIuivRobust(index, pname, bufSize, length, params);
2277         }
2278         ANGLE_CAPTURE(GetVertexAttribIuivRobustANGLE, isCallValid, context, index, pname, bufSize,
2279                       length, params);
2280     }
2281     else
2282     {
2283         GenerateContextLostErrorOnCurrentGlobalContext();
2284     }
2285 }
2286 
GL_GetUniformuivRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLuint * params)2287 void GL_APIENTRY GL_GetUniformuivRobustANGLE(GLuint program,
2288                                              GLint location,
2289                                              GLsizei bufSize,
2290                                              GLsizei *length,
2291                                              GLuint *params)
2292 {
2293     Context *context = GetValidGlobalContext();
2294     EVENT(context, GLGetUniformuivRobustANGLE,
2295           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
2296           ", params = 0x%016" PRIxPTR "",
2297           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
2298 
2299     if (context)
2300     {
2301         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
2302         UniformLocation locationPacked = PackParam<UniformLocation>(location);
2303         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2304         bool isCallValid                                      = (context->skipValidation() ||
2305                             ValidateGetUniformuivRobustANGLE(
2306                                 context, angle::EntryPoint::GLGetUniformuivRobustANGLE,
2307                                 programPacked, locationPacked, bufSize, length, params));
2308         if (isCallValid)
2309         {
2310             context->getUniformuivRobust(programPacked, locationPacked, bufSize, length, params);
2311         }
2312         ANGLE_CAPTURE(GetUniformuivRobustANGLE, isCallValid, context, programPacked, locationPacked,
2313                       bufSize, length, params);
2314     }
2315     else
2316     {
2317         GenerateContextLostErrorOnCurrentGlobalContext();
2318     }
2319 }
2320 
GL_GetActiveUniformBlockivRobustANGLE(GLuint program,GLuint uniformBlockIndex,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2321 void GL_APIENTRY GL_GetActiveUniformBlockivRobustANGLE(GLuint program,
2322                                                        GLuint uniformBlockIndex,
2323                                                        GLenum pname,
2324                                                        GLsizei bufSize,
2325                                                        GLsizei *length,
2326                                                        GLint *params)
2327 {
2328     Context *context = GetValidGlobalContext();
2329     EVENT(context, GLGetActiveUniformBlockivRobustANGLE,
2330           "context = %d, program = %u, uniformBlockIndex = %u, pname = %s, bufSize = %d, length = "
2331           "0x%016" PRIxPTR ", params = 0x%016" PRIxPTR "",
2332           CID(context), program, uniformBlockIndex,
2333           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
2334           (uintptr_t)params);
2335 
2336     if (context)
2337     {
2338         ShaderProgramID programPacked             = PackParam<ShaderProgramID>(program);
2339         UniformBlockIndex uniformBlockIndexPacked = PackParam<UniformBlockIndex>(uniformBlockIndex);
2340         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2341         bool isCallValid =
2342             (context->skipValidation() ||
2343              ValidateGetActiveUniformBlockivRobustANGLE(
2344                  context, angle::EntryPoint::GLGetActiveUniformBlockivRobustANGLE, programPacked,
2345                  uniformBlockIndexPacked, pname, bufSize, length, params));
2346         if (isCallValid)
2347         {
2348             context->getActiveUniformBlockivRobust(programPacked, uniformBlockIndexPacked, pname,
2349                                                    bufSize, length, params);
2350         }
2351         ANGLE_CAPTURE(GetActiveUniformBlockivRobustANGLE, isCallValid, context, programPacked,
2352                       uniformBlockIndexPacked, pname, bufSize, length, params);
2353     }
2354     else
2355     {
2356         GenerateContextLostErrorOnCurrentGlobalContext();
2357     }
2358 }
2359 
GL_GetInteger64vRobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,GLint64 * data)2360 void GL_APIENTRY GL_GetInteger64vRobustANGLE(GLenum pname,
2361                                              GLsizei bufSize,
2362                                              GLsizei *length,
2363                                              GLint64 *data)
2364 {
2365     Context *context = GetValidGlobalContext();
2366     EVENT(context, GLGetInteger64vRobustANGLE,
2367           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2368           ", data = 0x%016" PRIxPTR "",
2369           CID(context), GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
2370           (uintptr_t)length, (uintptr_t)data);
2371 
2372     if (context)
2373     {
2374         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2375         bool isCallValid                                      = (context->skipValidation() ||
2376                             ValidateGetInteger64vRobustANGLE(
2377                                 context, angle::EntryPoint::GLGetInteger64vRobustANGLE, pname,
2378                                 bufSize, length, data));
2379         if (isCallValid)
2380         {
2381             context->getInteger64vRobust(pname, bufSize, length, data);
2382         }
2383         ANGLE_CAPTURE(GetInteger64vRobustANGLE, isCallValid, context, pname, bufSize, length, data);
2384     }
2385     else
2386     {
2387         GenerateContextLostErrorOnCurrentGlobalContext();
2388     }
2389 }
2390 
GL_GetInteger64i_vRobustANGLE(GLenum target,GLuint index,GLsizei bufSize,GLsizei * length,GLint64 * data)2391 void GL_APIENTRY GL_GetInteger64i_vRobustANGLE(GLenum target,
2392                                                GLuint index,
2393                                                GLsizei bufSize,
2394                                                GLsizei *length,
2395                                                GLint64 *data)
2396 {
2397     Context *context = GetValidGlobalContext();
2398     EVENT(context, GLGetInteger64i_vRobustANGLE,
2399           "context = %d, target = %s, index = %u, bufSize = %d, length = 0x%016" PRIxPTR
2400           ", data = 0x%016" PRIxPTR "",
2401           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), index, bufSize,
2402           (uintptr_t)length, (uintptr_t)data);
2403 
2404     if (context)
2405     {
2406         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2407         bool isCallValid                                      = (context->skipValidation() ||
2408                             ValidateGetInteger64i_vRobustANGLE(
2409                                 context, angle::EntryPoint::GLGetInteger64i_vRobustANGLE, target,
2410                                 index, bufSize, length, data));
2411         if (isCallValid)
2412         {
2413             context->getInteger64i_vRobust(target, index, bufSize, length, data);
2414         }
2415         ANGLE_CAPTURE(GetInteger64i_vRobustANGLE, isCallValid, context, target, index, bufSize,
2416                       length, data);
2417     }
2418     else
2419     {
2420         GenerateContextLostErrorOnCurrentGlobalContext();
2421     }
2422 }
2423 
GL_GetBufferParameteri64vRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint64 * params)2424 void GL_APIENTRY GL_GetBufferParameteri64vRobustANGLE(GLenum target,
2425                                                       GLenum pname,
2426                                                       GLsizei bufSize,
2427                                                       GLsizei *length,
2428                                                       GLint64 *params)
2429 {
2430     Context *context = GetValidGlobalContext();
2431     EVENT(context, GLGetBufferParameteri64vRobustANGLE,
2432           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2433           ", params = 0x%016" PRIxPTR "",
2434           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
2435           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
2436           (uintptr_t)params);
2437 
2438     if (context)
2439     {
2440         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
2441         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2442         bool isCallValid                                      = (context->skipValidation() ||
2443                             ValidateGetBufferParameteri64vRobustANGLE(
2444                                 context, angle::EntryPoint::GLGetBufferParameteri64vRobustANGLE,
2445                                 targetPacked, pname, bufSize, length, params));
2446         if (isCallValid)
2447         {
2448             context->getBufferParameteri64vRobust(targetPacked, pname, bufSize, length, params);
2449         }
2450         ANGLE_CAPTURE(GetBufferParameteri64vRobustANGLE, isCallValid, context, targetPacked, pname,
2451                       bufSize, length, params);
2452     }
2453     else
2454     {
2455         GenerateContextLostErrorOnCurrentGlobalContext();
2456     }
2457 }
2458 
GL_SamplerParameterivRobustANGLE(GLuint sampler,GLuint pname,GLsizei bufSize,const GLint * param)2459 void GL_APIENTRY GL_SamplerParameterivRobustANGLE(GLuint sampler,
2460                                                   GLuint pname,
2461                                                   GLsizei bufSize,
2462                                                   const GLint *param)
2463 {
2464     Context *context = GetValidGlobalContext();
2465     EVENT(context, GLSamplerParameterivRobustANGLE,
2466           "context = %d, sampler = %u, pname = %u, bufSize = %d, param = 0x%016" PRIxPTR "",
2467           CID(context), sampler, pname, bufSize, (uintptr_t)param);
2468 
2469     if (context)
2470     {
2471         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
2472         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2473         bool isCallValid                                      = (context->skipValidation() ||
2474                             ValidateSamplerParameterivRobustANGLE(
2475                                 context, angle::EntryPoint::GLSamplerParameterivRobustANGLE,
2476                                 samplerPacked, pname, bufSize, param));
2477         if (isCallValid)
2478         {
2479             context->samplerParameterivRobust(samplerPacked, pname, bufSize, param);
2480         }
2481         ANGLE_CAPTURE(SamplerParameterivRobustANGLE, isCallValid, context, samplerPacked, pname,
2482                       bufSize, param);
2483     }
2484     else
2485     {
2486         GenerateContextLostErrorOnCurrentGlobalContext();
2487     }
2488 }
2489 
GL_SamplerParameterfvRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,const GLfloat * param)2490 void GL_APIENTRY GL_SamplerParameterfvRobustANGLE(GLuint sampler,
2491                                                   GLenum pname,
2492                                                   GLsizei bufSize,
2493                                                   const GLfloat *param)
2494 {
2495     Context *context = GetValidGlobalContext();
2496     EVENT(context, GLSamplerParameterfvRobustANGLE,
2497           "context = %d, sampler = %u, pname = %s, bufSize = %d, param = 0x%016" PRIxPTR "",
2498           CID(context), sampler, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
2499           (uintptr_t)param);
2500 
2501     if (context)
2502     {
2503         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
2504         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2505         bool isCallValid                                      = (context->skipValidation() ||
2506                             ValidateSamplerParameterfvRobustANGLE(
2507                                 context, angle::EntryPoint::GLSamplerParameterfvRobustANGLE,
2508                                 samplerPacked, pname, bufSize, param));
2509         if (isCallValid)
2510         {
2511             context->samplerParameterfvRobust(samplerPacked, pname, bufSize, param);
2512         }
2513         ANGLE_CAPTURE(SamplerParameterfvRobustANGLE, isCallValid, context, samplerPacked, pname,
2514                       bufSize, param);
2515     }
2516     else
2517     {
2518         GenerateContextLostErrorOnCurrentGlobalContext();
2519     }
2520 }
2521 
GL_GetSamplerParameterivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2522 void GL_APIENTRY GL_GetSamplerParameterivRobustANGLE(GLuint sampler,
2523                                                      GLenum pname,
2524                                                      GLsizei bufSize,
2525                                                      GLsizei *length,
2526                                                      GLint *params)
2527 {
2528     Context *context = GetValidGlobalContext();
2529     EVENT(context, GLGetSamplerParameterivRobustANGLE,
2530           "context = %d, sampler = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2531           ", params = 0x%016" PRIxPTR "",
2532           CID(context), sampler, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
2533           (uintptr_t)length, (uintptr_t)params);
2534 
2535     if (context)
2536     {
2537         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
2538         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2539         bool isCallValid                                      = (context->skipValidation() ||
2540                             ValidateGetSamplerParameterivRobustANGLE(
2541                                 context, angle::EntryPoint::GLGetSamplerParameterivRobustANGLE,
2542                                 samplerPacked, pname, bufSize, length, params));
2543         if (isCallValid)
2544         {
2545             context->getSamplerParameterivRobust(samplerPacked, pname, bufSize, length, params);
2546         }
2547         ANGLE_CAPTURE(GetSamplerParameterivRobustANGLE, isCallValid, context, samplerPacked, pname,
2548                       bufSize, length, params);
2549     }
2550     else
2551     {
2552         GenerateContextLostErrorOnCurrentGlobalContext();
2553     }
2554 }
2555 
GL_GetSamplerParameterfvRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)2556 void GL_APIENTRY GL_GetSamplerParameterfvRobustANGLE(GLuint sampler,
2557                                                      GLenum pname,
2558                                                      GLsizei bufSize,
2559                                                      GLsizei *length,
2560                                                      GLfloat *params)
2561 {
2562     Context *context = GetValidGlobalContext();
2563     EVENT(context, GLGetSamplerParameterfvRobustANGLE,
2564           "context = %d, sampler = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2565           ", params = 0x%016" PRIxPTR "",
2566           CID(context), sampler, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
2567           (uintptr_t)length, (uintptr_t)params);
2568 
2569     if (context)
2570     {
2571         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
2572         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2573         bool isCallValid                                      = (context->skipValidation() ||
2574                             ValidateGetSamplerParameterfvRobustANGLE(
2575                                 context, angle::EntryPoint::GLGetSamplerParameterfvRobustANGLE,
2576                                 samplerPacked, pname, bufSize, length, params));
2577         if (isCallValid)
2578         {
2579             context->getSamplerParameterfvRobust(samplerPacked, pname, bufSize, length, params);
2580         }
2581         ANGLE_CAPTURE(GetSamplerParameterfvRobustANGLE, isCallValid, context, samplerPacked, pname,
2582                       bufSize, length, params);
2583     }
2584     else
2585     {
2586         GenerateContextLostErrorOnCurrentGlobalContext();
2587     }
2588 }
2589 
GL_GetFramebufferParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2590 void GL_APIENTRY GL_GetFramebufferParameterivRobustANGLE(GLenum target,
2591                                                          GLenum pname,
2592                                                          GLsizei bufSize,
2593                                                          GLsizei *length,
2594                                                          GLint *params)
2595 {
2596     Context *context = GetValidGlobalContext();
2597     EVENT(context, GLGetFramebufferParameterivRobustANGLE,
2598           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2599           ", params = 0x%016" PRIxPTR "",
2600           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
2601           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
2602           (uintptr_t)params);
2603 
2604     if (context)
2605     {
2606         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2607         bool isCallValid                                      = (context->skipValidation() ||
2608                             ValidateGetFramebufferParameterivRobustANGLE(
2609                                 context, angle::EntryPoint::GLGetFramebufferParameterivRobustANGLE,
2610                                 target, pname, bufSize, length, params));
2611         if (isCallValid)
2612         {
2613             context->getFramebufferParameterivRobust(target, pname, bufSize, length, params);
2614         }
2615         ANGLE_CAPTURE(GetFramebufferParameterivRobustANGLE, isCallValid, context, target, pname,
2616                       bufSize, length, params);
2617     }
2618     else
2619     {
2620         GenerateContextLostErrorOnCurrentGlobalContext();
2621     }
2622 }
2623 
GL_GetProgramInterfaceivRobustANGLE(GLuint program,GLenum programInterface,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2624 void GL_APIENTRY GL_GetProgramInterfaceivRobustANGLE(GLuint program,
2625                                                      GLenum programInterface,
2626                                                      GLenum pname,
2627                                                      GLsizei bufSize,
2628                                                      GLsizei *length,
2629                                                      GLint *params)
2630 {
2631     Context *context = GetValidGlobalContext();
2632     EVENT(context, GLGetProgramInterfaceivRobustANGLE,
2633           "context = %d, program = %u, programInterface = %s, pname = %s, bufSize = %d, length = "
2634           "0x%016" PRIxPTR ", params = 0x%016" PRIxPTR "",
2635           CID(context), program, GLenumToString(GLenumGroup::DefaultGroup, programInterface),
2636           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
2637           (uintptr_t)params);
2638 
2639     if (context)
2640     {
2641         ShaderProgramID programPacked                         = PackParam<ShaderProgramID>(program);
2642         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2643         bool isCallValid                                      = (context->skipValidation() ||
2644                             ValidateGetProgramInterfaceivRobustANGLE(
2645                                 context, angle::EntryPoint::GLGetProgramInterfaceivRobustANGLE,
2646                                 programPacked, programInterface, pname, bufSize, length, params));
2647         if (isCallValid)
2648         {
2649             context->getProgramInterfaceivRobust(programPacked, programInterface, pname, bufSize,
2650                                                  length, params);
2651         }
2652         ANGLE_CAPTURE(GetProgramInterfaceivRobustANGLE, isCallValid, context, programPacked,
2653                       programInterface, pname, bufSize, length, params);
2654     }
2655     else
2656     {
2657         GenerateContextLostErrorOnCurrentGlobalContext();
2658     }
2659 }
2660 
GL_GetBooleani_vRobustANGLE(GLenum target,GLuint index,GLsizei bufSize,GLsizei * length,GLboolean * data)2661 void GL_APIENTRY GL_GetBooleani_vRobustANGLE(GLenum target,
2662                                              GLuint index,
2663                                              GLsizei bufSize,
2664                                              GLsizei *length,
2665                                              GLboolean *data)
2666 {
2667     Context *context = GetValidGlobalContext();
2668     EVENT(context, GLGetBooleani_vRobustANGLE,
2669           "context = %d, target = %s, index = %u, bufSize = %d, length = 0x%016" PRIxPTR
2670           ", data = 0x%016" PRIxPTR "",
2671           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), index, bufSize,
2672           (uintptr_t)length, (uintptr_t)data);
2673 
2674     if (context)
2675     {
2676         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2677         bool isCallValid                                      = (context->skipValidation() ||
2678                             ValidateGetBooleani_vRobustANGLE(
2679                                 context, angle::EntryPoint::GLGetBooleani_vRobustANGLE, target,
2680                                 index, bufSize, length, data));
2681         if (isCallValid)
2682         {
2683             context->getBooleani_vRobust(target, index, bufSize, length, data);
2684         }
2685         ANGLE_CAPTURE(GetBooleani_vRobustANGLE, isCallValid, context, target, index, bufSize,
2686                       length, data);
2687     }
2688     else
2689     {
2690         GenerateContextLostErrorOnCurrentGlobalContext();
2691     }
2692 }
2693 
GL_GetMultisamplefvRobustANGLE(GLenum pname,GLuint index,GLsizei bufSize,GLsizei * length,GLfloat * val)2694 void GL_APIENTRY GL_GetMultisamplefvRobustANGLE(GLenum pname,
2695                                                 GLuint index,
2696                                                 GLsizei bufSize,
2697                                                 GLsizei *length,
2698                                                 GLfloat *val)
2699 {
2700     Context *context = GetValidGlobalContext();
2701     EVENT(context, GLGetMultisamplefvRobustANGLE,
2702           "context = %d, pname = %s, index = %u, bufSize = %d, length = 0x%016" PRIxPTR
2703           ", val = 0x%016" PRIxPTR "",
2704           CID(context), GLenumToString(GLenumGroup::DefaultGroup, pname), index, bufSize,
2705           (uintptr_t)length, (uintptr_t)val);
2706 
2707     if (context)
2708     {
2709         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2710         bool isCallValid                                      = (context->skipValidation() ||
2711                             ValidateGetMultisamplefvRobustANGLE(
2712                                 context, angle::EntryPoint::GLGetMultisamplefvRobustANGLE, pname,
2713                                 index, bufSize, length, val));
2714         if (isCallValid)
2715         {
2716             context->getMultisamplefvRobust(pname, index, bufSize, length, val);
2717         }
2718         ANGLE_CAPTURE(GetMultisamplefvRobustANGLE, isCallValid, context, pname, index, bufSize,
2719                       length, val);
2720     }
2721     else
2722     {
2723         GenerateContextLostErrorOnCurrentGlobalContext();
2724     }
2725 }
2726 
GL_GetTexLevelParameterivRobustANGLE(GLenum target,GLint level,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2727 void GL_APIENTRY GL_GetTexLevelParameterivRobustANGLE(GLenum target,
2728                                                       GLint level,
2729                                                       GLenum pname,
2730                                                       GLsizei bufSize,
2731                                                       GLsizei *length,
2732                                                       GLint *params)
2733 {
2734     Context *context = GetValidGlobalContext();
2735     EVENT(context, GLGetTexLevelParameterivRobustANGLE,
2736           "context = %d, target = %s, level = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2737           ", params = 0x%016" PRIxPTR "",
2738           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level,
2739           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
2740           (uintptr_t)params);
2741 
2742     if (context)
2743     {
2744         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
2745         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2746         bool isCallValid                                      = (context->skipValidation() ||
2747                             ValidateGetTexLevelParameterivRobustANGLE(
2748                                 context, angle::EntryPoint::GLGetTexLevelParameterivRobustANGLE,
2749                                 targetPacked, level, pname, bufSize, length, params));
2750         if (isCallValid)
2751         {
2752             context->getTexLevelParameterivRobust(targetPacked, level, pname, bufSize, length,
2753                                                   params);
2754         }
2755         ANGLE_CAPTURE(GetTexLevelParameterivRobustANGLE, isCallValid, context, targetPacked, level,
2756                       pname, bufSize, length, params);
2757     }
2758     else
2759     {
2760         GenerateContextLostErrorOnCurrentGlobalContext();
2761     }
2762 }
2763 
GL_GetTexLevelParameterfvRobustANGLE(GLenum target,GLint level,GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)2764 void GL_APIENTRY GL_GetTexLevelParameterfvRobustANGLE(GLenum target,
2765                                                       GLint level,
2766                                                       GLenum pname,
2767                                                       GLsizei bufSize,
2768                                                       GLsizei *length,
2769                                                       GLfloat *params)
2770 {
2771     Context *context = GetValidGlobalContext();
2772     EVENT(context, GLGetTexLevelParameterfvRobustANGLE,
2773           "context = %d, target = %s, level = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2774           ", params = 0x%016" PRIxPTR "",
2775           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level,
2776           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
2777           (uintptr_t)params);
2778 
2779     if (context)
2780     {
2781         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
2782         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2783         bool isCallValid                                      = (context->skipValidation() ||
2784                             ValidateGetTexLevelParameterfvRobustANGLE(
2785                                 context, angle::EntryPoint::GLGetTexLevelParameterfvRobustANGLE,
2786                                 targetPacked, level, pname, bufSize, length, params));
2787         if (isCallValid)
2788         {
2789             context->getTexLevelParameterfvRobust(targetPacked, level, pname, bufSize, length,
2790                                                   params);
2791         }
2792         ANGLE_CAPTURE(GetTexLevelParameterfvRobustANGLE, isCallValid, context, targetPacked, level,
2793                       pname, bufSize, length, params);
2794     }
2795     else
2796     {
2797         GenerateContextLostErrorOnCurrentGlobalContext();
2798     }
2799 }
2800 
GL_GetPointervRobustANGLERobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,void ** params)2801 void GL_APIENTRY GL_GetPointervRobustANGLERobustANGLE(GLenum pname,
2802                                                       GLsizei bufSize,
2803                                                       GLsizei *length,
2804                                                       void **params)
2805 {
2806     Context *context = GetValidGlobalContext();
2807     EVENT(context, GLGetPointervRobustANGLERobustANGLE,
2808           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2809           ", params = 0x%016" PRIxPTR "",
2810           CID(context), GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
2811           (uintptr_t)length, (uintptr_t)params);
2812 
2813     if (context)
2814     {
2815         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2816         bool isCallValid                                      = (context->skipValidation() ||
2817                             ValidateGetPointervRobustANGLERobustANGLE(
2818                                 context, angle::EntryPoint::GLGetPointervRobustANGLERobustANGLE,
2819                                 pname, bufSize, length, params));
2820         if (isCallValid)
2821         {
2822             context->getPointervRobustANGLERobust(pname, bufSize, length, params);
2823         }
2824         ANGLE_CAPTURE(GetPointervRobustANGLERobustANGLE, isCallValid, context, pname, bufSize,
2825                       length, params);
2826     }
2827     else
2828     {
2829         GenerateContextLostErrorOnCurrentGlobalContext();
2830     }
2831 }
2832 
GL_ReadnPixelsRobustANGLE(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLsizei bufSize,GLsizei * length,GLsizei * columns,GLsizei * rows,void * data)2833 void GL_APIENTRY GL_ReadnPixelsRobustANGLE(GLint x,
2834                                            GLint y,
2835                                            GLsizei width,
2836                                            GLsizei height,
2837                                            GLenum format,
2838                                            GLenum type,
2839                                            GLsizei bufSize,
2840                                            GLsizei *length,
2841                                            GLsizei *columns,
2842                                            GLsizei *rows,
2843                                            void *data)
2844 {
2845     Context *context = GetValidGlobalContext();
2846     EVENT(context, GLReadnPixelsRobustANGLE,
2847           "context = %d, x = %d, y = %d, width = %d, height = %d, format = %s, type = %s, bufSize "
2848           "= %d, length = 0x%016" PRIxPTR ", columns = 0x%016" PRIxPTR ", rows = 0x%016" PRIxPTR
2849           ", data = 0x%016" PRIxPTR "",
2850           CID(context), x, y, width, height, GLenumToString(GLenumGroup::DefaultGroup, format),
2851           GLenumToString(GLenumGroup::DefaultGroup, type), bufSize, (uintptr_t)length,
2852           (uintptr_t)columns, (uintptr_t)rows, (uintptr_t)data);
2853 
2854     if (context)
2855     {
2856         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2857         bool isCallValid                                      = (context->skipValidation() ||
2858                             ValidateReadnPixelsRobustANGLE(
2859                                 context, angle::EntryPoint::GLReadnPixelsRobustANGLE, x, y, width,
2860                                 height, format, type, bufSize, length, columns, rows, data));
2861         if (isCallValid)
2862         {
2863             context->readnPixelsRobust(x, y, width, height, format, type, bufSize, length, columns,
2864                                        rows, data);
2865         }
2866         ANGLE_CAPTURE(ReadnPixelsRobustANGLE, isCallValid, context, x, y, width, height, format,
2867                       type, bufSize, length, columns, rows, data);
2868     }
2869     else
2870     {
2871         GenerateContextLostErrorOnCurrentGlobalContext();
2872     }
2873 }
2874 
GL_GetnUniformfvRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLfloat * params)2875 void GL_APIENTRY GL_GetnUniformfvRobustANGLE(GLuint program,
2876                                              GLint location,
2877                                              GLsizei bufSize,
2878                                              GLsizei *length,
2879                                              GLfloat *params)
2880 {
2881     Context *context = GetValidGlobalContext();
2882     EVENT(context, GLGetnUniformfvRobustANGLE,
2883           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
2884           ", params = 0x%016" PRIxPTR "",
2885           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
2886 
2887     if (context)
2888     {
2889         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
2890         UniformLocation locationPacked = PackParam<UniformLocation>(location);
2891         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2892         bool isCallValid                                      = (context->skipValidation() ||
2893                             ValidateGetnUniformfvRobustANGLE(
2894                                 context, angle::EntryPoint::GLGetnUniformfvRobustANGLE,
2895                                 programPacked, locationPacked, bufSize, length, params));
2896         if (isCallValid)
2897         {
2898             context->getnUniformfvRobust(programPacked, locationPacked, bufSize, length, params);
2899         }
2900         ANGLE_CAPTURE(GetnUniformfvRobustANGLE, isCallValid, context, programPacked, locationPacked,
2901                       bufSize, length, params);
2902     }
2903     else
2904     {
2905         GenerateContextLostErrorOnCurrentGlobalContext();
2906     }
2907 }
2908 
GL_GetnUniformivRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLint * params)2909 void GL_APIENTRY GL_GetnUniformivRobustANGLE(GLuint program,
2910                                              GLint location,
2911                                              GLsizei bufSize,
2912                                              GLsizei *length,
2913                                              GLint *params)
2914 {
2915     Context *context = GetValidGlobalContext();
2916     EVENT(context, GLGetnUniformivRobustANGLE,
2917           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
2918           ", params = 0x%016" PRIxPTR "",
2919           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
2920 
2921     if (context)
2922     {
2923         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
2924         UniformLocation locationPacked = PackParam<UniformLocation>(location);
2925         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2926         bool isCallValid                                      = (context->skipValidation() ||
2927                             ValidateGetnUniformivRobustANGLE(
2928                                 context, angle::EntryPoint::GLGetnUniformivRobustANGLE,
2929                                 programPacked, locationPacked, bufSize, length, params));
2930         if (isCallValid)
2931         {
2932             context->getnUniformivRobust(programPacked, locationPacked, bufSize, length, params);
2933         }
2934         ANGLE_CAPTURE(GetnUniformivRobustANGLE, isCallValid, context, programPacked, locationPacked,
2935                       bufSize, length, params);
2936     }
2937     else
2938     {
2939         GenerateContextLostErrorOnCurrentGlobalContext();
2940     }
2941 }
2942 
GL_GetnUniformuivRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLuint * params)2943 void GL_APIENTRY GL_GetnUniformuivRobustANGLE(GLuint program,
2944                                               GLint location,
2945                                               GLsizei bufSize,
2946                                               GLsizei *length,
2947                                               GLuint *params)
2948 {
2949     Context *context = GetValidGlobalContext();
2950     EVENT(context, GLGetnUniformuivRobustANGLE,
2951           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
2952           ", params = 0x%016" PRIxPTR "",
2953           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
2954 
2955     if (context)
2956     {
2957         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
2958         UniformLocation locationPacked = PackParam<UniformLocation>(location);
2959         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2960         bool isCallValid                                      = (context->skipValidation() ||
2961                             ValidateGetnUniformuivRobustANGLE(
2962                                 context, angle::EntryPoint::GLGetnUniformuivRobustANGLE,
2963                                 programPacked, locationPacked, bufSize, length, params));
2964         if (isCallValid)
2965         {
2966             context->getnUniformuivRobust(programPacked, locationPacked, bufSize, length, params);
2967         }
2968         ANGLE_CAPTURE(GetnUniformuivRobustANGLE, isCallValid, context, programPacked,
2969                       locationPacked, bufSize, length, params);
2970     }
2971     else
2972     {
2973         GenerateContextLostErrorOnCurrentGlobalContext();
2974     }
2975 }
2976 
GL_TexParameterIivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,const GLint * params)2977 void GL_APIENTRY GL_TexParameterIivRobustANGLE(GLenum target,
2978                                                GLenum pname,
2979                                                GLsizei bufSize,
2980                                                const GLint *params)
2981 {
2982     Context *context = GetValidGlobalContext();
2983     EVENT(context, GLTexParameterIivRobustANGLE,
2984           "context = %d, target = %s, pname = %s, bufSize = %d, params = 0x%016" PRIxPTR "",
2985           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
2986           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)params);
2987 
2988     if (context)
2989     {
2990         TextureType targetPacked                              = PackParam<TextureType>(target);
2991         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
2992         bool isCallValid                                      = (context->skipValidation() ||
2993                             ValidateTexParameterIivRobustANGLE(
2994                                 context, angle::EntryPoint::GLTexParameterIivRobustANGLE,
2995                                 targetPacked, pname, bufSize, params));
2996         if (isCallValid)
2997         {
2998             context->texParameterIivRobust(targetPacked, pname, bufSize, params);
2999         }
3000         ANGLE_CAPTURE(TexParameterIivRobustANGLE, isCallValid, context, targetPacked, pname,
3001                       bufSize, params);
3002     }
3003     else
3004     {
3005         GenerateContextLostErrorOnCurrentGlobalContext();
3006     }
3007 }
3008 
GL_TexParameterIuivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,const GLuint * params)3009 void GL_APIENTRY GL_TexParameterIuivRobustANGLE(GLenum target,
3010                                                 GLenum pname,
3011                                                 GLsizei bufSize,
3012                                                 const GLuint *params)
3013 {
3014     Context *context = GetValidGlobalContext();
3015     EVENT(context, GLTexParameterIuivRobustANGLE,
3016           "context = %d, target = %s, pname = %s, bufSize = %d, params = 0x%016" PRIxPTR "",
3017           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
3018           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)params);
3019 
3020     if (context)
3021     {
3022         TextureType targetPacked                              = PackParam<TextureType>(target);
3023         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3024         bool isCallValid                                      = (context->skipValidation() ||
3025                             ValidateTexParameterIuivRobustANGLE(
3026                                 context, angle::EntryPoint::GLTexParameterIuivRobustANGLE,
3027                                 targetPacked, pname, bufSize, params));
3028         if (isCallValid)
3029         {
3030             context->texParameterIuivRobust(targetPacked, pname, bufSize, params);
3031         }
3032         ANGLE_CAPTURE(TexParameterIuivRobustANGLE, isCallValid, context, targetPacked, pname,
3033                       bufSize, params);
3034     }
3035     else
3036     {
3037         GenerateContextLostErrorOnCurrentGlobalContext();
3038     }
3039 }
3040 
GL_GetTexParameterIivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3041 void GL_APIENTRY GL_GetTexParameterIivRobustANGLE(GLenum target,
3042                                                   GLenum pname,
3043                                                   GLsizei bufSize,
3044                                                   GLsizei *length,
3045                                                   GLint *params)
3046 {
3047     Context *context = GetValidGlobalContext();
3048     EVENT(context, GLGetTexParameterIivRobustANGLE,
3049           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3050           ", params = 0x%016" PRIxPTR "",
3051           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
3052           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
3053           (uintptr_t)params);
3054 
3055     if (context)
3056     {
3057         TextureType targetPacked                              = PackParam<TextureType>(target);
3058         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3059         bool isCallValid                                      = (context->skipValidation() ||
3060                             ValidateGetTexParameterIivRobustANGLE(
3061                                 context, angle::EntryPoint::GLGetTexParameterIivRobustANGLE,
3062                                 targetPacked, pname, bufSize, length, params));
3063         if (isCallValid)
3064         {
3065             context->getTexParameterIivRobust(targetPacked, pname, bufSize, length, params);
3066         }
3067         ANGLE_CAPTURE(GetTexParameterIivRobustANGLE, isCallValid, context, targetPacked, pname,
3068                       bufSize, length, params);
3069     }
3070     else
3071     {
3072         GenerateContextLostErrorOnCurrentGlobalContext();
3073     }
3074 }
3075 
GL_GetTexParameterIuivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint * params)3076 void GL_APIENTRY GL_GetTexParameterIuivRobustANGLE(GLenum target,
3077                                                    GLenum pname,
3078                                                    GLsizei bufSize,
3079                                                    GLsizei *length,
3080                                                    GLuint *params)
3081 {
3082     Context *context = GetValidGlobalContext();
3083     EVENT(context, GLGetTexParameterIuivRobustANGLE,
3084           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3085           ", params = 0x%016" PRIxPTR "",
3086           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
3087           GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize, (uintptr_t)length,
3088           (uintptr_t)params);
3089 
3090     if (context)
3091     {
3092         TextureType targetPacked                              = PackParam<TextureType>(target);
3093         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3094         bool isCallValid                                      = (context->skipValidation() ||
3095                             ValidateGetTexParameterIuivRobustANGLE(
3096                                 context, angle::EntryPoint::GLGetTexParameterIuivRobustANGLE,
3097                                 targetPacked, pname, bufSize, length, params));
3098         if (isCallValid)
3099         {
3100             context->getTexParameterIuivRobust(targetPacked, pname, bufSize, length, params);
3101         }
3102         ANGLE_CAPTURE(GetTexParameterIuivRobustANGLE, isCallValid, context, targetPacked, pname,
3103                       bufSize, length, params);
3104     }
3105     else
3106     {
3107         GenerateContextLostErrorOnCurrentGlobalContext();
3108     }
3109 }
3110 
GL_SamplerParameterIivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,const GLint * param)3111 void GL_APIENTRY GL_SamplerParameterIivRobustANGLE(GLuint sampler,
3112                                                    GLenum pname,
3113                                                    GLsizei bufSize,
3114                                                    const GLint *param)
3115 {
3116     Context *context = GetValidGlobalContext();
3117     EVENT(context, GLSamplerParameterIivRobustANGLE,
3118           "context = %d, sampler = %u, pname = %s, bufSize = %d, param = 0x%016" PRIxPTR "",
3119           CID(context), sampler, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
3120           (uintptr_t)param);
3121 
3122     if (context)
3123     {
3124         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
3125         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3126         bool isCallValid                                      = (context->skipValidation() ||
3127                             ValidateSamplerParameterIivRobustANGLE(
3128                                 context, angle::EntryPoint::GLSamplerParameterIivRobustANGLE,
3129                                 samplerPacked, pname, bufSize, param));
3130         if (isCallValid)
3131         {
3132             context->samplerParameterIivRobust(samplerPacked, pname, bufSize, param);
3133         }
3134         ANGLE_CAPTURE(SamplerParameterIivRobustANGLE, isCallValid, context, samplerPacked, pname,
3135                       bufSize, param);
3136     }
3137     else
3138     {
3139         GenerateContextLostErrorOnCurrentGlobalContext();
3140     }
3141 }
3142 
GL_SamplerParameterIuivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,const GLuint * param)3143 void GL_APIENTRY GL_SamplerParameterIuivRobustANGLE(GLuint sampler,
3144                                                     GLenum pname,
3145                                                     GLsizei bufSize,
3146                                                     const GLuint *param)
3147 {
3148     Context *context = GetValidGlobalContext();
3149     EVENT(context, GLSamplerParameterIuivRobustANGLE,
3150           "context = %d, sampler = %u, pname = %s, bufSize = %d, param = 0x%016" PRIxPTR "",
3151           CID(context), sampler, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
3152           (uintptr_t)param);
3153 
3154     if (context)
3155     {
3156         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
3157         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3158         bool isCallValid                                      = (context->skipValidation() ||
3159                             ValidateSamplerParameterIuivRobustANGLE(
3160                                 context, angle::EntryPoint::GLSamplerParameterIuivRobustANGLE,
3161                                 samplerPacked, pname, bufSize, param));
3162         if (isCallValid)
3163         {
3164             context->samplerParameterIuivRobust(samplerPacked, pname, bufSize, param);
3165         }
3166         ANGLE_CAPTURE(SamplerParameterIuivRobustANGLE, isCallValid, context, samplerPacked, pname,
3167                       bufSize, param);
3168     }
3169     else
3170     {
3171         GenerateContextLostErrorOnCurrentGlobalContext();
3172     }
3173 }
3174 
GL_GetSamplerParameterIivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3175 void GL_APIENTRY GL_GetSamplerParameterIivRobustANGLE(GLuint sampler,
3176                                                       GLenum pname,
3177                                                       GLsizei bufSize,
3178                                                       GLsizei *length,
3179                                                       GLint *params)
3180 {
3181     Context *context = GetValidGlobalContext();
3182     EVENT(context, GLGetSamplerParameterIivRobustANGLE,
3183           "context = %d, sampler = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3184           ", params = 0x%016" PRIxPTR "",
3185           CID(context), sampler, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
3186           (uintptr_t)length, (uintptr_t)params);
3187 
3188     if (context)
3189     {
3190         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
3191         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3192         bool isCallValid                                      = (context->skipValidation() ||
3193                             ValidateGetSamplerParameterIivRobustANGLE(
3194                                 context, angle::EntryPoint::GLGetSamplerParameterIivRobustANGLE,
3195                                 samplerPacked, pname, bufSize, length, params));
3196         if (isCallValid)
3197         {
3198             context->getSamplerParameterIivRobust(samplerPacked, pname, bufSize, length, params);
3199         }
3200         ANGLE_CAPTURE(GetSamplerParameterIivRobustANGLE, isCallValid, context, samplerPacked, pname,
3201                       bufSize, length, params);
3202     }
3203     else
3204     {
3205         GenerateContextLostErrorOnCurrentGlobalContext();
3206     }
3207 }
3208 
GL_GetSamplerParameterIuivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint * params)3209 void GL_APIENTRY GL_GetSamplerParameterIuivRobustANGLE(GLuint sampler,
3210                                                        GLenum pname,
3211                                                        GLsizei bufSize,
3212                                                        GLsizei *length,
3213                                                        GLuint *params)
3214 {
3215     Context *context = GetValidGlobalContext();
3216     EVENT(context, GLGetSamplerParameterIuivRobustANGLE,
3217           "context = %d, sampler = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3218           ", params = 0x%016" PRIxPTR "",
3219           CID(context), sampler, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
3220           (uintptr_t)length, (uintptr_t)params);
3221 
3222     if (context)
3223     {
3224         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
3225         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3226         bool isCallValid                                      = (context->skipValidation() ||
3227                             ValidateGetSamplerParameterIuivRobustANGLE(
3228                                 context, angle::EntryPoint::GLGetSamplerParameterIuivRobustANGLE,
3229                                 samplerPacked, pname, bufSize, length, params));
3230         if (isCallValid)
3231         {
3232             context->getSamplerParameterIuivRobust(samplerPacked, pname, bufSize, length, params);
3233         }
3234         ANGLE_CAPTURE(GetSamplerParameterIuivRobustANGLE, isCallValid, context, samplerPacked,
3235                       pname, bufSize, length, params);
3236     }
3237     else
3238     {
3239         GenerateContextLostErrorOnCurrentGlobalContext();
3240     }
3241 }
3242 
GL_GetQueryObjectivRobustANGLE(GLuint id,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3243 void GL_APIENTRY GL_GetQueryObjectivRobustANGLE(GLuint id,
3244                                                 GLenum pname,
3245                                                 GLsizei bufSize,
3246                                                 GLsizei *length,
3247                                                 GLint *params)
3248 {
3249     Context *context = GetGlobalContext();
3250     EVENT(context, GLGetQueryObjectivRobustANGLE,
3251           "context = %d, id = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3252           ", params = 0x%016" PRIxPTR "",
3253           CID(context), id, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
3254           (uintptr_t)length, (uintptr_t)params);
3255 
3256     if (context)
3257     {
3258         QueryID idPacked                                      = PackParam<QueryID>(id);
3259         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3260         bool isCallValid                                      = (context->skipValidation() ||
3261                             ValidateGetQueryObjectivRobustANGLE(
3262                                 context, angle::EntryPoint::GLGetQueryObjectivRobustANGLE, idPacked,
3263                                 pname, bufSize, length, params));
3264         if (isCallValid)
3265         {
3266             context->getQueryObjectivRobust(idPacked, pname, bufSize, length, params);
3267         }
3268         ANGLE_CAPTURE(GetQueryObjectivRobustANGLE, isCallValid, context, idPacked, pname, bufSize,
3269                       length, params);
3270     }
3271     else
3272     {}
3273 }
3274 
GL_GetQueryObjecti64vRobustANGLE(GLuint id,GLenum pname,GLsizei bufSize,GLsizei * length,GLint64 * params)3275 void GL_APIENTRY GL_GetQueryObjecti64vRobustANGLE(GLuint id,
3276                                                   GLenum pname,
3277                                                   GLsizei bufSize,
3278                                                   GLsizei *length,
3279                                                   GLint64 *params)
3280 {
3281     Context *context = GetGlobalContext();
3282     EVENT(context, GLGetQueryObjecti64vRobustANGLE,
3283           "context = %d, id = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3284           ", params = 0x%016" PRIxPTR "",
3285           CID(context), id, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
3286           (uintptr_t)length, (uintptr_t)params);
3287 
3288     if (context)
3289     {
3290         QueryID idPacked                                      = PackParam<QueryID>(id);
3291         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3292         bool isCallValid                                      = (context->skipValidation() ||
3293                             ValidateGetQueryObjecti64vRobustANGLE(
3294                                 context, angle::EntryPoint::GLGetQueryObjecti64vRobustANGLE,
3295                                 idPacked, pname, bufSize, length, params));
3296         if (isCallValid)
3297         {
3298             context->getQueryObjecti64vRobust(idPacked, pname, bufSize, length, params);
3299         }
3300         ANGLE_CAPTURE(GetQueryObjecti64vRobustANGLE, isCallValid, context, idPacked, pname, bufSize,
3301                       length, params);
3302     }
3303     else
3304     {}
3305 }
3306 
GL_GetQueryObjectui64vRobustANGLE(GLuint id,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint64 * params)3307 void GL_APIENTRY GL_GetQueryObjectui64vRobustANGLE(GLuint id,
3308                                                    GLenum pname,
3309                                                    GLsizei bufSize,
3310                                                    GLsizei *length,
3311                                                    GLuint64 *params)
3312 {
3313     Context *context = GetValidGlobalContext();
3314     EVENT(context, GLGetQueryObjectui64vRobustANGLE,
3315           "context = %d, id = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3316           ", params = 0x%016" PRIxPTR "",
3317           CID(context), id, GLenumToString(GLenumGroup::DefaultGroup, pname), bufSize,
3318           (uintptr_t)length, (uintptr_t)params);
3319 
3320     if (context)
3321     {
3322         QueryID idPacked                                      = PackParam<QueryID>(id);
3323         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3324         bool isCallValid                                      = (context->skipValidation() ||
3325                             ValidateGetQueryObjectui64vRobustANGLE(
3326                                 context, angle::EntryPoint::GLGetQueryObjectui64vRobustANGLE,
3327                                 idPacked, pname, bufSize, length, params));
3328         if (isCallValid)
3329         {
3330             context->getQueryObjectui64vRobust(idPacked, pname, bufSize, length, params);
3331         }
3332         ANGLE_CAPTURE(GetQueryObjectui64vRobustANGLE, isCallValid, context, idPacked, pname,
3333                       bufSize, length, params);
3334     }
3335     else
3336     {
3337         GenerateContextLostErrorOnCurrentGlobalContext();
3338     }
3339 }
3340 
3341 // GL_ANGLE_semaphore_fuchsia
GL_ImportSemaphoreZirconHandleANGLE(GLuint semaphore,GLenum handleType,GLuint handle)3342 void GL_APIENTRY GL_ImportSemaphoreZirconHandleANGLE(GLuint semaphore,
3343                                                      GLenum handleType,
3344                                                      GLuint handle)
3345 {
3346     Context *context = GetValidGlobalContext();
3347     EVENT(context, GLImportSemaphoreZirconHandleANGLE,
3348           "context = %d, semaphore = %u, handleType = %s, handle = %u", CID(context), semaphore,
3349           GLenumToString(GLenumGroup::ExternalHandleType, handleType), handle);
3350 
3351     if (context)
3352     {
3353         SemaphoreID semaphorePacked                           = PackParam<SemaphoreID>(semaphore);
3354         HandleType handleTypePacked                           = PackParam<HandleType>(handleType);
3355         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3356         bool isCallValid                                      = (context->skipValidation() ||
3357                             ValidateImportSemaphoreZirconHandleANGLE(
3358                                 context, angle::EntryPoint::GLImportSemaphoreZirconHandleANGLE,
3359                                 semaphorePacked, handleTypePacked, handle));
3360         if (isCallValid)
3361         {
3362             context->importSemaphoreZirconHandle(semaphorePacked, handleTypePacked, handle);
3363         }
3364         ANGLE_CAPTURE(ImportSemaphoreZirconHandleANGLE, isCallValid, context, semaphorePacked,
3365                       handleTypePacked, handle);
3366     }
3367     else
3368     {
3369         GenerateContextLostErrorOnCurrentGlobalContext();
3370     }
3371 }
3372 
3373 // GL_ANGLE_texture_compression_dxt3
3374 
3375 // GL_ANGLE_texture_compression_dxt5
3376 
3377 // GL_ANGLE_texture_external_update
GL_TexImage2DExternalANGLE(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type)3378 void GL_APIENTRY GL_TexImage2DExternalANGLE(GLenum target,
3379                                             GLint level,
3380                                             GLint internalformat,
3381                                             GLsizei width,
3382                                             GLsizei height,
3383                                             GLint border,
3384                                             GLenum format,
3385                                             GLenum type)
3386 {
3387     Context *context = GetValidGlobalContext();
3388     EVENT(context, GLTexImage2DExternalANGLE,
3389           "context = %d, target = %s, level = %d, internalformat = %d, width = %d, height = %d, "
3390           "border = %d, format = %s, type = %s",
3391           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, internalformat,
3392           width, height, border, GLenumToString(GLenumGroup::PixelFormat, format),
3393           GLenumToString(GLenumGroup::PixelType, type));
3394 
3395     if (context)
3396     {
3397         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
3398         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3399         bool isCallValid                                      = (context->skipValidation() ||
3400                             ValidateTexImage2DExternalANGLE(
3401                                 context, angle::EntryPoint::GLTexImage2DExternalANGLE, targetPacked,
3402                                 level, internalformat, width, height, border, format, type));
3403         if (isCallValid)
3404         {
3405             context->texImage2DExternal(targetPacked, level, internalformat, width, height, border,
3406                                         format, type);
3407         }
3408         ANGLE_CAPTURE(TexImage2DExternalANGLE, isCallValid, context, targetPacked, level,
3409                       internalformat, width, height, border, format, type);
3410     }
3411     else
3412     {
3413         GenerateContextLostErrorOnCurrentGlobalContext();
3414     }
3415 }
3416 
GL_InvalidateTextureANGLE(GLenum target)3417 void GL_APIENTRY GL_InvalidateTextureANGLE(GLenum target)
3418 {
3419     Context *context = GetValidGlobalContext();
3420     EVENT(context, GLInvalidateTextureANGLE, "context = %d, target = %s", CID(context),
3421           GLenumToString(GLenumGroup::TextureTarget, target));
3422 
3423     if (context)
3424     {
3425         TextureType targetPacked                              = PackParam<TextureType>(target);
3426         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3427         bool isCallValid =
3428             (context->skipValidation() ||
3429              ValidateInvalidateTextureANGLE(context, angle::EntryPoint::GLInvalidateTextureANGLE,
3430                                             targetPacked));
3431         if (isCallValid)
3432         {
3433             context->invalidateTexture(targetPacked);
3434         }
3435         ANGLE_CAPTURE(InvalidateTextureANGLE, isCallValid, context, targetPacked);
3436     }
3437     else
3438     {
3439         GenerateContextLostErrorOnCurrentGlobalContext();
3440     }
3441 }
3442 
3443 // GL_ANGLE_texture_multisample
GL_TexStorage2DMultisampleANGLE(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height,GLboolean fixedsamplelocations)3444 void GL_APIENTRY GL_TexStorage2DMultisampleANGLE(GLenum target,
3445                                                  GLsizei samples,
3446                                                  GLenum internalformat,
3447                                                  GLsizei width,
3448                                                  GLsizei height,
3449                                                  GLboolean fixedsamplelocations)
3450 {
3451     Context *context = GetValidGlobalContext();
3452     EVENT(context, GLTexStorage2DMultisampleANGLE,
3453           "context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d, "
3454           "fixedsamplelocations = %s",
3455           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), samples,
3456           GLenumToString(GLenumGroup::DefaultGroup, internalformat), width, height,
3457           GLbooleanToString(fixedsamplelocations));
3458 
3459     if (context)
3460     {
3461         TextureType targetPacked                              = PackParam<TextureType>(target);
3462         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3463         bool isCallValid =
3464             (context->skipValidation() ||
3465              ValidateTexStorage2DMultisampleANGLE(
3466                  context, angle::EntryPoint::GLTexStorage2DMultisampleANGLE, targetPacked, samples,
3467                  internalformat, width, height, fixedsamplelocations));
3468         if (isCallValid)
3469         {
3470             context->texStorage2DMultisample(targetPacked, samples, internalformat, width, height,
3471                                              fixedsamplelocations);
3472         }
3473         ANGLE_CAPTURE(TexStorage2DMultisampleANGLE, isCallValid, context, targetPacked, samples,
3474                       internalformat, width, height, fixedsamplelocations);
3475     }
3476     else
3477     {
3478         GenerateContextLostErrorOnCurrentGlobalContext();
3479     }
3480 }
3481 
GL_GetMultisamplefvANGLE(GLenum pname,GLuint index,GLfloat * val)3482 void GL_APIENTRY GL_GetMultisamplefvANGLE(GLenum pname, GLuint index, GLfloat *val)
3483 {
3484     Context *context = GetValidGlobalContext();
3485     EVENT(context, GLGetMultisamplefvANGLE,
3486           "context = %d, pname = %s, index = %u, val = 0x%016" PRIxPTR "", CID(context),
3487           GLenumToString(GLenumGroup::DefaultGroup, pname), index, (uintptr_t)val);
3488 
3489     if (context)
3490     {
3491         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3492         bool isCallValid =
3493             (context->skipValidation() ||
3494              ValidateGetMultisamplefvANGLE(context, angle::EntryPoint::GLGetMultisamplefvANGLE,
3495                                            pname, index, val));
3496         if (isCallValid)
3497         {
3498             context->getMultisamplefv(pname, index, val);
3499         }
3500         ANGLE_CAPTURE(GetMultisamplefvANGLE, isCallValid, context, pname, index, val);
3501     }
3502     else
3503     {
3504         GenerateContextLostErrorOnCurrentGlobalContext();
3505     }
3506 }
3507 
GL_SampleMaskiANGLE(GLuint maskNumber,GLbitfield mask)3508 void GL_APIENTRY GL_SampleMaskiANGLE(GLuint maskNumber, GLbitfield mask)
3509 {
3510     Context *context = GetValidGlobalContext();
3511     EVENT(context, GLSampleMaskiANGLE, "context = %d, maskNumber = %u, mask = %s", CID(context),
3512           maskNumber, GLbitfieldToString(GLenumGroup::DefaultGroup, mask).c_str());
3513 
3514     if (context)
3515     {
3516         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3517         bool isCallValid                                      = (context->skipValidation() ||
3518                             ValidateSampleMaskiANGLE(context, angle::EntryPoint::GLSampleMaskiANGLE,
3519                                                      maskNumber, mask));
3520         if (isCallValid)
3521         {
3522             context->sampleMaski(maskNumber, mask);
3523         }
3524         ANGLE_CAPTURE(SampleMaskiANGLE, isCallValid, context, maskNumber, mask);
3525     }
3526     else
3527     {
3528         GenerateContextLostErrorOnCurrentGlobalContext();
3529     }
3530 }
3531 
3532 // GetTexLevelParameterfvANGLE is already defined.
3533 
3534 // GetTexLevelParameterivANGLE is already defined.
3535 
3536 // GL_ANGLE_texture_usage
3537 
3538 // GL_ANGLE_translated_shader_source
GL_GetTranslatedShaderSourceANGLE(GLuint shader,GLsizei bufsize,GLsizei * length,GLchar * source)3539 void GL_APIENTRY GL_GetTranslatedShaderSourceANGLE(GLuint shader,
3540                                                    GLsizei bufsize,
3541                                                    GLsizei *length,
3542                                                    GLchar *source)
3543 {
3544     Context *context = GetValidGlobalContext();
3545     EVENT(context, GLGetTranslatedShaderSourceANGLE,
3546           "context = %d, shader = %u, bufsize = %d, length = 0x%016" PRIxPTR
3547           ", source = 0x%016" PRIxPTR "",
3548           CID(context), shader, bufsize, (uintptr_t)length, (uintptr_t)source);
3549 
3550     if (context)
3551     {
3552         ShaderProgramID shaderPacked                          = PackParam<ShaderProgramID>(shader);
3553         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3554         bool isCallValid                                      = (context->skipValidation() ||
3555                             ValidateGetTranslatedShaderSourceANGLE(
3556                                 context, angle::EntryPoint::GLGetTranslatedShaderSourceANGLE,
3557                                 shaderPacked, bufsize, length, source));
3558         if (isCallValid)
3559         {
3560             context->getTranslatedShaderSource(shaderPacked, bufsize, length, source);
3561         }
3562         ANGLE_CAPTURE(GetTranslatedShaderSourceANGLE, isCallValid, context, shaderPacked, bufsize,
3563                       length, source);
3564     }
3565     else
3566     {
3567         GenerateContextLostErrorOnCurrentGlobalContext();
3568     }
3569 }
3570 
3571 // GL_ANGLE_vulkan_image
GL_AcquireTexturesANGLE(GLuint numTextures,const GLuint * textures,const GLenum * layouts)3572 void GL_APIENTRY GL_AcquireTexturesANGLE(GLuint numTextures,
3573                                          const GLuint *textures,
3574                                          const GLenum *layouts)
3575 {
3576     Context *context = GetValidGlobalContext();
3577     EVENT(context, GLAcquireTexturesANGLE,
3578           "context = %d, numTextures = %u, textures = 0x%016" PRIxPTR ", layouts = 0x%016" PRIxPTR
3579           "",
3580           CID(context), numTextures, (uintptr_t)textures, (uintptr_t)layouts);
3581 
3582     if (context)
3583     {
3584         const TextureID *texturesPacked = PackParam<const TextureID *>(textures);
3585         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3586         bool isCallValid =
3587             (context->skipValidation() ||
3588              ValidateAcquireTexturesANGLE(context, angle::EntryPoint::GLAcquireTexturesANGLE,
3589                                           numTextures, texturesPacked, layouts));
3590         if (isCallValid)
3591         {
3592             context->acquireTextures(numTextures, texturesPacked, layouts);
3593         }
3594         ANGLE_CAPTURE(AcquireTexturesANGLE, isCallValid, context, numTextures, texturesPacked,
3595                       layouts);
3596     }
3597     else
3598     {
3599         GenerateContextLostErrorOnCurrentGlobalContext();
3600     }
3601 }
3602 
GL_ReleaseTexturesANGLE(GLuint numTextures,const GLuint * textures,GLenum * layouts)3603 void GL_APIENTRY GL_ReleaseTexturesANGLE(GLuint numTextures,
3604                                          const GLuint *textures,
3605                                          GLenum *layouts)
3606 {
3607     Context *context = GetValidGlobalContext();
3608     EVENT(context, GLReleaseTexturesANGLE,
3609           "context = %d, numTextures = %u, textures = 0x%016" PRIxPTR ", layouts = 0x%016" PRIxPTR
3610           "",
3611           CID(context), numTextures, (uintptr_t)textures, (uintptr_t)layouts);
3612 
3613     if (context)
3614     {
3615         const TextureID *texturesPacked = PackParam<const TextureID *>(textures);
3616         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3617         bool isCallValid =
3618             (context->skipValidation() ||
3619              ValidateReleaseTexturesANGLE(context, angle::EntryPoint::GLReleaseTexturesANGLE,
3620                                           numTextures, texturesPacked, layouts));
3621         if (isCallValid)
3622         {
3623             context->releaseTextures(numTextures, texturesPacked, layouts);
3624         }
3625         ANGLE_CAPTURE(ReleaseTexturesANGLE, isCallValid, context, numTextures, texturesPacked,
3626                       layouts);
3627     }
3628     else
3629     {
3630         GenerateContextLostErrorOnCurrentGlobalContext();
3631     }
3632 }
3633 
3634 // GL_APPLE_clip_distance
3635 
3636 // GL_ARB_sync
3637 // ClientWaitSync is already defined.
3638 
3639 // DeleteSync is already defined.
3640 
3641 // FenceSync is already defined.
3642 
3643 // GetInteger64v is already defined.
3644 
3645 // GetSynciv is already defined.
3646 
3647 // IsSync is already defined.
3648 
3649 // WaitSync is already defined.
3650 
3651 // GL_CHROMIUM_bind_uniform_location
GL_BindUniformLocationCHROMIUM(GLuint program,GLint location,const GLchar * name)3652 void GL_APIENTRY GL_BindUniformLocationCHROMIUM(GLuint program, GLint location, const GLchar *name)
3653 {
3654     Context *context = GetValidGlobalContext();
3655     EVENT(context, GLBindUniformLocationCHROMIUM,
3656           "context = %d, program = %u, location = %d, name = 0x%016" PRIxPTR "", CID(context),
3657           program, location, (uintptr_t)name);
3658 
3659     if (context)
3660     {
3661         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
3662         UniformLocation locationPacked = PackParam<UniformLocation>(location);
3663         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3664         bool isCallValid                                      = (context->skipValidation() ||
3665                             ValidateBindUniformLocationCHROMIUM(
3666                                 context, angle::EntryPoint::GLBindUniformLocationCHROMIUM,
3667                                 programPacked, locationPacked, name));
3668         if (isCallValid)
3669         {
3670             context->bindUniformLocation(programPacked, locationPacked, name);
3671         }
3672         ANGLE_CAPTURE(BindUniformLocationCHROMIUM, isCallValid, context, programPacked,
3673                       locationPacked, name);
3674     }
3675     else
3676     {
3677         GenerateContextLostErrorOnCurrentGlobalContext();
3678     }
3679 }
3680 
3681 // GL_CHROMIUM_copy_compressed_texture
GL_CompressedCopyTextureCHROMIUM(GLuint sourceId,GLuint destId)3682 void GL_APIENTRY GL_CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId)
3683 {
3684     Context *context = GetValidGlobalContext();
3685     EVENT(context, GLCompressedCopyTextureCHROMIUM, "context = %d, sourceId = %u, destId = %u",
3686           CID(context), sourceId, destId);
3687 
3688     if (context)
3689     {
3690         TextureID sourceIdPacked                              = PackParam<TextureID>(sourceId);
3691         TextureID destIdPacked                                = PackParam<TextureID>(destId);
3692         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3693         bool isCallValid                                      = (context->skipValidation() ||
3694                             ValidateCompressedCopyTextureCHROMIUM(
3695                                 context, angle::EntryPoint::GLCompressedCopyTextureCHROMIUM,
3696                                 sourceIdPacked, destIdPacked));
3697         if (isCallValid)
3698         {
3699             context->compressedCopyTexture(sourceIdPacked, destIdPacked);
3700         }
3701         ANGLE_CAPTURE(CompressedCopyTextureCHROMIUM, isCallValid, context, sourceIdPacked,
3702                       destIdPacked);
3703     }
3704     else
3705     {
3706         GenerateContextLostErrorOnCurrentGlobalContext();
3707     }
3708 }
3709 
3710 // GL_CHROMIUM_copy_texture
GL_CopyTextureCHROMIUM(GLuint sourceId,GLint sourceLevel,GLenum destTarget,GLuint destId,GLint destLevel,GLint internalFormat,GLenum destType,GLboolean unpackFlipY,GLboolean unpackPremultiplyAlpha,GLboolean unpackUnmultiplyAlpha)3711 void GL_APIENTRY GL_CopyTextureCHROMIUM(GLuint sourceId,
3712                                         GLint sourceLevel,
3713                                         GLenum destTarget,
3714                                         GLuint destId,
3715                                         GLint destLevel,
3716                                         GLint internalFormat,
3717                                         GLenum destType,
3718                                         GLboolean unpackFlipY,
3719                                         GLboolean unpackPremultiplyAlpha,
3720                                         GLboolean unpackUnmultiplyAlpha)
3721 {
3722     Context *context = GetValidGlobalContext();
3723     EVENT(context, GLCopyTextureCHROMIUM,
3724           "context = %d, sourceId = %u, sourceLevel = %d, destTarget = %s, destId = %u, destLevel "
3725           "= %d, internalFormat = %d, destType = %s, unpackFlipY = %s, unpackPremultiplyAlpha = "
3726           "%s, unpackUnmultiplyAlpha = %s",
3727           CID(context), sourceId, sourceLevel,
3728           GLenumToString(GLenumGroup::DefaultGroup, destTarget), destId, destLevel, internalFormat,
3729           GLenumToString(GLenumGroup::DefaultGroup, destType), GLbooleanToString(unpackFlipY),
3730           GLbooleanToString(unpackPremultiplyAlpha), GLbooleanToString(unpackUnmultiplyAlpha));
3731 
3732     if (context)
3733     {
3734         TextureID sourceIdPacked       = PackParam<TextureID>(sourceId);
3735         TextureTarget destTargetPacked = PackParam<TextureTarget>(destTarget);
3736         TextureID destIdPacked         = PackParam<TextureID>(destId);
3737         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3738         bool isCallValid =
3739             (context->skipValidation() ||
3740              ValidateCopyTextureCHROMIUM(
3741                  context, angle::EntryPoint::GLCopyTextureCHROMIUM, sourceIdPacked, sourceLevel,
3742                  destTargetPacked, destIdPacked, destLevel, internalFormat, destType, unpackFlipY,
3743                  unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
3744         if (isCallValid)
3745         {
3746             context->copyTexture(sourceIdPacked, sourceLevel, destTargetPacked, destIdPacked,
3747                                  destLevel, internalFormat, destType, unpackFlipY,
3748                                  unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
3749         }
3750         ANGLE_CAPTURE(CopyTextureCHROMIUM, isCallValid, context, sourceIdPacked, sourceLevel,
3751                       destTargetPacked, destIdPacked, destLevel, internalFormat, destType,
3752                       unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
3753     }
3754     else
3755     {
3756         GenerateContextLostErrorOnCurrentGlobalContext();
3757     }
3758 }
3759 
GL_CopySubTextureCHROMIUM(GLuint sourceId,GLint sourceLevel,GLenum destTarget,GLuint destId,GLint destLevel,GLint xoffset,GLint yoffset,GLint x,GLint y,GLint width,GLint height,GLboolean unpackFlipY,GLboolean unpackPremultiplyAlpha,GLboolean unpackUnmultiplyAlpha)3760 void GL_APIENTRY GL_CopySubTextureCHROMIUM(GLuint sourceId,
3761                                            GLint sourceLevel,
3762                                            GLenum destTarget,
3763                                            GLuint destId,
3764                                            GLint destLevel,
3765                                            GLint xoffset,
3766                                            GLint yoffset,
3767                                            GLint x,
3768                                            GLint y,
3769                                            GLint width,
3770                                            GLint height,
3771                                            GLboolean unpackFlipY,
3772                                            GLboolean unpackPremultiplyAlpha,
3773                                            GLboolean unpackUnmultiplyAlpha)
3774 {
3775     Context *context = GetValidGlobalContext();
3776     EVENT(context, GLCopySubTextureCHROMIUM,
3777           "context = %d, sourceId = %u, sourceLevel = %d, destTarget = %s, destId = %u, destLevel "
3778           "= %d, xoffset = %d, yoffset = %d, x = %d, y = %d, width = %d, height = %d, unpackFlipY "
3779           "= %s, unpackPremultiplyAlpha = %s, unpackUnmultiplyAlpha = %s",
3780           CID(context), sourceId, sourceLevel,
3781           GLenumToString(GLenumGroup::DefaultGroup, destTarget), destId, destLevel, xoffset,
3782           yoffset, x, y, width, height, GLbooleanToString(unpackFlipY),
3783           GLbooleanToString(unpackPremultiplyAlpha), GLbooleanToString(unpackUnmultiplyAlpha));
3784 
3785     if (context)
3786     {
3787         TextureID sourceIdPacked       = PackParam<TextureID>(sourceId);
3788         TextureTarget destTargetPacked = PackParam<TextureTarget>(destTarget);
3789         TextureID destIdPacked         = PackParam<TextureID>(destId);
3790         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3791         bool isCallValid =
3792             (context->skipValidation() ||
3793              ValidateCopySubTextureCHROMIUM(
3794                  context, angle::EntryPoint::GLCopySubTextureCHROMIUM, sourceIdPacked, sourceLevel,
3795                  destTargetPacked, destIdPacked, destLevel, xoffset, yoffset, x, y, width, height,
3796                  unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha));
3797         if (isCallValid)
3798         {
3799             context->copySubTexture(sourceIdPacked, sourceLevel, destTargetPacked, destIdPacked,
3800                                     destLevel, xoffset, yoffset, x, y, width, height, unpackFlipY,
3801                                     unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
3802         }
3803         ANGLE_CAPTURE(CopySubTextureCHROMIUM, isCallValid, context, sourceIdPacked, sourceLevel,
3804                       destTargetPacked, destIdPacked, destLevel, xoffset, yoffset, x, y, width,
3805                       height, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
3806     }
3807     else
3808     {
3809         GenerateContextLostErrorOnCurrentGlobalContext();
3810     }
3811 }
3812 
3813 // GL_CHROMIUM_framebuffer_mixed_samples
GL_CoverageModulationCHROMIUM(GLenum components)3814 void GL_APIENTRY GL_CoverageModulationCHROMIUM(GLenum components)
3815 {
3816     Context *context = GetValidGlobalContext();
3817     EVENT(context, GLCoverageModulationCHROMIUM, "context = %d, components = %s", CID(context),
3818           GLenumToString(GLenumGroup::DefaultGroup, components));
3819 
3820     if (context)
3821     {
3822         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3823         bool isCallValid =
3824             (context->skipValidation() ||
3825              ValidateCoverageModulationCHROMIUM(
3826                  context, angle::EntryPoint::GLCoverageModulationCHROMIUM, components));
3827         if (isCallValid)
3828         {
3829             context->coverageModulation(components);
3830         }
3831         ANGLE_CAPTURE(CoverageModulationCHROMIUM, isCallValid, context, components);
3832     }
3833     else
3834     {
3835         GenerateContextLostErrorOnCurrentGlobalContext();
3836     }
3837 }
3838 
3839 // GL_CHROMIUM_lose_context
GL_LoseContextCHROMIUM(GLenum current,GLenum other)3840 void GL_APIENTRY GL_LoseContextCHROMIUM(GLenum current, GLenum other)
3841 {
3842     Context *context = GetValidGlobalContext();
3843     EVENT(context, GLLoseContextCHROMIUM, "context = %d, current = %s, other = %s", CID(context),
3844           GLenumToString(GLenumGroup::GraphicsResetStatus, current),
3845           GLenumToString(GLenumGroup::GraphicsResetStatus, other));
3846 
3847     if (context)
3848     {
3849         GraphicsResetStatus currentPacked = PackParam<GraphicsResetStatus>(current);
3850         GraphicsResetStatus otherPacked   = PackParam<GraphicsResetStatus>(other);
3851         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3852         bool isCallValid =
3853             (context->skipValidation() ||
3854              ValidateLoseContextCHROMIUM(context, angle::EntryPoint::GLLoseContextCHROMIUM,
3855                                          currentPacked, otherPacked));
3856         if (isCallValid)
3857         {
3858             context->loseContext(currentPacked, otherPacked);
3859         }
3860         ANGLE_CAPTURE(LoseContextCHROMIUM, isCallValid, context, currentPacked, otherPacked);
3861     }
3862     else
3863     {
3864         GenerateContextLostErrorOnCurrentGlobalContext();
3865     }
3866 }
3867 
3868 // GL_EXT_EGL_image_array
3869 
3870 // GL_EXT_EGL_image_storage
GL_EGLImageTargetTexStorageEXT(GLenum target,GLeglImageOES image,const GLint * attrib_list)3871 void GL_APIENTRY GL_EGLImageTargetTexStorageEXT(GLenum target,
3872                                                 GLeglImageOES image,
3873                                                 const GLint *attrib_list)
3874 {
3875     Context *context = GetValidGlobalContext();
3876     EVENT(context, GLEGLImageTargetTexStorageEXT,
3877           "context = %d, target = %s, image = 0x%016" PRIxPTR ", attrib_list = 0x%016" PRIxPTR "",
3878           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), (uintptr_t)image,
3879           (uintptr_t)attrib_list);
3880 
3881     if (context)
3882     {
3883         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3884         bool isCallValid                                      = (context->skipValidation() ||
3885                             ValidateEGLImageTargetTexStorageEXT(
3886                                 context, angle::EntryPoint::GLEGLImageTargetTexStorageEXT, target,
3887                                 image, attrib_list));
3888         if (isCallValid)
3889         {
3890             context->eGLImageTargetTexStorage(target, image, attrib_list);
3891         }
3892         ANGLE_CAPTURE(EGLImageTargetTexStorageEXT, isCallValid, context, target, image,
3893                       attrib_list);
3894     }
3895     else
3896     {
3897         GenerateContextLostErrorOnCurrentGlobalContext();
3898     }
3899 }
3900 
GL_EGLImageTargetTextureStorageEXT(GLuint texture,GLeglImageOES image,const GLint * attrib_list)3901 void GL_APIENTRY GL_EGLImageTargetTextureStorageEXT(GLuint texture,
3902                                                     GLeglImageOES image,
3903                                                     const GLint *attrib_list)
3904 {
3905     Context *context = GetValidGlobalContext();
3906     EVENT(context, GLEGLImageTargetTextureStorageEXT,
3907           "context = %d, texture = %u, image = 0x%016" PRIxPTR ", attrib_list = 0x%016" PRIxPTR "",
3908           CID(context), texture, (uintptr_t)image, (uintptr_t)attrib_list);
3909 
3910     if (context)
3911     {
3912         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3913         bool isCallValid                                      = (context->skipValidation() ||
3914                             ValidateEGLImageTargetTextureStorageEXT(
3915                                 context, angle::EntryPoint::GLEGLImageTargetTextureStorageEXT,
3916                                 texture, image, attrib_list));
3917         if (isCallValid)
3918         {
3919             context->eGLImageTargetTextureStorage(texture, image, attrib_list);
3920         }
3921         ANGLE_CAPTURE(EGLImageTargetTextureStorageEXT, isCallValid, context, texture, image,
3922                       attrib_list);
3923     }
3924     else
3925     {
3926         GenerateContextLostErrorOnCurrentGlobalContext();
3927     }
3928 }
3929 
3930 // GL_EXT_YUV_target
3931 
3932 // GL_EXT_blend_func_extended
GL_BindFragDataLocationEXT(GLuint program,GLuint color,const GLchar * name)3933 void GL_APIENTRY GL_BindFragDataLocationEXT(GLuint program, GLuint color, const GLchar *name)
3934 {
3935     Context *context = GetValidGlobalContext();
3936     EVENT(context, GLBindFragDataLocationEXT,
3937           "context = %d, program = %u, color = %u, name = 0x%016" PRIxPTR "", CID(context), program,
3938           color, (uintptr_t)name);
3939 
3940     if (context)
3941     {
3942         ShaderProgramID programPacked                         = PackParam<ShaderProgramID>(program);
3943         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3944         bool isCallValid =
3945             (context->skipValidation() ||
3946              ValidateBindFragDataLocationEXT(context, angle::EntryPoint::GLBindFragDataLocationEXT,
3947                                              programPacked, color, name));
3948         if (isCallValid)
3949         {
3950             context->bindFragDataLocation(programPacked, color, name);
3951         }
3952         ANGLE_CAPTURE(BindFragDataLocationEXT, isCallValid, context, programPacked, color, name);
3953     }
3954     else
3955     {
3956         GenerateContextLostErrorOnCurrentGlobalContext();
3957     }
3958 }
3959 
GL_BindFragDataLocationIndexedEXT(GLuint program,GLuint colorNumber,GLuint index,const GLchar * name)3960 void GL_APIENTRY GL_BindFragDataLocationIndexedEXT(GLuint program,
3961                                                    GLuint colorNumber,
3962                                                    GLuint index,
3963                                                    const GLchar *name)
3964 {
3965     Context *context = GetValidGlobalContext();
3966     EVENT(context, GLBindFragDataLocationIndexedEXT,
3967           "context = %d, program = %u, colorNumber = %u, index = %u, name = 0x%016" PRIxPTR "",
3968           CID(context), program, colorNumber, index, (uintptr_t)name);
3969 
3970     if (context)
3971     {
3972         ShaderProgramID programPacked                         = PackParam<ShaderProgramID>(program);
3973         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
3974         bool isCallValid                                      = (context->skipValidation() ||
3975                             ValidateBindFragDataLocationIndexedEXT(
3976                                 context, angle::EntryPoint::GLBindFragDataLocationIndexedEXT,
3977                                 programPacked, colorNumber, index, name));
3978         if (isCallValid)
3979         {
3980             context->bindFragDataLocationIndexed(programPacked, colorNumber, index, name);
3981         }
3982         ANGLE_CAPTURE(BindFragDataLocationIndexedEXT, isCallValid, context, programPacked,
3983                       colorNumber, index, name);
3984     }
3985     else
3986     {
3987         GenerateContextLostErrorOnCurrentGlobalContext();
3988     }
3989 }
3990 
GL_GetFragDataIndexEXT(GLuint program,const GLchar * name)3991 GLint GL_APIENTRY GL_GetFragDataIndexEXT(GLuint program, const GLchar *name)
3992 {
3993     Context *context = GetValidGlobalContext();
3994     EVENT(context, GLGetFragDataIndexEXT, "context = %d, program = %u, name = 0x%016" PRIxPTR "",
3995           CID(context), program, (uintptr_t)name);
3996 
3997     GLint returnValue;
3998     if (context)
3999     {
4000         ShaderProgramID programPacked                         = PackParam<ShaderProgramID>(program);
4001         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4002         bool isCallValid =
4003             (context->skipValidation() ||
4004              ValidateGetFragDataIndexEXT(context, angle::EntryPoint::GLGetFragDataIndexEXT,
4005                                          programPacked, name));
4006         if (isCallValid)
4007         {
4008             returnValue = context->getFragDataIndex(programPacked, name);
4009         }
4010         else
4011         {
4012             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetFragDataIndexEXT, GLint>();
4013         }
4014         ANGLE_CAPTURE(GetFragDataIndexEXT, isCallValid, context, programPacked, name, returnValue);
4015     }
4016     else
4017     {
4018         GenerateContextLostErrorOnCurrentGlobalContext();
4019         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetFragDataIndexEXT, GLint>();
4020     }
4021     return returnValue;
4022 }
4023 
GL_GetProgramResourceLocationIndexEXT(GLuint program,GLenum programInterface,const GLchar * name)4024 GLint GL_APIENTRY GL_GetProgramResourceLocationIndexEXT(GLuint program,
4025                                                         GLenum programInterface,
4026                                                         const GLchar *name)
4027 {
4028     Context *context = GetValidGlobalContext();
4029     EVENT(context, GLGetProgramResourceLocationIndexEXT,
4030           "context = %d, program = %u, programInterface = %s, name = 0x%016" PRIxPTR "",
4031           CID(context), program, GLenumToString(GLenumGroup::ProgramInterface, programInterface),
4032           (uintptr_t)name);
4033 
4034     GLint returnValue;
4035     if (context)
4036     {
4037         ShaderProgramID programPacked                         = PackParam<ShaderProgramID>(program);
4038         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4039         bool isCallValid                                      = (context->skipValidation() ||
4040                             ValidateGetProgramResourceLocationIndexEXT(
4041                                 context, angle::EntryPoint::GLGetProgramResourceLocationIndexEXT,
4042                                 programPacked, programInterface, name));
4043         if (isCallValid)
4044         {
4045             returnValue =
4046                 context->getProgramResourceLocationIndex(programPacked, programInterface, name);
4047         }
4048         else
4049         {
4050             returnValue =
4051                 GetDefaultReturnValue<angle::EntryPoint::GLGetProgramResourceLocationIndexEXT,
4052                                       GLint>();
4053         }
4054         ANGLE_CAPTURE(GetProgramResourceLocationIndexEXT, isCallValid, context, programPacked,
4055                       programInterface, name, returnValue);
4056     }
4057     else
4058     {
4059         GenerateContextLostErrorOnCurrentGlobalContext();
4060         returnValue =
4061             GetDefaultReturnValue<angle::EntryPoint::GLGetProgramResourceLocationIndexEXT, GLint>();
4062     }
4063     return returnValue;
4064 }
4065 
4066 // GL_EXT_blend_minmax
4067 
4068 // GL_EXT_buffer_storage
GL_BufferStorageEXT(GLenum target,GLsizeiptr size,const void * data,GLbitfield flags)4069 void GL_APIENTRY GL_BufferStorageEXT(GLenum target,
4070                                      GLsizeiptr size,
4071                                      const void *data,
4072                                      GLbitfield flags)
4073 {
4074     Context *context = GetValidGlobalContext();
4075     EVENT(context, GLBufferStorageEXT,
4076           "context = %d, target = %s, size = %llu, data = 0x%016" PRIxPTR ", flags = %s",
4077           CID(context), GLenumToString(GLenumGroup::BufferStorageTarget, target),
4078           static_cast<unsigned long long>(size), (uintptr_t)data,
4079           GLbitfieldToString(GLenumGroup::MapBufferUsageMask, flags).c_str());
4080 
4081     if (context)
4082     {
4083         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
4084         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4085         bool isCallValid                                      = (context->skipValidation() ||
4086                             ValidateBufferStorageEXT(context, angle::EntryPoint::GLBufferStorageEXT,
4087                                                      targetPacked, size, data, flags));
4088         if (isCallValid)
4089         {
4090             context->bufferStorage(targetPacked, size, data, flags);
4091         }
4092         ANGLE_CAPTURE(BufferStorageEXT, isCallValid, context, targetPacked, size, data, flags);
4093     }
4094     else
4095     {
4096         GenerateContextLostErrorOnCurrentGlobalContext();
4097     }
4098 }
4099 
4100 // GL_EXT_clip_control
GL_ClipControlEXT(GLenum origin,GLenum depth)4101 void GL_APIENTRY GL_ClipControlEXT(GLenum origin, GLenum depth)
4102 {
4103     Context *context = GetValidGlobalContext();
4104     EVENT(context, GLClipControlEXT, "context = %d, origin = %s, depth = %s", CID(context),
4105           GLenumToString(GLenumGroup::DefaultGroup, origin),
4106           GLenumToString(GLenumGroup::DefaultGroup, depth));
4107 
4108     if (context)
4109     {
4110         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4111         bool isCallValid =
4112             (context->skipValidation() ||
4113              ValidateClipControlEXT(context, angle::EntryPoint::GLClipControlEXT, origin, depth));
4114         if (isCallValid)
4115         {
4116             context->clipControl(origin, depth);
4117         }
4118         ANGLE_CAPTURE(ClipControlEXT, isCallValid, context, origin, depth);
4119     }
4120     else
4121     {
4122         GenerateContextLostErrorOnCurrentGlobalContext();
4123     }
4124 }
4125 
4126 // GL_EXT_clip_cull_distance
4127 
4128 // GL_EXT_color_buffer_float
4129 
4130 // GL_EXT_color_buffer_half_float
4131 
4132 // GL_EXT_copy_image
GL_CopyImageSubDataEXT(GLuint srcName,GLenum srcTarget,GLint srcLevel,GLint srcX,GLint srcY,GLint srcZ,GLuint dstName,GLenum dstTarget,GLint dstLevel,GLint dstX,GLint dstY,GLint dstZ,GLsizei srcWidth,GLsizei srcHeight,GLsizei srcDepth)4133 void GL_APIENTRY GL_CopyImageSubDataEXT(GLuint srcName,
4134                                         GLenum srcTarget,
4135                                         GLint srcLevel,
4136                                         GLint srcX,
4137                                         GLint srcY,
4138                                         GLint srcZ,
4139                                         GLuint dstName,
4140                                         GLenum dstTarget,
4141                                         GLint dstLevel,
4142                                         GLint dstX,
4143                                         GLint dstY,
4144                                         GLint dstZ,
4145                                         GLsizei srcWidth,
4146                                         GLsizei srcHeight,
4147                                         GLsizei srcDepth)
4148 {
4149     Context *context = GetValidGlobalContext();
4150     EVENT(context, GLCopyImageSubDataEXT,
4151           "context = %d, srcName = %u, srcTarget = %s, srcLevel = %d, srcX = %d, srcY = %d, srcZ = "
4152           "%d, dstName = %u, dstTarget = %s, dstLevel = %d, dstX = %d, dstY = %d, dstZ = %d, "
4153           "srcWidth = %d, srcHeight = %d, srcDepth = %d",
4154           CID(context), srcName, GLenumToString(GLenumGroup::CopyBufferSubDataTarget, srcTarget),
4155           srcLevel, srcX, srcY, srcZ, dstName,
4156           GLenumToString(GLenumGroup::CopyBufferSubDataTarget, dstTarget), dstLevel, dstX, dstY,
4157           dstZ, srcWidth, srcHeight, srcDepth);
4158 
4159     if (context)
4160     {
4161         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4162         bool isCallValid                                      = (context->skipValidation() ||
4163                             ValidateCopyImageSubDataEXT(
4164                                 context, angle::EntryPoint::GLCopyImageSubDataEXT, srcName,
4165                                 srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel,
4166                                 dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth));
4167         if (isCallValid)
4168         {
4169             context->copyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName,
4170                                       dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight,
4171                                       srcDepth);
4172         }
4173         ANGLE_CAPTURE(CopyImageSubDataEXT, isCallValid, context, srcName, srcTarget, srcLevel, srcX,
4174                       srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth,
4175                       srcHeight, srcDepth);
4176     }
4177     else
4178     {
4179         GenerateContextLostErrorOnCurrentGlobalContext();
4180     }
4181 }
4182 
4183 // GL_EXT_debug_label
4184 void GL_APIENTRY
GL_GetObjectLabelEXT(GLenum type,GLuint object,GLsizei bufSize,GLsizei * length,GLchar * label)4185 GL_GetObjectLabelEXT(GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label)
4186 {
4187     Context *context = GetValidGlobalContext();
4188     EVENT(context, GLGetObjectLabelEXT,
4189           "context = %d, type = %s, object = %u, bufSize = %d, length = 0x%016" PRIxPTR
4190           ", label = 0x%016" PRIxPTR "",
4191           CID(context), GLenumToString(GLenumGroup::DefaultGroup, type), object, bufSize,
4192           (uintptr_t)length, (uintptr_t)label);
4193 
4194     if (context)
4195     {
4196         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4197         bool isCallValid =
4198             (context->skipValidation() ||
4199              ValidateGetObjectLabelEXT(context, angle::EntryPoint::GLGetObjectLabelEXT, type,
4200                                        object, bufSize, length, label));
4201         if (isCallValid)
4202         {
4203             context->getObjectLabel(type, object, bufSize, length, label);
4204         }
4205         ANGLE_CAPTURE(GetObjectLabelEXT, isCallValid, context, type, object, bufSize, length,
4206                       label);
4207     }
4208     else
4209     {
4210         GenerateContextLostErrorOnCurrentGlobalContext();
4211     }
4212 }
4213 
GL_LabelObjectEXT(GLenum type,GLuint object,GLsizei length,const GLchar * label)4214 void GL_APIENTRY GL_LabelObjectEXT(GLenum type, GLuint object, GLsizei length, const GLchar *label)
4215 {
4216     Context *context = GetValidGlobalContext();
4217     EVENT(context, GLLabelObjectEXT,
4218           "context = %d, type = %s, object = %u, length = %d, label = 0x%016" PRIxPTR "",
4219           CID(context), GLenumToString(GLenumGroup::DefaultGroup, type), object, length,
4220           (uintptr_t)label);
4221 
4222     if (context)
4223     {
4224         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4225         bool isCallValid                                      = (context->skipValidation() ||
4226                             ValidateLabelObjectEXT(context, angle::EntryPoint::GLLabelObjectEXT,
4227                                                    type, object, length, label));
4228         if (isCallValid)
4229         {
4230             context->labelObject(type, object, length, label);
4231         }
4232         ANGLE_CAPTURE(LabelObjectEXT, isCallValid, context, type, object, length, label);
4233     }
4234     else
4235     {
4236         GenerateContextLostErrorOnCurrentGlobalContext();
4237     }
4238 }
4239 
4240 // GL_EXT_debug_marker
GL_InsertEventMarkerEXT(GLsizei length,const GLchar * marker)4241 void GL_APIENTRY GL_InsertEventMarkerEXT(GLsizei length, const GLchar *marker)
4242 {
4243     Context *context = GetValidGlobalContext();
4244     // Don't run the EVENT() macro on the EXT_debug_marker entry points.
4245     // It can interfere with the debug events being set by the caller.
4246     // EVENT(context, GLInsertEventMarkerEXT, "context = %d, length = %d, marker = 0x%016" PRIxPTR
4247     // "", CID(context), length, (uintptr_t)marker);
4248 
4249     if (context)
4250     {
4251         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4252         bool isCallValid =
4253             (context->skipValidation() ||
4254              ValidateInsertEventMarkerEXT(context, angle::EntryPoint::GLInsertEventMarkerEXT,
4255                                           length, marker));
4256         if (isCallValid)
4257         {
4258             context->insertEventMarker(length, marker);
4259         }
4260         ANGLE_CAPTURE(InsertEventMarkerEXT, isCallValid, context, length, marker);
4261     }
4262     else
4263     {
4264         GenerateContextLostErrorOnCurrentGlobalContext();
4265     }
4266 }
4267 
GL_PopGroupMarkerEXT()4268 void GL_APIENTRY GL_PopGroupMarkerEXT()
4269 {
4270     Context *context = GetValidGlobalContext();
4271     // Don't run the EVENT() macro on the EXT_debug_marker entry points.
4272     // It can interfere with the debug events being set by the caller.
4273     // EVENT(context, GLPopGroupMarkerEXT, "context = %d", CID(context));
4274 
4275     if (context)
4276     {
4277         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4278         bool isCallValid =
4279             (context->skipValidation() ||
4280              ValidatePopGroupMarkerEXT(context, angle::EntryPoint::GLPopGroupMarkerEXT));
4281         if (isCallValid)
4282         {
4283             context->popGroupMarker();
4284         }
4285         ANGLE_CAPTURE(PopGroupMarkerEXT, isCallValid, context);
4286     }
4287     else
4288     {
4289         GenerateContextLostErrorOnCurrentGlobalContext();
4290     }
4291 }
4292 
GL_PushGroupMarkerEXT(GLsizei length,const GLchar * marker)4293 void GL_APIENTRY GL_PushGroupMarkerEXT(GLsizei length, const GLchar *marker)
4294 {
4295     Context *context = GetValidGlobalContext();
4296     // Don't run the EVENT() macro on the EXT_debug_marker entry points.
4297     // It can interfere with the debug events being set by the caller.
4298     // EVENT(context, GLPushGroupMarkerEXT, "context = %d, length = %d, marker = 0x%016" PRIxPTR "",
4299     // CID(context), length, (uintptr_t)marker);
4300 
4301     if (context)
4302     {
4303         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4304         bool isCallValid                                      = (context->skipValidation() ||
4305                             ValidatePushGroupMarkerEXT(
4306                                 context, angle::EntryPoint::GLPushGroupMarkerEXT, length, marker));
4307         if (isCallValid)
4308         {
4309             context->pushGroupMarker(length, marker);
4310         }
4311         ANGLE_CAPTURE(PushGroupMarkerEXT, isCallValid, context, length, marker);
4312     }
4313     else
4314     {
4315         GenerateContextLostErrorOnCurrentGlobalContext();
4316     }
4317 }
4318 
4319 // GL_EXT_discard_framebuffer
GL_DiscardFramebufferEXT(GLenum target,GLsizei numAttachments,const GLenum * attachments)4320 void GL_APIENTRY GL_DiscardFramebufferEXT(GLenum target,
4321                                           GLsizei numAttachments,
4322                                           const GLenum *attachments)
4323 {
4324     Context *context = GetValidGlobalContext();
4325     EVENT(context, GLDiscardFramebufferEXT,
4326           "context = %d, target = %s, numAttachments = %d, attachments = 0x%016" PRIxPTR "",
4327           CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target), numAttachments,
4328           (uintptr_t)attachments);
4329 
4330     if (context)
4331     {
4332         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4333         bool isCallValid =
4334             (context->skipValidation() ||
4335              ValidateDiscardFramebufferEXT(context, angle::EntryPoint::GLDiscardFramebufferEXT,
4336                                            target, numAttachments, attachments));
4337         if (isCallValid)
4338         {
4339             context->discardFramebuffer(target, numAttachments, attachments);
4340         }
4341         ANGLE_CAPTURE(DiscardFramebufferEXT, isCallValid, context, target, numAttachments,
4342                       attachments);
4343     }
4344     else
4345     {
4346         GenerateContextLostErrorOnCurrentGlobalContext();
4347     }
4348 }
4349 
4350 // GL_EXT_disjoint_timer_query
GL_BeginQueryEXT(GLenum target,GLuint id)4351 void GL_APIENTRY GL_BeginQueryEXT(GLenum target, GLuint id)
4352 {
4353     Context *context = GetValidGlobalContext();
4354     EVENT(context, GLBeginQueryEXT, "context = %d, target = %s, id = %u", CID(context),
4355           GLenumToString(GLenumGroup::QueryTarget, target), id);
4356 
4357     if (context)
4358     {
4359         QueryType targetPacked                                = PackParam<QueryType>(target);
4360         QueryID idPacked                                      = PackParam<QueryID>(id);
4361         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4362         bool isCallValid                                      = (context->skipValidation() ||
4363                             ValidateBeginQueryEXT(context, angle::EntryPoint::GLBeginQueryEXT,
4364                                                   targetPacked, idPacked));
4365         if (isCallValid)
4366         {
4367             context->beginQuery(targetPacked, idPacked);
4368         }
4369         ANGLE_CAPTURE(BeginQueryEXT, isCallValid, context, targetPacked, idPacked);
4370     }
4371     else
4372     {
4373         GenerateContextLostErrorOnCurrentGlobalContext();
4374     }
4375 }
4376 
GL_DeleteQueriesEXT(GLsizei n,const GLuint * ids)4377 void GL_APIENTRY GL_DeleteQueriesEXT(GLsizei n, const GLuint *ids)
4378 {
4379     Context *context = GetValidGlobalContext();
4380     EVENT(context, GLDeleteQueriesEXT, "context = %d, n = %d, ids = 0x%016" PRIxPTR "",
4381           CID(context), n, (uintptr_t)ids);
4382 
4383     if (context)
4384     {
4385         const QueryID *idsPacked                              = PackParam<const QueryID *>(ids);
4386         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4387         bool isCallValid                                      = (context->skipValidation() ||
4388                             ValidateDeleteQueriesEXT(context, angle::EntryPoint::GLDeleteQueriesEXT,
4389                                                      n, idsPacked));
4390         if (isCallValid)
4391         {
4392             context->deleteQueries(n, idsPacked);
4393         }
4394         ANGLE_CAPTURE(DeleteQueriesEXT, isCallValid, context, n, idsPacked);
4395     }
4396     else
4397     {
4398         GenerateContextLostErrorOnCurrentGlobalContext();
4399     }
4400 }
4401 
GL_EndQueryEXT(GLenum target)4402 void GL_APIENTRY GL_EndQueryEXT(GLenum target)
4403 {
4404     Context *context = GetValidGlobalContext();
4405     EVENT(context, GLEndQueryEXT, "context = %d, target = %s", CID(context),
4406           GLenumToString(GLenumGroup::QueryTarget, target));
4407 
4408     if (context)
4409     {
4410         QueryType targetPacked                                = PackParam<QueryType>(target);
4411         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4412         bool isCallValid =
4413             (context->skipValidation() ||
4414              ValidateEndQueryEXT(context, angle::EntryPoint::GLEndQueryEXT, targetPacked));
4415         if (isCallValid)
4416         {
4417             context->endQuery(targetPacked);
4418         }
4419         ANGLE_CAPTURE(EndQueryEXT, isCallValid, context, targetPacked);
4420     }
4421     else
4422     {
4423         GenerateContextLostErrorOnCurrentGlobalContext();
4424     }
4425 }
4426 
GL_GenQueriesEXT(GLsizei n,GLuint * ids)4427 void GL_APIENTRY GL_GenQueriesEXT(GLsizei n, GLuint *ids)
4428 {
4429     Context *context = GetValidGlobalContext();
4430     EVENT(context, GLGenQueriesEXT, "context = %d, n = %d, ids = 0x%016" PRIxPTR "", CID(context),
4431           n, (uintptr_t)ids);
4432 
4433     if (context)
4434     {
4435         QueryID *idsPacked                                    = PackParam<QueryID *>(ids);
4436         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4437         bool isCallValid =
4438             (context->skipValidation() ||
4439              ValidateGenQueriesEXT(context, angle::EntryPoint::GLGenQueriesEXT, n, idsPacked));
4440         if (isCallValid)
4441         {
4442             context->genQueries(n, idsPacked);
4443         }
4444         ANGLE_CAPTURE(GenQueriesEXT, isCallValid, context, n, idsPacked);
4445     }
4446     else
4447     {
4448         GenerateContextLostErrorOnCurrentGlobalContext();
4449     }
4450 }
4451 
GL_GetInteger64vEXT(GLenum pname,GLint64 * data)4452 void GL_APIENTRY GL_GetInteger64vEXT(GLenum pname, GLint64 *data)
4453 {
4454     Context *context = GetValidGlobalContext();
4455     EVENT(context, GLGetInteger64vEXT, "context = %d, pname = %s, data = 0x%016" PRIxPTR "",
4456           CID(context), GLenumToString(GLenumGroup::GetPName, pname), (uintptr_t)data);
4457 
4458     if (context)
4459     {
4460         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4461         bool isCallValid =
4462             (context->skipValidation() ||
4463              ValidateGetInteger64vEXT(context, angle::EntryPoint::GLGetInteger64vEXT, pname, data));
4464         if (isCallValid)
4465         {
4466             context->getInteger64v(pname, data);
4467         }
4468         ANGLE_CAPTURE(GetInteger64vEXT, isCallValid, context, pname, data);
4469     }
4470     else
4471     {
4472         GenerateContextLostErrorOnCurrentGlobalContext();
4473     }
4474 }
4475 
GL_GetQueryObjecti64vEXT(GLuint id,GLenum pname,GLint64 * params)4476 void GL_APIENTRY GL_GetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64 *params)
4477 {
4478     Context *context = GetGlobalContext();
4479     EVENT(context, GLGetQueryObjecti64vEXT,
4480           "context = %d, id = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), id,
4481           GLenumToString(GLenumGroup::QueryObjectParameterName, pname), (uintptr_t)params);
4482 
4483     if (context)
4484     {
4485         QueryID idPacked                                      = PackParam<QueryID>(id);
4486         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4487         bool isCallValid =
4488             (context->skipValidation() ||
4489              ValidateGetQueryObjecti64vEXT(context, angle::EntryPoint::GLGetQueryObjecti64vEXT,
4490                                            idPacked, pname, params));
4491         if (isCallValid)
4492         {
4493             context->getQueryObjecti64v(idPacked, pname, params);
4494         }
4495         ANGLE_CAPTURE(GetQueryObjecti64vEXT, isCallValid, context, idPacked, pname, params);
4496     }
4497     else
4498     {}
4499 }
4500 
GL_GetQueryObjectivEXT(GLuint id,GLenum pname,GLint * params)4501 void GL_APIENTRY GL_GetQueryObjectivEXT(GLuint id, GLenum pname, GLint *params)
4502 {
4503     Context *context = GetGlobalContext();
4504     EVENT(context, GLGetQueryObjectivEXT,
4505           "context = %d, id = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), id,
4506           GLenumToString(GLenumGroup::QueryObjectParameterName, pname), (uintptr_t)params);
4507 
4508     if (context)
4509     {
4510         QueryID idPacked                                      = PackParam<QueryID>(id);
4511         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4512         bool isCallValid =
4513             (context->skipValidation() ||
4514              ValidateGetQueryObjectivEXT(context, angle::EntryPoint::GLGetQueryObjectivEXT,
4515                                          idPacked, pname, params));
4516         if (isCallValid)
4517         {
4518             context->getQueryObjectiv(idPacked, pname, params);
4519         }
4520         ANGLE_CAPTURE(GetQueryObjectivEXT, isCallValid, context, idPacked, pname, params);
4521     }
4522     else
4523     {}
4524 }
4525 
GL_GetQueryObjectui64vEXT(GLuint id,GLenum pname,GLuint64 * params)4526 void GL_APIENTRY GL_GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64 *params)
4527 {
4528     Context *context = GetValidGlobalContext();
4529     EVENT(context, GLGetQueryObjectui64vEXT,
4530           "context = %d, id = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), id,
4531           GLenumToString(GLenumGroup::QueryObjectParameterName, pname), (uintptr_t)params);
4532 
4533     if (context)
4534     {
4535         QueryID idPacked                                      = PackParam<QueryID>(id);
4536         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4537         bool isCallValid =
4538             (context->skipValidation() ||
4539              ValidateGetQueryObjectui64vEXT(context, angle::EntryPoint::GLGetQueryObjectui64vEXT,
4540                                             idPacked, pname, params));
4541         if (isCallValid)
4542         {
4543             context->getQueryObjectui64v(idPacked, pname, params);
4544         }
4545         ANGLE_CAPTURE(GetQueryObjectui64vEXT, isCallValid, context, idPacked, pname, params);
4546     }
4547     else
4548     {
4549         GenerateContextLostErrorOnCurrentGlobalContext();
4550     }
4551 }
4552 
GL_GetQueryObjectuivEXT(GLuint id,GLenum pname,GLuint * params)4553 void GL_APIENTRY GL_GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params)
4554 {
4555     Context *context = GetValidGlobalContext();
4556     EVENT(context, GLGetQueryObjectuivEXT,
4557           "context = %d, id = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), id,
4558           GLenumToString(GLenumGroup::QueryObjectParameterName, pname), (uintptr_t)params);
4559 
4560     if (context)
4561     {
4562         QueryID idPacked                                      = PackParam<QueryID>(id);
4563         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4564         bool isCallValid =
4565             (context->skipValidation() ||
4566              ValidateGetQueryObjectuivEXT(context, angle::EntryPoint::GLGetQueryObjectuivEXT,
4567                                           idPacked, pname, params));
4568         if (isCallValid)
4569         {
4570             context->getQueryObjectuiv(idPacked, pname, params);
4571         }
4572         ANGLE_CAPTURE(GetQueryObjectuivEXT, isCallValid, context, idPacked, pname, params);
4573     }
4574     else
4575     {
4576         GenerateContextLostErrorOnCurrentGlobalContext();
4577     }
4578 }
4579 
GL_GetQueryivEXT(GLenum target,GLenum pname,GLint * params)4580 void GL_APIENTRY GL_GetQueryivEXT(GLenum target, GLenum pname, GLint *params)
4581 {
4582     Context *context = GetValidGlobalContext();
4583     EVENT(context, GLGetQueryivEXT,
4584           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
4585           GLenumToString(GLenumGroup::QueryTarget, target),
4586           GLenumToString(GLenumGroup::QueryParameterName, pname), (uintptr_t)params);
4587 
4588     if (context)
4589     {
4590         QueryType targetPacked                                = PackParam<QueryType>(target);
4591         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4592         bool isCallValid                                      = (context->skipValidation() ||
4593                             ValidateGetQueryivEXT(context, angle::EntryPoint::GLGetQueryivEXT,
4594                                                   targetPacked, pname, params));
4595         if (isCallValid)
4596         {
4597             context->getQueryiv(targetPacked, pname, params);
4598         }
4599         ANGLE_CAPTURE(GetQueryivEXT, isCallValid, context, targetPacked, pname, params);
4600     }
4601     else
4602     {
4603         GenerateContextLostErrorOnCurrentGlobalContext();
4604     }
4605 }
4606 
GL_IsQueryEXT(GLuint id)4607 GLboolean GL_APIENTRY GL_IsQueryEXT(GLuint id)
4608 {
4609     Context *context = GetValidGlobalContext();
4610     EVENT(context, GLIsQueryEXT, "context = %d, id = %u", CID(context), id);
4611 
4612     GLboolean returnValue;
4613     if (context)
4614     {
4615         QueryID idPacked                                      = PackParam<QueryID>(id);
4616         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4617         bool isCallValid                                      = (context->skipValidation() ||
4618                             ValidateIsQueryEXT(context, angle::EntryPoint::GLIsQueryEXT, idPacked));
4619         if (isCallValid)
4620         {
4621             returnValue = context->isQuery(idPacked);
4622         }
4623         else
4624         {
4625             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsQueryEXT, GLboolean>();
4626         }
4627         ANGLE_CAPTURE(IsQueryEXT, isCallValid, context, idPacked, returnValue);
4628     }
4629     else
4630     {
4631         GenerateContextLostErrorOnCurrentGlobalContext();
4632         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsQueryEXT, GLboolean>();
4633     }
4634     return returnValue;
4635 }
4636 
GL_QueryCounterEXT(GLuint id,GLenum target)4637 void GL_APIENTRY GL_QueryCounterEXT(GLuint id, GLenum target)
4638 {
4639     Context *context = GetValidGlobalContext();
4640     EVENT(context, GLQueryCounterEXT, "context = %d, id = %u, target = %s", CID(context), id,
4641           GLenumToString(GLenumGroup::QueryTarget, target));
4642 
4643     if (context)
4644     {
4645         QueryID idPacked                                      = PackParam<QueryID>(id);
4646         QueryType targetPacked                                = PackParam<QueryType>(target);
4647         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4648         bool isCallValid                                      = (context->skipValidation() ||
4649                             ValidateQueryCounterEXT(context, angle::EntryPoint::GLQueryCounterEXT,
4650                                                     idPacked, targetPacked));
4651         if (isCallValid)
4652         {
4653             context->queryCounter(idPacked, targetPacked);
4654         }
4655         ANGLE_CAPTURE(QueryCounterEXT, isCallValid, context, idPacked, targetPacked);
4656     }
4657     else
4658     {
4659         GenerateContextLostErrorOnCurrentGlobalContext();
4660     }
4661 }
4662 
4663 // GL_EXT_draw_buffers
GL_DrawBuffersEXT(GLsizei n,const GLenum * bufs)4664 void GL_APIENTRY GL_DrawBuffersEXT(GLsizei n, const GLenum *bufs)
4665 {
4666     Context *context = GetValidGlobalContext();
4667     EVENT(context, GLDrawBuffersEXT, "context = %d, n = %d, bufs = 0x%016" PRIxPTR "", CID(context),
4668           n, (uintptr_t)bufs);
4669 
4670     if (context)
4671     {
4672         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4673         bool isCallValid =
4674             (context->skipValidation() ||
4675              ValidateDrawBuffersEXT(context, angle::EntryPoint::GLDrawBuffersEXT, n, bufs));
4676         if (isCallValid)
4677         {
4678             context->drawBuffers(n, bufs);
4679         }
4680         ANGLE_CAPTURE(DrawBuffersEXT, isCallValid, context, n, bufs);
4681     }
4682     else
4683     {
4684         GenerateContextLostErrorOnCurrentGlobalContext();
4685     }
4686 }
4687 
4688 // GL_EXT_draw_buffers_indexed
GL_BlendEquationSeparateiEXT(GLuint buf,GLenum modeRGB,GLenum modeAlpha)4689 void GL_APIENTRY GL_BlendEquationSeparateiEXT(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
4690 {
4691     Context *context = GetValidGlobalContext();
4692     EVENT(context, GLBlendEquationSeparateiEXT,
4693           "context = %d, buf = %u, modeRGB = %s, modeAlpha = %s", CID(context), buf,
4694           GLenumToString(GLenumGroup::BlendEquationModeEXT, modeRGB),
4695           GLenumToString(GLenumGroup::BlendEquationModeEXT, modeAlpha));
4696 
4697     if (context)
4698     {
4699         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4700         bool isCallValid =
4701             (context->skipValidation() ||
4702              ValidateBlendEquationSeparateiEXT(
4703                  context, angle::EntryPoint::GLBlendEquationSeparateiEXT, buf, modeRGB, modeAlpha));
4704         if (isCallValid)
4705         {
4706             context->blendEquationSeparatei(buf, modeRGB, modeAlpha);
4707         }
4708         ANGLE_CAPTURE(BlendEquationSeparateiEXT, isCallValid, context, buf, modeRGB, modeAlpha);
4709     }
4710     else
4711     {
4712         GenerateContextLostErrorOnCurrentGlobalContext();
4713     }
4714 }
4715 
GL_BlendEquationiEXT(GLuint buf,GLenum mode)4716 void GL_APIENTRY GL_BlendEquationiEXT(GLuint buf, GLenum mode)
4717 {
4718     Context *context = GetValidGlobalContext();
4719     EVENT(context, GLBlendEquationiEXT, "context = %d, buf = %u, mode = %s", CID(context), buf,
4720           GLenumToString(GLenumGroup::BlendEquationModeEXT, mode));
4721 
4722     if (context)
4723     {
4724         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4725         bool isCallValid =
4726             (context->skipValidation() ||
4727              ValidateBlendEquationiEXT(context, angle::EntryPoint::GLBlendEquationiEXT, buf, mode));
4728         if (isCallValid)
4729         {
4730             context->blendEquationi(buf, mode);
4731         }
4732         ANGLE_CAPTURE(BlendEquationiEXT, isCallValid, context, buf, mode);
4733     }
4734     else
4735     {
4736         GenerateContextLostErrorOnCurrentGlobalContext();
4737     }
4738 }
4739 
4740 void GL_APIENTRY
GL_BlendFuncSeparateiEXT(GLuint buf,GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)4741 GL_BlendFuncSeparateiEXT(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
4742 {
4743     Context *context = GetValidGlobalContext();
4744     EVENT(context, GLBlendFuncSeparateiEXT,
4745           "context = %d, buf = %u, srcRGB = %s, dstRGB = %s, srcAlpha = %s, dstAlpha = %s",
4746           CID(context), buf, GLenumToString(GLenumGroup::BlendingFactor, srcRGB),
4747           GLenumToString(GLenumGroup::BlendingFactor, dstRGB),
4748           GLenumToString(GLenumGroup::BlendingFactor, srcAlpha),
4749           GLenumToString(GLenumGroup::BlendingFactor, dstAlpha));
4750 
4751     if (context)
4752     {
4753         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4754         bool isCallValid =
4755             (context->skipValidation() ||
4756              ValidateBlendFuncSeparateiEXT(context, angle::EntryPoint::GLBlendFuncSeparateiEXT, buf,
4757                                            srcRGB, dstRGB, srcAlpha, dstAlpha));
4758         if (isCallValid)
4759         {
4760             context->blendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
4761         }
4762         ANGLE_CAPTURE(BlendFuncSeparateiEXT, isCallValid, context, buf, srcRGB, dstRGB, srcAlpha,
4763                       dstAlpha);
4764     }
4765     else
4766     {
4767         GenerateContextLostErrorOnCurrentGlobalContext();
4768     }
4769 }
4770 
GL_BlendFunciEXT(GLuint buf,GLenum src,GLenum dst)4771 void GL_APIENTRY GL_BlendFunciEXT(GLuint buf, GLenum src, GLenum dst)
4772 {
4773     Context *context = GetValidGlobalContext();
4774     EVENT(context, GLBlendFunciEXT, "context = %d, buf = %u, src = %s, dst = %s", CID(context), buf,
4775           GLenumToString(GLenumGroup::BlendingFactor, src),
4776           GLenumToString(GLenumGroup::BlendingFactor, dst));
4777 
4778     if (context)
4779     {
4780         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4781         bool isCallValid =
4782             (context->skipValidation() ||
4783              ValidateBlendFunciEXT(context, angle::EntryPoint::GLBlendFunciEXT, buf, src, dst));
4784         if (isCallValid)
4785         {
4786             context->blendFunci(buf, src, dst);
4787         }
4788         ANGLE_CAPTURE(BlendFunciEXT, isCallValid, context, buf, src, dst);
4789     }
4790     else
4791     {
4792         GenerateContextLostErrorOnCurrentGlobalContext();
4793     }
4794 }
4795 
GL_ColorMaskiEXT(GLuint index,GLboolean r,GLboolean g,GLboolean b,GLboolean a)4796 void GL_APIENTRY GL_ColorMaskiEXT(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
4797 {
4798     Context *context = GetValidGlobalContext();
4799     EVENT(context, GLColorMaskiEXT, "context = %d, index = %u, r = %s, g = %s, b = %s, a = %s",
4800           CID(context), index, GLbooleanToString(r), GLbooleanToString(g), GLbooleanToString(b),
4801           GLbooleanToString(a));
4802 
4803     if (context)
4804     {
4805         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4806         bool isCallValid =
4807             (context->skipValidation() ||
4808              ValidateColorMaskiEXT(context, angle::EntryPoint::GLColorMaskiEXT, index, r, g, b, a));
4809         if (isCallValid)
4810         {
4811             context->colorMaski(index, r, g, b, a);
4812         }
4813         ANGLE_CAPTURE(ColorMaskiEXT, isCallValid, context, index, r, g, b, a);
4814     }
4815     else
4816     {
4817         GenerateContextLostErrorOnCurrentGlobalContext();
4818     }
4819 }
4820 
GL_DisableiEXT(GLenum target,GLuint index)4821 void GL_APIENTRY GL_DisableiEXT(GLenum target, GLuint index)
4822 {
4823     Context *context = GetValidGlobalContext();
4824     EVENT(context, GLDisableiEXT, "context = %d, target = %s, index = %u", CID(context),
4825           GLenumToString(GLenumGroup::EnableCap, target), index);
4826 
4827     if (context)
4828     {
4829         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4830         bool isCallValid =
4831             (context->skipValidation() ||
4832              ValidateDisableiEXT(context, angle::EntryPoint::GLDisableiEXT, target, index));
4833         if (isCallValid)
4834         {
4835             context->disablei(target, index);
4836         }
4837         ANGLE_CAPTURE(DisableiEXT, isCallValid, context, target, index);
4838     }
4839     else
4840     {
4841         GenerateContextLostErrorOnCurrentGlobalContext();
4842     }
4843 }
4844 
GL_EnableiEXT(GLenum target,GLuint index)4845 void GL_APIENTRY GL_EnableiEXT(GLenum target, GLuint index)
4846 {
4847     Context *context = GetValidGlobalContext();
4848     EVENT(context, GLEnableiEXT, "context = %d, target = %s, index = %u", CID(context),
4849           GLenumToString(GLenumGroup::EnableCap, target), index);
4850 
4851     if (context)
4852     {
4853         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4854         bool isCallValid =
4855             (context->skipValidation() ||
4856              ValidateEnableiEXT(context, angle::EntryPoint::GLEnableiEXT, target, index));
4857         if (isCallValid)
4858         {
4859             context->enablei(target, index);
4860         }
4861         ANGLE_CAPTURE(EnableiEXT, isCallValid, context, target, index);
4862     }
4863     else
4864     {
4865         GenerateContextLostErrorOnCurrentGlobalContext();
4866     }
4867 }
4868 
GL_IsEnablediEXT(GLenum target,GLuint index)4869 GLboolean GL_APIENTRY GL_IsEnablediEXT(GLenum target, GLuint index)
4870 {
4871     Context *context = GetValidGlobalContext();
4872     EVENT(context, GLIsEnablediEXT, "context = %d, target = %s, index = %u", CID(context),
4873           GLenumToString(GLenumGroup::EnableCap, target), index);
4874 
4875     GLboolean returnValue;
4876     if (context)
4877     {
4878         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4879         bool isCallValid =
4880             (context->skipValidation() ||
4881              ValidateIsEnablediEXT(context, angle::EntryPoint::GLIsEnablediEXT, target, index));
4882         if (isCallValid)
4883         {
4884             returnValue = context->isEnabledi(target, index);
4885         }
4886         else
4887         {
4888             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnablediEXT, GLboolean>();
4889         }
4890         ANGLE_CAPTURE(IsEnablediEXT, isCallValid, context, target, index, returnValue);
4891     }
4892     else
4893     {
4894         GenerateContextLostErrorOnCurrentGlobalContext();
4895         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnablediEXT, GLboolean>();
4896     }
4897     return returnValue;
4898 }
4899 
4900 // GL_EXT_draw_elements_base_vertex
GL_DrawElementsBaseVertexEXT(GLenum mode,GLsizei count,GLenum type,const void * indices,GLint basevertex)4901 void GL_APIENTRY GL_DrawElementsBaseVertexEXT(GLenum mode,
4902                                               GLsizei count,
4903                                               GLenum type,
4904                                               const void *indices,
4905                                               GLint basevertex)
4906 {
4907     Context *context = GetValidGlobalContext();
4908     EVENT(context, GLDrawElementsBaseVertexEXT,
4909           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
4910           ", basevertex = %d",
4911           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), count,
4912           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, basevertex);
4913 
4914     if (context)
4915     {
4916         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
4917         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
4918         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4919         bool isCallValid                                      = (context->skipValidation() ||
4920                             ValidateDrawElementsBaseVertexEXT(
4921                                 context, angle::EntryPoint::GLDrawElementsBaseVertexEXT, modePacked,
4922                                 count, typePacked, indices, basevertex));
4923         if (isCallValid)
4924         {
4925             context->drawElementsBaseVertex(modePacked, count, typePacked, indices, basevertex);
4926         }
4927         ANGLE_CAPTURE(DrawElementsBaseVertexEXT, isCallValid, context, modePacked, count,
4928                       typePacked, indices, basevertex);
4929     }
4930     else
4931     {
4932         GenerateContextLostErrorOnCurrentGlobalContext();
4933     }
4934 }
4935 
GL_DrawElementsInstancedBaseVertexEXT(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei instancecount,GLint basevertex)4936 void GL_APIENTRY GL_DrawElementsInstancedBaseVertexEXT(GLenum mode,
4937                                                        GLsizei count,
4938                                                        GLenum type,
4939                                                        const void *indices,
4940                                                        GLsizei instancecount,
4941                                                        GLint basevertex)
4942 {
4943     Context *context = GetValidGlobalContext();
4944     EVENT(context, GLDrawElementsInstancedBaseVertexEXT,
4945           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
4946           ", instancecount = %d, basevertex = %d",
4947           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), count,
4948           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, instancecount,
4949           basevertex);
4950 
4951     if (context)
4952     {
4953         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
4954         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
4955         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4956         bool isCallValid                                      = (context->skipValidation() ||
4957                             ValidateDrawElementsInstancedBaseVertexEXT(
4958                                 context, angle::EntryPoint::GLDrawElementsInstancedBaseVertexEXT,
4959                                 modePacked, count, typePacked, indices, instancecount, basevertex));
4960         if (isCallValid)
4961         {
4962             context->drawElementsInstancedBaseVertex(modePacked, count, typePacked, indices,
4963                                                      instancecount, basevertex);
4964         }
4965         ANGLE_CAPTURE(DrawElementsInstancedBaseVertexEXT, isCallValid, context, modePacked, count,
4966                       typePacked, indices, instancecount, basevertex);
4967     }
4968     else
4969     {
4970         GenerateContextLostErrorOnCurrentGlobalContext();
4971     }
4972 }
4973 
GL_DrawRangeElementsBaseVertexEXT(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const void * indices,GLint basevertex)4974 void GL_APIENTRY GL_DrawRangeElementsBaseVertexEXT(GLenum mode,
4975                                                    GLuint start,
4976                                                    GLuint end,
4977                                                    GLsizei count,
4978                                                    GLenum type,
4979                                                    const void *indices,
4980                                                    GLint basevertex)
4981 {
4982     Context *context = GetValidGlobalContext();
4983     EVENT(context, GLDrawRangeElementsBaseVertexEXT,
4984           "context = %d, mode = %s, start = %u, end = %u, count = %d, type = %s, indices = "
4985           "0x%016" PRIxPTR ", basevertex = %d",
4986           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), start, end, count,
4987           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, basevertex);
4988 
4989     if (context)
4990     {
4991         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
4992         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
4993         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
4994         bool isCallValid                                      = (context->skipValidation() ||
4995                             ValidateDrawRangeElementsBaseVertexEXT(
4996                                 context, angle::EntryPoint::GLDrawRangeElementsBaseVertexEXT,
4997                                 modePacked, start, end, count, typePacked, indices, basevertex));
4998         if (isCallValid)
4999         {
5000             context->drawRangeElementsBaseVertex(modePacked, start, end, count, typePacked, indices,
5001                                                  basevertex);
5002         }
5003         ANGLE_CAPTURE(DrawRangeElementsBaseVertexEXT, isCallValid, context, modePacked, start, end,
5004                       count, typePacked, indices, basevertex);
5005     }
5006     else
5007     {
5008         GenerateContextLostErrorOnCurrentGlobalContext();
5009     }
5010 }
5011 
GL_MultiDrawElementsBaseVertexEXT(GLenum mode,const GLsizei * count,GLenum type,const void * const * indices,GLsizei primcount,const GLint * basevertex)5012 void GL_APIENTRY GL_MultiDrawElementsBaseVertexEXT(GLenum mode,
5013                                                    const GLsizei *count,
5014                                                    GLenum type,
5015                                                    const void *const *indices,
5016                                                    GLsizei primcount,
5017                                                    const GLint *basevertex)
5018 {
5019     Context *context = GetValidGlobalContext();
5020     EVENT(context, GLMultiDrawElementsBaseVertexEXT,
5021           "context = %d, mode = %s, count = 0x%016" PRIxPTR ", type = %s, indices = 0x%016" PRIxPTR
5022           ", primcount = %d, basevertex = 0x%016" PRIxPTR "",
5023           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), (uintptr_t)count,
5024           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, primcount,
5025           (uintptr_t)basevertex);
5026 
5027     if (context)
5028     {
5029         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
5030         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
5031         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5032         bool isCallValid                                      = (context->skipValidation() ||
5033                             ValidateMultiDrawElementsBaseVertexEXT(
5034                                 context, angle::EntryPoint::GLMultiDrawElementsBaseVertexEXT,
5035                                 modePacked, count, typePacked, indices, primcount, basevertex));
5036         if (isCallValid)
5037         {
5038             context->multiDrawElementsBaseVertex(modePacked, count, typePacked, indices, primcount,
5039                                                  basevertex);
5040         }
5041         ANGLE_CAPTURE(MultiDrawElementsBaseVertexEXT, isCallValid, context, modePacked, count,
5042                       typePacked, indices, primcount, basevertex);
5043     }
5044     else
5045     {
5046         GenerateContextLostErrorOnCurrentGlobalContext();
5047     }
5048 }
5049 
5050 // GL_EXT_external_buffer
GL_BufferStorageExternalEXT(GLenum target,GLintptr offset,GLsizeiptr size,GLeglClientBufferEXT clientBuffer,GLbitfield flags)5051 void GL_APIENTRY GL_BufferStorageExternalEXT(GLenum target,
5052                                              GLintptr offset,
5053                                              GLsizeiptr size,
5054                                              GLeglClientBufferEXT clientBuffer,
5055                                              GLbitfield flags)
5056 {
5057     Context *context = GetValidGlobalContext();
5058     EVENT(context, GLBufferStorageExternalEXT,
5059           "context = %d, target = %s, offset = %llu, size = %llu, clientBuffer = 0x%016" PRIxPTR
5060           ", flags = %s",
5061           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target),
5062           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(size),
5063           (uintptr_t)clientBuffer,
5064           GLbitfieldToString(GLenumGroup::MapBufferUsageMask, flags).c_str());
5065 
5066     if (context)
5067     {
5068         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
5069         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5070         bool isCallValid                                      = (context->skipValidation() ||
5071                             ValidateBufferStorageExternalEXT(
5072                                 context, angle::EntryPoint::GLBufferStorageExternalEXT,
5073                                 targetPacked, offset, size, clientBuffer, flags));
5074         if (isCallValid)
5075         {
5076             context->bufferStorageExternal(targetPacked, offset, size, clientBuffer, flags);
5077         }
5078         ANGLE_CAPTURE(BufferStorageExternalEXT, isCallValid, context, targetPacked, offset, size,
5079                       clientBuffer, flags);
5080     }
5081     else
5082     {
5083         GenerateContextLostErrorOnCurrentGlobalContext();
5084     }
5085 }
5086 
GL_NamedBufferStorageExternalEXT(GLuint buffer,GLintptr offset,GLsizeiptr size,GLeglClientBufferEXT clientBuffer,GLbitfield flags)5087 void GL_APIENTRY GL_NamedBufferStorageExternalEXT(GLuint buffer,
5088                                                   GLintptr offset,
5089                                                   GLsizeiptr size,
5090                                                   GLeglClientBufferEXT clientBuffer,
5091                                                   GLbitfield flags)
5092 {
5093     Context *context = GetValidGlobalContext();
5094     EVENT(context, GLNamedBufferStorageExternalEXT,
5095           "context = %d, buffer = %u, offset = %llu, size = %llu, clientBuffer = 0x%016" PRIxPTR
5096           ", flags = %s",
5097           CID(context), buffer, static_cast<unsigned long long>(offset),
5098           static_cast<unsigned long long>(size), (uintptr_t)clientBuffer,
5099           GLbitfieldToString(GLenumGroup::MapBufferUsageMask, flags).c_str());
5100 
5101     if (context)
5102     {
5103         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5104         bool isCallValid                                      = (context->skipValidation() ||
5105                             ValidateNamedBufferStorageExternalEXT(
5106                                 context, angle::EntryPoint::GLNamedBufferStorageExternalEXT, buffer,
5107                                 offset, size, clientBuffer, flags));
5108         if (isCallValid)
5109         {
5110             context->namedBufferStorageExternal(buffer, offset, size, clientBuffer, flags);
5111         }
5112         ANGLE_CAPTURE(NamedBufferStorageExternalEXT, isCallValid, context, buffer, offset, size,
5113                       clientBuffer, flags);
5114     }
5115     else
5116     {
5117         GenerateContextLostErrorOnCurrentGlobalContext();
5118     }
5119 }
5120 
5121 // GL_EXT_float_blend
5122 
5123 // GL_EXT_geometry_shader
GL_FramebufferTextureEXT(GLenum target,GLenum attachment,GLuint texture,GLint level)5124 void GL_APIENTRY GL_FramebufferTextureEXT(GLenum target,
5125                                           GLenum attachment,
5126                                           GLuint texture,
5127                                           GLint level)
5128 {
5129     Context *context = GetValidGlobalContext();
5130     EVENT(context, GLFramebufferTextureEXT,
5131           "context = %d, target = %s, attachment = %s, texture = %u, level = %d", CID(context),
5132           GLenumToString(GLenumGroup::FramebufferTarget, target),
5133           GLenumToString(GLenumGroup::FramebufferAttachment, attachment), texture, level);
5134 
5135     if (context)
5136     {
5137         TextureID texturePacked                               = PackParam<TextureID>(texture);
5138         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5139         bool isCallValid =
5140             (context->skipValidation() ||
5141              ValidateFramebufferTextureEXT(context, angle::EntryPoint::GLFramebufferTextureEXT,
5142                                            target, attachment, texturePacked, level));
5143         if (isCallValid)
5144         {
5145             context->framebufferTexture(target, attachment, texturePacked, level);
5146         }
5147         ANGLE_CAPTURE(FramebufferTextureEXT, isCallValid, context, target, attachment,
5148                       texturePacked, level);
5149     }
5150     else
5151     {
5152         GenerateContextLostErrorOnCurrentGlobalContext();
5153     }
5154 }
5155 
5156 // GL_EXT_gpu_shader5
5157 
5158 // GL_EXT_instanced_arrays
GL_DrawArraysInstancedEXT(GLenum mode,GLint start,GLsizei count,GLsizei primcount)5159 void GL_APIENTRY GL_DrawArraysInstancedEXT(GLenum mode,
5160                                            GLint start,
5161                                            GLsizei count,
5162                                            GLsizei primcount)
5163 {
5164     Context *context = GetValidGlobalContext();
5165     EVENT(context, GLDrawArraysInstancedEXT,
5166           "context = %d, mode = %s, start = %d, count = %d, primcount = %d", CID(context),
5167           GLenumToString(GLenumGroup::PrimitiveType, mode), start, count, primcount);
5168 
5169     if (context)
5170     {
5171         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
5172         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5173         bool isCallValid =
5174             (context->skipValidation() ||
5175              ValidateDrawArraysInstancedEXT(context, angle::EntryPoint::GLDrawArraysInstancedEXT,
5176                                             modePacked, start, count, primcount));
5177         if (isCallValid)
5178         {
5179             context->drawArraysInstanced(modePacked, start, count, primcount);
5180         }
5181         ANGLE_CAPTURE(DrawArraysInstancedEXT, isCallValid, context, modePacked, start, count,
5182                       primcount);
5183     }
5184     else
5185     {
5186         GenerateContextLostErrorOnCurrentGlobalContext();
5187     }
5188 }
5189 
GL_DrawElementsInstancedEXT(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei primcount)5190 void GL_APIENTRY GL_DrawElementsInstancedEXT(GLenum mode,
5191                                              GLsizei count,
5192                                              GLenum type,
5193                                              const void *indices,
5194                                              GLsizei primcount)
5195 {
5196     Context *context = GetValidGlobalContext();
5197     EVENT(context, GLDrawElementsInstancedEXT,
5198           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
5199           ", primcount = %d",
5200           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), count,
5201           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, primcount);
5202 
5203     if (context)
5204     {
5205         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
5206         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
5207         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5208         bool isCallValid                                      = (context->skipValidation() ||
5209                             ValidateDrawElementsInstancedEXT(
5210                                 context, angle::EntryPoint::GLDrawElementsInstancedEXT, modePacked,
5211                                 count, typePacked, indices, primcount));
5212         if (isCallValid)
5213         {
5214             context->drawElementsInstanced(modePacked, count, typePacked, indices, primcount);
5215         }
5216         ANGLE_CAPTURE(DrawElementsInstancedEXT, isCallValid, context, modePacked, count, typePacked,
5217                       indices, primcount);
5218     }
5219     else
5220     {
5221         GenerateContextLostErrorOnCurrentGlobalContext();
5222     }
5223 }
5224 
GL_VertexAttribDivisorEXT(GLuint index,GLuint divisor)5225 void GL_APIENTRY GL_VertexAttribDivisorEXT(GLuint index, GLuint divisor)
5226 {
5227     Context *context = GetValidGlobalContext();
5228     EVENT(context, GLVertexAttribDivisorEXT, "context = %d, index = %u, divisor = %u", CID(context),
5229           index, divisor);
5230 
5231     if (context)
5232     {
5233         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5234         bool isCallValid =
5235             (context->skipValidation() ||
5236              ValidateVertexAttribDivisorEXT(context, angle::EntryPoint::GLVertexAttribDivisorEXT,
5237                                             index, divisor));
5238         if (isCallValid)
5239         {
5240             context->vertexAttribDivisor(index, divisor);
5241         }
5242         ANGLE_CAPTURE(VertexAttribDivisorEXT, isCallValid, context, index, divisor);
5243     }
5244     else
5245     {
5246         GenerateContextLostErrorOnCurrentGlobalContext();
5247     }
5248 }
5249 
5250 // GL_EXT_map_buffer_range
GL_FlushMappedBufferRangeEXT(GLenum target,GLintptr offset,GLsizeiptr length)5251 void GL_APIENTRY GL_FlushMappedBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length)
5252 {
5253     Context *context = GetValidGlobalContext();
5254     EVENT(context, GLFlushMappedBufferRangeEXT,
5255           "context = %d, target = %s, offset = %llu, length = %llu", CID(context),
5256           GLenumToString(GLenumGroup::BufferTargetARB, target),
5257           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(length));
5258 
5259     if (context)
5260     {
5261         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
5262         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5263         bool isCallValid                                      = (context->skipValidation() ||
5264                             ValidateFlushMappedBufferRangeEXT(
5265                                 context, angle::EntryPoint::GLFlushMappedBufferRangeEXT,
5266                                 targetPacked, offset, length));
5267         if (isCallValid)
5268         {
5269             context->flushMappedBufferRange(targetPacked, offset, length);
5270         }
5271         ANGLE_CAPTURE(FlushMappedBufferRangeEXT, isCallValid, context, targetPacked, offset,
5272                       length);
5273     }
5274     else
5275     {
5276         GenerateContextLostErrorOnCurrentGlobalContext();
5277     }
5278 }
5279 
GL_MapBufferRangeEXT(GLenum target,GLintptr offset,GLsizeiptr length,GLbitfield access)5280 void *GL_APIENTRY GL_MapBufferRangeEXT(GLenum target,
5281                                        GLintptr offset,
5282                                        GLsizeiptr length,
5283                                        GLbitfield access)
5284 {
5285     Context *context = GetValidGlobalContext();
5286     EVENT(context, GLMapBufferRangeEXT,
5287           "context = %d, target = %s, offset = %llu, length = %llu, access = %s", CID(context),
5288           GLenumToString(GLenumGroup::BufferTargetARB, target),
5289           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(length),
5290           GLbitfieldToString(GLenumGroup::BufferAccessMask, access).c_str());
5291 
5292     void *returnValue;
5293     if (context)
5294     {
5295         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
5296         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5297         bool isCallValid =
5298             (context->skipValidation() ||
5299              ValidateMapBufferRangeEXT(context, angle::EntryPoint::GLMapBufferRangeEXT,
5300                                        targetPacked, offset, length, access));
5301         if (isCallValid)
5302         {
5303             returnValue = context->mapBufferRange(targetPacked, offset, length, access);
5304         }
5305         else
5306         {
5307             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferRangeEXT, void *>();
5308         }
5309         ANGLE_CAPTURE(MapBufferRangeEXT, isCallValid, context, targetPacked, offset, length, access,
5310                       returnValue);
5311     }
5312     else
5313     {
5314         GenerateContextLostErrorOnCurrentGlobalContext();
5315         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferRangeEXT, void *>();
5316     }
5317     return returnValue;
5318 }
5319 
5320 // GL_EXT_memory_object
GL_BufferStorageMemEXT(GLenum target,GLsizeiptr size,GLuint memory,GLuint64 offset)5321 void GL_APIENTRY GL_BufferStorageMemEXT(GLenum target,
5322                                         GLsizeiptr size,
5323                                         GLuint memory,
5324                                         GLuint64 offset)
5325 {
5326     Context *context = GetValidGlobalContext();
5327     EVENT(context, GLBufferStorageMemEXT,
5328           "context = %d, target = %s, size = %llu, memory = %u, offset = %llu", CID(context),
5329           GLenumToString(GLenumGroup::BufferTargetARB, target),
5330           static_cast<unsigned long long>(size), memory, static_cast<unsigned long long>(offset));
5331 
5332     if (context)
5333     {
5334         TextureType targetPacked                              = PackParam<TextureType>(target);
5335         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
5336         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5337         bool isCallValid =
5338             (context->skipValidation() ||
5339              ValidateBufferStorageMemEXT(context, angle::EntryPoint::GLBufferStorageMemEXT,
5340                                          targetPacked, size, memoryPacked, offset));
5341         if (isCallValid)
5342         {
5343             context->bufferStorageMem(targetPacked, size, memoryPacked, offset);
5344         }
5345         ANGLE_CAPTURE(BufferStorageMemEXT, isCallValid, context, targetPacked, size, memoryPacked,
5346                       offset);
5347     }
5348     else
5349     {
5350         GenerateContextLostErrorOnCurrentGlobalContext();
5351     }
5352 }
5353 
GL_CreateMemoryObjectsEXT(GLsizei n,GLuint * memoryObjects)5354 void GL_APIENTRY GL_CreateMemoryObjectsEXT(GLsizei n, GLuint *memoryObjects)
5355 {
5356     Context *context = GetValidGlobalContext();
5357     EVENT(context, GLCreateMemoryObjectsEXT,
5358           "context = %d, n = %d, memoryObjects = 0x%016" PRIxPTR "", CID(context), n,
5359           (uintptr_t)memoryObjects);
5360 
5361     if (context)
5362     {
5363         MemoryObjectID *memoryObjectsPacked = PackParam<MemoryObjectID *>(memoryObjects);
5364         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5365         bool isCallValid =
5366             (context->skipValidation() ||
5367              ValidateCreateMemoryObjectsEXT(context, angle::EntryPoint::GLCreateMemoryObjectsEXT, n,
5368                                             memoryObjectsPacked));
5369         if (isCallValid)
5370         {
5371             context->createMemoryObjects(n, memoryObjectsPacked);
5372         }
5373         ANGLE_CAPTURE(CreateMemoryObjectsEXT, isCallValid, context, n, memoryObjectsPacked);
5374     }
5375     else
5376     {
5377         GenerateContextLostErrorOnCurrentGlobalContext();
5378     }
5379 }
5380 
GL_DeleteMemoryObjectsEXT(GLsizei n,const GLuint * memoryObjects)5381 void GL_APIENTRY GL_DeleteMemoryObjectsEXT(GLsizei n, const GLuint *memoryObjects)
5382 {
5383     Context *context = GetValidGlobalContext();
5384     EVENT(context, GLDeleteMemoryObjectsEXT,
5385           "context = %d, n = %d, memoryObjects = 0x%016" PRIxPTR "", CID(context), n,
5386           (uintptr_t)memoryObjects);
5387 
5388     if (context)
5389     {
5390         const MemoryObjectID *memoryObjectsPacked =
5391             PackParam<const MemoryObjectID *>(memoryObjects);
5392         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5393         bool isCallValid =
5394             (context->skipValidation() ||
5395              ValidateDeleteMemoryObjectsEXT(context, angle::EntryPoint::GLDeleteMemoryObjectsEXT, n,
5396                                             memoryObjectsPacked));
5397         if (isCallValid)
5398         {
5399             context->deleteMemoryObjects(n, memoryObjectsPacked);
5400         }
5401         ANGLE_CAPTURE(DeleteMemoryObjectsEXT, isCallValid, context, n, memoryObjectsPacked);
5402     }
5403     else
5404     {
5405         GenerateContextLostErrorOnCurrentGlobalContext();
5406     }
5407 }
5408 
GL_GetMemoryObjectParameterivEXT(GLuint memoryObject,GLenum pname,GLint * params)5409 void GL_APIENTRY GL_GetMemoryObjectParameterivEXT(GLuint memoryObject, GLenum pname, GLint *params)
5410 {
5411     Context *context = GetValidGlobalContext();
5412     EVENT(context, GLGetMemoryObjectParameterivEXT,
5413           "context = %d, memoryObject = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
5414           memoryObject, GLenumToString(GLenumGroup::MemoryObjectParameterName, pname),
5415           (uintptr_t)params);
5416 
5417     if (context)
5418     {
5419         MemoryObjectID memoryObjectPacked = PackParam<MemoryObjectID>(memoryObject);
5420         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5421         bool isCallValid                                      = (context->skipValidation() ||
5422                             ValidateGetMemoryObjectParameterivEXT(
5423                                 context, angle::EntryPoint::GLGetMemoryObjectParameterivEXT,
5424                                 memoryObjectPacked, pname, params));
5425         if (isCallValid)
5426         {
5427             context->getMemoryObjectParameteriv(memoryObjectPacked, pname, params);
5428         }
5429         ANGLE_CAPTURE(GetMemoryObjectParameterivEXT, isCallValid, context, memoryObjectPacked,
5430                       pname, params);
5431     }
5432     else
5433     {
5434         GenerateContextLostErrorOnCurrentGlobalContext();
5435     }
5436 }
5437 
GL_GetUnsignedBytevEXT(GLenum pname,GLubyte * data)5438 void GL_APIENTRY GL_GetUnsignedBytevEXT(GLenum pname, GLubyte *data)
5439 {
5440     Context *context = GetValidGlobalContext();
5441     EVENT(context, GLGetUnsignedBytevEXT, "context = %d, pname = %s, data = 0x%016" PRIxPTR "",
5442           CID(context), GLenumToString(GLenumGroup::GetPName, pname), (uintptr_t)data);
5443 
5444     if (context)
5445     {
5446         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5447         bool isCallValid                                      = (context->skipValidation() ||
5448                             ValidateGetUnsignedBytevEXT(
5449                                 context, angle::EntryPoint::GLGetUnsignedBytevEXT, pname, data));
5450         if (isCallValid)
5451         {
5452             context->getUnsignedBytev(pname, data);
5453         }
5454         ANGLE_CAPTURE(GetUnsignedBytevEXT, isCallValid, context, pname, data);
5455     }
5456     else
5457     {
5458         GenerateContextLostErrorOnCurrentGlobalContext();
5459     }
5460 }
5461 
GL_GetUnsignedBytei_vEXT(GLenum target,GLuint index,GLubyte * data)5462 void GL_APIENTRY GL_GetUnsignedBytei_vEXT(GLenum target, GLuint index, GLubyte *data)
5463 {
5464     Context *context = GetValidGlobalContext();
5465     EVENT(context, GLGetUnsignedBytei_vEXT,
5466           "context = %d, target = %s, index = %u, data = 0x%016" PRIxPTR "", CID(context),
5467           GLenumToString(GLenumGroup::DefaultGroup, target), index, (uintptr_t)data);
5468 
5469     if (context)
5470     {
5471         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5472         bool isCallValid =
5473             (context->skipValidation() ||
5474              ValidateGetUnsignedBytei_vEXT(context, angle::EntryPoint::GLGetUnsignedBytei_vEXT,
5475                                            target, index, data));
5476         if (isCallValid)
5477         {
5478             context->getUnsignedBytei_v(target, index, data);
5479         }
5480         ANGLE_CAPTURE(GetUnsignedBytei_vEXT, isCallValid, context, target, index, data);
5481     }
5482     else
5483     {
5484         GenerateContextLostErrorOnCurrentGlobalContext();
5485     }
5486 }
5487 
GL_IsMemoryObjectEXT(GLuint memoryObject)5488 GLboolean GL_APIENTRY GL_IsMemoryObjectEXT(GLuint memoryObject)
5489 {
5490     Context *context = GetValidGlobalContext();
5491     EVENT(context, GLIsMemoryObjectEXT, "context = %d, memoryObject = %u", CID(context),
5492           memoryObject);
5493 
5494     GLboolean returnValue;
5495     if (context)
5496     {
5497         MemoryObjectID memoryObjectPacked = PackParam<MemoryObjectID>(memoryObject);
5498         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5499         bool isCallValid =
5500             (context->skipValidation() ||
5501              ValidateIsMemoryObjectEXT(context, angle::EntryPoint::GLIsMemoryObjectEXT,
5502                                        memoryObjectPacked));
5503         if (isCallValid)
5504         {
5505             returnValue = context->isMemoryObject(memoryObjectPacked);
5506         }
5507         else
5508         {
5509             returnValue =
5510                 GetDefaultReturnValue<angle::EntryPoint::GLIsMemoryObjectEXT, GLboolean>();
5511         }
5512         ANGLE_CAPTURE(IsMemoryObjectEXT, isCallValid, context, memoryObjectPacked, returnValue);
5513     }
5514     else
5515     {
5516         GenerateContextLostErrorOnCurrentGlobalContext();
5517         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsMemoryObjectEXT, GLboolean>();
5518     }
5519     return returnValue;
5520 }
5521 
GL_MemoryObjectParameterivEXT(GLuint memoryObject,GLenum pname,const GLint * params)5522 void GL_APIENTRY GL_MemoryObjectParameterivEXT(GLuint memoryObject,
5523                                                GLenum pname,
5524                                                const GLint *params)
5525 {
5526     Context *context = GetValidGlobalContext();
5527     EVENT(context, GLMemoryObjectParameterivEXT,
5528           "context = %d, memoryObject = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
5529           memoryObject, GLenumToString(GLenumGroup::MemoryObjectParameterName, pname),
5530           (uintptr_t)params);
5531 
5532     if (context)
5533     {
5534         MemoryObjectID memoryObjectPacked = PackParam<MemoryObjectID>(memoryObject);
5535         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5536         bool isCallValid                                      = (context->skipValidation() ||
5537                             ValidateMemoryObjectParameterivEXT(
5538                                 context, angle::EntryPoint::GLMemoryObjectParameterivEXT,
5539                                 memoryObjectPacked, pname, params));
5540         if (isCallValid)
5541         {
5542             context->memoryObjectParameteriv(memoryObjectPacked, pname, params);
5543         }
5544         ANGLE_CAPTURE(MemoryObjectParameterivEXT, isCallValid, context, memoryObjectPacked, pname,
5545                       params);
5546     }
5547     else
5548     {
5549         GenerateContextLostErrorOnCurrentGlobalContext();
5550     }
5551 }
5552 
GL_TexStorageMem2DEXT(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height,GLuint memory,GLuint64 offset)5553 void GL_APIENTRY GL_TexStorageMem2DEXT(GLenum target,
5554                                        GLsizei levels,
5555                                        GLenum internalFormat,
5556                                        GLsizei width,
5557                                        GLsizei height,
5558                                        GLuint memory,
5559                                        GLuint64 offset)
5560 {
5561     Context *context = GetValidGlobalContext();
5562     EVENT(context, GLTexStorageMem2DEXT,
5563           "context = %d, target = %s, levels = %d, internalFormat = %s, width = %d, height = %d, "
5564           "memory = %u, offset = %llu",
5565           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), levels,
5566           GLenumToString(GLenumGroup::DefaultGroup, internalFormat), width, height, memory,
5567           static_cast<unsigned long long>(offset));
5568 
5569     if (context)
5570     {
5571         TextureType targetPacked                              = PackParam<TextureType>(target);
5572         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
5573         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5574         bool isCallValid                                      = (context->skipValidation() ||
5575                             ValidateTexStorageMem2DEXT(
5576                                 context, angle::EntryPoint::GLTexStorageMem2DEXT, targetPacked,
5577                                 levels, internalFormat, width, height, memoryPacked, offset));
5578         if (isCallValid)
5579         {
5580             context->texStorageMem2D(targetPacked, levels, internalFormat, width, height,
5581                                      memoryPacked, offset);
5582         }
5583         ANGLE_CAPTURE(TexStorageMem2DEXT, isCallValid, context, targetPacked, levels,
5584                       internalFormat, width, height, memoryPacked, offset);
5585     }
5586     else
5587     {
5588         GenerateContextLostErrorOnCurrentGlobalContext();
5589     }
5590 }
5591 
GL_TexStorageMem2DMultisampleEXT(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLboolean fixedSampleLocations,GLuint memory,GLuint64 offset)5592 void GL_APIENTRY GL_TexStorageMem2DMultisampleEXT(GLenum target,
5593                                                   GLsizei samples,
5594                                                   GLenum internalFormat,
5595                                                   GLsizei width,
5596                                                   GLsizei height,
5597                                                   GLboolean fixedSampleLocations,
5598                                                   GLuint memory,
5599                                                   GLuint64 offset)
5600 {
5601     Context *context = GetValidGlobalContext();
5602     EVENT(context, GLTexStorageMem2DMultisampleEXT,
5603           "context = %d, target = %s, samples = %d, internalFormat = %s, width = %d, height = %d, "
5604           "fixedSampleLocations = %s, memory = %u, offset = %llu",
5605           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), samples,
5606           GLenumToString(GLenumGroup::DefaultGroup, internalFormat), width, height,
5607           GLbooleanToString(fixedSampleLocations), memory, static_cast<unsigned long long>(offset));
5608 
5609     if (context)
5610     {
5611         TextureType targetPacked                              = PackParam<TextureType>(target);
5612         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
5613         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5614         bool isCallValid =
5615             (context->skipValidation() ||
5616              ValidateTexStorageMem2DMultisampleEXT(
5617                  context, angle::EntryPoint::GLTexStorageMem2DMultisampleEXT, targetPacked, samples,
5618                  internalFormat, width, height, fixedSampleLocations, memoryPacked, offset));
5619         if (isCallValid)
5620         {
5621             context->texStorageMem2DMultisample(targetPacked, samples, internalFormat, width,
5622                                                 height, fixedSampleLocations, memoryPacked, offset);
5623         }
5624         ANGLE_CAPTURE(TexStorageMem2DMultisampleEXT, isCallValid, context, targetPacked, samples,
5625                       internalFormat, width, height, fixedSampleLocations, memoryPacked, offset);
5626     }
5627     else
5628     {
5629         GenerateContextLostErrorOnCurrentGlobalContext();
5630     }
5631 }
5632 
GL_TexStorageMem3DEXT(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLuint memory,GLuint64 offset)5633 void GL_APIENTRY GL_TexStorageMem3DEXT(GLenum target,
5634                                        GLsizei levels,
5635                                        GLenum internalFormat,
5636                                        GLsizei width,
5637                                        GLsizei height,
5638                                        GLsizei depth,
5639                                        GLuint memory,
5640                                        GLuint64 offset)
5641 {
5642     Context *context = GetValidGlobalContext();
5643     EVENT(context, GLTexStorageMem3DEXT,
5644           "context = %d, target = %s, levels = %d, internalFormat = %s, width = %d, height = %d, "
5645           "depth = %d, memory = %u, offset = %llu",
5646           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), levels,
5647           GLenumToString(GLenumGroup::DefaultGroup, internalFormat), width, height, depth, memory,
5648           static_cast<unsigned long long>(offset));
5649 
5650     if (context)
5651     {
5652         TextureType targetPacked                              = PackParam<TextureType>(target);
5653         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
5654         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5655         bool isCallValid =
5656             (context->skipValidation() ||
5657              ValidateTexStorageMem3DEXT(context, angle::EntryPoint::GLTexStorageMem3DEXT,
5658                                         targetPacked, levels, internalFormat, width, height, depth,
5659                                         memoryPacked, offset));
5660         if (isCallValid)
5661         {
5662             context->texStorageMem3D(targetPacked, levels, internalFormat, width, height, depth,
5663                                      memoryPacked, offset);
5664         }
5665         ANGLE_CAPTURE(TexStorageMem3DEXT, isCallValid, context, targetPacked, levels,
5666                       internalFormat, width, height, depth, memoryPacked, offset);
5667     }
5668     else
5669     {
5670         GenerateContextLostErrorOnCurrentGlobalContext();
5671     }
5672 }
5673 
GL_TexStorageMem3DMultisampleEXT(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLboolean fixedSampleLocations,GLuint memory,GLuint64 offset)5674 void GL_APIENTRY GL_TexStorageMem3DMultisampleEXT(GLenum target,
5675                                                   GLsizei samples,
5676                                                   GLenum internalFormat,
5677                                                   GLsizei width,
5678                                                   GLsizei height,
5679                                                   GLsizei depth,
5680                                                   GLboolean fixedSampleLocations,
5681                                                   GLuint memory,
5682                                                   GLuint64 offset)
5683 {
5684     Context *context = GetValidGlobalContext();
5685     EVENT(context, GLTexStorageMem3DMultisampleEXT,
5686           "context = %d, target = %s, samples = %d, internalFormat = %s, width = %d, height = %d, "
5687           "depth = %d, fixedSampleLocations = %s, memory = %u, offset = %llu",
5688           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), samples,
5689           GLenumToString(GLenumGroup::DefaultGroup, internalFormat), width, height, depth,
5690           GLbooleanToString(fixedSampleLocations), memory, static_cast<unsigned long long>(offset));
5691 
5692     if (context)
5693     {
5694         TextureType targetPacked                              = PackParam<TextureType>(target);
5695         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
5696         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5697         bool isCallValid =
5698             (context->skipValidation() ||
5699              ValidateTexStorageMem3DMultisampleEXT(
5700                  context, angle::EntryPoint::GLTexStorageMem3DMultisampleEXT, targetPacked, samples,
5701                  internalFormat, width, height, depth, fixedSampleLocations, memoryPacked, offset));
5702         if (isCallValid)
5703         {
5704             context->texStorageMem3DMultisample(targetPacked, samples, internalFormat, width,
5705                                                 height, depth, fixedSampleLocations, memoryPacked,
5706                                                 offset);
5707         }
5708         ANGLE_CAPTURE(TexStorageMem3DMultisampleEXT, isCallValid, context, targetPacked, samples,
5709                       internalFormat, width, height, depth, fixedSampleLocations, memoryPacked,
5710                       offset);
5711     }
5712     else
5713     {
5714         GenerateContextLostErrorOnCurrentGlobalContext();
5715     }
5716 }
5717 
5718 // GL_EXT_memory_object_fd
GL_ImportMemoryFdEXT(GLuint memory,GLuint64 size,GLenum handleType,GLint fd)5719 void GL_APIENTRY GL_ImportMemoryFdEXT(GLuint memory, GLuint64 size, GLenum handleType, GLint fd)
5720 {
5721     Context *context = GetValidGlobalContext();
5722     EVENT(context, GLImportMemoryFdEXT,
5723           "context = %d, memory = %u, size = %llu, handleType = %s, fd = %d", CID(context), memory,
5724           static_cast<unsigned long long>(size),
5725           GLenumToString(GLenumGroup::ExternalHandleType, handleType), fd);
5726 
5727     if (context)
5728     {
5729         MemoryObjectID memoryPacked                           = PackParam<MemoryObjectID>(memory);
5730         HandleType handleTypePacked                           = PackParam<HandleType>(handleType);
5731         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5732         bool isCallValid =
5733             (context->skipValidation() ||
5734              ValidateImportMemoryFdEXT(context, angle::EntryPoint::GLImportMemoryFdEXT,
5735                                        memoryPacked, size, handleTypePacked, fd));
5736         if (isCallValid)
5737         {
5738             context->importMemoryFd(memoryPacked, size, handleTypePacked, fd);
5739         }
5740         ANGLE_CAPTURE(ImportMemoryFdEXT, isCallValid, context, memoryPacked, size, handleTypePacked,
5741                       fd);
5742     }
5743     else
5744     {
5745         GenerateContextLostErrorOnCurrentGlobalContext();
5746     }
5747 }
5748 
5749 // GL_EXT_multi_draw_indirect
GL_MultiDrawArraysIndirectEXT(GLenum mode,const void * indirect,GLsizei drawcount,GLsizei stride)5750 void GL_APIENTRY GL_MultiDrawArraysIndirectEXT(GLenum mode,
5751                                                const void *indirect,
5752                                                GLsizei drawcount,
5753                                                GLsizei stride)
5754 {
5755     Context *context = GetValidGlobalContext();
5756     EVENT(context, GLMultiDrawArraysIndirectEXT,
5757           "context = %d, mode = %s, indirect = 0x%016" PRIxPTR ", drawcount = %d, stride = %d",
5758           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), (uintptr_t)indirect,
5759           drawcount, stride);
5760 
5761     if (context)
5762     {
5763         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5764         bool isCallValid                                      = (context->skipValidation() ||
5765                             ValidateMultiDrawArraysIndirectEXT(
5766                                 context, angle::EntryPoint::GLMultiDrawArraysIndirectEXT, mode,
5767                                 indirect, drawcount, stride));
5768         if (isCallValid)
5769         {
5770             context->multiDrawArraysIndirect(mode, indirect, drawcount, stride);
5771         }
5772         ANGLE_CAPTURE(MultiDrawArraysIndirectEXT, isCallValid, context, mode, indirect, drawcount,
5773                       stride);
5774     }
5775     else
5776     {
5777         GenerateContextLostErrorOnCurrentGlobalContext();
5778     }
5779 }
5780 
GL_MultiDrawElementsIndirectEXT(GLenum mode,GLenum type,const void * indirect,GLsizei drawcount,GLsizei stride)5781 void GL_APIENTRY GL_MultiDrawElementsIndirectEXT(GLenum mode,
5782                                                  GLenum type,
5783                                                  const void *indirect,
5784                                                  GLsizei drawcount,
5785                                                  GLsizei stride)
5786 {
5787     Context *context = GetValidGlobalContext();
5788     EVENT(context, GLMultiDrawElementsIndirectEXT,
5789           "context = %d, mode = %s, type = %s, indirect = 0x%016" PRIxPTR
5790           ", drawcount = %d, stride = %d",
5791           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode),
5792           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indirect, drawcount,
5793           stride);
5794 
5795     if (context)
5796     {
5797         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5798         bool isCallValid                                      = (context->skipValidation() ||
5799                             ValidateMultiDrawElementsIndirectEXT(
5800                                 context, angle::EntryPoint::GLMultiDrawElementsIndirectEXT, mode,
5801                                 type, indirect, drawcount, stride));
5802         if (isCallValid)
5803         {
5804             context->multiDrawElementsIndirect(mode, type, indirect, drawcount, stride);
5805         }
5806         ANGLE_CAPTURE(MultiDrawElementsIndirectEXT, isCallValid, context, mode, type, indirect,
5807                       drawcount, stride);
5808     }
5809     else
5810     {
5811         GenerateContextLostErrorOnCurrentGlobalContext();
5812     }
5813 }
5814 
5815 // GL_EXT_multisampled_render_to_texture
GL_FramebufferTexture2DMultisampleEXT(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level,GLsizei samples)5816 void GL_APIENTRY GL_FramebufferTexture2DMultisampleEXT(GLenum target,
5817                                                        GLenum attachment,
5818                                                        GLenum textarget,
5819                                                        GLuint texture,
5820                                                        GLint level,
5821                                                        GLsizei samples)
5822 {
5823     Context *context = GetValidGlobalContext();
5824     EVENT(context, GLFramebufferTexture2DMultisampleEXT,
5825           "context = %d, target = %s, attachment = %s, textarget = %s, texture = %u, level = %d, "
5826           "samples = %d",
5827           CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),
5828           GLenumToString(GLenumGroup::FramebufferAttachment, attachment),
5829           GLenumToString(GLenumGroup::TextureTarget, textarget), texture, level, samples);
5830 
5831     if (context)
5832     {
5833         TextureTarget textargetPacked                         = PackParam<TextureTarget>(textarget);
5834         TextureID texturePacked                               = PackParam<TextureID>(texture);
5835         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5836         bool isCallValid =
5837             (context->skipValidation() ||
5838              ValidateFramebufferTexture2DMultisampleEXT(
5839                  context, angle::EntryPoint::GLFramebufferTexture2DMultisampleEXT, target,
5840                  attachment, textargetPacked, texturePacked, level, samples));
5841         if (isCallValid)
5842         {
5843             context->framebufferTexture2DMultisample(target, attachment, textargetPacked,
5844                                                      texturePacked, level, samples);
5845         }
5846         ANGLE_CAPTURE(FramebufferTexture2DMultisampleEXT, isCallValid, context, target, attachment,
5847                       textargetPacked, texturePacked, level, samples);
5848     }
5849     else
5850     {
5851         GenerateContextLostErrorOnCurrentGlobalContext();
5852     }
5853 }
5854 
GL_RenderbufferStorageMultisampleEXT(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height)5855 void GL_APIENTRY GL_RenderbufferStorageMultisampleEXT(GLenum target,
5856                                                       GLsizei samples,
5857                                                       GLenum internalformat,
5858                                                       GLsizei width,
5859                                                       GLsizei height)
5860 {
5861     Context *context = GetValidGlobalContext();
5862     EVENT(context, GLRenderbufferStorageMultisampleEXT,
5863           "context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d",
5864           CID(context), GLenumToString(GLenumGroup::RenderbufferTarget, target), samples,
5865           GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height);
5866 
5867     if (context)
5868     {
5869         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5870         bool isCallValid                                      = (context->skipValidation() ||
5871                             ValidateRenderbufferStorageMultisampleEXT(
5872                                 context, angle::EntryPoint::GLRenderbufferStorageMultisampleEXT,
5873                                 target, samples, internalformat, width, height));
5874         if (isCallValid)
5875         {
5876             context->renderbufferStorageMultisampleEXT(target, samples, internalformat, width,
5877                                                        height);
5878         }
5879         ANGLE_CAPTURE(RenderbufferStorageMultisampleEXT, isCallValid, context, target, samples,
5880                       internalformat, width, height);
5881     }
5882     else
5883     {
5884         GenerateContextLostErrorOnCurrentGlobalContext();
5885     }
5886 }
5887 
5888 // GL_EXT_occlusion_query_boolean
5889 // BeginQueryEXT is already defined.
5890 
5891 // DeleteQueriesEXT is already defined.
5892 
5893 // EndQueryEXT is already defined.
5894 
5895 // GenQueriesEXT is already defined.
5896 
5897 // GetQueryObjectuivEXT is already defined.
5898 
5899 // GetQueryivEXT is already defined.
5900 
5901 // IsQueryEXT is already defined.
5902 
5903 // GL_EXT_primitive_bounding_box
GL_PrimitiveBoundingBoxEXT(GLfloat minX,GLfloat minY,GLfloat minZ,GLfloat minW,GLfloat maxX,GLfloat maxY,GLfloat maxZ,GLfloat maxW)5904 void GL_APIENTRY GL_PrimitiveBoundingBoxEXT(GLfloat minX,
5905                                             GLfloat minY,
5906                                             GLfloat minZ,
5907                                             GLfloat minW,
5908                                             GLfloat maxX,
5909                                             GLfloat maxY,
5910                                             GLfloat maxZ,
5911                                             GLfloat maxW)
5912 {
5913     Context *context = GetValidGlobalContext();
5914     EVENT(context, GLPrimitiveBoundingBoxEXT,
5915           "context = %d, minX = %f, minY = %f, minZ = %f, minW = %f, maxX = %f, maxY = %f, maxZ = "
5916           "%f, maxW = %f",
5917           CID(context), minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
5918 
5919     if (context)
5920     {
5921         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5922         bool isCallValid =
5923             (context->skipValidation() ||
5924              ValidatePrimitiveBoundingBoxEXT(context, angle::EntryPoint::GLPrimitiveBoundingBoxEXT,
5925                                              minX, minY, minZ, minW, maxX, maxY, maxZ, maxW));
5926         if (isCallValid)
5927         {
5928             context->primitiveBoundingBox(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
5929         }
5930         ANGLE_CAPTURE(PrimitiveBoundingBoxEXT, isCallValid, context, minX, minY, minZ, minW, maxX,
5931                       maxY, maxZ, maxW);
5932     }
5933     else
5934     {
5935         GenerateContextLostErrorOnCurrentGlobalContext();
5936     }
5937 }
5938 
5939 // GL_EXT_protected_textures
5940 
5941 // GL_EXT_pvrtc_sRGB
5942 
5943 // GL_EXT_read_format_bgra
5944 
5945 // GL_EXT_robustness
GL_GetGraphicsResetStatusEXT()5946 GLenum GL_APIENTRY GL_GetGraphicsResetStatusEXT()
5947 {
5948     Context *context = GetGlobalContext();
5949     EVENT(context, GLGetGraphicsResetStatusEXT, "context = %d", CID(context));
5950 
5951     GLenum returnValue;
5952     if (context)
5953     {
5954         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5955         bool isCallValid                                      = (context->skipValidation() ||
5956                             ValidateGetGraphicsResetStatusEXT(
5957                                 context, angle::EntryPoint::GLGetGraphicsResetStatusEXT));
5958         if (isCallValid)
5959         {
5960             returnValue = context->getGraphicsResetStatus();
5961         }
5962         else
5963         {
5964             returnValue =
5965                 GetDefaultReturnValue<angle::EntryPoint::GLGetGraphicsResetStatusEXT, GLenum>();
5966         }
5967         ANGLE_CAPTURE(GetGraphicsResetStatusEXT, isCallValid, context, returnValue);
5968     }
5969     else
5970     {
5971 
5972         returnValue =
5973             GetDefaultReturnValue<angle::EntryPoint::GLGetGraphicsResetStatusEXT, GLenum>();
5974     }
5975     return returnValue;
5976 }
5977 
GL_GetnUniformfvEXT(GLuint program,GLint location,GLsizei bufSize,GLfloat * params)5978 void GL_APIENTRY GL_GetnUniformfvEXT(GLuint program,
5979                                      GLint location,
5980                                      GLsizei bufSize,
5981                                      GLfloat *params)
5982 {
5983     Context *context = GetValidGlobalContext();
5984     EVENT(context, GLGetnUniformfvEXT,
5985           "context = %d, program = %u, location = %d, bufSize = %d, params = 0x%016" PRIxPTR "",
5986           CID(context), program, location, bufSize, (uintptr_t)params);
5987 
5988     if (context)
5989     {
5990         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
5991         UniformLocation locationPacked = PackParam<UniformLocation>(location);
5992         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
5993         bool isCallValid =
5994             (context->skipValidation() ||
5995              ValidateGetnUniformfvEXT(context, angle::EntryPoint::GLGetnUniformfvEXT, programPacked,
5996                                       locationPacked, bufSize, params));
5997         if (isCallValid)
5998         {
5999             context->getnUniformfv(programPacked, locationPacked, bufSize, params);
6000         }
6001         ANGLE_CAPTURE(GetnUniformfvEXT, isCallValid, context, programPacked, locationPacked,
6002                       bufSize, params);
6003     }
6004     else
6005     {
6006         GenerateContextLostErrorOnCurrentGlobalContext();
6007     }
6008 }
6009 
GL_GetnUniformivEXT(GLuint program,GLint location,GLsizei bufSize,GLint * params)6010 void GL_APIENTRY GL_GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint *params)
6011 {
6012     Context *context = GetValidGlobalContext();
6013     EVENT(context, GLGetnUniformivEXT,
6014           "context = %d, program = %u, location = %d, bufSize = %d, params = 0x%016" PRIxPTR "",
6015           CID(context), program, location, bufSize, (uintptr_t)params);
6016 
6017     if (context)
6018     {
6019         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6020         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6021         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6022         bool isCallValid =
6023             (context->skipValidation() ||
6024              ValidateGetnUniformivEXT(context, angle::EntryPoint::GLGetnUniformivEXT, programPacked,
6025                                       locationPacked, bufSize, params));
6026         if (isCallValid)
6027         {
6028             context->getnUniformiv(programPacked, locationPacked, bufSize, params);
6029         }
6030         ANGLE_CAPTURE(GetnUniformivEXT, isCallValid, context, programPacked, locationPacked,
6031                       bufSize, params);
6032     }
6033     else
6034     {
6035         GenerateContextLostErrorOnCurrentGlobalContext();
6036     }
6037 }
6038 
GL_ReadnPixelsEXT(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLsizei bufSize,void * data)6039 void GL_APIENTRY GL_ReadnPixelsEXT(GLint x,
6040                                    GLint y,
6041                                    GLsizei width,
6042                                    GLsizei height,
6043                                    GLenum format,
6044                                    GLenum type,
6045                                    GLsizei bufSize,
6046                                    void *data)
6047 {
6048     Context *context = GetValidGlobalContext();
6049     EVENT(context, GLReadnPixelsEXT,
6050           "context = %d, x = %d, y = %d, width = %d, height = %d, format = %s, type = %s, bufSize "
6051           "= %d, data = 0x%016" PRIxPTR "",
6052           CID(context), x, y, width, height, GLenumToString(GLenumGroup::PixelFormat, format),
6053           GLenumToString(GLenumGroup::PixelType, type), bufSize, (uintptr_t)data);
6054 
6055     if (context)
6056     {
6057         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6058         bool isCallValid                                      = (context->skipValidation() ||
6059                             ValidateReadnPixelsEXT(context, angle::EntryPoint::GLReadnPixelsEXT, x,
6060                                                    y, width, height, format, type, bufSize, data));
6061         if (isCallValid)
6062         {
6063             context->readnPixels(x, y, width, height, format, type, bufSize, data);
6064         }
6065         ANGLE_CAPTURE(ReadnPixelsEXT, isCallValid, context, x, y, width, height, format, type,
6066                       bufSize, data);
6067     }
6068     else
6069     {
6070         GenerateContextLostErrorOnCurrentGlobalContext();
6071     }
6072 }
6073 
6074 // GL_EXT_sRGB
6075 
6076 // GL_EXT_sRGB_write_control
6077 
6078 // GL_EXT_semaphore
GL_DeleteSemaphoresEXT(GLsizei n,const GLuint * semaphores)6079 void GL_APIENTRY GL_DeleteSemaphoresEXT(GLsizei n, const GLuint *semaphores)
6080 {
6081     Context *context = GetValidGlobalContext();
6082     EVENT(context, GLDeleteSemaphoresEXT, "context = %d, n = %d, semaphores = 0x%016" PRIxPTR "",
6083           CID(context), n, (uintptr_t)semaphores);
6084 
6085     if (context)
6086     {
6087         const SemaphoreID *semaphoresPacked = PackParam<const SemaphoreID *>(semaphores);
6088         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6089         bool isCallValid =
6090             (context->skipValidation() ||
6091              ValidateDeleteSemaphoresEXT(context, angle::EntryPoint::GLDeleteSemaphoresEXT, n,
6092                                          semaphoresPacked));
6093         if (isCallValid)
6094         {
6095             context->deleteSemaphores(n, semaphoresPacked);
6096         }
6097         ANGLE_CAPTURE(DeleteSemaphoresEXT, isCallValid, context, n, semaphoresPacked);
6098     }
6099     else
6100     {
6101         GenerateContextLostErrorOnCurrentGlobalContext();
6102     }
6103 }
6104 
GL_GenSemaphoresEXT(GLsizei n,GLuint * semaphores)6105 void GL_APIENTRY GL_GenSemaphoresEXT(GLsizei n, GLuint *semaphores)
6106 {
6107     Context *context = GetValidGlobalContext();
6108     EVENT(context, GLGenSemaphoresEXT, "context = %d, n = %d, semaphores = 0x%016" PRIxPTR "",
6109           CID(context), n, (uintptr_t)semaphores);
6110 
6111     if (context)
6112     {
6113         SemaphoreID *semaphoresPacked = PackParam<SemaphoreID *>(semaphores);
6114         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6115         bool isCallValid                                      = (context->skipValidation() ||
6116                             ValidateGenSemaphoresEXT(context, angle::EntryPoint::GLGenSemaphoresEXT,
6117                                                      n, semaphoresPacked));
6118         if (isCallValid)
6119         {
6120             context->genSemaphores(n, semaphoresPacked);
6121         }
6122         ANGLE_CAPTURE(GenSemaphoresEXT, isCallValid, context, n, semaphoresPacked);
6123     }
6124     else
6125     {
6126         GenerateContextLostErrorOnCurrentGlobalContext();
6127     }
6128 }
6129 
GL_GetSemaphoreParameterui64vEXT(GLuint semaphore,GLenum pname,GLuint64 * params)6130 void GL_APIENTRY GL_GetSemaphoreParameterui64vEXT(GLuint semaphore, GLenum pname, GLuint64 *params)
6131 {
6132     Context *context = GetValidGlobalContext();
6133     EVENT(context, GLGetSemaphoreParameterui64vEXT,
6134           "context = %d, semaphore = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
6135           semaphore, GLenumToString(GLenumGroup::SemaphoreParameterName, pname), (uintptr_t)params);
6136 
6137     if (context)
6138     {
6139         SemaphoreID semaphorePacked                           = PackParam<SemaphoreID>(semaphore);
6140         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6141         bool isCallValid                                      = (context->skipValidation() ||
6142                             ValidateGetSemaphoreParameterui64vEXT(
6143                                 context, angle::EntryPoint::GLGetSemaphoreParameterui64vEXT,
6144                                 semaphorePacked, pname, params));
6145         if (isCallValid)
6146         {
6147             context->getSemaphoreParameterui64v(semaphorePacked, pname, params);
6148         }
6149         ANGLE_CAPTURE(GetSemaphoreParameterui64vEXT, isCallValid, context, semaphorePacked, pname,
6150                       params);
6151     }
6152     else
6153     {
6154         GenerateContextLostErrorOnCurrentGlobalContext();
6155     }
6156 }
6157 
GL_IsSemaphoreEXT(GLuint semaphore)6158 GLboolean GL_APIENTRY GL_IsSemaphoreEXT(GLuint semaphore)
6159 {
6160     Context *context = GetValidGlobalContext();
6161     EVENT(context, GLIsSemaphoreEXT, "context = %d, semaphore = %u", CID(context), semaphore);
6162 
6163     GLboolean returnValue;
6164     if (context)
6165     {
6166         SemaphoreID semaphorePacked                           = PackParam<SemaphoreID>(semaphore);
6167         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6168         bool isCallValid =
6169             (context->skipValidation() ||
6170              ValidateIsSemaphoreEXT(context, angle::EntryPoint::GLIsSemaphoreEXT, semaphorePacked));
6171         if (isCallValid)
6172         {
6173             returnValue = context->isSemaphore(semaphorePacked);
6174         }
6175         else
6176         {
6177             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsSemaphoreEXT, GLboolean>();
6178         }
6179         ANGLE_CAPTURE(IsSemaphoreEXT, isCallValid, context, semaphorePacked, returnValue);
6180     }
6181     else
6182     {
6183         GenerateContextLostErrorOnCurrentGlobalContext();
6184         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsSemaphoreEXT, GLboolean>();
6185     }
6186     return returnValue;
6187 }
6188 
GL_SemaphoreParameterui64vEXT(GLuint semaphore,GLenum pname,const GLuint64 * params)6189 void GL_APIENTRY GL_SemaphoreParameterui64vEXT(GLuint semaphore,
6190                                                GLenum pname,
6191                                                const GLuint64 *params)
6192 {
6193     Context *context = GetValidGlobalContext();
6194     EVENT(context, GLSemaphoreParameterui64vEXT,
6195           "context = %d, semaphore = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
6196           semaphore, GLenumToString(GLenumGroup::SemaphoreParameterName, pname), (uintptr_t)params);
6197 
6198     if (context)
6199     {
6200         SemaphoreID semaphorePacked                           = PackParam<SemaphoreID>(semaphore);
6201         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6202         bool isCallValid                                      = (context->skipValidation() ||
6203                             ValidateSemaphoreParameterui64vEXT(
6204                                 context, angle::EntryPoint::GLSemaphoreParameterui64vEXT,
6205                                 semaphorePacked, pname, params));
6206         if (isCallValid)
6207         {
6208             context->semaphoreParameterui64v(semaphorePacked, pname, params);
6209         }
6210         ANGLE_CAPTURE(SemaphoreParameterui64vEXT, isCallValid, context, semaphorePacked, pname,
6211                       params);
6212     }
6213     else
6214     {
6215         GenerateContextLostErrorOnCurrentGlobalContext();
6216     }
6217 }
6218 
GL_SignalSemaphoreEXT(GLuint semaphore,GLuint numBufferBarriers,const GLuint * buffers,GLuint numTextureBarriers,const GLuint * textures,const GLenum * dstLayouts)6219 void GL_APIENTRY GL_SignalSemaphoreEXT(GLuint semaphore,
6220                                        GLuint numBufferBarriers,
6221                                        const GLuint *buffers,
6222                                        GLuint numTextureBarriers,
6223                                        const GLuint *textures,
6224                                        const GLenum *dstLayouts)
6225 {
6226     Context *context = GetValidGlobalContext();
6227     EVENT(context, GLSignalSemaphoreEXT,
6228           "context = %d, semaphore = %u, numBufferBarriers = %u, buffers = 0x%016" PRIxPTR
6229           ", numTextureBarriers = %u, textures = 0x%016" PRIxPTR ", dstLayouts = 0x%016" PRIxPTR "",
6230           CID(context), semaphore, numBufferBarriers, (uintptr_t)buffers, numTextureBarriers,
6231           (uintptr_t)textures, (uintptr_t)dstLayouts);
6232 
6233     if (context)
6234     {
6235         SemaphoreID semaphorePacked     = PackParam<SemaphoreID>(semaphore);
6236         const BufferID *buffersPacked   = PackParam<const BufferID *>(buffers);
6237         const TextureID *texturesPacked = PackParam<const TextureID *>(textures);
6238         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6239         bool isCallValid =
6240             (context->skipValidation() ||
6241              ValidateSignalSemaphoreEXT(context, angle::EntryPoint::GLSignalSemaphoreEXT,
6242                                         semaphorePacked, numBufferBarriers, buffersPacked,
6243                                         numTextureBarriers, texturesPacked, dstLayouts));
6244         if (isCallValid)
6245         {
6246             context->signalSemaphore(semaphorePacked, numBufferBarriers, buffersPacked,
6247                                      numTextureBarriers, texturesPacked, dstLayouts);
6248         }
6249         ANGLE_CAPTURE(SignalSemaphoreEXT, isCallValid, context, semaphorePacked, numBufferBarriers,
6250                       buffersPacked, numTextureBarriers, texturesPacked, dstLayouts);
6251     }
6252     else
6253     {
6254         GenerateContextLostErrorOnCurrentGlobalContext();
6255     }
6256 }
6257 
GL_WaitSemaphoreEXT(GLuint semaphore,GLuint numBufferBarriers,const GLuint * buffers,GLuint numTextureBarriers,const GLuint * textures,const GLenum * srcLayouts)6258 void GL_APIENTRY GL_WaitSemaphoreEXT(GLuint semaphore,
6259                                      GLuint numBufferBarriers,
6260                                      const GLuint *buffers,
6261                                      GLuint numTextureBarriers,
6262                                      const GLuint *textures,
6263                                      const GLenum *srcLayouts)
6264 {
6265     Context *context = GetValidGlobalContext();
6266     EVENT(context, GLWaitSemaphoreEXT,
6267           "context = %d, semaphore = %u, numBufferBarriers = %u, buffers = 0x%016" PRIxPTR
6268           ", numTextureBarriers = %u, textures = 0x%016" PRIxPTR ", srcLayouts = 0x%016" PRIxPTR "",
6269           CID(context), semaphore, numBufferBarriers, (uintptr_t)buffers, numTextureBarriers,
6270           (uintptr_t)textures, (uintptr_t)srcLayouts);
6271 
6272     if (context)
6273     {
6274         SemaphoreID semaphorePacked     = PackParam<SemaphoreID>(semaphore);
6275         const BufferID *buffersPacked   = PackParam<const BufferID *>(buffers);
6276         const TextureID *texturesPacked = PackParam<const TextureID *>(textures);
6277         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6278         bool isCallValid =
6279             (context->skipValidation() ||
6280              ValidateWaitSemaphoreEXT(context, angle::EntryPoint::GLWaitSemaphoreEXT,
6281                                       semaphorePacked, numBufferBarriers, buffersPacked,
6282                                       numTextureBarriers, texturesPacked, srcLayouts));
6283         if (isCallValid)
6284         {
6285             context->waitSemaphore(semaphorePacked, numBufferBarriers, buffersPacked,
6286                                    numTextureBarriers, texturesPacked, srcLayouts);
6287         }
6288         ANGLE_CAPTURE(WaitSemaphoreEXT, isCallValid, context, semaphorePacked, numBufferBarriers,
6289                       buffersPacked, numTextureBarriers, texturesPacked, srcLayouts);
6290     }
6291     else
6292     {
6293         GenerateContextLostErrorOnCurrentGlobalContext();
6294     }
6295 }
6296 
6297 // GetUnsignedBytei_vEXT is already defined.
6298 
6299 // GetUnsignedBytevEXT is already defined.
6300 
6301 // GL_EXT_semaphore_fd
GL_ImportSemaphoreFdEXT(GLuint semaphore,GLenum handleType,GLint fd)6302 void GL_APIENTRY GL_ImportSemaphoreFdEXT(GLuint semaphore, GLenum handleType, GLint fd)
6303 {
6304     Context *context = GetValidGlobalContext();
6305     EVENT(context, GLImportSemaphoreFdEXT, "context = %d, semaphore = %u, handleType = %s, fd = %d",
6306           CID(context), semaphore, GLenumToString(GLenumGroup::ExternalHandleType, handleType), fd);
6307 
6308     if (context)
6309     {
6310         SemaphoreID semaphorePacked                           = PackParam<SemaphoreID>(semaphore);
6311         HandleType handleTypePacked                           = PackParam<HandleType>(handleType);
6312         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6313         bool isCallValid =
6314             (context->skipValidation() ||
6315              ValidateImportSemaphoreFdEXT(context, angle::EntryPoint::GLImportSemaphoreFdEXT,
6316                                           semaphorePacked, handleTypePacked, fd));
6317         if (isCallValid)
6318         {
6319             context->importSemaphoreFd(semaphorePacked, handleTypePacked, fd);
6320         }
6321         ANGLE_CAPTURE(ImportSemaphoreFdEXT, isCallValid, context, semaphorePacked, handleTypePacked,
6322                       fd);
6323     }
6324     else
6325     {
6326         GenerateContextLostErrorOnCurrentGlobalContext();
6327     }
6328 }
6329 
6330 // GL_EXT_separate_shader_objects
GL_ActiveShaderProgramEXT(GLuint pipeline,GLuint program)6331 void GL_APIENTRY GL_ActiveShaderProgramEXT(GLuint pipeline, GLuint program)
6332 {
6333     Context *context = GetValidGlobalContext();
6334     EVENT(context, GLActiveShaderProgramEXT, "context = %d, pipeline = %u, program = %u",
6335           CID(context), pipeline, program);
6336 
6337     if (context)
6338     {
6339         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
6340         ShaderProgramID programPacked    = PackParam<ShaderProgramID>(program);
6341         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6342         bool isCallValid =
6343             (context->skipValidation() ||
6344              ValidateActiveShaderProgramEXT(context, angle::EntryPoint::GLActiveShaderProgramEXT,
6345                                             pipelinePacked, programPacked));
6346         if (isCallValid)
6347         {
6348             context->activeShaderProgram(pipelinePacked, programPacked);
6349         }
6350         ANGLE_CAPTURE(ActiveShaderProgramEXT, isCallValid, context, pipelinePacked, programPacked);
6351     }
6352     else
6353     {
6354         GenerateContextLostErrorOnCurrentGlobalContext();
6355     }
6356 }
6357 
GL_BindProgramPipelineEXT(GLuint pipeline)6358 void GL_APIENTRY GL_BindProgramPipelineEXT(GLuint pipeline)
6359 {
6360     Context *context = GetValidGlobalContext();
6361     EVENT(context, GLBindProgramPipelineEXT, "context = %d, pipeline = %u", CID(context), pipeline);
6362 
6363     if (context)
6364     {
6365         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
6366         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6367         bool isCallValid =
6368             (context->skipValidation() ||
6369              ValidateBindProgramPipelineEXT(context, angle::EntryPoint::GLBindProgramPipelineEXT,
6370                                             pipelinePacked));
6371         if (isCallValid)
6372         {
6373             context->bindProgramPipeline(pipelinePacked);
6374         }
6375         ANGLE_CAPTURE(BindProgramPipelineEXT, isCallValid, context, pipelinePacked);
6376     }
6377     else
6378     {
6379         GenerateContextLostErrorOnCurrentGlobalContext();
6380     }
6381 }
6382 
GL_CreateShaderProgramvEXT(GLenum type,GLsizei count,const GLchar ** strings)6383 GLuint GL_APIENTRY GL_CreateShaderProgramvEXT(GLenum type, GLsizei count, const GLchar **strings)
6384 {
6385     Context *context = GetValidGlobalContext();
6386     EVENT(context, GLCreateShaderProgramvEXT,
6387           "context = %d, type = %s, count = %d, strings = 0x%016" PRIxPTR "", CID(context),
6388           GLenumToString(GLenumGroup::ShaderType, type), count, (uintptr_t)strings);
6389 
6390     GLuint returnValue;
6391     if (context)
6392     {
6393         ShaderType typePacked                                 = PackParam<ShaderType>(type);
6394         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6395         bool isCallValid =
6396             (context->skipValidation() ||
6397              ValidateCreateShaderProgramvEXT(context, angle::EntryPoint::GLCreateShaderProgramvEXT,
6398                                              typePacked, count, strings));
6399         if (isCallValid)
6400         {
6401             returnValue = context->createShaderProgramv(typePacked, count, strings);
6402         }
6403         else
6404         {
6405             returnValue =
6406                 GetDefaultReturnValue<angle::EntryPoint::GLCreateShaderProgramvEXT, GLuint>();
6407         }
6408         ANGLE_CAPTURE(CreateShaderProgramvEXT, isCallValid, context, typePacked, count, strings,
6409                       returnValue);
6410     }
6411     else
6412     {
6413         GenerateContextLostErrorOnCurrentGlobalContext();
6414         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLCreateShaderProgramvEXT, GLuint>();
6415     }
6416     return returnValue;
6417 }
6418 
GL_DeleteProgramPipelinesEXT(GLsizei n,const GLuint * pipelines)6419 void GL_APIENTRY GL_DeleteProgramPipelinesEXT(GLsizei n, const GLuint *pipelines)
6420 {
6421     Context *context = GetValidGlobalContext();
6422     EVENT(context, GLDeleteProgramPipelinesEXT,
6423           "context = %d, n = %d, pipelines = 0x%016" PRIxPTR "", CID(context), n,
6424           (uintptr_t)pipelines);
6425 
6426     if (context)
6427     {
6428         const ProgramPipelineID *pipelinesPacked = PackParam<const ProgramPipelineID *>(pipelines);
6429         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6430         bool isCallValid =
6431             (context->skipValidation() ||
6432              ValidateDeleteProgramPipelinesEXT(
6433                  context, angle::EntryPoint::GLDeleteProgramPipelinesEXT, n, pipelinesPacked));
6434         if (isCallValid)
6435         {
6436             context->deleteProgramPipelines(n, pipelinesPacked);
6437         }
6438         ANGLE_CAPTURE(DeleteProgramPipelinesEXT, isCallValid, context, n, pipelinesPacked);
6439     }
6440     else
6441     {
6442         GenerateContextLostErrorOnCurrentGlobalContext();
6443     }
6444 }
6445 
GL_GenProgramPipelinesEXT(GLsizei n,GLuint * pipelines)6446 void GL_APIENTRY GL_GenProgramPipelinesEXT(GLsizei n, GLuint *pipelines)
6447 {
6448     Context *context = GetValidGlobalContext();
6449     EVENT(context, GLGenProgramPipelinesEXT, "context = %d, n = %d, pipelines = 0x%016" PRIxPTR "",
6450           CID(context), n, (uintptr_t)pipelines);
6451 
6452     if (context)
6453     {
6454         ProgramPipelineID *pipelinesPacked = PackParam<ProgramPipelineID *>(pipelines);
6455         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6456         bool isCallValid =
6457             (context->skipValidation() ||
6458              ValidateGenProgramPipelinesEXT(context, angle::EntryPoint::GLGenProgramPipelinesEXT, n,
6459                                             pipelinesPacked));
6460         if (isCallValid)
6461         {
6462             context->genProgramPipelines(n, pipelinesPacked);
6463         }
6464         ANGLE_CAPTURE(GenProgramPipelinesEXT, isCallValid, context, n, pipelinesPacked);
6465     }
6466     else
6467     {
6468         GenerateContextLostErrorOnCurrentGlobalContext();
6469     }
6470 }
6471 
GL_GetProgramPipelineInfoLogEXT(GLuint pipeline,GLsizei bufSize,GLsizei * length,GLchar * infoLog)6472 void GL_APIENTRY GL_GetProgramPipelineInfoLogEXT(GLuint pipeline,
6473                                                  GLsizei bufSize,
6474                                                  GLsizei *length,
6475                                                  GLchar *infoLog)
6476 {
6477     Context *context = GetValidGlobalContext();
6478     EVENT(context, GLGetProgramPipelineInfoLogEXT,
6479           "context = %d, pipeline = %u, bufSize = %d, length = 0x%016" PRIxPTR
6480           ", infoLog = 0x%016" PRIxPTR "",
6481           CID(context), pipeline, bufSize, (uintptr_t)length, (uintptr_t)infoLog);
6482 
6483     if (context)
6484     {
6485         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
6486         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6487         bool isCallValid                                      = (context->skipValidation() ||
6488                             ValidateGetProgramPipelineInfoLogEXT(
6489                                 context, angle::EntryPoint::GLGetProgramPipelineInfoLogEXT,
6490                                 pipelinePacked, bufSize, length, infoLog));
6491         if (isCallValid)
6492         {
6493             context->getProgramPipelineInfoLog(pipelinePacked, bufSize, length, infoLog);
6494         }
6495         ANGLE_CAPTURE(GetProgramPipelineInfoLogEXT, isCallValid, context, pipelinePacked, bufSize,
6496                       length, infoLog);
6497     }
6498     else
6499     {
6500         GenerateContextLostErrorOnCurrentGlobalContext();
6501     }
6502 }
6503 
GL_GetProgramPipelineivEXT(GLuint pipeline,GLenum pname,GLint * params)6504 void GL_APIENTRY GL_GetProgramPipelineivEXT(GLuint pipeline, GLenum pname, GLint *params)
6505 {
6506     Context *context = GetValidGlobalContext();
6507     EVENT(context, GLGetProgramPipelineivEXT,
6508           "context = %d, pipeline = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
6509           pipeline, GLenumToString(GLenumGroup::PipelineParameterName, pname), (uintptr_t)params);
6510 
6511     if (context)
6512     {
6513         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
6514         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6515         bool isCallValid =
6516             (context->skipValidation() ||
6517              ValidateGetProgramPipelineivEXT(context, angle::EntryPoint::GLGetProgramPipelineivEXT,
6518                                              pipelinePacked, pname, params));
6519         if (isCallValid)
6520         {
6521             context->getProgramPipelineiv(pipelinePacked, pname, params);
6522         }
6523         ANGLE_CAPTURE(GetProgramPipelineivEXT, isCallValid, context, pipelinePacked, pname, params);
6524     }
6525     else
6526     {
6527         GenerateContextLostErrorOnCurrentGlobalContext();
6528     }
6529 }
6530 
GL_IsProgramPipelineEXT(GLuint pipeline)6531 GLboolean GL_APIENTRY GL_IsProgramPipelineEXT(GLuint pipeline)
6532 {
6533     Context *context = GetValidGlobalContext();
6534     EVENT(context, GLIsProgramPipelineEXT, "context = %d, pipeline = %u", CID(context), pipeline);
6535 
6536     GLboolean returnValue;
6537     if (context)
6538     {
6539         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
6540         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6541         bool isCallValid =
6542             (context->skipValidation() ||
6543              ValidateIsProgramPipelineEXT(context, angle::EntryPoint::GLIsProgramPipelineEXT,
6544                                           pipelinePacked));
6545         if (isCallValid)
6546         {
6547             returnValue = context->isProgramPipeline(pipelinePacked);
6548         }
6549         else
6550         {
6551             returnValue =
6552                 GetDefaultReturnValue<angle::EntryPoint::GLIsProgramPipelineEXT, GLboolean>();
6553         }
6554         ANGLE_CAPTURE(IsProgramPipelineEXT, isCallValid, context, pipelinePacked, returnValue);
6555     }
6556     else
6557     {
6558         GenerateContextLostErrorOnCurrentGlobalContext();
6559         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsProgramPipelineEXT, GLboolean>();
6560     }
6561     return returnValue;
6562 }
6563 
GL_ProgramParameteriEXT(GLuint program,GLenum pname,GLint value)6564 void GL_APIENTRY GL_ProgramParameteriEXT(GLuint program, GLenum pname, GLint value)
6565 {
6566     Context *context = GetValidGlobalContext();
6567     EVENT(context, GLProgramParameteriEXT, "context = %d, program = %u, pname = %s, value = %d",
6568           CID(context), program, GLenumToString(GLenumGroup::ProgramParameterPName, pname), value);
6569 
6570     if (context)
6571     {
6572         ShaderProgramID programPacked                         = PackParam<ShaderProgramID>(program);
6573         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6574         bool isCallValid =
6575             (context->skipValidation() ||
6576              ValidateProgramParameteriEXT(context, angle::EntryPoint::GLProgramParameteriEXT,
6577                                           programPacked, pname, value));
6578         if (isCallValid)
6579         {
6580             context->programParameteri(programPacked, pname, value);
6581         }
6582         ANGLE_CAPTURE(ProgramParameteriEXT, isCallValid, context, programPacked, pname, value);
6583     }
6584     else
6585     {
6586         GenerateContextLostErrorOnCurrentGlobalContext();
6587     }
6588 }
6589 
GL_ProgramUniform1fEXT(GLuint program,GLint location,GLfloat v0)6590 void GL_APIENTRY GL_ProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0)
6591 {
6592     Context *context = GetValidGlobalContext();
6593     EVENT(context, GLProgramUniform1fEXT, "context = %d, program = %u, location = %d, v0 = %f",
6594           CID(context), program, location, v0);
6595 
6596     if (context)
6597     {
6598         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6599         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6600         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6601         bool isCallValid =
6602             (context->skipValidation() ||
6603              ValidateProgramUniform1fEXT(context, angle::EntryPoint::GLProgramUniform1fEXT,
6604                                          programPacked, locationPacked, v0));
6605         if (isCallValid)
6606         {
6607             context->programUniform1f(programPacked, locationPacked, v0);
6608         }
6609         ANGLE_CAPTURE(ProgramUniform1fEXT, isCallValid, context, programPacked, locationPacked, v0);
6610     }
6611     else
6612     {
6613         GenerateContextLostErrorOnCurrentGlobalContext();
6614     }
6615 }
6616 
GL_ProgramUniform1fvEXT(GLuint program,GLint location,GLsizei count,const GLfloat * value)6617 void GL_APIENTRY GL_ProgramUniform1fvEXT(GLuint program,
6618                                          GLint location,
6619                                          GLsizei count,
6620                                          const GLfloat *value)
6621 {
6622     Context *context = GetValidGlobalContext();
6623     EVENT(context, GLProgramUniform1fvEXT,
6624           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
6625           CID(context), program, location, count, (uintptr_t)value);
6626 
6627     if (context)
6628     {
6629         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6630         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6631         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6632         bool isCallValid =
6633             (context->skipValidation() ||
6634              ValidateProgramUniform1fvEXT(context, angle::EntryPoint::GLProgramUniform1fvEXT,
6635                                           programPacked, locationPacked, count, value));
6636         if (isCallValid)
6637         {
6638             context->programUniform1fv(programPacked, locationPacked, count, value);
6639         }
6640         ANGLE_CAPTURE(ProgramUniform1fvEXT, isCallValid, context, programPacked, locationPacked,
6641                       count, value);
6642     }
6643     else
6644     {
6645         GenerateContextLostErrorOnCurrentGlobalContext();
6646     }
6647 }
6648 
GL_ProgramUniform1iEXT(GLuint program,GLint location,GLint v0)6649 void GL_APIENTRY GL_ProgramUniform1iEXT(GLuint program, GLint location, GLint v0)
6650 {
6651     Context *context = GetValidGlobalContext();
6652     EVENT(context, GLProgramUniform1iEXT, "context = %d, program = %u, location = %d, v0 = %d",
6653           CID(context), program, location, v0);
6654 
6655     if (context)
6656     {
6657         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6658         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6659         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6660         bool isCallValid =
6661             (context->skipValidation() ||
6662              ValidateProgramUniform1iEXT(context, angle::EntryPoint::GLProgramUniform1iEXT,
6663                                          programPacked, locationPacked, v0));
6664         if (isCallValid)
6665         {
6666             context->programUniform1i(programPacked, locationPacked, v0);
6667         }
6668         ANGLE_CAPTURE(ProgramUniform1iEXT, isCallValid, context, programPacked, locationPacked, v0);
6669     }
6670     else
6671     {
6672         GenerateContextLostErrorOnCurrentGlobalContext();
6673     }
6674 }
6675 
GL_ProgramUniform1ivEXT(GLuint program,GLint location,GLsizei count,const GLint * value)6676 void GL_APIENTRY GL_ProgramUniform1ivEXT(GLuint program,
6677                                          GLint location,
6678                                          GLsizei count,
6679                                          const GLint *value)
6680 {
6681     Context *context = GetValidGlobalContext();
6682     EVENT(context, GLProgramUniform1ivEXT,
6683           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
6684           CID(context), program, location, count, (uintptr_t)value);
6685 
6686     if (context)
6687     {
6688         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6689         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6690         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6691         bool isCallValid =
6692             (context->skipValidation() ||
6693              ValidateProgramUniform1ivEXT(context, angle::EntryPoint::GLProgramUniform1ivEXT,
6694                                           programPacked, locationPacked, count, value));
6695         if (isCallValid)
6696         {
6697             context->programUniform1iv(programPacked, locationPacked, count, value);
6698         }
6699         ANGLE_CAPTURE(ProgramUniform1ivEXT, isCallValid, context, programPacked, locationPacked,
6700                       count, value);
6701     }
6702     else
6703     {
6704         GenerateContextLostErrorOnCurrentGlobalContext();
6705     }
6706 }
6707 
GL_ProgramUniform1uiEXT(GLuint program,GLint location,GLuint v0)6708 void GL_APIENTRY GL_ProgramUniform1uiEXT(GLuint program, GLint location, GLuint v0)
6709 {
6710     Context *context = GetValidGlobalContext();
6711     EVENT(context, GLProgramUniform1uiEXT, "context = %d, program = %u, location = %d, v0 = %u",
6712           CID(context), program, location, v0);
6713 
6714     if (context)
6715     {
6716         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6717         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6718         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6719         bool isCallValid =
6720             (context->skipValidation() ||
6721              ValidateProgramUniform1uiEXT(context, angle::EntryPoint::GLProgramUniform1uiEXT,
6722                                           programPacked, locationPacked, v0));
6723         if (isCallValid)
6724         {
6725             context->programUniform1ui(programPacked, locationPacked, v0);
6726         }
6727         ANGLE_CAPTURE(ProgramUniform1uiEXT, isCallValid, context, programPacked, locationPacked,
6728                       v0);
6729     }
6730     else
6731     {
6732         GenerateContextLostErrorOnCurrentGlobalContext();
6733     }
6734 }
6735 
GL_ProgramUniform1uivEXT(GLuint program,GLint location,GLsizei count,const GLuint * value)6736 void GL_APIENTRY GL_ProgramUniform1uivEXT(GLuint program,
6737                                           GLint location,
6738                                           GLsizei count,
6739                                           const GLuint *value)
6740 {
6741     Context *context = GetValidGlobalContext();
6742     EVENT(context, GLProgramUniform1uivEXT,
6743           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
6744           CID(context), program, location, count, (uintptr_t)value);
6745 
6746     if (context)
6747     {
6748         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6749         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6750         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6751         bool isCallValid =
6752             (context->skipValidation() ||
6753              ValidateProgramUniform1uivEXT(context, angle::EntryPoint::GLProgramUniform1uivEXT,
6754                                            programPacked, locationPacked, count, value));
6755         if (isCallValid)
6756         {
6757             context->programUniform1uiv(programPacked, locationPacked, count, value);
6758         }
6759         ANGLE_CAPTURE(ProgramUniform1uivEXT, isCallValid, context, programPacked, locationPacked,
6760                       count, value);
6761     }
6762     else
6763     {
6764         GenerateContextLostErrorOnCurrentGlobalContext();
6765     }
6766 }
6767 
GL_ProgramUniform2fEXT(GLuint program,GLint location,GLfloat v0,GLfloat v1)6768 void GL_APIENTRY GL_ProgramUniform2fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1)
6769 {
6770     Context *context = GetValidGlobalContext();
6771     EVENT(context, GLProgramUniform2fEXT,
6772           "context = %d, program = %u, location = %d, v0 = %f, v1 = %f", CID(context), program,
6773           location, v0, v1);
6774 
6775     if (context)
6776     {
6777         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6778         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6779         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6780         bool isCallValid =
6781             (context->skipValidation() ||
6782              ValidateProgramUniform2fEXT(context, angle::EntryPoint::GLProgramUniform2fEXT,
6783                                          programPacked, locationPacked, v0, v1));
6784         if (isCallValid)
6785         {
6786             context->programUniform2f(programPacked, locationPacked, v0, v1);
6787         }
6788         ANGLE_CAPTURE(ProgramUniform2fEXT, isCallValid, context, programPacked, locationPacked, v0,
6789                       v1);
6790     }
6791     else
6792     {
6793         GenerateContextLostErrorOnCurrentGlobalContext();
6794     }
6795 }
6796 
GL_ProgramUniform2fvEXT(GLuint program,GLint location,GLsizei count,const GLfloat * value)6797 void GL_APIENTRY GL_ProgramUniform2fvEXT(GLuint program,
6798                                          GLint location,
6799                                          GLsizei count,
6800                                          const GLfloat *value)
6801 {
6802     Context *context = GetValidGlobalContext();
6803     EVENT(context, GLProgramUniform2fvEXT,
6804           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
6805           CID(context), program, location, count, (uintptr_t)value);
6806 
6807     if (context)
6808     {
6809         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6810         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6811         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6812         bool isCallValid =
6813             (context->skipValidation() ||
6814              ValidateProgramUniform2fvEXT(context, angle::EntryPoint::GLProgramUniform2fvEXT,
6815                                           programPacked, locationPacked, count, value));
6816         if (isCallValid)
6817         {
6818             context->programUniform2fv(programPacked, locationPacked, count, value);
6819         }
6820         ANGLE_CAPTURE(ProgramUniform2fvEXT, isCallValid, context, programPacked, locationPacked,
6821                       count, value);
6822     }
6823     else
6824     {
6825         GenerateContextLostErrorOnCurrentGlobalContext();
6826     }
6827 }
6828 
GL_ProgramUniform2iEXT(GLuint program,GLint location,GLint v0,GLint v1)6829 void GL_APIENTRY GL_ProgramUniform2iEXT(GLuint program, GLint location, GLint v0, GLint v1)
6830 {
6831     Context *context = GetValidGlobalContext();
6832     EVENT(context, GLProgramUniform2iEXT,
6833           "context = %d, program = %u, location = %d, v0 = %d, v1 = %d", CID(context), program,
6834           location, v0, v1);
6835 
6836     if (context)
6837     {
6838         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6839         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6840         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6841         bool isCallValid =
6842             (context->skipValidation() ||
6843              ValidateProgramUniform2iEXT(context, angle::EntryPoint::GLProgramUniform2iEXT,
6844                                          programPacked, locationPacked, v0, v1));
6845         if (isCallValid)
6846         {
6847             context->programUniform2i(programPacked, locationPacked, v0, v1);
6848         }
6849         ANGLE_CAPTURE(ProgramUniform2iEXT, isCallValid, context, programPacked, locationPacked, v0,
6850                       v1);
6851     }
6852     else
6853     {
6854         GenerateContextLostErrorOnCurrentGlobalContext();
6855     }
6856 }
6857 
GL_ProgramUniform2ivEXT(GLuint program,GLint location,GLsizei count,const GLint * value)6858 void GL_APIENTRY GL_ProgramUniform2ivEXT(GLuint program,
6859                                          GLint location,
6860                                          GLsizei count,
6861                                          const GLint *value)
6862 {
6863     Context *context = GetValidGlobalContext();
6864     EVENT(context, GLProgramUniform2ivEXT,
6865           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
6866           CID(context), program, location, count, (uintptr_t)value);
6867 
6868     if (context)
6869     {
6870         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6871         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6872         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6873         bool isCallValid =
6874             (context->skipValidation() ||
6875              ValidateProgramUniform2ivEXT(context, angle::EntryPoint::GLProgramUniform2ivEXT,
6876                                           programPacked, locationPacked, count, value));
6877         if (isCallValid)
6878         {
6879             context->programUniform2iv(programPacked, locationPacked, count, value);
6880         }
6881         ANGLE_CAPTURE(ProgramUniform2ivEXT, isCallValid, context, programPacked, locationPacked,
6882                       count, value);
6883     }
6884     else
6885     {
6886         GenerateContextLostErrorOnCurrentGlobalContext();
6887     }
6888 }
6889 
GL_ProgramUniform2uiEXT(GLuint program,GLint location,GLuint v0,GLuint v1)6890 void GL_APIENTRY GL_ProgramUniform2uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1)
6891 {
6892     Context *context = GetValidGlobalContext();
6893     EVENT(context, GLProgramUniform2uiEXT,
6894           "context = %d, program = %u, location = %d, v0 = %u, v1 = %u", CID(context), program,
6895           location, v0, v1);
6896 
6897     if (context)
6898     {
6899         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6900         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6901         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6902         bool isCallValid =
6903             (context->skipValidation() ||
6904              ValidateProgramUniform2uiEXT(context, angle::EntryPoint::GLProgramUniform2uiEXT,
6905                                           programPacked, locationPacked, v0, v1));
6906         if (isCallValid)
6907         {
6908             context->programUniform2ui(programPacked, locationPacked, v0, v1);
6909         }
6910         ANGLE_CAPTURE(ProgramUniform2uiEXT, isCallValid, context, programPacked, locationPacked, v0,
6911                       v1);
6912     }
6913     else
6914     {
6915         GenerateContextLostErrorOnCurrentGlobalContext();
6916     }
6917 }
6918 
GL_ProgramUniform2uivEXT(GLuint program,GLint location,GLsizei count,const GLuint * value)6919 void GL_APIENTRY GL_ProgramUniform2uivEXT(GLuint program,
6920                                           GLint location,
6921                                           GLsizei count,
6922                                           const GLuint *value)
6923 {
6924     Context *context = GetValidGlobalContext();
6925     EVENT(context, GLProgramUniform2uivEXT,
6926           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
6927           CID(context), program, location, count, (uintptr_t)value);
6928 
6929     if (context)
6930     {
6931         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6932         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6933         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6934         bool isCallValid =
6935             (context->skipValidation() ||
6936              ValidateProgramUniform2uivEXT(context, angle::EntryPoint::GLProgramUniform2uivEXT,
6937                                            programPacked, locationPacked, count, value));
6938         if (isCallValid)
6939         {
6940             context->programUniform2uiv(programPacked, locationPacked, count, value);
6941         }
6942         ANGLE_CAPTURE(ProgramUniform2uivEXT, isCallValid, context, programPacked, locationPacked,
6943                       count, value);
6944     }
6945     else
6946     {
6947         GenerateContextLostErrorOnCurrentGlobalContext();
6948     }
6949 }
6950 
6951 void GL_APIENTRY
GL_ProgramUniform3fEXT(GLuint program,GLint location,GLfloat v0,GLfloat v1,GLfloat v2)6952 GL_ProgramUniform3fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
6953 {
6954     Context *context = GetValidGlobalContext();
6955     EVENT(context, GLProgramUniform3fEXT,
6956           "context = %d, program = %u, location = %d, v0 = %f, v1 = %f, v2 = %f", CID(context),
6957           program, location, v0, v1, v2);
6958 
6959     if (context)
6960     {
6961         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6962         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6963         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6964         bool isCallValid =
6965             (context->skipValidation() ||
6966              ValidateProgramUniform3fEXT(context, angle::EntryPoint::GLProgramUniform3fEXT,
6967                                          programPacked, locationPacked, v0, v1, v2));
6968         if (isCallValid)
6969         {
6970             context->programUniform3f(programPacked, locationPacked, v0, v1, v2);
6971         }
6972         ANGLE_CAPTURE(ProgramUniform3fEXT, isCallValid, context, programPacked, locationPacked, v0,
6973                       v1, v2);
6974     }
6975     else
6976     {
6977         GenerateContextLostErrorOnCurrentGlobalContext();
6978     }
6979 }
6980 
GL_ProgramUniform3fvEXT(GLuint program,GLint location,GLsizei count,const GLfloat * value)6981 void GL_APIENTRY GL_ProgramUniform3fvEXT(GLuint program,
6982                                          GLint location,
6983                                          GLsizei count,
6984                                          const GLfloat *value)
6985 {
6986     Context *context = GetValidGlobalContext();
6987     EVENT(context, GLProgramUniform3fvEXT,
6988           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
6989           CID(context), program, location, count, (uintptr_t)value);
6990 
6991     if (context)
6992     {
6993         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
6994         UniformLocation locationPacked = PackParam<UniformLocation>(location);
6995         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
6996         bool isCallValid =
6997             (context->skipValidation() ||
6998              ValidateProgramUniform3fvEXT(context, angle::EntryPoint::GLProgramUniform3fvEXT,
6999                                           programPacked, locationPacked, count, value));
7000         if (isCallValid)
7001         {
7002             context->programUniform3fv(programPacked, locationPacked, count, value);
7003         }
7004         ANGLE_CAPTURE(ProgramUniform3fvEXT, isCallValid, context, programPacked, locationPacked,
7005                       count, value);
7006     }
7007     else
7008     {
7009         GenerateContextLostErrorOnCurrentGlobalContext();
7010     }
7011 }
7012 
7013 void GL_APIENTRY
GL_ProgramUniform3iEXT(GLuint program,GLint location,GLint v0,GLint v1,GLint v2)7014 GL_ProgramUniform3iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
7015 {
7016     Context *context = GetValidGlobalContext();
7017     EVENT(context, GLProgramUniform3iEXT,
7018           "context = %d, program = %u, location = %d, v0 = %d, v1 = %d, v2 = %d", CID(context),
7019           program, location, v0, v1, v2);
7020 
7021     if (context)
7022     {
7023         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7024         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7025         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7026         bool isCallValid =
7027             (context->skipValidation() ||
7028              ValidateProgramUniform3iEXT(context, angle::EntryPoint::GLProgramUniform3iEXT,
7029                                          programPacked, locationPacked, v0, v1, v2));
7030         if (isCallValid)
7031         {
7032             context->programUniform3i(programPacked, locationPacked, v0, v1, v2);
7033         }
7034         ANGLE_CAPTURE(ProgramUniform3iEXT, isCallValid, context, programPacked, locationPacked, v0,
7035                       v1, v2);
7036     }
7037     else
7038     {
7039         GenerateContextLostErrorOnCurrentGlobalContext();
7040     }
7041 }
7042 
GL_ProgramUniform3ivEXT(GLuint program,GLint location,GLsizei count,const GLint * value)7043 void GL_APIENTRY GL_ProgramUniform3ivEXT(GLuint program,
7044                                          GLint location,
7045                                          GLsizei count,
7046                                          const GLint *value)
7047 {
7048     Context *context = GetValidGlobalContext();
7049     EVENT(context, GLProgramUniform3ivEXT,
7050           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
7051           CID(context), program, location, count, (uintptr_t)value);
7052 
7053     if (context)
7054     {
7055         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7056         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7057         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7058         bool isCallValid =
7059             (context->skipValidation() ||
7060              ValidateProgramUniform3ivEXT(context, angle::EntryPoint::GLProgramUniform3ivEXT,
7061                                           programPacked, locationPacked, count, value));
7062         if (isCallValid)
7063         {
7064             context->programUniform3iv(programPacked, locationPacked, count, value);
7065         }
7066         ANGLE_CAPTURE(ProgramUniform3ivEXT, isCallValid, context, programPacked, locationPacked,
7067                       count, value);
7068     }
7069     else
7070     {
7071         GenerateContextLostErrorOnCurrentGlobalContext();
7072     }
7073 }
7074 
7075 void GL_APIENTRY
GL_ProgramUniform3uiEXT(GLuint program,GLint location,GLuint v0,GLuint v1,GLuint v2)7076 GL_ProgramUniform3uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
7077 {
7078     Context *context = GetValidGlobalContext();
7079     EVENT(context, GLProgramUniform3uiEXT,
7080           "context = %d, program = %u, location = %d, v0 = %u, v1 = %u, v2 = %u", CID(context),
7081           program, location, v0, v1, v2);
7082 
7083     if (context)
7084     {
7085         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7086         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7087         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7088         bool isCallValid =
7089             (context->skipValidation() ||
7090              ValidateProgramUniform3uiEXT(context, angle::EntryPoint::GLProgramUniform3uiEXT,
7091                                           programPacked, locationPacked, v0, v1, v2));
7092         if (isCallValid)
7093         {
7094             context->programUniform3ui(programPacked, locationPacked, v0, v1, v2);
7095         }
7096         ANGLE_CAPTURE(ProgramUniform3uiEXT, isCallValid, context, programPacked, locationPacked, v0,
7097                       v1, v2);
7098     }
7099     else
7100     {
7101         GenerateContextLostErrorOnCurrentGlobalContext();
7102     }
7103 }
7104 
GL_ProgramUniform3uivEXT(GLuint program,GLint location,GLsizei count,const GLuint * value)7105 void GL_APIENTRY GL_ProgramUniform3uivEXT(GLuint program,
7106                                           GLint location,
7107                                           GLsizei count,
7108                                           const GLuint *value)
7109 {
7110     Context *context = GetValidGlobalContext();
7111     EVENT(context, GLProgramUniform3uivEXT,
7112           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
7113           CID(context), program, location, count, (uintptr_t)value);
7114 
7115     if (context)
7116     {
7117         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7118         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7119         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7120         bool isCallValid =
7121             (context->skipValidation() ||
7122              ValidateProgramUniform3uivEXT(context, angle::EntryPoint::GLProgramUniform3uivEXT,
7123                                            programPacked, locationPacked, count, value));
7124         if (isCallValid)
7125         {
7126             context->programUniform3uiv(programPacked, locationPacked, count, value);
7127         }
7128         ANGLE_CAPTURE(ProgramUniform3uivEXT, isCallValid, context, programPacked, locationPacked,
7129                       count, value);
7130     }
7131     else
7132     {
7133         GenerateContextLostErrorOnCurrentGlobalContext();
7134     }
7135 }
7136 
GL_ProgramUniform4fEXT(GLuint program,GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)7137 void GL_APIENTRY GL_ProgramUniform4fEXT(GLuint program,
7138                                         GLint location,
7139                                         GLfloat v0,
7140                                         GLfloat v1,
7141                                         GLfloat v2,
7142                                         GLfloat v3)
7143 {
7144     Context *context = GetValidGlobalContext();
7145     EVENT(context, GLProgramUniform4fEXT,
7146           "context = %d, program = %u, location = %d, v0 = %f, v1 = %f, v2 = %f, v3 = %f",
7147           CID(context), program, location, v0, v1, v2, v3);
7148 
7149     if (context)
7150     {
7151         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7152         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7153         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7154         bool isCallValid =
7155             (context->skipValidation() ||
7156              ValidateProgramUniform4fEXT(context, angle::EntryPoint::GLProgramUniform4fEXT,
7157                                          programPacked, locationPacked, v0, v1, v2, v3));
7158         if (isCallValid)
7159         {
7160             context->programUniform4f(programPacked, locationPacked, v0, v1, v2, v3);
7161         }
7162         ANGLE_CAPTURE(ProgramUniform4fEXT, isCallValid, context, programPacked, locationPacked, v0,
7163                       v1, v2, v3);
7164     }
7165     else
7166     {
7167         GenerateContextLostErrorOnCurrentGlobalContext();
7168     }
7169 }
7170 
GL_ProgramUniform4fvEXT(GLuint program,GLint location,GLsizei count,const GLfloat * value)7171 void GL_APIENTRY GL_ProgramUniform4fvEXT(GLuint program,
7172                                          GLint location,
7173                                          GLsizei count,
7174                                          const GLfloat *value)
7175 {
7176     Context *context = GetValidGlobalContext();
7177     EVENT(context, GLProgramUniform4fvEXT,
7178           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
7179           CID(context), program, location, count, (uintptr_t)value);
7180 
7181     if (context)
7182     {
7183         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7184         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7185         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7186         bool isCallValid =
7187             (context->skipValidation() ||
7188              ValidateProgramUniform4fvEXT(context, angle::EntryPoint::GLProgramUniform4fvEXT,
7189                                           programPacked, locationPacked, count, value));
7190         if (isCallValid)
7191         {
7192             context->programUniform4fv(programPacked, locationPacked, count, value);
7193         }
7194         ANGLE_CAPTURE(ProgramUniform4fvEXT, isCallValid, context, programPacked, locationPacked,
7195                       count, value);
7196     }
7197     else
7198     {
7199         GenerateContextLostErrorOnCurrentGlobalContext();
7200     }
7201 }
7202 
7203 void GL_APIENTRY
GL_ProgramUniform4iEXT(GLuint program,GLint location,GLint v0,GLint v1,GLint v2,GLint v3)7204 GL_ProgramUniform4iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
7205 {
7206     Context *context = GetValidGlobalContext();
7207     EVENT(context, GLProgramUniform4iEXT,
7208           "context = %d, program = %u, location = %d, v0 = %d, v1 = %d, v2 = %d, v3 = %d",
7209           CID(context), program, location, v0, v1, v2, v3);
7210 
7211     if (context)
7212     {
7213         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7214         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7215         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7216         bool isCallValid =
7217             (context->skipValidation() ||
7218              ValidateProgramUniform4iEXT(context, angle::EntryPoint::GLProgramUniform4iEXT,
7219                                          programPacked, locationPacked, v0, v1, v2, v3));
7220         if (isCallValid)
7221         {
7222             context->programUniform4i(programPacked, locationPacked, v0, v1, v2, v3);
7223         }
7224         ANGLE_CAPTURE(ProgramUniform4iEXT, isCallValid, context, programPacked, locationPacked, v0,
7225                       v1, v2, v3);
7226     }
7227     else
7228     {
7229         GenerateContextLostErrorOnCurrentGlobalContext();
7230     }
7231 }
7232 
GL_ProgramUniform4ivEXT(GLuint program,GLint location,GLsizei count,const GLint * value)7233 void GL_APIENTRY GL_ProgramUniform4ivEXT(GLuint program,
7234                                          GLint location,
7235                                          GLsizei count,
7236                                          const GLint *value)
7237 {
7238     Context *context = GetValidGlobalContext();
7239     EVENT(context, GLProgramUniform4ivEXT,
7240           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
7241           CID(context), program, location, count, (uintptr_t)value);
7242 
7243     if (context)
7244     {
7245         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7246         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7247         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7248         bool isCallValid =
7249             (context->skipValidation() ||
7250              ValidateProgramUniform4ivEXT(context, angle::EntryPoint::GLProgramUniform4ivEXT,
7251                                           programPacked, locationPacked, count, value));
7252         if (isCallValid)
7253         {
7254             context->programUniform4iv(programPacked, locationPacked, count, value);
7255         }
7256         ANGLE_CAPTURE(ProgramUniform4ivEXT, isCallValid, context, programPacked, locationPacked,
7257                       count, value);
7258     }
7259     else
7260     {
7261         GenerateContextLostErrorOnCurrentGlobalContext();
7262     }
7263 }
7264 
7265 void GL_APIENTRY
GL_ProgramUniform4uiEXT(GLuint program,GLint location,GLuint v0,GLuint v1,GLuint v2,GLuint v3)7266 GL_ProgramUniform4uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
7267 {
7268     Context *context = GetValidGlobalContext();
7269     EVENT(context, GLProgramUniform4uiEXT,
7270           "context = %d, program = %u, location = %d, v0 = %u, v1 = %u, v2 = %u, v3 = %u",
7271           CID(context), program, location, v0, v1, v2, v3);
7272 
7273     if (context)
7274     {
7275         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7276         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7277         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7278         bool isCallValid =
7279             (context->skipValidation() ||
7280              ValidateProgramUniform4uiEXT(context, angle::EntryPoint::GLProgramUniform4uiEXT,
7281                                           programPacked, locationPacked, v0, v1, v2, v3));
7282         if (isCallValid)
7283         {
7284             context->programUniform4ui(programPacked, locationPacked, v0, v1, v2, v3);
7285         }
7286         ANGLE_CAPTURE(ProgramUniform4uiEXT, isCallValid, context, programPacked, locationPacked, v0,
7287                       v1, v2, v3);
7288     }
7289     else
7290     {
7291         GenerateContextLostErrorOnCurrentGlobalContext();
7292     }
7293 }
7294 
GL_ProgramUniform4uivEXT(GLuint program,GLint location,GLsizei count,const GLuint * value)7295 void GL_APIENTRY GL_ProgramUniform4uivEXT(GLuint program,
7296                                           GLint location,
7297                                           GLsizei count,
7298                                           const GLuint *value)
7299 {
7300     Context *context = GetValidGlobalContext();
7301     EVENT(context, GLProgramUniform4uivEXT,
7302           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
7303           CID(context), program, location, count, (uintptr_t)value);
7304 
7305     if (context)
7306     {
7307         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7308         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7309         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7310         bool isCallValid =
7311             (context->skipValidation() ||
7312              ValidateProgramUniform4uivEXT(context, angle::EntryPoint::GLProgramUniform4uivEXT,
7313                                            programPacked, locationPacked, count, value));
7314         if (isCallValid)
7315         {
7316             context->programUniform4uiv(programPacked, locationPacked, count, value);
7317         }
7318         ANGLE_CAPTURE(ProgramUniform4uivEXT, isCallValid, context, programPacked, locationPacked,
7319                       count, value);
7320     }
7321     else
7322     {
7323         GenerateContextLostErrorOnCurrentGlobalContext();
7324     }
7325 }
7326 
GL_ProgramUniformMatrix2fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)7327 void GL_APIENTRY GL_ProgramUniformMatrix2fvEXT(GLuint program,
7328                                                GLint location,
7329                                                GLsizei count,
7330                                                GLboolean transpose,
7331                                                const GLfloat *value)
7332 {
7333     Context *context = GetValidGlobalContext();
7334     EVENT(context, GLProgramUniformMatrix2fvEXT,
7335           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
7336           "0x%016" PRIxPTR "",
7337           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
7338 
7339     if (context)
7340     {
7341         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7342         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7343         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7344         bool isCallValid                                      = (context->skipValidation() ||
7345                             ValidateProgramUniformMatrix2fvEXT(
7346                                 context, angle::EntryPoint::GLProgramUniformMatrix2fvEXT,
7347                                 programPacked, locationPacked, count, transpose, value));
7348         if (isCallValid)
7349         {
7350             context->programUniformMatrix2fv(programPacked, locationPacked, count, transpose,
7351                                              value);
7352         }
7353         ANGLE_CAPTURE(ProgramUniformMatrix2fvEXT, isCallValid, context, programPacked,
7354                       locationPacked, count, transpose, value);
7355     }
7356     else
7357     {
7358         GenerateContextLostErrorOnCurrentGlobalContext();
7359     }
7360 }
7361 
GL_ProgramUniformMatrix2x3fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)7362 void GL_APIENTRY GL_ProgramUniformMatrix2x3fvEXT(GLuint program,
7363                                                  GLint location,
7364                                                  GLsizei count,
7365                                                  GLboolean transpose,
7366                                                  const GLfloat *value)
7367 {
7368     Context *context = GetValidGlobalContext();
7369     EVENT(context, GLProgramUniformMatrix2x3fvEXT,
7370           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
7371           "0x%016" PRIxPTR "",
7372           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
7373 
7374     if (context)
7375     {
7376         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7377         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7378         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7379         bool isCallValid                                      = (context->skipValidation() ||
7380                             ValidateProgramUniformMatrix2x3fvEXT(
7381                                 context, angle::EntryPoint::GLProgramUniformMatrix2x3fvEXT,
7382                                 programPacked, locationPacked, count, transpose, value));
7383         if (isCallValid)
7384         {
7385             context->programUniformMatrix2x3fv(programPacked, locationPacked, count, transpose,
7386                                                value);
7387         }
7388         ANGLE_CAPTURE(ProgramUniformMatrix2x3fvEXT, isCallValid, context, programPacked,
7389                       locationPacked, count, transpose, value);
7390     }
7391     else
7392     {
7393         GenerateContextLostErrorOnCurrentGlobalContext();
7394     }
7395 }
7396 
GL_ProgramUniformMatrix2x4fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)7397 void GL_APIENTRY GL_ProgramUniformMatrix2x4fvEXT(GLuint program,
7398                                                  GLint location,
7399                                                  GLsizei count,
7400                                                  GLboolean transpose,
7401                                                  const GLfloat *value)
7402 {
7403     Context *context = GetValidGlobalContext();
7404     EVENT(context, GLProgramUniformMatrix2x4fvEXT,
7405           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
7406           "0x%016" PRIxPTR "",
7407           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
7408 
7409     if (context)
7410     {
7411         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7412         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7413         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7414         bool isCallValid                                      = (context->skipValidation() ||
7415                             ValidateProgramUniformMatrix2x4fvEXT(
7416                                 context, angle::EntryPoint::GLProgramUniformMatrix2x4fvEXT,
7417                                 programPacked, locationPacked, count, transpose, value));
7418         if (isCallValid)
7419         {
7420             context->programUniformMatrix2x4fv(programPacked, locationPacked, count, transpose,
7421                                                value);
7422         }
7423         ANGLE_CAPTURE(ProgramUniformMatrix2x4fvEXT, isCallValid, context, programPacked,
7424                       locationPacked, count, transpose, value);
7425     }
7426     else
7427     {
7428         GenerateContextLostErrorOnCurrentGlobalContext();
7429     }
7430 }
7431 
GL_ProgramUniformMatrix3fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)7432 void GL_APIENTRY GL_ProgramUniformMatrix3fvEXT(GLuint program,
7433                                                GLint location,
7434                                                GLsizei count,
7435                                                GLboolean transpose,
7436                                                const GLfloat *value)
7437 {
7438     Context *context = GetValidGlobalContext();
7439     EVENT(context, GLProgramUniformMatrix3fvEXT,
7440           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
7441           "0x%016" PRIxPTR "",
7442           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
7443 
7444     if (context)
7445     {
7446         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7447         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7448         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7449         bool isCallValid                                      = (context->skipValidation() ||
7450                             ValidateProgramUniformMatrix3fvEXT(
7451                                 context, angle::EntryPoint::GLProgramUniformMatrix3fvEXT,
7452                                 programPacked, locationPacked, count, transpose, value));
7453         if (isCallValid)
7454         {
7455             context->programUniformMatrix3fv(programPacked, locationPacked, count, transpose,
7456                                              value);
7457         }
7458         ANGLE_CAPTURE(ProgramUniformMatrix3fvEXT, isCallValid, context, programPacked,
7459                       locationPacked, count, transpose, value);
7460     }
7461     else
7462     {
7463         GenerateContextLostErrorOnCurrentGlobalContext();
7464     }
7465 }
7466 
GL_ProgramUniformMatrix3x2fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)7467 void GL_APIENTRY GL_ProgramUniformMatrix3x2fvEXT(GLuint program,
7468                                                  GLint location,
7469                                                  GLsizei count,
7470                                                  GLboolean transpose,
7471                                                  const GLfloat *value)
7472 {
7473     Context *context = GetValidGlobalContext();
7474     EVENT(context, GLProgramUniformMatrix3x2fvEXT,
7475           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
7476           "0x%016" PRIxPTR "",
7477           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
7478 
7479     if (context)
7480     {
7481         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7482         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7483         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7484         bool isCallValid                                      = (context->skipValidation() ||
7485                             ValidateProgramUniformMatrix3x2fvEXT(
7486                                 context, angle::EntryPoint::GLProgramUniformMatrix3x2fvEXT,
7487                                 programPacked, locationPacked, count, transpose, value));
7488         if (isCallValid)
7489         {
7490             context->programUniformMatrix3x2fv(programPacked, locationPacked, count, transpose,
7491                                                value);
7492         }
7493         ANGLE_CAPTURE(ProgramUniformMatrix3x2fvEXT, isCallValid, context, programPacked,
7494                       locationPacked, count, transpose, value);
7495     }
7496     else
7497     {
7498         GenerateContextLostErrorOnCurrentGlobalContext();
7499     }
7500 }
7501 
GL_ProgramUniformMatrix3x4fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)7502 void GL_APIENTRY GL_ProgramUniformMatrix3x4fvEXT(GLuint program,
7503                                                  GLint location,
7504                                                  GLsizei count,
7505                                                  GLboolean transpose,
7506                                                  const GLfloat *value)
7507 {
7508     Context *context = GetValidGlobalContext();
7509     EVENT(context, GLProgramUniformMatrix3x4fvEXT,
7510           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
7511           "0x%016" PRIxPTR "",
7512           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
7513 
7514     if (context)
7515     {
7516         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7517         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7518         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7519         bool isCallValid                                      = (context->skipValidation() ||
7520                             ValidateProgramUniformMatrix3x4fvEXT(
7521                                 context, angle::EntryPoint::GLProgramUniformMatrix3x4fvEXT,
7522                                 programPacked, locationPacked, count, transpose, value));
7523         if (isCallValid)
7524         {
7525             context->programUniformMatrix3x4fv(programPacked, locationPacked, count, transpose,
7526                                                value);
7527         }
7528         ANGLE_CAPTURE(ProgramUniformMatrix3x4fvEXT, isCallValid, context, programPacked,
7529                       locationPacked, count, transpose, value);
7530     }
7531     else
7532     {
7533         GenerateContextLostErrorOnCurrentGlobalContext();
7534     }
7535 }
7536 
GL_ProgramUniformMatrix4fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)7537 void GL_APIENTRY GL_ProgramUniformMatrix4fvEXT(GLuint program,
7538                                                GLint location,
7539                                                GLsizei count,
7540                                                GLboolean transpose,
7541                                                const GLfloat *value)
7542 {
7543     Context *context = GetValidGlobalContext();
7544     EVENT(context, GLProgramUniformMatrix4fvEXT,
7545           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
7546           "0x%016" PRIxPTR "",
7547           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
7548 
7549     if (context)
7550     {
7551         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7552         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7553         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7554         bool isCallValid                                      = (context->skipValidation() ||
7555                             ValidateProgramUniformMatrix4fvEXT(
7556                                 context, angle::EntryPoint::GLProgramUniformMatrix4fvEXT,
7557                                 programPacked, locationPacked, count, transpose, value));
7558         if (isCallValid)
7559         {
7560             context->programUniformMatrix4fv(programPacked, locationPacked, count, transpose,
7561                                              value);
7562         }
7563         ANGLE_CAPTURE(ProgramUniformMatrix4fvEXT, isCallValid, context, programPacked,
7564                       locationPacked, count, transpose, value);
7565     }
7566     else
7567     {
7568         GenerateContextLostErrorOnCurrentGlobalContext();
7569     }
7570 }
7571 
GL_ProgramUniformMatrix4x2fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)7572 void GL_APIENTRY GL_ProgramUniformMatrix4x2fvEXT(GLuint program,
7573                                                  GLint location,
7574                                                  GLsizei count,
7575                                                  GLboolean transpose,
7576                                                  const GLfloat *value)
7577 {
7578     Context *context = GetValidGlobalContext();
7579     EVENT(context, GLProgramUniformMatrix4x2fvEXT,
7580           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
7581           "0x%016" PRIxPTR "",
7582           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
7583 
7584     if (context)
7585     {
7586         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7587         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7588         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7589         bool isCallValid                                      = (context->skipValidation() ||
7590                             ValidateProgramUniformMatrix4x2fvEXT(
7591                                 context, angle::EntryPoint::GLProgramUniformMatrix4x2fvEXT,
7592                                 programPacked, locationPacked, count, transpose, value));
7593         if (isCallValid)
7594         {
7595             context->programUniformMatrix4x2fv(programPacked, locationPacked, count, transpose,
7596                                                value);
7597         }
7598         ANGLE_CAPTURE(ProgramUniformMatrix4x2fvEXT, isCallValid, context, programPacked,
7599                       locationPacked, count, transpose, value);
7600     }
7601     else
7602     {
7603         GenerateContextLostErrorOnCurrentGlobalContext();
7604     }
7605 }
7606 
GL_ProgramUniformMatrix4x3fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)7607 void GL_APIENTRY GL_ProgramUniformMatrix4x3fvEXT(GLuint program,
7608                                                  GLint location,
7609                                                  GLsizei count,
7610                                                  GLboolean transpose,
7611                                                  const GLfloat *value)
7612 {
7613     Context *context = GetValidGlobalContext();
7614     EVENT(context, GLProgramUniformMatrix4x3fvEXT,
7615           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
7616           "0x%016" PRIxPTR "",
7617           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
7618 
7619     if (context)
7620     {
7621         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7622         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7623         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7624         bool isCallValid                                      = (context->skipValidation() ||
7625                             ValidateProgramUniformMatrix4x3fvEXT(
7626                                 context, angle::EntryPoint::GLProgramUniformMatrix4x3fvEXT,
7627                                 programPacked, locationPacked, count, transpose, value));
7628         if (isCallValid)
7629         {
7630             context->programUniformMatrix4x3fv(programPacked, locationPacked, count, transpose,
7631                                                value);
7632         }
7633         ANGLE_CAPTURE(ProgramUniformMatrix4x3fvEXT, isCallValid, context, programPacked,
7634                       locationPacked, count, transpose, value);
7635     }
7636     else
7637     {
7638         GenerateContextLostErrorOnCurrentGlobalContext();
7639     }
7640 }
7641 
GL_UseProgramStagesEXT(GLuint pipeline,GLbitfield stages,GLuint program)7642 void GL_APIENTRY GL_UseProgramStagesEXT(GLuint pipeline, GLbitfield stages, GLuint program)
7643 {
7644     Context *context = GetValidGlobalContext();
7645     EVENT(context, GLUseProgramStagesEXT, "context = %d, pipeline = %u, stages = %s, program = %u",
7646           CID(context), pipeline,
7647           GLbitfieldToString(GLenumGroup::UseProgramStageMask, stages).c_str(), program);
7648 
7649     if (context)
7650     {
7651         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
7652         ShaderProgramID programPacked    = PackParam<ShaderProgramID>(program);
7653         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7654         bool isCallValid =
7655             (context->skipValidation() ||
7656              ValidateUseProgramStagesEXT(context, angle::EntryPoint::GLUseProgramStagesEXT,
7657                                          pipelinePacked, stages, programPacked));
7658         if (isCallValid)
7659         {
7660             context->useProgramStages(pipelinePacked, stages, programPacked);
7661         }
7662         ANGLE_CAPTURE(UseProgramStagesEXT, isCallValid, context, pipelinePacked, stages,
7663                       programPacked);
7664     }
7665     else
7666     {
7667         GenerateContextLostErrorOnCurrentGlobalContext();
7668     }
7669 }
7670 
GL_ValidateProgramPipelineEXT(GLuint pipeline)7671 void GL_APIENTRY GL_ValidateProgramPipelineEXT(GLuint pipeline)
7672 {
7673     Context *context = GetValidGlobalContext();
7674     EVENT(context, GLValidateProgramPipelineEXT, "context = %d, pipeline = %u", CID(context),
7675           pipeline);
7676 
7677     if (context)
7678     {
7679         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
7680         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7681         bool isCallValid =
7682             (context->skipValidation() ||
7683              ValidateValidateProgramPipelineEXT(
7684                  context, angle::EntryPoint::GLValidateProgramPipelineEXT, pipelinePacked));
7685         if (isCallValid)
7686         {
7687             context->validateProgramPipeline(pipelinePacked);
7688         }
7689         ANGLE_CAPTURE(ValidateProgramPipelineEXT, isCallValid, context, pipelinePacked);
7690     }
7691     else
7692     {
7693         GenerateContextLostErrorOnCurrentGlobalContext();
7694     }
7695 }
7696 
7697 // GL_EXT_shader_framebuffer_fetch_non_coherent
GL_FramebufferFetchBarrierEXT()7698 void GL_APIENTRY GL_FramebufferFetchBarrierEXT()
7699 {
7700     Context *context = GetValidGlobalContext();
7701     EVENT(context, GLFramebufferFetchBarrierEXT, "context = %d", CID(context));
7702 
7703     if (context)
7704     {
7705         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7706         bool isCallValid                                      = (context->skipValidation() ||
7707                             ValidateFramebufferFetchBarrierEXT(
7708                                 context, angle::EntryPoint::GLFramebufferFetchBarrierEXT));
7709         if (isCallValid)
7710         {
7711             context->framebufferFetchBarrier();
7712         }
7713         ANGLE_CAPTURE(FramebufferFetchBarrierEXT, isCallValid, context);
7714     }
7715     else
7716     {
7717         GenerateContextLostErrorOnCurrentGlobalContext();
7718     }
7719 }
7720 
7721 // GL_EXT_shader_io_blocks
7722 
7723 // GL_EXT_shader_non_constant_global_initializers
7724 
7725 // GL_EXT_shader_texture_lod
7726 
7727 // GL_EXT_shadow_samplers
7728 
7729 // GL_EXT_tessellation_shader
GL_PatchParameteriEXT(GLenum pname,GLint value)7730 void GL_APIENTRY GL_PatchParameteriEXT(GLenum pname, GLint value)
7731 {
7732     Context *context = GetValidGlobalContext();
7733     EVENT(context, GLPatchParameteriEXT, "context = %d, pname = %s, value = %d", CID(context),
7734           GLenumToString(GLenumGroup::PatchParameterName, pname), value);
7735 
7736     if (context)
7737     {
7738         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7739         bool isCallValid                                      = (context->skipValidation() ||
7740                             ValidatePatchParameteriEXT(
7741                                 context, angle::EntryPoint::GLPatchParameteriEXT, pname, value));
7742         if (isCallValid)
7743         {
7744             context->patchParameteri(pname, value);
7745         }
7746         ANGLE_CAPTURE(PatchParameteriEXT, isCallValid, context, pname, value);
7747     }
7748     else
7749     {
7750         GenerateContextLostErrorOnCurrentGlobalContext();
7751     }
7752 }
7753 
7754 // GL_EXT_texture_border_clamp
GL_GetSamplerParameterIivEXT(GLuint sampler,GLenum pname,GLint * params)7755 void GL_APIENTRY GL_GetSamplerParameterIivEXT(GLuint sampler, GLenum pname, GLint *params)
7756 {
7757     Context *context = GetValidGlobalContext();
7758     EVENT(context, GLGetSamplerParameterIivEXT,
7759           "context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
7760           sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)params);
7761 
7762     if (context)
7763     {
7764         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
7765         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7766         bool isCallValid                                      = (context->skipValidation() ||
7767                             ValidateGetSamplerParameterIivEXT(
7768                                 context, angle::EntryPoint::GLGetSamplerParameterIivEXT,
7769                                 samplerPacked, pname, params));
7770         if (isCallValid)
7771         {
7772             context->getSamplerParameterIiv(samplerPacked, pname, params);
7773         }
7774         ANGLE_CAPTURE(GetSamplerParameterIivEXT, isCallValid, context, samplerPacked, pname,
7775                       params);
7776     }
7777     else
7778     {
7779         GenerateContextLostErrorOnCurrentGlobalContext();
7780     }
7781 }
7782 
GL_GetSamplerParameterIuivEXT(GLuint sampler,GLenum pname,GLuint * params)7783 void GL_APIENTRY GL_GetSamplerParameterIuivEXT(GLuint sampler, GLenum pname, GLuint *params)
7784 {
7785     Context *context = GetValidGlobalContext();
7786     EVENT(context, GLGetSamplerParameterIuivEXT,
7787           "context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
7788           sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)params);
7789 
7790     if (context)
7791     {
7792         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
7793         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7794         bool isCallValid                                      = (context->skipValidation() ||
7795                             ValidateGetSamplerParameterIuivEXT(
7796                                 context, angle::EntryPoint::GLGetSamplerParameterIuivEXT,
7797                                 samplerPacked, pname, params));
7798         if (isCallValid)
7799         {
7800             context->getSamplerParameterIuiv(samplerPacked, pname, params);
7801         }
7802         ANGLE_CAPTURE(GetSamplerParameterIuivEXT, isCallValid, context, samplerPacked, pname,
7803                       params);
7804     }
7805     else
7806     {
7807         GenerateContextLostErrorOnCurrentGlobalContext();
7808     }
7809 }
7810 
GL_GetTexParameterIivEXT(GLenum target,GLenum pname,GLint * params)7811 void GL_APIENTRY GL_GetTexParameterIivEXT(GLenum target, GLenum pname, GLint *params)
7812 {
7813     Context *context = GetValidGlobalContext();
7814     EVENT(context, GLGetTexParameterIivEXT,
7815           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
7816           GLenumToString(GLenumGroup::TextureTarget, target),
7817           GLenumToString(GLenumGroup::GetTextureParameter, pname), (uintptr_t)params);
7818 
7819     if (context)
7820     {
7821         TextureType targetPacked                              = PackParam<TextureType>(target);
7822         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7823         bool isCallValid =
7824             (context->skipValidation() ||
7825              ValidateGetTexParameterIivEXT(context, angle::EntryPoint::GLGetTexParameterIivEXT,
7826                                            targetPacked, pname, params));
7827         if (isCallValid)
7828         {
7829             context->getTexParameterIiv(targetPacked, pname, params);
7830         }
7831         ANGLE_CAPTURE(GetTexParameterIivEXT, isCallValid, context, targetPacked, pname, params);
7832     }
7833     else
7834     {
7835         GenerateContextLostErrorOnCurrentGlobalContext();
7836     }
7837 }
7838 
GL_GetTexParameterIuivEXT(GLenum target,GLenum pname,GLuint * params)7839 void GL_APIENTRY GL_GetTexParameterIuivEXT(GLenum target, GLenum pname, GLuint *params)
7840 {
7841     Context *context = GetValidGlobalContext();
7842     EVENT(context, GLGetTexParameterIuivEXT,
7843           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
7844           GLenumToString(GLenumGroup::TextureTarget, target),
7845           GLenumToString(GLenumGroup::GetTextureParameter, pname), (uintptr_t)params);
7846 
7847     if (context)
7848     {
7849         TextureType targetPacked                              = PackParam<TextureType>(target);
7850         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7851         bool isCallValid =
7852             (context->skipValidation() ||
7853              ValidateGetTexParameterIuivEXT(context, angle::EntryPoint::GLGetTexParameterIuivEXT,
7854                                             targetPacked, pname, params));
7855         if (isCallValid)
7856         {
7857             context->getTexParameterIuiv(targetPacked, pname, params);
7858         }
7859         ANGLE_CAPTURE(GetTexParameterIuivEXT, isCallValid, context, targetPacked, pname, params);
7860     }
7861     else
7862     {
7863         GenerateContextLostErrorOnCurrentGlobalContext();
7864     }
7865 }
7866 
GL_SamplerParameterIivEXT(GLuint sampler,GLenum pname,const GLint * param)7867 void GL_APIENTRY GL_SamplerParameterIivEXT(GLuint sampler, GLenum pname, const GLint *param)
7868 {
7869     Context *context = GetValidGlobalContext();
7870     EVENT(context, GLSamplerParameterIivEXT,
7871           "context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),
7872           sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)param);
7873 
7874     if (context)
7875     {
7876         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
7877         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7878         bool isCallValid =
7879             (context->skipValidation() ||
7880              ValidateSamplerParameterIivEXT(context, angle::EntryPoint::GLSamplerParameterIivEXT,
7881                                             samplerPacked, pname, param));
7882         if (isCallValid)
7883         {
7884             context->samplerParameterIiv(samplerPacked, pname, param);
7885         }
7886         ANGLE_CAPTURE(SamplerParameterIivEXT, isCallValid, context, samplerPacked, pname, param);
7887     }
7888     else
7889     {
7890         GenerateContextLostErrorOnCurrentGlobalContext();
7891     }
7892 }
7893 
GL_SamplerParameterIuivEXT(GLuint sampler,GLenum pname,const GLuint * param)7894 void GL_APIENTRY GL_SamplerParameterIuivEXT(GLuint sampler, GLenum pname, const GLuint *param)
7895 {
7896     Context *context = GetValidGlobalContext();
7897     EVENT(context, GLSamplerParameterIuivEXT,
7898           "context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),
7899           sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)param);
7900 
7901     if (context)
7902     {
7903         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
7904         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7905         bool isCallValid =
7906             (context->skipValidation() ||
7907              ValidateSamplerParameterIuivEXT(context, angle::EntryPoint::GLSamplerParameterIuivEXT,
7908                                              samplerPacked, pname, param));
7909         if (isCallValid)
7910         {
7911             context->samplerParameterIuiv(samplerPacked, pname, param);
7912         }
7913         ANGLE_CAPTURE(SamplerParameterIuivEXT, isCallValid, context, samplerPacked, pname, param);
7914     }
7915     else
7916     {
7917         GenerateContextLostErrorOnCurrentGlobalContext();
7918     }
7919 }
7920 
GL_TexParameterIivEXT(GLenum target,GLenum pname,const GLint * params)7921 void GL_APIENTRY GL_TexParameterIivEXT(GLenum target, GLenum pname, const GLint *params)
7922 {
7923     Context *context = GetValidGlobalContext();
7924     EVENT(context, GLTexParameterIivEXT,
7925           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
7926           GLenumToString(GLenumGroup::TextureTarget, target),
7927           GLenumToString(GLenumGroup::TextureParameterName, pname), (uintptr_t)params);
7928 
7929     if (context)
7930     {
7931         TextureType targetPacked                              = PackParam<TextureType>(target);
7932         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7933         bool isCallValid =
7934             (context->skipValidation() ||
7935              ValidateTexParameterIivEXT(context, angle::EntryPoint::GLTexParameterIivEXT,
7936                                         targetPacked, pname, params));
7937         if (isCallValid)
7938         {
7939             context->texParameterIiv(targetPacked, pname, params);
7940         }
7941         ANGLE_CAPTURE(TexParameterIivEXT, isCallValid, context, targetPacked, pname, params);
7942     }
7943     else
7944     {
7945         GenerateContextLostErrorOnCurrentGlobalContext();
7946     }
7947 }
7948 
GL_TexParameterIuivEXT(GLenum target,GLenum pname,const GLuint * params)7949 void GL_APIENTRY GL_TexParameterIuivEXT(GLenum target, GLenum pname, const GLuint *params)
7950 {
7951     Context *context = GetValidGlobalContext();
7952     EVENT(context, GLTexParameterIuivEXT,
7953           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
7954           GLenumToString(GLenumGroup::TextureTarget, target),
7955           GLenumToString(GLenumGroup::TextureParameterName, pname), (uintptr_t)params);
7956 
7957     if (context)
7958     {
7959         TextureType targetPacked                              = PackParam<TextureType>(target);
7960         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7961         bool isCallValid =
7962             (context->skipValidation() ||
7963              ValidateTexParameterIuivEXT(context, angle::EntryPoint::GLTexParameterIuivEXT,
7964                                          targetPacked, pname, params));
7965         if (isCallValid)
7966         {
7967             context->texParameterIuiv(targetPacked, pname, params);
7968         }
7969         ANGLE_CAPTURE(TexParameterIuivEXT, isCallValid, context, targetPacked, pname, params);
7970     }
7971     else
7972     {
7973         GenerateContextLostErrorOnCurrentGlobalContext();
7974     }
7975 }
7976 
7977 // GL_EXT_texture_buffer
GL_TexBufferEXT(GLenum target,GLenum internalformat,GLuint buffer)7978 void GL_APIENTRY GL_TexBufferEXT(GLenum target, GLenum internalformat, GLuint buffer)
7979 {
7980     Context *context = GetValidGlobalContext();
7981     EVENT(context, GLTexBufferEXT, "context = %d, target = %s, internalformat = %s, buffer = %u",
7982           CID(context), GLenumToString(GLenumGroup::TextureTarget, target),
7983           GLenumToString(GLenumGroup::InternalFormat, internalformat), buffer);
7984 
7985     if (context)
7986     {
7987         TextureType targetPacked                              = PackParam<TextureType>(target);
7988         BufferID bufferPacked                                 = PackParam<BufferID>(buffer);
7989         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
7990         bool isCallValid                                      = (context->skipValidation() ||
7991                             ValidateTexBufferEXT(context, angle::EntryPoint::GLTexBufferEXT,
7992                                                  targetPacked, internalformat, bufferPacked));
7993         if (isCallValid)
7994         {
7995             context->texBuffer(targetPacked, internalformat, bufferPacked);
7996         }
7997         ANGLE_CAPTURE(TexBufferEXT, isCallValid, context, targetPacked, internalformat,
7998                       bufferPacked);
7999     }
8000     else
8001     {
8002         GenerateContextLostErrorOnCurrentGlobalContext();
8003     }
8004 }
8005 
GL_TexBufferRangeEXT(GLenum target,GLenum internalformat,GLuint buffer,GLintptr offset,GLsizeiptr size)8006 void GL_APIENTRY GL_TexBufferRangeEXT(GLenum target,
8007                                       GLenum internalformat,
8008                                       GLuint buffer,
8009                                       GLintptr offset,
8010                                       GLsizeiptr size)
8011 {
8012     Context *context = GetValidGlobalContext();
8013     EVENT(context, GLTexBufferRangeEXT,
8014           "context = %d, target = %s, internalformat = %s, buffer = %u, offset = %llu, size = %llu",
8015           CID(context), GLenumToString(GLenumGroup::TextureTarget, target),
8016           GLenumToString(GLenumGroup::InternalFormat, internalformat), buffer,
8017           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(size));
8018 
8019     if (context)
8020     {
8021         TextureType targetPacked                              = PackParam<TextureType>(target);
8022         BufferID bufferPacked                                 = PackParam<BufferID>(buffer);
8023         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8024         bool isCallValid =
8025             (context->skipValidation() ||
8026              ValidateTexBufferRangeEXT(context, angle::EntryPoint::GLTexBufferRangeEXT,
8027                                        targetPacked, internalformat, bufferPacked, offset, size));
8028         if (isCallValid)
8029         {
8030             context->texBufferRange(targetPacked, internalformat, bufferPacked, offset, size);
8031         }
8032         ANGLE_CAPTURE(TexBufferRangeEXT, isCallValid, context, targetPacked, internalformat,
8033                       bufferPacked, offset, size);
8034     }
8035     else
8036     {
8037         GenerateContextLostErrorOnCurrentGlobalContext();
8038     }
8039 }
8040 
8041 // GL_EXT_texture_compression_bptc
8042 
8043 // GL_EXT_texture_compression_dxt1
8044 
8045 // GL_EXT_texture_compression_rgtc
8046 
8047 // GL_EXT_texture_compression_s3tc
8048 
8049 // GL_EXT_texture_compression_s3tc_srgb
8050 
8051 // GL_EXT_texture_cube_map_array
8052 
8053 // GL_EXT_texture_filter_anisotropic
8054 
8055 // GL_EXT_texture_format_BGRA8888
8056 
8057 // GL_EXT_texture_format_sRGB_override
8058 
8059 // GL_EXT_texture_norm16
8060 
8061 // GL_EXT_texture_rg
8062 
8063 // GL_EXT_texture_sRGB_R8
8064 
8065 // GL_EXT_texture_sRGB_RG8
8066 
8067 // GL_EXT_texture_sRGB_decode
8068 
8069 // GL_EXT_texture_storage
GL_TexStorage1DEXT(GLenum target,GLsizei levels,GLenum internalformat,GLsizei width)8070 void GL_APIENTRY GL_TexStorage1DEXT(GLenum target,
8071                                     GLsizei levels,
8072                                     GLenum internalformat,
8073                                     GLsizei width)
8074 {
8075     Context *context = GetValidGlobalContext();
8076     EVENT(context, GLTexStorage1DEXT,
8077           "context = %d, target = %s, levels = %d, internalformat = %s, width = %d", CID(context),
8078           GLenumToString(GLenumGroup::TextureTarget, target), levels,
8079           GLenumToString(GLenumGroup::InternalFormat, internalformat), width);
8080 
8081     if (context)
8082     {
8083         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8084         bool isCallValid                                      = (context->skipValidation() ||
8085                             ValidateTexStorage1DEXT(context, angle::EntryPoint::GLTexStorage1DEXT,
8086                                                     target, levels, internalformat, width));
8087         if (isCallValid)
8088         {
8089             context->texStorage1D(target, levels, internalformat, width);
8090         }
8091         ANGLE_CAPTURE(TexStorage1DEXT, isCallValid, context, target, levels, internalformat, width);
8092     }
8093     else
8094     {
8095         GenerateContextLostErrorOnCurrentGlobalContext();
8096     }
8097 }
8098 
GL_TexStorage2DEXT(GLenum target,GLsizei levels,GLenum internalformat,GLsizei width,GLsizei height)8099 void GL_APIENTRY GL_TexStorage2DEXT(GLenum target,
8100                                     GLsizei levels,
8101                                     GLenum internalformat,
8102                                     GLsizei width,
8103                                     GLsizei height)
8104 {
8105     Context *context = GetValidGlobalContext();
8106     EVENT(context, GLTexStorage2DEXT,
8107           "context = %d, target = %s, levels = %d, internalformat = %s, width = %d, height = %d",
8108           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), levels,
8109           GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height);
8110 
8111     if (context)
8112     {
8113         TextureType targetPacked                              = PackParam<TextureType>(target);
8114         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8115         bool isCallValid =
8116             (context->skipValidation() ||
8117              ValidateTexStorage2DEXT(context, angle::EntryPoint::GLTexStorage2DEXT, targetPacked,
8118                                      levels, internalformat, width, height));
8119         if (isCallValid)
8120         {
8121             context->texStorage2D(targetPacked, levels, internalformat, width, height);
8122         }
8123         ANGLE_CAPTURE(TexStorage2DEXT, isCallValid, context, targetPacked, levels, internalformat,
8124                       width, height);
8125     }
8126     else
8127     {
8128         GenerateContextLostErrorOnCurrentGlobalContext();
8129     }
8130 }
8131 
GL_TexStorage3DEXT(GLenum target,GLsizei levels,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth)8132 void GL_APIENTRY GL_TexStorage3DEXT(GLenum target,
8133                                     GLsizei levels,
8134                                     GLenum internalformat,
8135                                     GLsizei width,
8136                                     GLsizei height,
8137                                     GLsizei depth)
8138 {
8139     Context *context = GetValidGlobalContext();
8140     EVENT(context, GLTexStorage3DEXT,
8141           "context = %d, target = %s, levels = %d, internalformat = %s, width = %d, height = %d, "
8142           "depth = %d",
8143           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), levels,
8144           GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height, depth);
8145 
8146     if (context)
8147     {
8148         TextureType targetPacked                              = PackParam<TextureType>(target);
8149         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8150         bool isCallValid =
8151             (context->skipValidation() ||
8152              ValidateTexStorage3DEXT(context, angle::EntryPoint::GLTexStorage3DEXT, targetPacked,
8153                                      levels, internalformat, width, height, depth));
8154         if (isCallValid)
8155         {
8156             context->texStorage3D(targetPacked, levels, internalformat, width, height, depth);
8157         }
8158         ANGLE_CAPTURE(TexStorage3DEXT, isCallValid, context, targetPacked, levels, internalformat,
8159                       width, height, depth);
8160     }
8161     else
8162     {
8163         GenerateContextLostErrorOnCurrentGlobalContext();
8164     }
8165 }
8166 
8167 // GL_EXT_texture_type_2_10_10_10_REV
8168 
8169 // GL_EXT_unpack_subimage
8170 
8171 // GL_IMG_texture_compression_pvrtc
8172 
8173 // GL_IMG_texture_compression_pvrtc2
8174 
8175 // GL_KHR_blend_equation_advanced
GL_BlendBarrierKHR()8176 void GL_APIENTRY GL_BlendBarrierKHR()
8177 {
8178     Context *context = GetValidGlobalContext();
8179     EVENT(context, GLBlendBarrierKHR, "context = %d", CID(context));
8180 
8181     if (context)
8182     {
8183         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8184         bool isCallValid                                      = (context->skipValidation() ||
8185                             ValidateBlendBarrierKHR(context, angle::EntryPoint::GLBlendBarrierKHR));
8186         if (isCallValid)
8187         {
8188             context->blendBarrier();
8189         }
8190         ANGLE_CAPTURE(BlendBarrierKHR, isCallValid, context);
8191     }
8192     else
8193     {
8194         GenerateContextLostErrorOnCurrentGlobalContext();
8195     }
8196 }
8197 
8198 // GL_KHR_debug
GL_DebugMessageCallbackKHR(GLDEBUGPROCKHR callback,const void * userParam)8199 void GL_APIENTRY GL_DebugMessageCallbackKHR(GLDEBUGPROCKHR callback, const void *userParam)
8200 {
8201     Context *context = GetValidGlobalContext();
8202     EVENT(context, GLDebugMessageCallbackKHR,
8203           "context = %d, callback = 0x%016" PRIxPTR ", userParam = 0x%016" PRIxPTR "", CID(context),
8204           (uintptr_t)callback, (uintptr_t)userParam);
8205 
8206     if (context)
8207     {
8208         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8209         bool isCallValid =
8210             (context->skipValidation() ||
8211              ValidateDebugMessageCallbackKHR(context, angle::EntryPoint::GLDebugMessageCallbackKHR,
8212                                              callback, userParam));
8213         if (isCallValid)
8214         {
8215             context->debugMessageCallback(callback, userParam);
8216         }
8217         ANGLE_CAPTURE(DebugMessageCallbackKHR, isCallValid, context, callback, userParam);
8218     }
8219     else
8220     {
8221         GenerateContextLostErrorOnCurrentGlobalContext();
8222     }
8223 }
8224 
GL_DebugMessageControlKHR(GLenum source,GLenum type,GLenum severity,GLsizei count,const GLuint * ids,GLboolean enabled)8225 void GL_APIENTRY GL_DebugMessageControlKHR(GLenum source,
8226                                            GLenum type,
8227                                            GLenum severity,
8228                                            GLsizei count,
8229                                            const GLuint *ids,
8230                                            GLboolean enabled)
8231 {
8232     Context *context = GetValidGlobalContext();
8233     EVENT(context, GLDebugMessageControlKHR,
8234           "context = %d, source = %s, type = %s, severity = %s, count = %d, ids = 0x%016" PRIxPTR
8235           ", enabled = %s",
8236           CID(context), GLenumToString(GLenumGroup::DebugSource, source),
8237           GLenumToString(GLenumGroup::DebugType, type),
8238           GLenumToString(GLenumGroup::DebugSeverity, severity), count, (uintptr_t)ids,
8239           GLbooleanToString(enabled));
8240 
8241     if (context)
8242     {
8243         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8244         bool isCallValid =
8245             (context->skipValidation() ||
8246              ValidateDebugMessageControlKHR(context, angle::EntryPoint::GLDebugMessageControlKHR,
8247                                             source, type, severity, count, ids, enabled));
8248         if (isCallValid)
8249         {
8250             context->debugMessageControl(source, type, severity, count, ids, enabled);
8251         }
8252         ANGLE_CAPTURE(DebugMessageControlKHR, isCallValid, context, source, type, severity, count,
8253                       ids, enabled);
8254     }
8255     else
8256     {
8257         GenerateContextLostErrorOnCurrentGlobalContext();
8258     }
8259 }
8260 
GL_DebugMessageInsertKHR(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar * buf)8261 void GL_APIENTRY GL_DebugMessageInsertKHR(GLenum source,
8262                                           GLenum type,
8263                                           GLuint id,
8264                                           GLenum severity,
8265                                           GLsizei length,
8266                                           const GLchar *buf)
8267 {
8268     Context *context = GetValidGlobalContext();
8269     EVENT(context, GLDebugMessageInsertKHR,
8270           "context = %d, source = %s, type = %s, id = %u, severity = %s, length = %d, buf = "
8271           "0x%016" PRIxPTR "",
8272           CID(context), GLenumToString(GLenumGroup::DebugSource, source),
8273           GLenumToString(GLenumGroup::DebugType, type), id,
8274           GLenumToString(GLenumGroup::DebugSeverity, severity), length, (uintptr_t)buf);
8275 
8276     if (context)
8277     {
8278         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8279         bool isCallValid =
8280             (context->skipValidation() ||
8281              ValidateDebugMessageInsertKHR(context, angle::EntryPoint::GLDebugMessageInsertKHR,
8282                                            source, type, id, severity, length, buf));
8283         if (isCallValid)
8284         {
8285             context->debugMessageInsert(source, type, id, severity, length, buf);
8286         }
8287         ANGLE_CAPTURE(DebugMessageInsertKHR, isCallValid, context, source, type, id, severity,
8288                       length, buf);
8289     }
8290     else
8291     {
8292         GenerateContextLostErrorOnCurrentGlobalContext();
8293     }
8294 }
8295 
GL_GetDebugMessageLogKHR(GLuint count,GLsizei bufSize,GLenum * sources,GLenum * types,GLuint * ids,GLenum * severities,GLsizei * lengths,GLchar * messageLog)8296 GLuint GL_APIENTRY GL_GetDebugMessageLogKHR(GLuint count,
8297                                             GLsizei bufSize,
8298                                             GLenum *sources,
8299                                             GLenum *types,
8300                                             GLuint *ids,
8301                                             GLenum *severities,
8302                                             GLsizei *lengths,
8303                                             GLchar *messageLog)
8304 {
8305     Context *context = GetValidGlobalContext();
8306     EVENT(context, GLGetDebugMessageLogKHR,
8307           "context = %d, count = %u, bufSize = %d, sources = 0x%016" PRIxPTR
8308           ", types = 0x%016" PRIxPTR ", ids = 0x%016" PRIxPTR ", severities = 0x%016" PRIxPTR
8309           ", lengths = 0x%016" PRIxPTR ", messageLog = 0x%016" PRIxPTR "",
8310           CID(context), count, bufSize, (uintptr_t)sources, (uintptr_t)types, (uintptr_t)ids,
8311           (uintptr_t)severities, (uintptr_t)lengths, (uintptr_t)messageLog);
8312 
8313     GLuint returnValue;
8314     if (context)
8315     {
8316         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8317         bool isCallValid                                      = (context->skipValidation() ||
8318                             ValidateGetDebugMessageLogKHR(
8319                                 context, angle::EntryPoint::GLGetDebugMessageLogKHR, count, bufSize,
8320                                 sources, types, ids, severities, lengths, messageLog));
8321         if (isCallValid)
8322         {
8323             returnValue = context->getDebugMessageLog(count, bufSize, sources, types, ids,
8324                                                       severities, lengths, messageLog);
8325         }
8326         else
8327         {
8328             returnValue =
8329                 GetDefaultReturnValue<angle::EntryPoint::GLGetDebugMessageLogKHR, GLuint>();
8330         }
8331         ANGLE_CAPTURE(GetDebugMessageLogKHR, isCallValid, context, count, bufSize, sources, types,
8332                       ids, severities, lengths, messageLog, returnValue);
8333     }
8334     else
8335     {
8336         GenerateContextLostErrorOnCurrentGlobalContext();
8337         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetDebugMessageLogKHR, GLuint>();
8338     }
8339     return returnValue;
8340 }
8341 
GL_GetObjectLabelKHR(GLenum identifier,GLuint name,GLsizei bufSize,GLsizei * length,GLchar * label)8342 void GL_APIENTRY GL_GetObjectLabelKHR(GLenum identifier,
8343                                       GLuint name,
8344                                       GLsizei bufSize,
8345                                       GLsizei *length,
8346                                       GLchar *label)
8347 {
8348     Context *context = GetValidGlobalContext();
8349     EVENT(context, GLGetObjectLabelKHR,
8350           "context = %d, identifier = %s, name = %u, bufSize = %d, length = 0x%016" PRIxPTR
8351           ", label = 0x%016" PRIxPTR "",
8352           CID(context), GLenumToString(GLenumGroup::DefaultGroup, identifier), name, bufSize,
8353           (uintptr_t)length, (uintptr_t)label);
8354 
8355     if (context)
8356     {
8357         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8358         bool isCallValid =
8359             (context->skipValidation() ||
8360              ValidateGetObjectLabelKHR(context, angle::EntryPoint::GLGetObjectLabelKHR, identifier,
8361                                        name, bufSize, length, label));
8362         if (isCallValid)
8363         {
8364             context->getObjectLabel(identifier, name, bufSize, length, label);
8365         }
8366         ANGLE_CAPTURE(GetObjectLabelKHR, isCallValid, context, identifier, name, bufSize, length,
8367                       label);
8368     }
8369     else
8370     {
8371         GenerateContextLostErrorOnCurrentGlobalContext();
8372     }
8373 }
8374 
GL_GetObjectPtrLabelKHR(const void * ptr,GLsizei bufSize,GLsizei * length,GLchar * label)8375 void GL_APIENTRY GL_GetObjectPtrLabelKHR(const void *ptr,
8376                                          GLsizei bufSize,
8377                                          GLsizei *length,
8378                                          GLchar *label)
8379 {
8380     Context *context = GetValidGlobalContext();
8381     EVENT(context, GLGetObjectPtrLabelKHR,
8382           "context = %d, ptr = 0x%016" PRIxPTR ", bufSize = %d, length = 0x%016" PRIxPTR
8383           ", label = 0x%016" PRIxPTR "",
8384           CID(context), (uintptr_t)ptr, bufSize, (uintptr_t)length, (uintptr_t)label);
8385 
8386     if (context)
8387     {
8388         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8389         bool isCallValid =
8390             (context->skipValidation() ||
8391              ValidateGetObjectPtrLabelKHR(context, angle::EntryPoint::GLGetObjectPtrLabelKHR, ptr,
8392                                           bufSize, length, label));
8393         if (isCallValid)
8394         {
8395             context->getObjectPtrLabel(ptr, bufSize, length, label);
8396         }
8397         ANGLE_CAPTURE(GetObjectPtrLabelKHR, isCallValid, context, ptr, bufSize, length, label);
8398     }
8399     else
8400     {
8401         GenerateContextLostErrorOnCurrentGlobalContext();
8402     }
8403 }
8404 
GL_GetPointervKHR(GLenum pname,void ** params)8405 void GL_APIENTRY GL_GetPointervKHR(GLenum pname, void **params)
8406 {
8407     Context *context = GetValidGlobalContext();
8408     EVENT(context, GLGetPointervKHR, "context = %d, pname = %s, params = 0x%016" PRIxPTR "",
8409           CID(context), GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)params);
8410 
8411     if (context)
8412     {
8413         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8414         bool isCallValid =
8415             (context->skipValidation() ||
8416              ValidateGetPointervKHR(context, angle::EntryPoint::GLGetPointervKHR, pname, params));
8417         if (isCallValid)
8418         {
8419             context->getPointerv(pname, params);
8420         }
8421         ANGLE_CAPTURE(GetPointervKHR, isCallValid, context, pname, params);
8422     }
8423     else
8424     {
8425         GenerateContextLostErrorOnCurrentGlobalContext();
8426     }
8427 }
8428 
GL_ObjectLabelKHR(GLenum identifier,GLuint name,GLsizei length,const GLchar * label)8429 void GL_APIENTRY GL_ObjectLabelKHR(GLenum identifier,
8430                                    GLuint name,
8431                                    GLsizei length,
8432                                    const GLchar *label)
8433 {
8434     Context *context = GetValidGlobalContext();
8435     EVENT(context, GLObjectLabelKHR,
8436           "context = %d, identifier = %s, name = %u, length = %d, label = 0x%016" PRIxPTR "",
8437           CID(context), GLenumToString(GLenumGroup::ObjectIdentifier, identifier), name, length,
8438           (uintptr_t)label);
8439 
8440     if (context)
8441     {
8442         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8443         bool isCallValid                                      = (context->skipValidation() ||
8444                             ValidateObjectLabelKHR(context, angle::EntryPoint::GLObjectLabelKHR,
8445                                                    identifier, name, length, label));
8446         if (isCallValid)
8447         {
8448             context->objectLabel(identifier, name, length, label);
8449         }
8450         ANGLE_CAPTURE(ObjectLabelKHR, isCallValid, context, identifier, name, length, label);
8451     }
8452     else
8453     {
8454         GenerateContextLostErrorOnCurrentGlobalContext();
8455     }
8456 }
8457 
GL_ObjectPtrLabelKHR(const void * ptr,GLsizei length,const GLchar * label)8458 void GL_APIENTRY GL_ObjectPtrLabelKHR(const void *ptr, GLsizei length, const GLchar *label)
8459 {
8460     Context *context = GetValidGlobalContext();
8461     EVENT(context, GLObjectPtrLabelKHR,
8462           "context = %d, ptr = 0x%016" PRIxPTR ", length = %d, label = 0x%016" PRIxPTR "",
8463           CID(context), (uintptr_t)ptr, length, (uintptr_t)label);
8464 
8465     if (context)
8466     {
8467         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8468         bool isCallValid =
8469             (context->skipValidation() ||
8470              ValidateObjectPtrLabelKHR(context, angle::EntryPoint::GLObjectPtrLabelKHR, ptr, length,
8471                                        label));
8472         if (isCallValid)
8473         {
8474             context->objectPtrLabel(ptr, length, label);
8475         }
8476         ANGLE_CAPTURE(ObjectPtrLabelKHR, isCallValid, context, ptr, length, label);
8477     }
8478     else
8479     {
8480         GenerateContextLostErrorOnCurrentGlobalContext();
8481     }
8482 }
8483 
GL_PopDebugGroupKHR()8484 void GL_APIENTRY GL_PopDebugGroupKHR()
8485 {
8486     Context *context = GetValidGlobalContext();
8487     EVENT(context, GLPopDebugGroupKHR, "context = %d", CID(context));
8488 
8489     if (context)
8490     {
8491         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8492         bool isCallValid =
8493             (context->skipValidation() ||
8494              ValidatePopDebugGroupKHR(context, angle::EntryPoint::GLPopDebugGroupKHR));
8495         if (isCallValid)
8496         {
8497             context->popDebugGroup();
8498         }
8499         ANGLE_CAPTURE(PopDebugGroupKHR, isCallValid, context);
8500     }
8501     else
8502     {
8503         GenerateContextLostErrorOnCurrentGlobalContext();
8504     }
8505 }
8506 
GL_PushDebugGroupKHR(GLenum source,GLuint id,GLsizei length,const GLchar * message)8507 void GL_APIENTRY GL_PushDebugGroupKHR(GLenum source,
8508                                       GLuint id,
8509                                       GLsizei length,
8510                                       const GLchar *message)
8511 {
8512     Context *context = GetValidGlobalContext();
8513     EVENT(context, GLPushDebugGroupKHR,
8514           "context = %d, source = %s, id = %u, length = %d, message = 0x%016" PRIxPTR "",
8515           CID(context), GLenumToString(GLenumGroup::DebugSource, source), id, length,
8516           (uintptr_t)message);
8517 
8518     if (context)
8519     {
8520         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8521         bool isCallValid =
8522             (context->skipValidation() ||
8523              ValidatePushDebugGroupKHR(context, angle::EntryPoint::GLPushDebugGroupKHR, source, id,
8524                                        length, message));
8525         if (isCallValid)
8526         {
8527             context->pushDebugGroup(source, id, length, message);
8528         }
8529         ANGLE_CAPTURE(PushDebugGroupKHR, isCallValid, context, source, id, length, message);
8530     }
8531     else
8532     {
8533         GenerateContextLostErrorOnCurrentGlobalContext();
8534     }
8535 }
8536 
8537 // GL_KHR_no_error
8538 
8539 // GL_KHR_parallel_shader_compile
GL_MaxShaderCompilerThreadsKHR(GLuint count)8540 void GL_APIENTRY GL_MaxShaderCompilerThreadsKHR(GLuint count)
8541 {
8542     Context *context = GetValidGlobalContext();
8543     EVENT(context, GLMaxShaderCompilerThreadsKHR, "context = %d, count = %u", CID(context), count);
8544 
8545     if (context)
8546     {
8547         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8548         bool isCallValid                                      = (context->skipValidation() ||
8549                             ValidateMaxShaderCompilerThreadsKHR(
8550                                 context, angle::EntryPoint::GLMaxShaderCompilerThreadsKHR, count));
8551         if (isCallValid)
8552         {
8553             context->maxShaderCompilerThreads(count);
8554         }
8555         ANGLE_CAPTURE(MaxShaderCompilerThreadsKHR, isCallValid, context, count);
8556     }
8557     else
8558     {
8559         GenerateContextLostErrorOnCurrentGlobalContext();
8560     }
8561 }
8562 
8563 // GL_KHR_robust_buffer_access_behavior
8564 
8565 // GL_KHR_texture_compression_astc_hdr
8566 
8567 // GL_KHR_texture_compression_astc_ldr
8568 
8569 // GL_KHR_texture_compression_astc_sliced_3d
8570 
8571 // GL_NV_fence
GL_DeleteFencesNV(GLsizei n,const GLuint * fences)8572 void GL_APIENTRY GL_DeleteFencesNV(GLsizei n, const GLuint *fences)
8573 {
8574     Context *context = GetValidGlobalContext();
8575     EVENT(context, GLDeleteFencesNV, "context = %d, n = %d, fences = 0x%016" PRIxPTR "",
8576           CID(context), n, (uintptr_t)fences);
8577 
8578     if (context)
8579     {
8580         const FenceNVID *fencesPacked = PackParam<const FenceNVID *>(fences);
8581         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8582         bool isCallValid =
8583             (context->skipValidation() ||
8584              ValidateDeleteFencesNV(context, angle::EntryPoint::GLDeleteFencesNV, n, fencesPacked));
8585         if (isCallValid)
8586         {
8587             context->deleteFencesNV(n, fencesPacked);
8588         }
8589         ANGLE_CAPTURE(DeleteFencesNV, isCallValid, context, n, fencesPacked);
8590     }
8591     else
8592     {
8593         GenerateContextLostErrorOnCurrentGlobalContext();
8594     }
8595 }
8596 
GL_FinishFenceNV(GLuint fence)8597 void GL_APIENTRY GL_FinishFenceNV(GLuint fence)
8598 {
8599     Context *context = GetValidGlobalContext();
8600     EVENT(context, GLFinishFenceNV, "context = %d, fence = %u", CID(context), fence);
8601 
8602     if (context)
8603     {
8604         FenceNVID fencePacked                                 = PackParam<FenceNVID>(fence);
8605         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8606         bool isCallValid =
8607             (context->skipValidation() ||
8608              ValidateFinishFenceNV(context, angle::EntryPoint::GLFinishFenceNV, fencePacked));
8609         if (isCallValid)
8610         {
8611             context->finishFenceNV(fencePacked);
8612         }
8613         ANGLE_CAPTURE(FinishFenceNV, isCallValid, context, fencePacked);
8614     }
8615     else
8616     {
8617         GenerateContextLostErrorOnCurrentGlobalContext();
8618     }
8619 }
8620 
GL_GenFencesNV(GLsizei n,GLuint * fences)8621 void GL_APIENTRY GL_GenFencesNV(GLsizei n, GLuint *fences)
8622 {
8623     Context *context = GetValidGlobalContext();
8624     EVENT(context, GLGenFencesNV, "context = %d, n = %d, fences = 0x%016" PRIxPTR "", CID(context),
8625           n, (uintptr_t)fences);
8626 
8627     if (context)
8628     {
8629         FenceNVID *fencesPacked                               = PackParam<FenceNVID *>(fences);
8630         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8631         bool isCallValid =
8632             (context->skipValidation() ||
8633              ValidateGenFencesNV(context, angle::EntryPoint::GLGenFencesNV, n, fencesPacked));
8634         if (isCallValid)
8635         {
8636             context->genFencesNV(n, fencesPacked);
8637         }
8638         ANGLE_CAPTURE(GenFencesNV, isCallValid, context, n, fencesPacked);
8639     }
8640     else
8641     {
8642         GenerateContextLostErrorOnCurrentGlobalContext();
8643     }
8644 }
8645 
GL_GetFenceivNV(GLuint fence,GLenum pname,GLint * params)8646 void GL_APIENTRY GL_GetFenceivNV(GLuint fence, GLenum pname, GLint *params)
8647 {
8648     Context *context = GetValidGlobalContext();
8649     EVENT(context, GLGetFenceivNV,
8650           "context = %d, fence = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), fence,
8651           GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)params);
8652 
8653     if (context)
8654     {
8655         FenceNVID fencePacked                                 = PackParam<FenceNVID>(fence);
8656         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8657         bool isCallValid                                      = (context->skipValidation() ||
8658                             ValidateGetFenceivNV(context, angle::EntryPoint::GLGetFenceivNV,
8659                                                  fencePacked, pname, params));
8660         if (isCallValid)
8661         {
8662             context->getFenceivNV(fencePacked, pname, params);
8663         }
8664         ANGLE_CAPTURE(GetFenceivNV, isCallValid, context, fencePacked, pname, params);
8665     }
8666     else
8667     {
8668         GenerateContextLostErrorOnCurrentGlobalContext();
8669     }
8670 }
8671 
GL_IsFenceNV(GLuint fence)8672 GLboolean GL_APIENTRY GL_IsFenceNV(GLuint fence)
8673 {
8674     Context *context = GetValidGlobalContext();
8675     EVENT(context, GLIsFenceNV, "context = %d, fence = %u", CID(context), fence);
8676 
8677     GLboolean returnValue;
8678     if (context)
8679     {
8680         FenceNVID fencePacked                                 = PackParam<FenceNVID>(fence);
8681         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8682         bool isCallValid =
8683             (context->skipValidation() ||
8684              ValidateIsFenceNV(context, angle::EntryPoint::GLIsFenceNV, fencePacked));
8685         if (isCallValid)
8686         {
8687             returnValue = context->isFenceNV(fencePacked);
8688         }
8689         else
8690         {
8691             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFenceNV, GLboolean>();
8692         }
8693         ANGLE_CAPTURE(IsFenceNV, isCallValid, context, fencePacked, returnValue);
8694     }
8695     else
8696     {
8697         GenerateContextLostErrorOnCurrentGlobalContext();
8698         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFenceNV, GLboolean>();
8699     }
8700     return returnValue;
8701 }
8702 
GL_SetFenceNV(GLuint fence,GLenum condition)8703 void GL_APIENTRY GL_SetFenceNV(GLuint fence, GLenum condition)
8704 {
8705     Context *context = GetValidGlobalContext();
8706     EVENT(context, GLSetFenceNV, "context = %d, fence = %u, condition = %s", CID(context), fence,
8707           GLenumToString(GLenumGroup::DefaultGroup, condition));
8708 
8709     if (context)
8710     {
8711         FenceNVID fencePacked                                 = PackParam<FenceNVID>(fence);
8712         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8713         bool isCallValid =
8714             (context->skipValidation() ||
8715              ValidateSetFenceNV(context, angle::EntryPoint::GLSetFenceNV, fencePacked, condition));
8716         if (isCallValid)
8717         {
8718             context->setFenceNV(fencePacked, condition);
8719         }
8720         ANGLE_CAPTURE(SetFenceNV, isCallValid, context, fencePacked, condition);
8721     }
8722     else
8723     {
8724         GenerateContextLostErrorOnCurrentGlobalContext();
8725     }
8726 }
8727 
GL_TestFenceNV(GLuint fence)8728 GLboolean GL_APIENTRY GL_TestFenceNV(GLuint fence)
8729 {
8730     Context *context = GetValidGlobalContext();
8731     EVENT(context, GLTestFenceNV, "context = %d, fence = %u", CID(context), fence);
8732 
8733     GLboolean returnValue;
8734     if (context)
8735     {
8736         FenceNVID fencePacked                                 = PackParam<FenceNVID>(fence);
8737         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8738         bool isCallValid =
8739             (context->skipValidation() ||
8740              ValidateTestFenceNV(context, angle::EntryPoint::GLTestFenceNV, fencePacked));
8741         if (isCallValid)
8742         {
8743             returnValue = context->testFenceNV(fencePacked);
8744         }
8745         else
8746         {
8747             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLTestFenceNV, GLboolean>();
8748         }
8749         ANGLE_CAPTURE(TestFenceNV, isCallValid, context, fencePacked, returnValue);
8750     }
8751     else
8752     {
8753         GenerateContextLostErrorOnCurrentGlobalContext();
8754         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLTestFenceNV, GLboolean>();
8755     }
8756     return returnValue;
8757 }
8758 
8759 // GL_NV_framebuffer_blit
GL_BlitFramebufferNV(GLint srcX0,GLint srcY0,GLint srcX1,GLint srcY1,GLint dstX0,GLint dstY0,GLint dstX1,GLint dstY1,GLbitfield mask,GLenum filter)8760 void GL_APIENTRY GL_BlitFramebufferNV(GLint srcX0,
8761                                       GLint srcY0,
8762                                       GLint srcX1,
8763                                       GLint srcY1,
8764                                       GLint dstX0,
8765                                       GLint dstY0,
8766                                       GLint dstX1,
8767                                       GLint dstY1,
8768                                       GLbitfield mask,
8769                                       GLenum filter)
8770 {
8771     Context *context = GetValidGlobalContext();
8772     EVENT(context, GLBlitFramebufferNV,
8773           "context = %d, srcX0 = %d, srcY0 = %d, srcX1 = %d, srcY1 = %d, dstX0 = %d, dstY0 = %d, "
8774           "dstX1 = %d, dstY1 = %d, mask = %s, filter = %s",
8775           CID(context), srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
8776           GLbitfieldToString(GLenumGroup::ClearBufferMask, mask).c_str(),
8777           GLenumToString(GLenumGroup::BlitFramebufferFilter, filter));
8778 
8779     if (context)
8780     {
8781         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8782         bool isCallValid                                      = (context->skipValidation() ||
8783                             ValidateBlitFramebufferNV(
8784                                 context, angle::EntryPoint::GLBlitFramebufferNV, srcX0, srcY0,
8785                                 srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter));
8786         if (isCallValid)
8787         {
8788             context->blitFramebufferNV(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
8789                                        filter);
8790         }
8791         ANGLE_CAPTURE(BlitFramebufferNV, isCallValid, context, srcX0, srcY0, srcX1, srcY1, dstX0,
8792                       dstY0, dstX1, dstY1, mask, filter);
8793     }
8794     else
8795     {
8796         GenerateContextLostErrorOnCurrentGlobalContext();
8797     }
8798 }
8799 
8800 // GL_NV_pixel_buffer_object
8801 
8802 // GL_NV_read_depth
8803 
8804 // GL_NV_read_stencil
8805 
8806 // GL_NV_robustness_video_memory_purge
8807 
8808 // GL_NV_shader_noperspective_interpolation
8809 
8810 // GL_OES_EGL_image
GL_EGLImageTargetRenderbufferStorageOES(GLenum target,GLeglImageOES image)8811 void GL_APIENTRY GL_EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
8812 {
8813     Context *context = GetValidGlobalContext();
8814     EVENT(context, GLEGLImageTargetRenderbufferStorageOES,
8815           "context = %d, target = %s, image = 0x%016" PRIxPTR "", CID(context),
8816           GLenumToString(GLenumGroup::DefaultGroup, target), (uintptr_t)image);
8817 
8818     if (context)
8819     {
8820         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8821         bool isCallValid                                      = (context->skipValidation() ||
8822                             ValidateEGLImageTargetRenderbufferStorageOES(
8823                                 context, angle::EntryPoint::GLEGLImageTargetRenderbufferStorageOES,
8824                                 target, image));
8825         if (isCallValid)
8826         {
8827             context->eGLImageTargetRenderbufferStorage(target, image);
8828         }
8829         ANGLE_CAPTURE(EGLImageTargetRenderbufferStorageOES, isCallValid, context, target, image);
8830     }
8831     else
8832     {
8833         GenerateContextLostErrorOnCurrentGlobalContext();
8834     }
8835 }
8836 
GL_EGLImageTargetTexture2DOES(GLenum target,GLeglImageOES image)8837 void GL_APIENTRY GL_EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
8838 {
8839     Context *context = GetValidGlobalContext();
8840     EVENT(context, GLEGLImageTargetTexture2DOES,
8841           "context = %d, target = %s, image = 0x%016" PRIxPTR "", CID(context),
8842           GLenumToString(GLenumGroup::DefaultGroup, target), (uintptr_t)image);
8843 
8844     if (context)
8845     {
8846         TextureType targetPacked                              = PackParam<TextureType>(target);
8847         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8848         bool isCallValid =
8849             (context->skipValidation() ||
8850              ValidateEGLImageTargetTexture2DOES(
8851                  context, angle::EntryPoint::GLEGLImageTargetTexture2DOES, targetPacked, image));
8852         if (isCallValid)
8853         {
8854             context->eGLImageTargetTexture2D(targetPacked, image);
8855         }
8856         ANGLE_CAPTURE(EGLImageTargetTexture2DOES, isCallValid, context, targetPacked, image);
8857     }
8858     else
8859     {
8860         GenerateContextLostErrorOnCurrentGlobalContext();
8861     }
8862 }
8863 
8864 // GL_OES_EGL_image_external
8865 
8866 // GL_OES_EGL_image_external_essl3
8867 
8868 // GL_OES_compressed_ETC1_RGB8_texture
8869 
8870 // GL_OES_copy_image
GL_CopyImageSubDataOES(GLuint srcName,GLenum srcTarget,GLint srcLevel,GLint srcX,GLint srcY,GLint srcZ,GLuint dstName,GLenum dstTarget,GLint dstLevel,GLint dstX,GLint dstY,GLint dstZ,GLsizei srcWidth,GLsizei srcHeight,GLsizei srcDepth)8871 void GL_APIENTRY GL_CopyImageSubDataOES(GLuint srcName,
8872                                         GLenum srcTarget,
8873                                         GLint srcLevel,
8874                                         GLint srcX,
8875                                         GLint srcY,
8876                                         GLint srcZ,
8877                                         GLuint dstName,
8878                                         GLenum dstTarget,
8879                                         GLint dstLevel,
8880                                         GLint dstX,
8881                                         GLint dstY,
8882                                         GLint dstZ,
8883                                         GLsizei srcWidth,
8884                                         GLsizei srcHeight,
8885                                         GLsizei srcDepth)
8886 {
8887     Context *context = GetValidGlobalContext();
8888     EVENT(context, GLCopyImageSubDataOES,
8889           "context = %d, srcName = %u, srcTarget = %s, srcLevel = %d, srcX = %d, srcY = %d, srcZ = "
8890           "%d, dstName = %u, dstTarget = %s, dstLevel = %d, dstX = %d, dstY = %d, dstZ = %d, "
8891           "srcWidth = %d, srcHeight = %d, srcDepth = %d",
8892           CID(context), srcName, GLenumToString(GLenumGroup::CopyBufferSubDataTarget, srcTarget),
8893           srcLevel, srcX, srcY, srcZ, dstName,
8894           GLenumToString(GLenumGroup::CopyBufferSubDataTarget, dstTarget), dstLevel, dstX, dstY,
8895           dstZ, srcWidth, srcHeight, srcDepth);
8896 
8897     if (context)
8898     {
8899         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8900         bool isCallValid                                      = (context->skipValidation() ||
8901                             ValidateCopyImageSubDataOES(
8902                                 context, angle::EntryPoint::GLCopyImageSubDataOES, srcName,
8903                                 srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel,
8904                                 dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth));
8905         if (isCallValid)
8906         {
8907             context->copyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName,
8908                                       dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight,
8909                                       srcDepth);
8910         }
8911         ANGLE_CAPTURE(CopyImageSubDataOES, isCallValid, context, srcName, srcTarget, srcLevel, srcX,
8912                       srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth,
8913                       srcHeight, srcDepth);
8914     }
8915     else
8916     {
8917         GenerateContextLostErrorOnCurrentGlobalContext();
8918     }
8919 }
8920 
8921 // GL_OES_depth24
8922 
8923 // GL_OES_depth32
8924 
8925 // GL_OES_depth_texture
8926 
8927 // GL_OES_draw_buffers_indexed
GL_BlendEquationSeparateiOES(GLuint buf,GLenum modeRGB,GLenum modeAlpha)8928 void GL_APIENTRY GL_BlendEquationSeparateiOES(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
8929 {
8930     Context *context = GetValidGlobalContext();
8931     EVENT(context, GLBlendEquationSeparateiOES,
8932           "context = %d, buf = %u, modeRGB = %s, modeAlpha = %s", CID(context), buf,
8933           GLenumToString(GLenumGroup::BlendEquationModeEXT, modeRGB),
8934           GLenumToString(GLenumGroup::BlendEquationModeEXT, modeAlpha));
8935 
8936     if (context)
8937     {
8938         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8939         bool isCallValid =
8940             (context->skipValidation() ||
8941              ValidateBlendEquationSeparateiOES(
8942                  context, angle::EntryPoint::GLBlendEquationSeparateiOES, buf, modeRGB, modeAlpha));
8943         if (isCallValid)
8944         {
8945             context->blendEquationSeparatei(buf, modeRGB, modeAlpha);
8946         }
8947         ANGLE_CAPTURE(BlendEquationSeparateiOES, isCallValid, context, buf, modeRGB, modeAlpha);
8948     }
8949     else
8950     {
8951         GenerateContextLostErrorOnCurrentGlobalContext();
8952     }
8953 }
8954 
GL_BlendEquationiOES(GLuint buf,GLenum mode)8955 void GL_APIENTRY GL_BlendEquationiOES(GLuint buf, GLenum mode)
8956 {
8957     Context *context = GetValidGlobalContext();
8958     EVENT(context, GLBlendEquationiOES, "context = %d, buf = %u, mode = %s", CID(context), buf,
8959           GLenumToString(GLenumGroup::BlendEquationModeEXT, mode));
8960 
8961     if (context)
8962     {
8963         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8964         bool isCallValid =
8965             (context->skipValidation() ||
8966              ValidateBlendEquationiOES(context, angle::EntryPoint::GLBlendEquationiOES, buf, mode));
8967         if (isCallValid)
8968         {
8969             context->blendEquationi(buf, mode);
8970         }
8971         ANGLE_CAPTURE(BlendEquationiOES, isCallValid, context, buf, mode);
8972     }
8973     else
8974     {
8975         GenerateContextLostErrorOnCurrentGlobalContext();
8976     }
8977 }
8978 
8979 void GL_APIENTRY
GL_BlendFuncSeparateiOES(GLuint buf,GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)8980 GL_BlendFuncSeparateiOES(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
8981 {
8982     Context *context = GetValidGlobalContext();
8983     EVENT(context, GLBlendFuncSeparateiOES,
8984           "context = %d, buf = %u, srcRGB = %s, dstRGB = %s, srcAlpha = %s, dstAlpha = %s",
8985           CID(context), buf, GLenumToString(GLenumGroup::BlendingFactor, srcRGB),
8986           GLenumToString(GLenumGroup::BlendingFactor, dstRGB),
8987           GLenumToString(GLenumGroup::BlendingFactor, srcAlpha),
8988           GLenumToString(GLenumGroup::BlendingFactor, dstAlpha));
8989 
8990     if (context)
8991     {
8992         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
8993         bool isCallValid =
8994             (context->skipValidation() ||
8995              ValidateBlendFuncSeparateiOES(context, angle::EntryPoint::GLBlendFuncSeparateiOES, buf,
8996                                            srcRGB, dstRGB, srcAlpha, dstAlpha));
8997         if (isCallValid)
8998         {
8999             context->blendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
9000         }
9001         ANGLE_CAPTURE(BlendFuncSeparateiOES, isCallValid, context, buf, srcRGB, dstRGB, srcAlpha,
9002                       dstAlpha);
9003     }
9004     else
9005     {
9006         GenerateContextLostErrorOnCurrentGlobalContext();
9007     }
9008 }
9009 
GL_BlendFunciOES(GLuint buf,GLenum src,GLenum dst)9010 void GL_APIENTRY GL_BlendFunciOES(GLuint buf, GLenum src, GLenum dst)
9011 {
9012     Context *context = GetValidGlobalContext();
9013     EVENT(context, GLBlendFunciOES, "context = %d, buf = %u, src = %s, dst = %s", CID(context), buf,
9014           GLenumToString(GLenumGroup::BlendingFactor, src),
9015           GLenumToString(GLenumGroup::BlendingFactor, dst));
9016 
9017     if (context)
9018     {
9019         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9020         bool isCallValid =
9021             (context->skipValidation() ||
9022              ValidateBlendFunciOES(context, angle::EntryPoint::GLBlendFunciOES, buf, src, dst));
9023         if (isCallValid)
9024         {
9025             context->blendFunci(buf, src, dst);
9026         }
9027         ANGLE_CAPTURE(BlendFunciOES, isCallValid, context, buf, src, dst);
9028     }
9029     else
9030     {
9031         GenerateContextLostErrorOnCurrentGlobalContext();
9032     }
9033 }
9034 
GL_ColorMaskiOES(GLuint index,GLboolean r,GLboolean g,GLboolean b,GLboolean a)9035 void GL_APIENTRY GL_ColorMaskiOES(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
9036 {
9037     Context *context = GetValidGlobalContext();
9038     EVENT(context, GLColorMaskiOES, "context = %d, index = %u, r = %s, g = %s, b = %s, a = %s",
9039           CID(context), index, GLbooleanToString(r), GLbooleanToString(g), GLbooleanToString(b),
9040           GLbooleanToString(a));
9041 
9042     if (context)
9043     {
9044         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9045         bool isCallValid =
9046             (context->skipValidation() ||
9047              ValidateColorMaskiOES(context, angle::EntryPoint::GLColorMaskiOES, index, r, g, b, a));
9048         if (isCallValid)
9049         {
9050             context->colorMaski(index, r, g, b, a);
9051         }
9052         ANGLE_CAPTURE(ColorMaskiOES, isCallValid, context, index, r, g, b, a);
9053     }
9054     else
9055     {
9056         GenerateContextLostErrorOnCurrentGlobalContext();
9057     }
9058 }
9059 
GL_DisableiOES(GLenum target,GLuint index)9060 void GL_APIENTRY GL_DisableiOES(GLenum target, GLuint index)
9061 {
9062     Context *context = GetValidGlobalContext();
9063     EVENT(context, GLDisableiOES, "context = %d, target = %s, index = %u", CID(context),
9064           GLenumToString(GLenumGroup::EnableCap, target), index);
9065 
9066     if (context)
9067     {
9068         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9069         bool isCallValid =
9070             (context->skipValidation() ||
9071              ValidateDisableiOES(context, angle::EntryPoint::GLDisableiOES, target, index));
9072         if (isCallValid)
9073         {
9074             context->disablei(target, index);
9075         }
9076         ANGLE_CAPTURE(DisableiOES, isCallValid, context, target, index);
9077     }
9078     else
9079     {
9080         GenerateContextLostErrorOnCurrentGlobalContext();
9081     }
9082 }
9083 
GL_EnableiOES(GLenum target,GLuint index)9084 void GL_APIENTRY GL_EnableiOES(GLenum target, GLuint index)
9085 {
9086     Context *context = GetValidGlobalContext();
9087     EVENT(context, GLEnableiOES, "context = %d, target = %s, index = %u", CID(context),
9088           GLenumToString(GLenumGroup::EnableCap, target), index);
9089 
9090     if (context)
9091     {
9092         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9093         bool isCallValid =
9094             (context->skipValidation() ||
9095              ValidateEnableiOES(context, angle::EntryPoint::GLEnableiOES, target, index));
9096         if (isCallValid)
9097         {
9098             context->enablei(target, index);
9099         }
9100         ANGLE_CAPTURE(EnableiOES, isCallValid, context, target, index);
9101     }
9102     else
9103     {
9104         GenerateContextLostErrorOnCurrentGlobalContext();
9105     }
9106 }
9107 
GL_IsEnablediOES(GLenum target,GLuint index)9108 GLboolean GL_APIENTRY GL_IsEnablediOES(GLenum target, GLuint index)
9109 {
9110     Context *context = GetValidGlobalContext();
9111     EVENT(context, GLIsEnablediOES, "context = %d, target = %s, index = %u", CID(context),
9112           GLenumToString(GLenumGroup::EnableCap, target), index);
9113 
9114     GLboolean returnValue;
9115     if (context)
9116     {
9117         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9118         bool isCallValid =
9119             (context->skipValidation() ||
9120              ValidateIsEnablediOES(context, angle::EntryPoint::GLIsEnablediOES, target, index));
9121         if (isCallValid)
9122         {
9123             returnValue = context->isEnabledi(target, index);
9124         }
9125         else
9126         {
9127             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnablediOES, GLboolean>();
9128         }
9129         ANGLE_CAPTURE(IsEnablediOES, isCallValid, context, target, index, returnValue);
9130     }
9131     else
9132     {
9133         GenerateContextLostErrorOnCurrentGlobalContext();
9134         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnablediOES, GLboolean>();
9135     }
9136     return returnValue;
9137 }
9138 
9139 // GL_OES_draw_elements_base_vertex
GL_DrawElementsBaseVertexOES(GLenum mode,GLsizei count,GLenum type,const void * indices,GLint basevertex)9140 void GL_APIENTRY GL_DrawElementsBaseVertexOES(GLenum mode,
9141                                               GLsizei count,
9142                                               GLenum type,
9143                                               const void *indices,
9144                                               GLint basevertex)
9145 {
9146     Context *context = GetValidGlobalContext();
9147     EVENT(context, GLDrawElementsBaseVertexOES,
9148           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
9149           ", basevertex = %d",
9150           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), count,
9151           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, basevertex);
9152 
9153     if (context)
9154     {
9155         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
9156         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
9157         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9158         bool isCallValid                                      = (context->skipValidation() ||
9159                             ValidateDrawElementsBaseVertexOES(
9160                                 context, angle::EntryPoint::GLDrawElementsBaseVertexOES, modePacked,
9161                                 count, typePacked, indices, basevertex));
9162         if (isCallValid)
9163         {
9164             context->drawElementsBaseVertex(modePacked, count, typePacked, indices, basevertex);
9165         }
9166         ANGLE_CAPTURE(DrawElementsBaseVertexOES, isCallValid, context, modePacked, count,
9167                       typePacked, indices, basevertex);
9168     }
9169     else
9170     {
9171         GenerateContextLostErrorOnCurrentGlobalContext();
9172     }
9173 }
9174 
GL_DrawElementsInstancedBaseVertexOES(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei instancecount,GLint basevertex)9175 void GL_APIENTRY GL_DrawElementsInstancedBaseVertexOES(GLenum mode,
9176                                                        GLsizei count,
9177                                                        GLenum type,
9178                                                        const void *indices,
9179                                                        GLsizei instancecount,
9180                                                        GLint basevertex)
9181 {
9182     Context *context = GetValidGlobalContext();
9183     EVENT(context, GLDrawElementsInstancedBaseVertexOES,
9184           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
9185           ", instancecount = %d, basevertex = %d",
9186           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), count,
9187           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, instancecount,
9188           basevertex);
9189 
9190     if (context)
9191     {
9192         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
9193         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
9194         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9195         bool isCallValid                                      = (context->skipValidation() ||
9196                             ValidateDrawElementsInstancedBaseVertexOES(
9197                                 context, angle::EntryPoint::GLDrawElementsInstancedBaseVertexOES,
9198                                 modePacked, count, typePacked, indices, instancecount, basevertex));
9199         if (isCallValid)
9200         {
9201             context->drawElementsInstancedBaseVertex(modePacked, count, typePacked, indices,
9202                                                      instancecount, basevertex);
9203         }
9204         ANGLE_CAPTURE(DrawElementsInstancedBaseVertexOES, isCallValid, context, modePacked, count,
9205                       typePacked, indices, instancecount, basevertex);
9206     }
9207     else
9208     {
9209         GenerateContextLostErrorOnCurrentGlobalContext();
9210     }
9211 }
9212 
GL_DrawRangeElementsBaseVertexOES(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const void * indices,GLint basevertex)9213 void GL_APIENTRY GL_DrawRangeElementsBaseVertexOES(GLenum mode,
9214                                                    GLuint start,
9215                                                    GLuint end,
9216                                                    GLsizei count,
9217                                                    GLenum type,
9218                                                    const void *indices,
9219                                                    GLint basevertex)
9220 {
9221     Context *context = GetValidGlobalContext();
9222     EVENT(context, GLDrawRangeElementsBaseVertexOES,
9223           "context = %d, mode = %s, start = %u, end = %u, count = %d, type = %s, indices = "
9224           "0x%016" PRIxPTR ", basevertex = %d",
9225           CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), start, end, count,
9226           GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, basevertex);
9227 
9228     if (context)
9229     {
9230         PrimitiveMode modePacked                              = PackParam<PrimitiveMode>(mode);
9231         DrawElementsType typePacked                           = PackParam<DrawElementsType>(type);
9232         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9233         bool isCallValid                                      = (context->skipValidation() ||
9234                             ValidateDrawRangeElementsBaseVertexOES(
9235                                 context, angle::EntryPoint::GLDrawRangeElementsBaseVertexOES,
9236                                 modePacked, start, end, count, typePacked, indices, basevertex));
9237         if (isCallValid)
9238         {
9239             context->drawRangeElementsBaseVertex(modePacked, start, end, count, typePacked, indices,
9240                                                  basevertex);
9241         }
9242         ANGLE_CAPTURE(DrawRangeElementsBaseVertexOES, isCallValid, context, modePacked, start, end,
9243                       count, typePacked, indices, basevertex);
9244     }
9245     else
9246     {
9247         GenerateContextLostErrorOnCurrentGlobalContext();
9248     }
9249 }
9250 
9251 // MultiDrawElementsBaseVertexEXT is already defined.
9252 
9253 // GL_OES_draw_texture
GL_DrawTexfOES(GLfloat x,GLfloat y,GLfloat z,GLfloat width,GLfloat height)9254 void GL_APIENTRY GL_DrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
9255 {
9256     Context *context = GetValidGlobalContext();
9257     EVENT(context, GLDrawTexfOES, "context = %d, x = %f, y = %f, z = %f, width = %f, height = %f",
9258           CID(context), x, y, z, width, height);
9259 
9260     if (context)
9261     {
9262         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9263         bool isCallValid                                      = (context->skipValidation() ||
9264                             ValidateDrawTexfOES(context, angle::EntryPoint::GLDrawTexfOES, x, y, z,
9265                                                 width, height));
9266         if (isCallValid)
9267         {
9268             context->drawTexf(x, y, z, width, height);
9269         }
9270         ANGLE_CAPTURE(DrawTexfOES, isCallValid, context, x, y, z, width, height);
9271     }
9272     else
9273     {
9274         GenerateContextLostErrorOnCurrentGlobalContext();
9275     }
9276 }
9277 
GL_DrawTexfvOES(const GLfloat * coords)9278 void GL_APIENTRY GL_DrawTexfvOES(const GLfloat *coords)
9279 {
9280     Context *context = GetValidGlobalContext();
9281     EVENT(context, GLDrawTexfvOES, "context = %d, coords = 0x%016" PRIxPTR "", CID(context),
9282           (uintptr_t)coords);
9283 
9284     if (context)
9285     {
9286         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9287         bool isCallValid =
9288             (context->skipValidation() ||
9289              ValidateDrawTexfvOES(context, angle::EntryPoint::GLDrawTexfvOES, coords));
9290         if (isCallValid)
9291         {
9292             context->drawTexfv(coords);
9293         }
9294         ANGLE_CAPTURE(DrawTexfvOES, isCallValid, context, coords);
9295     }
9296     else
9297     {
9298         GenerateContextLostErrorOnCurrentGlobalContext();
9299     }
9300 }
9301 
GL_DrawTexiOES(GLint x,GLint y,GLint z,GLint width,GLint height)9302 void GL_APIENTRY GL_DrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height)
9303 {
9304     Context *context = GetValidGlobalContext();
9305     EVENT(context, GLDrawTexiOES, "context = %d, x = %d, y = %d, z = %d, width = %d, height = %d",
9306           CID(context), x, y, z, width, height);
9307 
9308     if (context)
9309     {
9310         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9311         bool isCallValid                                      = (context->skipValidation() ||
9312                             ValidateDrawTexiOES(context, angle::EntryPoint::GLDrawTexiOES, x, y, z,
9313                                                 width, height));
9314         if (isCallValid)
9315         {
9316             context->drawTexi(x, y, z, width, height);
9317         }
9318         ANGLE_CAPTURE(DrawTexiOES, isCallValid, context, x, y, z, width, height);
9319     }
9320     else
9321     {
9322         GenerateContextLostErrorOnCurrentGlobalContext();
9323     }
9324 }
9325 
GL_DrawTexivOES(const GLint * coords)9326 void GL_APIENTRY GL_DrawTexivOES(const GLint *coords)
9327 {
9328     Context *context = GetValidGlobalContext();
9329     EVENT(context, GLDrawTexivOES, "context = %d, coords = 0x%016" PRIxPTR "", CID(context),
9330           (uintptr_t)coords);
9331 
9332     if (context)
9333     {
9334         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9335         bool isCallValid =
9336             (context->skipValidation() ||
9337              ValidateDrawTexivOES(context, angle::EntryPoint::GLDrawTexivOES, coords));
9338         if (isCallValid)
9339         {
9340             context->drawTexiv(coords);
9341         }
9342         ANGLE_CAPTURE(DrawTexivOES, isCallValid, context, coords);
9343     }
9344     else
9345     {
9346         GenerateContextLostErrorOnCurrentGlobalContext();
9347     }
9348 }
9349 
GL_DrawTexsOES(GLshort x,GLshort y,GLshort z,GLshort width,GLshort height)9350 void GL_APIENTRY GL_DrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
9351 {
9352     Context *context = GetValidGlobalContext();
9353     EVENT(context, GLDrawTexsOES, "context = %d, x = %d, y = %d, z = %d, width = %d, height = %d",
9354           CID(context), x, y, z, width, height);
9355 
9356     if (context)
9357     {
9358         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9359         bool isCallValid                                      = (context->skipValidation() ||
9360                             ValidateDrawTexsOES(context, angle::EntryPoint::GLDrawTexsOES, x, y, z,
9361                                                 width, height));
9362         if (isCallValid)
9363         {
9364             context->drawTexs(x, y, z, width, height);
9365         }
9366         ANGLE_CAPTURE(DrawTexsOES, isCallValid, context, x, y, z, width, height);
9367     }
9368     else
9369     {
9370         GenerateContextLostErrorOnCurrentGlobalContext();
9371     }
9372 }
9373 
GL_DrawTexsvOES(const GLshort * coords)9374 void GL_APIENTRY GL_DrawTexsvOES(const GLshort *coords)
9375 {
9376     Context *context = GetValidGlobalContext();
9377     EVENT(context, GLDrawTexsvOES, "context = %d, coords = 0x%016" PRIxPTR "", CID(context),
9378           (uintptr_t)coords);
9379 
9380     if (context)
9381     {
9382         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9383         bool isCallValid =
9384             (context->skipValidation() ||
9385              ValidateDrawTexsvOES(context, angle::EntryPoint::GLDrawTexsvOES, coords));
9386         if (isCallValid)
9387         {
9388             context->drawTexsv(coords);
9389         }
9390         ANGLE_CAPTURE(DrawTexsvOES, isCallValid, context, coords);
9391     }
9392     else
9393     {
9394         GenerateContextLostErrorOnCurrentGlobalContext();
9395     }
9396 }
9397 
GL_DrawTexxOES(GLfixed x,GLfixed y,GLfixed z,GLfixed width,GLfixed height)9398 void GL_APIENTRY GL_DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
9399 {
9400     Context *context = GetValidGlobalContext();
9401     EVENT(context, GLDrawTexxOES,
9402           "context = %d, x = 0x%X, y = 0x%X, z = 0x%X, width = 0x%X, height = 0x%X", CID(context),
9403           x, y, z, width, height);
9404 
9405     if (context)
9406     {
9407         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9408         bool isCallValid                                      = (context->skipValidation() ||
9409                             ValidateDrawTexxOES(context, angle::EntryPoint::GLDrawTexxOES, x, y, z,
9410                                                 width, height));
9411         if (isCallValid)
9412         {
9413             context->drawTexx(x, y, z, width, height);
9414         }
9415         ANGLE_CAPTURE(DrawTexxOES, isCallValid, context, x, y, z, width, height);
9416     }
9417     else
9418     {
9419         GenerateContextLostErrorOnCurrentGlobalContext();
9420     }
9421 }
9422 
GL_DrawTexxvOES(const GLfixed * coords)9423 void GL_APIENTRY GL_DrawTexxvOES(const GLfixed *coords)
9424 {
9425     Context *context = GetValidGlobalContext();
9426     EVENT(context, GLDrawTexxvOES, "context = %d, coords = 0x%016" PRIxPTR "", CID(context),
9427           (uintptr_t)coords);
9428 
9429     if (context)
9430     {
9431         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9432         bool isCallValid =
9433             (context->skipValidation() ||
9434              ValidateDrawTexxvOES(context, angle::EntryPoint::GLDrawTexxvOES, coords));
9435         if (isCallValid)
9436         {
9437             context->drawTexxv(coords);
9438         }
9439         ANGLE_CAPTURE(DrawTexxvOES, isCallValid, context, coords);
9440     }
9441     else
9442     {
9443         GenerateContextLostErrorOnCurrentGlobalContext();
9444     }
9445 }
9446 
9447 // GL_OES_element_index_uint
9448 
9449 // GL_OES_fbo_render_mipmap
9450 
9451 // GL_OES_framebuffer_object
GL_BindFramebufferOES(GLenum target,GLuint framebuffer)9452 void GL_APIENTRY GL_BindFramebufferOES(GLenum target, GLuint framebuffer)
9453 {
9454     Context *context = GetValidGlobalContext();
9455     EVENT(context, GLBindFramebufferOES, "context = %d, target = %s, framebuffer = %u",
9456           CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target), framebuffer);
9457 
9458     if (context)
9459     {
9460         FramebufferID framebufferPacked = PackParam<FramebufferID>(framebuffer);
9461         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9462         bool isCallValid =
9463             (context->skipValidation() ||
9464              ValidateBindFramebufferOES(context, angle::EntryPoint::GLBindFramebufferOES, target,
9465                                         framebufferPacked));
9466         if (isCallValid)
9467         {
9468             context->bindFramebuffer(target, framebufferPacked);
9469         }
9470         ANGLE_CAPTURE(BindFramebufferOES, isCallValid, context, target, framebufferPacked);
9471     }
9472     else
9473     {
9474         GenerateContextLostErrorOnCurrentGlobalContext();
9475     }
9476 }
9477 
GL_BindRenderbufferOES(GLenum target,GLuint renderbuffer)9478 void GL_APIENTRY GL_BindRenderbufferOES(GLenum target, GLuint renderbuffer)
9479 {
9480     Context *context = GetValidGlobalContext();
9481     EVENT(context, GLBindRenderbufferOES, "context = %d, target = %s, renderbuffer = %u",
9482           CID(context), GLenumToString(GLenumGroup::RenderbufferTarget, target), renderbuffer);
9483 
9484     if (context)
9485     {
9486         RenderbufferID renderbufferPacked = PackParam<RenderbufferID>(renderbuffer);
9487         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9488         bool isCallValid =
9489             (context->skipValidation() ||
9490              ValidateBindRenderbufferOES(context, angle::EntryPoint::GLBindRenderbufferOES, target,
9491                                          renderbufferPacked));
9492         if (isCallValid)
9493         {
9494             context->bindRenderbuffer(target, renderbufferPacked);
9495         }
9496         ANGLE_CAPTURE(BindRenderbufferOES, isCallValid, context, target, renderbufferPacked);
9497     }
9498     else
9499     {
9500         GenerateContextLostErrorOnCurrentGlobalContext();
9501     }
9502 }
9503 
GL_CheckFramebufferStatusOES(GLenum target)9504 GLenum GL_APIENTRY GL_CheckFramebufferStatusOES(GLenum target)
9505 {
9506     Context *context = GetValidGlobalContext();
9507     EVENT(context, GLCheckFramebufferStatusOES, "context = %d, target = %s", CID(context),
9508           GLenumToString(GLenumGroup::FramebufferTarget, target));
9509 
9510     GLenum returnValue;
9511     if (context)
9512     {
9513         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9514         bool isCallValid                                      = (context->skipValidation() ||
9515                             ValidateCheckFramebufferStatusOES(
9516                                 context, angle::EntryPoint::GLCheckFramebufferStatusOES, target));
9517         if (isCallValid)
9518         {
9519             returnValue = context->checkFramebufferStatus(target);
9520         }
9521         else
9522         {
9523             returnValue =
9524                 GetDefaultReturnValue<angle::EntryPoint::GLCheckFramebufferStatusOES, GLenum>();
9525         }
9526         ANGLE_CAPTURE(CheckFramebufferStatusOES, isCallValid, context, target, returnValue);
9527     }
9528     else
9529     {
9530         GenerateContextLostErrorOnCurrentGlobalContext();
9531         returnValue =
9532             GetDefaultReturnValue<angle::EntryPoint::GLCheckFramebufferStatusOES, GLenum>();
9533     }
9534     return returnValue;
9535 }
9536 
GL_DeleteFramebuffersOES(GLsizei n,const GLuint * framebuffers)9537 void GL_APIENTRY GL_DeleteFramebuffersOES(GLsizei n, const GLuint *framebuffers)
9538 {
9539     Context *context = GetValidGlobalContext();
9540     EVENT(context, GLDeleteFramebuffersOES,
9541           "context = %d, n = %d, framebuffers = 0x%016" PRIxPTR "", CID(context), n,
9542           (uintptr_t)framebuffers);
9543 
9544     if (context)
9545     {
9546         const FramebufferID *framebuffersPacked = PackParam<const FramebufferID *>(framebuffers);
9547         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9548         bool isCallValid =
9549             (context->skipValidation() ||
9550              ValidateDeleteFramebuffersOES(context, angle::EntryPoint::GLDeleteFramebuffersOES, n,
9551                                            framebuffersPacked));
9552         if (isCallValid)
9553         {
9554             context->deleteFramebuffers(n, framebuffersPacked);
9555         }
9556         ANGLE_CAPTURE(DeleteFramebuffersOES, isCallValid, context, n, framebuffersPacked);
9557     }
9558     else
9559     {
9560         GenerateContextLostErrorOnCurrentGlobalContext();
9561     }
9562 }
9563 
GL_DeleteRenderbuffersOES(GLsizei n,const GLuint * renderbuffers)9564 void GL_APIENTRY GL_DeleteRenderbuffersOES(GLsizei n, const GLuint *renderbuffers)
9565 {
9566     Context *context = GetValidGlobalContext();
9567     EVENT(context, GLDeleteRenderbuffersOES,
9568           "context = %d, n = %d, renderbuffers = 0x%016" PRIxPTR "", CID(context), n,
9569           (uintptr_t)renderbuffers);
9570 
9571     if (context)
9572     {
9573         const RenderbufferID *renderbuffersPacked =
9574             PackParam<const RenderbufferID *>(renderbuffers);
9575         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9576         bool isCallValid =
9577             (context->skipValidation() ||
9578              ValidateDeleteRenderbuffersOES(context, angle::EntryPoint::GLDeleteRenderbuffersOES, n,
9579                                             renderbuffersPacked));
9580         if (isCallValid)
9581         {
9582             context->deleteRenderbuffers(n, renderbuffersPacked);
9583         }
9584         ANGLE_CAPTURE(DeleteRenderbuffersOES, isCallValid, context, n, renderbuffersPacked);
9585     }
9586     else
9587     {
9588         GenerateContextLostErrorOnCurrentGlobalContext();
9589     }
9590 }
9591 
GL_FramebufferRenderbufferOES(GLenum target,GLenum attachment,GLenum renderbuffertarget,GLuint renderbuffer)9592 void GL_APIENTRY GL_FramebufferRenderbufferOES(GLenum target,
9593                                                GLenum attachment,
9594                                                GLenum renderbuffertarget,
9595                                                GLuint renderbuffer)
9596 {
9597     Context *context = GetValidGlobalContext();
9598     EVENT(context, GLFramebufferRenderbufferOES,
9599           "context = %d, target = %s, attachment = %s, renderbuffertarget = %s, renderbuffer = %u",
9600           CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),
9601           GLenumToString(GLenumGroup::FramebufferAttachment, attachment),
9602           GLenumToString(GLenumGroup::RenderbufferTarget, renderbuffertarget), renderbuffer);
9603 
9604     if (context)
9605     {
9606         RenderbufferID renderbufferPacked = PackParam<RenderbufferID>(renderbuffer);
9607         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9608         bool isCallValid                                      = (context->skipValidation() ||
9609                             ValidateFramebufferRenderbufferOES(
9610                                 context, angle::EntryPoint::GLFramebufferRenderbufferOES, target,
9611                                 attachment, renderbuffertarget, renderbufferPacked));
9612         if (isCallValid)
9613         {
9614             context->framebufferRenderbuffer(target, attachment, renderbuffertarget,
9615                                              renderbufferPacked);
9616         }
9617         ANGLE_CAPTURE(FramebufferRenderbufferOES, isCallValid, context, target, attachment,
9618                       renderbuffertarget, renderbufferPacked);
9619     }
9620     else
9621     {
9622         GenerateContextLostErrorOnCurrentGlobalContext();
9623     }
9624 }
9625 
GL_FramebufferTexture2DOES(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level)9626 void GL_APIENTRY GL_FramebufferTexture2DOES(GLenum target,
9627                                             GLenum attachment,
9628                                             GLenum textarget,
9629                                             GLuint texture,
9630                                             GLint level)
9631 {
9632     Context *context = GetValidGlobalContext();
9633     EVENT(context, GLFramebufferTexture2DOES,
9634           "context = %d, target = %s, attachment = %s, textarget = %s, texture = %u, level = %d",
9635           CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),
9636           GLenumToString(GLenumGroup::FramebufferAttachment, attachment),
9637           GLenumToString(GLenumGroup::TextureTarget, textarget), texture, level);
9638 
9639     if (context)
9640     {
9641         TextureTarget textargetPacked                         = PackParam<TextureTarget>(textarget);
9642         TextureID texturePacked                               = PackParam<TextureID>(texture);
9643         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9644         bool isCallValid                                      = (context->skipValidation() ||
9645                             ValidateFramebufferTexture2DOES(
9646                                 context, angle::EntryPoint::GLFramebufferTexture2DOES, target,
9647                                 attachment, textargetPacked, texturePacked, level));
9648         if (isCallValid)
9649         {
9650             context->framebufferTexture2D(target, attachment, textargetPacked, texturePacked,
9651                                           level);
9652         }
9653         ANGLE_CAPTURE(FramebufferTexture2DOES, isCallValid, context, target, attachment,
9654                       textargetPacked, texturePacked, level);
9655     }
9656     else
9657     {
9658         GenerateContextLostErrorOnCurrentGlobalContext();
9659     }
9660 }
9661 
GL_GenFramebuffersOES(GLsizei n,GLuint * framebuffers)9662 void GL_APIENTRY GL_GenFramebuffersOES(GLsizei n, GLuint *framebuffers)
9663 {
9664     Context *context = GetValidGlobalContext();
9665     EVENT(context, GLGenFramebuffersOES, "context = %d, n = %d, framebuffers = 0x%016" PRIxPTR "",
9666           CID(context), n, (uintptr_t)framebuffers);
9667 
9668     if (context)
9669     {
9670         FramebufferID *framebuffersPacked = PackParam<FramebufferID *>(framebuffers);
9671         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9672         bool isCallValid =
9673             (context->skipValidation() ||
9674              ValidateGenFramebuffersOES(context, angle::EntryPoint::GLGenFramebuffersOES, n,
9675                                         framebuffersPacked));
9676         if (isCallValid)
9677         {
9678             context->genFramebuffers(n, framebuffersPacked);
9679         }
9680         ANGLE_CAPTURE(GenFramebuffersOES, isCallValid, context, n, framebuffersPacked);
9681     }
9682     else
9683     {
9684         GenerateContextLostErrorOnCurrentGlobalContext();
9685     }
9686 }
9687 
GL_GenRenderbuffersOES(GLsizei n,GLuint * renderbuffers)9688 void GL_APIENTRY GL_GenRenderbuffersOES(GLsizei n, GLuint *renderbuffers)
9689 {
9690     Context *context = GetValidGlobalContext();
9691     EVENT(context, GLGenRenderbuffersOES, "context = %d, n = %d, renderbuffers = 0x%016" PRIxPTR "",
9692           CID(context), n, (uintptr_t)renderbuffers);
9693 
9694     if (context)
9695     {
9696         RenderbufferID *renderbuffersPacked = PackParam<RenderbufferID *>(renderbuffers);
9697         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9698         bool isCallValid =
9699             (context->skipValidation() ||
9700              ValidateGenRenderbuffersOES(context, angle::EntryPoint::GLGenRenderbuffersOES, n,
9701                                          renderbuffersPacked));
9702         if (isCallValid)
9703         {
9704             context->genRenderbuffers(n, renderbuffersPacked);
9705         }
9706         ANGLE_CAPTURE(GenRenderbuffersOES, isCallValid, context, n, renderbuffersPacked);
9707     }
9708     else
9709     {
9710         GenerateContextLostErrorOnCurrentGlobalContext();
9711     }
9712 }
9713 
GL_GenerateMipmapOES(GLenum target)9714 void GL_APIENTRY GL_GenerateMipmapOES(GLenum target)
9715 {
9716     Context *context = GetValidGlobalContext();
9717     EVENT(context, GLGenerateMipmapOES, "context = %d, target = %s", CID(context),
9718           GLenumToString(GLenumGroup::TextureTarget, target));
9719 
9720     if (context)
9721     {
9722         TextureType targetPacked                              = PackParam<TextureType>(target);
9723         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9724         bool isCallValid                                      = (context->skipValidation() ||
9725                             ValidateGenerateMipmapOES(
9726                                 context, angle::EntryPoint::GLGenerateMipmapOES, targetPacked));
9727         if (isCallValid)
9728         {
9729             context->generateMipmap(targetPacked);
9730         }
9731         ANGLE_CAPTURE(GenerateMipmapOES, isCallValid, context, targetPacked);
9732     }
9733     else
9734     {
9735         GenerateContextLostErrorOnCurrentGlobalContext();
9736     }
9737 }
9738 
GL_GetFramebufferAttachmentParameterivOES(GLenum target,GLenum attachment,GLenum pname,GLint * params)9739 void GL_APIENTRY GL_GetFramebufferAttachmentParameterivOES(GLenum target,
9740                                                            GLenum attachment,
9741                                                            GLenum pname,
9742                                                            GLint *params)
9743 {
9744     Context *context = GetValidGlobalContext();
9745     EVENT(context, GLGetFramebufferAttachmentParameterivOES,
9746           "context = %d, target = %s, attachment = %s, pname = %s, params = 0x%016" PRIxPTR "",
9747           CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),
9748           GLenumToString(GLenumGroup::FramebufferAttachment, attachment),
9749           GLenumToString(GLenumGroup::FramebufferAttachmentParameterName, pname),
9750           (uintptr_t)params);
9751 
9752     if (context)
9753     {
9754         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9755         bool isCallValid =
9756             (context->skipValidation() ||
9757              ValidateGetFramebufferAttachmentParameterivOES(
9758                  context, angle::EntryPoint::GLGetFramebufferAttachmentParameterivOES, target,
9759                  attachment, pname, params));
9760         if (isCallValid)
9761         {
9762             context->getFramebufferAttachmentParameteriv(target, attachment, pname, params);
9763         }
9764         ANGLE_CAPTURE(GetFramebufferAttachmentParameterivOES, isCallValid, context, target,
9765                       attachment, pname, params);
9766     }
9767     else
9768     {
9769         GenerateContextLostErrorOnCurrentGlobalContext();
9770     }
9771 }
9772 
GL_GetRenderbufferParameterivOES(GLenum target,GLenum pname,GLint * params)9773 void GL_APIENTRY GL_GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint *params)
9774 {
9775     Context *context = GetValidGlobalContext();
9776     EVENT(context, GLGetRenderbufferParameterivOES,
9777           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
9778           GLenumToString(GLenumGroup::RenderbufferTarget, target),
9779           GLenumToString(GLenumGroup::RenderbufferParameterName, pname), (uintptr_t)params);
9780 
9781     if (context)
9782     {
9783         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9784         bool isCallValid                                      = (context->skipValidation() ||
9785                             ValidateGetRenderbufferParameterivOES(
9786                                 context, angle::EntryPoint::GLGetRenderbufferParameterivOES, target,
9787                                 pname, params));
9788         if (isCallValid)
9789         {
9790             context->getRenderbufferParameteriv(target, pname, params);
9791         }
9792         ANGLE_CAPTURE(GetRenderbufferParameterivOES, isCallValid, context, target, pname, params);
9793     }
9794     else
9795     {
9796         GenerateContextLostErrorOnCurrentGlobalContext();
9797     }
9798 }
9799 
GL_IsFramebufferOES(GLuint framebuffer)9800 GLboolean GL_APIENTRY GL_IsFramebufferOES(GLuint framebuffer)
9801 {
9802     Context *context = GetValidGlobalContext();
9803     EVENT(context, GLIsFramebufferOES, "context = %d, framebuffer = %u", CID(context), framebuffer);
9804 
9805     GLboolean returnValue;
9806     if (context)
9807     {
9808         FramebufferID framebufferPacked = PackParam<FramebufferID>(framebuffer);
9809         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9810         bool isCallValid                                      = (context->skipValidation() ||
9811                             ValidateIsFramebufferOES(context, angle::EntryPoint::GLIsFramebufferOES,
9812                                                      framebufferPacked));
9813         if (isCallValid)
9814         {
9815             returnValue = context->isFramebuffer(framebufferPacked);
9816         }
9817         else
9818         {
9819             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFramebufferOES, GLboolean>();
9820         }
9821         ANGLE_CAPTURE(IsFramebufferOES, isCallValid, context, framebufferPacked, returnValue);
9822     }
9823     else
9824     {
9825         GenerateContextLostErrorOnCurrentGlobalContext();
9826         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFramebufferOES, GLboolean>();
9827     }
9828     return returnValue;
9829 }
9830 
GL_IsRenderbufferOES(GLuint renderbuffer)9831 GLboolean GL_APIENTRY GL_IsRenderbufferOES(GLuint renderbuffer)
9832 {
9833     Context *context = GetValidGlobalContext();
9834     EVENT(context, GLIsRenderbufferOES, "context = %d, renderbuffer = %u", CID(context),
9835           renderbuffer);
9836 
9837     GLboolean returnValue;
9838     if (context)
9839     {
9840         RenderbufferID renderbufferPacked = PackParam<RenderbufferID>(renderbuffer);
9841         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9842         bool isCallValid =
9843             (context->skipValidation() ||
9844              ValidateIsRenderbufferOES(context, angle::EntryPoint::GLIsRenderbufferOES,
9845                                        renderbufferPacked));
9846         if (isCallValid)
9847         {
9848             returnValue = context->isRenderbuffer(renderbufferPacked);
9849         }
9850         else
9851         {
9852             returnValue =
9853                 GetDefaultReturnValue<angle::EntryPoint::GLIsRenderbufferOES, GLboolean>();
9854         }
9855         ANGLE_CAPTURE(IsRenderbufferOES, isCallValid, context, renderbufferPacked, returnValue);
9856     }
9857     else
9858     {
9859         GenerateContextLostErrorOnCurrentGlobalContext();
9860         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsRenderbufferOES, GLboolean>();
9861     }
9862     return returnValue;
9863 }
9864 
GL_RenderbufferStorageOES(GLenum target,GLenum internalformat,GLsizei width,GLsizei height)9865 void GL_APIENTRY GL_RenderbufferStorageOES(GLenum target,
9866                                            GLenum internalformat,
9867                                            GLsizei width,
9868                                            GLsizei height)
9869 {
9870     Context *context = GetValidGlobalContext();
9871     EVENT(context, GLRenderbufferStorageOES,
9872           "context = %d, target = %s, internalformat = %s, width = %d, height = %d", CID(context),
9873           GLenumToString(GLenumGroup::RenderbufferTarget, target),
9874           GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height);
9875 
9876     if (context)
9877     {
9878         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9879         bool isCallValid =
9880             (context->skipValidation() ||
9881              ValidateRenderbufferStorageOES(context, angle::EntryPoint::GLRenderbufferStorageOES,
9882                                             target, internalformat, width, height));
9883         if (isCallValid)
9884         {
9885             context->renderbufferStorage(target, internalformat, width, height);
9886         }
9887         ANGLE_CAPTURE(RenderbufferStorageOES, isCallValid, context, target, internalformat, width,
9888                       height);
9889     }
9890     else
9891     {
9892         GenerateContextLostErrorOnCurrentGlobalContext();
9893     }
9894 }
9895 
9896 // GL_OES_geometry_shader
GL_FramebufferTextureOES(GLenum target,GLenum attachment,GLuint texture,GLint level)9897 void GL_APIENTRY GL_FramebufferTextureOES(GLenum target,
9898                                           GLenum attachment,
9899                                           GLuint texture,
9900                                           GLint level)
9901 {
9902     Context *context = GetValidGlobalContext();
9903     EVENT(context, GLFramebufferTextureOES,
9904           "context = %d, target = %s, attachment = %s, texture = %u, level = %d", CID(context),
9905           GLenumToString(GLenumGroup::FramebufferTarget, target),
9906           GLenumToString(GLenumGroup::FramebufferAttachment, attachment), texture, level);
9907 
9908     if (context)
9909     {
9910         TextureID texturePacked                               = PackParam<TextureID>(texture);
9911         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9912         bool isCallValid =
9913             (context->skipValidation() ||
9914              ValidateFramebufferTextureOES(context, angle::EntryPoint::GLFramebufferTextureOES,
9915                                            target, attachment, texturePacked, level));
9916         if (isCallValid)
9917         {
9918             context->framebufferTexture(target, attachment, texturePacked, level);
9919         }
9920         ANGLE_CAPTURE(FramebufferTextureOES, isCallValid, context, target, attachment,
9921                       texturePacked, level);
9922     }
9923     else
9924     {
9925         GenerateContextLostErrorOnCurrentGlobalContext();
9926     }
9927 }
9928 
9929 // GL_OES_get_program_binary
GL_GetProgramBinaryOES(GLuint program,GLsizei bufSize,GLsizei * length,GLenum * binaryFormat,void * binary)9930 void GL_APIENTRY GL_GetProgramBinaryOES(GLuint program,
9931                                         GLsizei bufSize,
9932                                         GLsizei *length,
9933                                         GLenum *binaryFormat,
9934                                         void *binary)
9935 {
9936     Context *context = GetValidGlobalContext();
9937     EVENT(context, GLGetProgramBinaryOES,
9938           "context = %d, program = %u, bufSize = %d, length = 0x%016" PRIxPTR
9939           ", binaryFormat = 0x%016" PRIxPTR ", binary = 0x%016" PRIxPTR "",
9940           CID(context), program, bufSize, (uintptr_t)length, (uintptr_t)binaryFormat,
9941           (uintptr_t)binary);
9942 
9943     if (context)
9944     {
9945         ShaderProgramID programPacked                         = PackParam<ShaderProgramID>(program);
9946         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9947         bool isCallValid =
9948             (context->skipValidation() ||
9949              ValidateGetProgramBinaryOES(context, angle::EntryPoint::GLGetProgramBinaryOES,
9950                                          programPacked, bufSize, length, binaryFormat, binary));
9951         if (isCallValid)
9952         {
9953             context->getProgramBinary(programPacked, bufSize, length, binaryFormat, binary);
9954         }
9955         ANGLE_CAPTURE(GetProgramBinaryOES, isCallValid, context, programPacked, bufSize, length,
9956                       binaryFormat, binary);
9957     }
9958     else
9959     {
9960         GenerateContextLostErrorOnCurrentGlobalContext();
9961     }
9962 }
9963 
GL_ProgramBinaryOES(GLuint program,GLenum binaryFormat,const void * binary,GLint length)9964 void GL_APIENTRY GL_ProgramBinaryOES(GLuint program,
9965                                      GLenum binaryFormat,
9966                                      const void *binary,
9967                                      GLint length)
9968 {
9969     Context *context = GetValidGlobalContext();
9970     EVENT(context, GLProgramBinaryOES,
9971           "context = %d, program = %u, binaryFormat = %s, binary = 0x%016" PRIxPTR ", length = %d",
9972           CID(context), program, GLenumToString(GLenumGroup::DefaultGroup, binaryFormat),
9973           (uintptr_t)binary, length);
9974 
9975     if (context)
9976     {
9977         ShaderProgramID programPacked                         = PackParam<ShaderProgramID>(program);
9978         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
9979         bool isCallValid                                      = (context->skipValidation() ||
9980                             ValidateProgramBinaryOES(context, angle::EntryPoint::GLProgramBinaryOES,
9981                                                      programPacked, binaryFormat, binary, length));
9982         if (isCallValid)
9983         {
9984             context->programBinary(programPacked, binaryFormat, binary, length);
9985         }
9986         ANGLE_CAPTURE(ProgramBinaryOES, isCallValid, context, programPacked, binaryFormat, binary,
9987                       length);
9988     }
9989     else
9990     {
9991         GenerateContextLostErrorOnCurrentGlobalContext();
9992     }
9993 }
9994 
9995 // GL_OES_mapbuffer
GL_GetBufferPointervOES(GLenum target,GLenum pname,void ** params)9996 void GL_APIENTRY GL_GetBufferPointervOES(GLenum target, GLenum pname, void **params)
9997 {
9998     Context *context = GetValidGlobalContext();
9999     EVENT(context, GLGetBufferPointervOES,
10000           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10001           GLenumToString(GLenumGroup::BufferTargetARB, target),
10002           GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)params);
10003 
10004     if (context)
10005     {
10006         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
10007         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10008         bool isCallValid =
10009             (context->skipValidation() ||
10010              ValidateGetBufferPointervOES(context, angle::EntryPoint::GLGetBufferPointervOES,
10011                                           targetPacked, pname, params));
10012         if (isCallValid)
10013         {
10014             context->getBufferPointerv(targetPacked, pname, params);
10015         }
10016         ANGLE_CAPTURE(GetBufferPointervOES, isCallValid, context, targetPacked, pname, params);
10017     }
10018     else
10019     {
10020         GenerateContextLostErrorOnCurrentGlobalContext();
10021     }
10022 }
10023 
GL_MapBufferOES(GLenum target,GLenum access)10024 void *GL_APIENTRY GL_MapBufferOES(GLenum target, GLenum access)
10025 {
10026     Context *context = GetValidGlobalContext();
10027     EVENT(context, GLMapBufferOES, "context = %d, target = %s, access = %s", CID(context),
10028           GLenumToString(GLenumGroup::BufferTargetARB, target),
10029           GLenumToString(GLenumGroup::BufferAccessARB, access));
10030 
10031     void *returnValue;
10032     if (context)
10033     {
10034         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
10035         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10036         bool isCallValid                                      = (context->skipValidation() ||
10037                             ValidateMapBufferOES(context, angle::EntryPoint::GLMapBufferOES,
10038                                                  targetPacked, access));
10039         if (isCallValid)
10040         {
10041             returnValue = context->mapBuffer(targetPacked, access);
10042         }
10043         else
10044         {
10045             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferOES, void *>();
10046         }
10047         ANGLE_CAPTURE(MapBufferOES, isCallValid, context, targetPacked, access, returnValue);
10048     }
10049     else
10050     {
10051         GenerateContextLostErrorOnCurrentGlobalContext();
10052         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferOES, void *>();
10053     }
10054     return returnValue;
10055 }
10056 
GL_UnmapBufferOES(GLenum target)10057 GLboolean GL_APIENTRY GL_UnmapBufferOES(GLenum target)
10058 {
10059     Context *context = GetValidGlobalContext();
10060     EVENT(context, GLUnmapBufferOES, "context = %d, target = %s", CID(context),
10061           GLenumToString(GLenumGroup::DefaultGroup, target));
10062 
10063     GLboolean returnValue;
10064     if (context)
10065     {
10066         BufferBinding targetPacked                            = PackParam<BufferBinding>(target);
10067         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10068         bool isCallValid =
10069             (context->skipValidation() ||
10070              ValidateUnmapBufferOES(context, angle::EntryPoint::GLUnmapBufferOES, targetPacked));
10071         if (isCallValid)
10072         {
10073             returnValue = context->unmapBuffer(targetPacked);
10074         }
10075         else
10076         {
10077             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLUnmapBufferOES, GLboolean>();
10078         }
10079         ANGLE_CAPTURE(UnmapBufferOES, isCallValid, context, targetPacked, returnValue);
10080     }
10081     else
10082     {
10083         GenerateContextLostErrorOnCurrentGlobalContext();
10084         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLUnmapBufferOES, GLboolean>();
10085     }
10086     return returnValue;
10087 }
10088 
10089 // GL_OES_matrix_palette
GL_CurrentPaletteMatrixOES(GLuint matrixpaletteindex)10090 void GL_APIENTRY GL_CurrentPaletteMatrixOES(GLuint matrixpaletteindex)
10091 {
10092     Context *context = GetValidGlobalContext();
10093     EVENT(context, GLCurrentPaletteMatrixOES, "context = %d, matrixpaletteindex = %u", CID(context),
10094           matrixpaletteindex);
10095 
10096     if (context)
10097     {
10098         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10099         bool isCallValid =
10100             (context->skipValidation() ||
10101              ValidateCurrentPaletteMatrixOES(context, angle::EntryPoint::GLCurrentPaletteMatrixOES,
10102                                              matrixpaletteindex));
10103         if (isCallValid)
10104         {
10105             context->currentPaletteMatrix(matrixpaletteindex);
10106         }
10107         ANGLE_CAPTURE(CurrentPaletteMatrixOES, isCallValid, context, matrixpaletteindex);
10108     }
10109     else
10110     {
10111         GenerateContextLostErrorOnCurrentGlobalContext();
10112     }
10113 }
10114 
GL_LoadPaletteFromModelViewMatrixOES()10115 void GL_APIENTRY GL_LoadPaletteFromModelViewMatrixOES()
10116 {
10117     Context *context = GetValidGlobalContext();
10118     EVENT(context, GLLoadPaletteFromModelViewMatrixOES, "context = %d", CID(context));
10119 
10120     if (context)
10121     {
10122         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10123         bool isCallValid                                      = (context->skipValidation() ||
10124                             ValidateLoadPaletteFromModelViewMatrixOES(
10125                                 context, angle::EntryPoint::GLLoadPaletteFromModelViewMatrixOES));
10126         if (isCallValid)
10127         {
10128             context->loadPaletteFromModelViewMatrix();
10129         }
10130         ANGLE_CAPTURE(LoadPaletteFromModelViewMatrixOES, isCallValid, context);
10131     }
10132     else
10133     {
10134         GenerateContextLostErrorOnCurrentGlobalContext();
10135     }
10136 }
10137 
GL_MatrixIndexPointerOES(GLint size,GLenum type,GLsizei stride,const void * pointer)10138 void GL_APIENTRY GL_MatrixIndexPointerOES(GLint size,
10139                                           GLenum type,
10140                                           GLsizei stride,
10141                                           const void *pointer)
10142 {
10143     Context *context = GetValidGlobalContext();
10144     EVENT(context, GLMatrixIndexPointerOES,
10145           "context = %d, size = %d, type = %s, stride = %d, pointer = 0x%016" PRIxPTR "",
10146           CID(context), size, GLenumToString(GLenumGroup::DefaultGroup, type), stride,
10147           (uintptr_t)pointer);
10148 
10149     if (context)
10150     {
10151         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10152         bool isCallValid =
10153             (context->skipValidation() ||
10154              ValidateMatrixIndexPointerOES(context, angle::EntryPoint::GLMatrixIndexPointerOES,
10155                                            size, type, stride, pointer));
10156         if (isCallValid)
10157         {
10158             context->matrixIndexPointer(size, type, stride, pointer);
10159         }
10160         ANGLE_CAPTURE(MatrixIndexPointerOES, isCallValid, context, size, type, stride, pointer);
10161     }
10162     else
10163     {
10164         GenerateContextLostErrorOnCurrentGlobalContext();
10165     }
10166 }
10167 
GL_WeightPointerOES(GLint size,GLenum type,GLsizei stride,const void * pointer)10168 void GL_APIENTRY GL_WeightPointerOES(GLint size, GLenum type, GLsizei stride, const void *pointer)
10169 {
10170     Context *context = GetValidGlobalContext();
10171     EVENT(context, GLWeightPointerOES,
10172           "context = %d, size = %d, type = %s, stride = %d, pointer = 0x%016" PRIxPTR "",
10173           CID(context), size, GLenumToString(GLenumGroup::DefaultGroup, type), stride,
10174           (uintptr_t)pointer);
10175 
10176     if (context)
10177     {
10178         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10179         bool isCallValid                                      = (context->skipValidation() ||
10180                             ValidateWeightPointerOES(context, angle::EntryPoint::GLWeightPointerOES,
10181                                                      size, type, stride, pointer));
10182         if (isCallValid)
10183         {
10184             context->weightPointer(size, type, stride, pointer);
10185         }
10186         ANGLE_CAPTURE(WeightPointerOES, isCallValid, context, size, type, stride, pointer);
10187     }
10188     else
10189     {
10190         GenerateContextLostErrorOnCurrentGlobalContext();
10191     }
10192 }
10193 
10194 // GL_OES_packed_depth_stencil
10195 
10196 // GL_OES_point_size_array
GL_PointSizePointerOES(GLenum type,GLsizei stride,const void * pointer)10197 void GL_APIENTRY GL_PointSizePointerOES(GLenum type, GLsizei stride, const void *pointer)
10198 {
10199     Context *context = GetValidGlobalContext();
10200     EVENT(context, GLPointSizePointerOES,
10201           "context = %d, type = %s, stride = %d, pointer = 0x%016" PRIxPTR "", CID(context),
10202           GLenumToString(GLenumGroup::DefaultGroup, type), stride, (uintptr_t)pointer);
10203 
10204     if (context)
10205     {
10206         VertexAttribType typePacked                           = PackParam<VertexAttribType>(type);
10207         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10208         bool isCallValid =
10209             (context->skipValidation() ||
10210              ValidatePointSizePointerOES(context, angle::EntryPoint::GLPointSizePointerOES,
10211                                          typePacked, stride, pointer));
10212         if (isCallValid)
10213         {
10214             context->pointSizePointer(typePacked, stride, pointer);
10215         }
10216         ANGLE_CAPTURE(PointSizePointerOES, isCallValid, context, typePacked, stride, pointer);
10217     }
10218     else
10219     {
10220         GenerateContextLostErrorOnCurrentGlobalContext();
10221     }
10222 }
10223 
10224 // GL_OES_point_sprite
10225 
10226 // GL_OES_query_matrix
GL_QueryMatrixxOES(GLfixed * mantissa,GLint * exponent)10227 GLbitfield GL_APIENTRY GL_QueryMatrixxOES(GLfixed *mantissa, GLint *exponent)
10228 {
10229     Context *context = GetValidGlobalContext();
10230     EVENT(context, GLQueryMatrixxOES,
10231           "context = %d, mantissa = 0x%016" PRIxPTR ", exponent = 0x%016" PRIxPTR "", CID(context),
10232           (uintptr_t)mantissa, (uintptr_t)exponent);
10233 
10234     GLbitfield returnValue;
10235     if (context)
10236     {
10237         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10238         bool isCallValid                                      = (context->skipValidation() ||
10239                             ValidateQueryMatrixxOES(context, angle::EntryPoint::GLQueryMatrixxOES,
10240                                                     mantissa, exponent));
10241         if (isCallValid)
10242         {
10243             returnValue = context->queryMatrixx(mantissa, exponent);
10244         }
10245         else
10246         {
10247             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLQueryMatrixxOES, GLbitfield>();
10248         }
10249         ANGLE_CAPTURE(QueryMatrixxOES, isCallValid, context, mantissa, exponent, returnValue);
10250     }
10251     else
10252     {
10253         GenerateContextLostErrorOnCurrentGlobalContext();
10254         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLQueryMatrixxOES, GLbitfield>();
10255     }
10256     return returnValue;
10257 }
10258 
10259 // GL_OES_rgb8_rgba8
10260 
10261 // GL_OES_sample_shading
GL_MinSampleShadingOES(GLfloat value)10262 void GL_APIENTRY GL_MinSampleShadingOES(GLfloat value)
10263 {
10264     Context *context = GetValidGlobalContext();
10265     EVENT(context, GLMinSampleShadingOES, "context = %d, value = %f", CID(context), value);
10266 
10267     if (context)
10268     {
10269         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10270         bool isCallValid =
10271             (context->skipValidation() ||
10272              ValidateMinSampleShadingOES(context, angle::EntryPoint::GLMinSampleShadingOES, value));
10273         if (isCallValid)
10274         {
10275             context->minSampleShading(value);
10276         }
10277         ANGLE_CAPTURE(MinSampleShadingOES, isCallValid, context, value);
10278     }
10279     else
10280     {
10281         GenerateContextLostErrorOnCurrentGlobalContext();
10282     }
10283 }
10284 
10285 // GL_OES_sample_variables
10286 
10287 // GL_OES_shader_image_atomic
10288 
10289 // GL_OES_shader_io_blocks
10290 
10291 // GL_OES_shader_multisample_interpolation
10292 
10293 // GL_OES_standard_derivatives
10294 
10295 // GL_OES_surfaceless_context
10296 
10297 // GL_OES_texture_3D
GL_CompressedTexImage3DOES(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const void * data)10298 void GL_APIENTRY GL_CompressedTexImage3DOES(GLenum target,
10299                                             GLint level,
10300                                             GLenum internalformat,
10301                                             GLsizei width,
10302                                             GLsizei height,
10303                                             GLsizei depth,
10304                                             GLint border,
10305                                             GLsizei imageSize,
10306                                             const void *data)
10307 {
10308     Context *context = GetValidGlobalContext();
10309     EVENT(context, GLCompressedTexImage3DOES,
10310           "context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "
10311           "depth = %d, border = %d, imageSize = %d, data = 0x%016" PRIxPTR "",
10312           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level,
10313           GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height, depth, border,
10314           imageSize, (uintptr_t)data);
10315 
10316     if (context)
10317     {
10318         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
10319         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10320         bool isCallValid =
10321             (context->skipValidation() ||
10322              ValidateCompressedTexImage3DOES(context, angle::EntryPoint::GLCompressedTexImage3DOES,
10323                                              targetPacked, level, internalformat, width, height,
10324                                              depth, border, imageSize, data));
10325         if (isCallValid)
10326         {
10327             context->compressedTexImage3D(targetPacked, level, internalformat, width, height, depth,
10328                                           border, imageSize, data);
10329         }
10330         ANGLE_CAPTURE(CompressedTexImage3DOES, isCallValid, context, targetPacked, level,
10331                       internalformat, width, height, depth, border, imageSize, data);
10332     }
10333     else
10334     {
10335         GenerateContextLostErrorOnCurrentGlobalContext();
10336     }
10337 }
10338 
GL_CompressedTexSubImage3DOES(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const void * data)10339 void GL_APIENTRY GL_CompressedTexSubImage3DOES(GLenum target,
10340                                                GLint level,
10341                                                GLint xoffset,
10342                                                GLint yoffset,
10343                                                GLint zoffset,
10344                                                GLsizei width,
10345                                                GLsizei height,
10346                                                GLsizei depth,
10347                                                GLenum format,
10348                                                GLsizei imageSize,
10349                                                const void *data)
10350 {
10351     Context *context = GetValidGlobalContext();
10352     EVENT(context, GLCompressedTexSubImage3DOES,
10353           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width "
10354           "= %d, height = %d, depth = %d, format = %s, imageSize = %d, data = 0x%016" PRIxPTR "",
10355           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, xoffset, yoffset,
10356           zoffset, width, height, depth, GLenumToString(GLenumGroup::PixelFormat, format),
10357           imageSize, (uintptr_t)data);
10358 
10359     if (context)
10360     {
10361         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
10362         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10363         bool isCallValid =
10364             (context->skipValidation() ||
10365              ValidateCompressedTexSubImage3DOES(
10366                  context, angle::EntryPoint::GLCompressedTexSubImage3DOES, targetPacked, level,
10367                  xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data));
10368         if (isCallValid)
10369         {
10370             context->compressedTexSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, width,
10371                                              height, depth, format, imageSize, data);
10372         }
10373         ANGLE_CAPTURE(CompressedTexSubImage3DOES, isCallValid, context, targetPacked, level,
10374                       xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
10375     }
10376     else
10377     {
10378         GenerateContextLostErrorOnCurrentGlobalContext();
10379     }
10380 }
10381 
GL_CopyTexSubImage3DOES(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)10382 void GL_APIENTRY GL_CopyTexSubImage3DOES(GLenum target,
10383                                          GLint level,
10384                                          GLint xoffset,
10385                                          GLint yoffset,
10386                                          GLint zoffset,
10387                                          GLint x,
10388                                          GLint y,
10389                                          GLsizei width,
10390                                          GLsizei height)
10391 {
10392     Context *context = GetValidGlobalContext();
10393     EVENT(context, GLCopyTexSubImage3DOES,
10394           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, x = "
10395           "%d, y = %d, width = %d, height = %d",
10396           CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), level, xoffset, yoffset,
10397           zoffset, x, y, width, height);
10398 
10399     if (context)
10400     {
10401         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
10402         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10403         bool isCallValid                                      = (context->skipValidation() ||
10404                             ValidateCopyTexSubImage3DOES(
10405                                 context, angle::EntryPoint::GLCopyTexSubImage3DOES, targetPacked,
10406                                 level, xoffset, yoffset, zoffset, x, y, width, height));
10407         if (isCallValid)
10408         {
10409             context->copyTexSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, x, y, width,
10410                                        height);
10411         }
10412         ANGLE_CAPTURE(CopyTexSubImage3DOES, isCallValid, context, targetPacked, level, xoffset,
10413                       yoffset, zoffset, x, y, width, height);
10414     }
10415     else
10416     {
10417         GenerateContextLostErrorOnCurrentGlobalContext();
10418     }
10419 }
10420 
GL_FramebufferTexture3DOES(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level,GLint zoffset)10421 void GL_APIENTRY GL_FramebufferTexture3DOES(GLenum target,
10422                                             GLenum attachment,
10423                                             GLenum textarget,
10424                                             GLuint texture,
10425                                             GLint level,
10426                                             GLint zoffset)
10427 {
10428     Context *context = GetValidGlobalContext();
10429     EVENT(context, GLFramebufferTexture3DOES,
10430           "context = %d, target = %s, attachment = %s, textarget = %s, texture = %u, level = %d, "
10431           "zoffset = %d",
10432           CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),
10433           GLenumToString(GLenumGroup::FramebufferAttachment, attachment),
10434           GLenumToString(GLenumGroup::TextureTarget, textarget), texture, level, zoffset);
10435 
10436     if (context)
10437     {
10438         TextureTarget textargetPacked                         = PackParam<TextureTarget>(textarget);
10439         TextureID texturePacked                               = PackParam<TextureID>(texture);
10440         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10441         bool isCallValid                                      = (context->skipValidation() ||
10442                             ValidateFramebufferTexture3DOES(
10443                                 context, angle::EntryPoint::GLFramebufferTexture3DOES, target,
10444                                 attachment, textargetPacked, texturePacked, level, zoffset));
10445         if (isCallValid)
10446         {
10447             context->framebufferTexture3D(target, attachment, textargetPacked, texturePacked, level,
10448                                           zoffset);
10449         }
10450         ANGLE_CAPTURE(FramebufferTexture3DOES, isCallValid, context, target, attachment,
10451                       textargetPacked, texturePacked, level, zoffset);
10452     }
10453     else
10454     {
10455         GenerateContextLostErrorOnCurrentGlobalContext();
10456     }
10457 }
10458 
GL_TexImage3DOES(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const void * pixels)10459 void GL_APIENTRY GL_TexImage3DOES(GLenum target,
10460                                   GLint level,
10461                                   GLenum internalformat,
10462                                   GLsizei width,
10463                                   GLsizei height,
10464                                   GLsizei depth,
10465                                   GLint border,
10466                                   GLenum format,
10467                                   GLenum type,
10468                                   const void *pixels)
10469 {
10470     Context *context = GetValidGlobalContext();
10471     EVENT(context, GLTexImage3DOES,
10472           "context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "
10473           "depth = %d, border = %d, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",
10474           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level,
10475           GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height, depth, border,
10476           GLenumToString(GLenumGroup::PixelFormat, format),
10477           GLenumToString(GLenumGroup::PixelType, type), (uintptr_t)pixels);
10478 
10479     if (context)
10480     {
10481         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
10482         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10483         bool isCallValid                                      = (context->skipValidation() ||
10484                             ValidateTexImage3DOES(context, angle::EntryPoint::GLTexImage3DOES,
10485                                                   targetPacked, level, internalformat, width,
10486                                                   height, depth, border, format, type, pixels));
10487         if (isCallValid)
10488         {
10489             context->texImage3D(targetPacked, level, internalformat, width, height, depth, border,
10490                                 format, type, pixels);
10491         }
10492         ANGLE_CAPTURE(TexImage3DOES, isCallValid, context, targetPacked, level, internalformat,
10493                       width, height, depth, border, format, type, pixels);
10494     }
10495     else
10496     {
10497         GenerateContextLostErrorOnCurrentGlobalContext();
10498     }
10499 }
10500 
GL_TexSubImage3DOES(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const void * pixels)10501 void GL_APIENTRY GL_TexSubImage3DOES(GLenum target,
10502                                      GLint level,
10503                                      GLint xoffset,
10504                                      GLint yoffset,
10505                                      GLint zoffset,
10506                                      GLsizei width,
10507                                      GLsizei height,
10508                                      GLsizei depth,
10509                                      GLenum format,
10510                                      GLenum type,
10511                                      const void *pixels)
10512 {
10513     Context *context = GetValidGlobalContext();
10514     EVENT(context, GLTexSubImage3DOES,
10515           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width "
10516           "= %d, height = %d, depth = %d, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",
10517           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, xoffset, yoffset,
10518           zoffset, width, height, depth, GLenumToString(GLenumGroup::PixelFormat, format),
10519           GLenumToString(GLenumGroup::PixelType, type), (uintptr_t)pixels);
10520 
10521     if (context)
10522     {
10523         TextureTarget targetPacked                            = PackParam<TextureTarget>(target);
10524         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10525         bool isCallValid                                      = (context->skipValidation() ||
10526                             ValidateTexSubImage3DOES(context, angle::EntryPoint::GLTexSubImage3DOES,
10527                                                      targetPacked, level, xoffset, yoffset, zoffset,
10528                                                      width, height, depth, format, type, pixels));
10529         if (isCallValid)
10530         {
10531             context->texSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, width, height,
10532                                    depth, format, type, pixels);
10533         }
10534         ANGLE_CAPTURE(TexSubImage3DOES, isCallValid, context, targetPacked, level, xoffset, yoffset,
10535                       zoffset, width, height, depth, format, type, pixels);
10536     }
10537     else
10538     {
10539         GenerateContextLostErrorOnCurrentGlobalContext();
10540     }
10541 }
10542 
10543 // GL_OES_texture_border_clamp
GL_GetSamplerParameterIivOES(GLuint sampler,GLenum pname,GLint * params)10544 void GL_APIENTRY GL_GetSamplerParameterIivOES(GLuint sampler, GLenum pname, GLint *params)
10545 {
10546     Context *context = GetValidGlobalContext();
10547     EVENT(context, GLGetSamplerParameterIivOES,
10548           "context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10549           sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)params);
10550 
10551     if (context)
10552     {
10553         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
10554         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10555         bool isCallValid                                      = (context->skipValidation() ||
10556                             ValidateGetSamplerParameterIivOES(
10557                                 context, angle::EntryPoint::GLGetSamplerParameterIivOES,
10558                                 samplerPacked, pname, params));
10559         if (isCallValid)
10560         {
10561             context->getSamplerParameterIiv(samplerPacked, pname, params);
10562         }
10563         ANGLE_CAPTURE(GetSamplerParameterIivOES, isCallValid, context, samplerPacked, pname,
10564                       params);
10565     }
10566     else
10567     {
10568         GenerateContextLostErrorOnCurrentGlobalContext();
10569     }
10570 }
10571 
GL_GetSamplerParameterIuivOES(GLuint sampler,GLenum pname,GLuint * params)10572 void GL_APIENTRY GL_GetSamplerParameterIuivOES(GLuint sampler, GLenum pname, GLuint *params)
10573 {
10574     Context *context = GetValidGlobalContext();
10575     EVENT(context, GLGetSamplerParameterIuivOES,
10576           "context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10577           sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)params);
10578 
10579     if (context)
10580     {
10581         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
10582         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10583         bool isCallValid                                      = (context->skipValidation() ||
10584                             ValidateGetSamplerParameterIuivOES(
10585                                 context, angle::EntryPoint::GLGetSamplerParameterIuivOES,
10586                                 samplerPacked, pname, params));
10587         if (isCallValid)
10588         {
10589             context->getSamplerParameterIuiv(samplerPacked, pname, params);
10590         }
10591         ANGLE_CAPTURE(GetSamplerParameterIuivOES, isCallValid, context, samplerPacked, pname,
10592                       params);
10593     }
10594     else
10595     {
10596         GenerateContextLostErrorOnCurrentGlobalContext();
10597     }
10598 }
10599 
GL_GetTexParameterIivOES(GLenum target,GLenum pname,GLint * params)10600 void GL_APIENTRY GL_GetTexParameterIivOES(GLenum target, GLenum pname, GLint *params)
10601 {
10602     Context *context = GetValidGlobalContext();
10603     EVENT(context, GLGetTexParameterIivOES,
10604           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10605           GLenumToString(GLenumGroup::TextureTarget, target),
10606           GLenumToString(GLenumGroup::GetTextureParameter, pname), (uintptr_t)params);
10607 
10608     if (context)
10609     {
10610         TextureType targetPacked                              = PackParam<TextureType>(target);
10611         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10612         bool isCallValid =
10613             (context->skipValidation() ||
10614              ValidateGetTexParameterIivOES(context, angle::EntryPoint::GLGetTexParameterIivOES,
10615                                            targetPacked, pname, params));
10616         if (isCallValid)
10617         {
10618             context->getTexParameterIiv(targetPacked, pname, params);
10619         }
10620         ANGLE_CAPTURE(GetTexParameterIivOES, isCallValid, context, targetPacked, pname, params);
10621     }
10622     else
10623     {
10624         GenerateContextLostErrorOnCurrentGlobalContext();
10625     }
10626 }
10627 
GL_GetTexParameterIuivOES(GLenum target,GLenum pname,GLuint * params)10628 void GL_APIENTRY GL_GetTexParameterIuivOES(GLenum target, GLenum pname, GLuint *params)
10629 {
10630     Context *context = GetValidGlobalContext();
10631     EVENT(context, GLGetTexParameterIuivOES,
10632           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10633           GLenumToString(GLenumGroup::TextureTarget, target),
10634           GLenumToString(GLenumGroup::GetTextureParameter, pname), (uintptr_t)params);
10635 
10636     if (context)
10637     {
10638         TextureType targetPacked                              = PackParam<TextureType>(target);
10639         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10640         bool isCallValid =
10641             (context->skipValidation() ||
10642              ValidateGetTexParameterIuivOES(context, angle::EntryPoint::GLGetTexParameterIuivOES,
10643                                             targetPacked, pname, params));
10644         if (isCallValid)
10645         {
10646             context->getTexParameterIuiv(targetPacked, pname, params);
10647         }
10648         ANGLE_CAPTURE(GetTexParameterIuivOES, isCallValid, context, targetPacked, pname, params);
10649     }
10650     else
10651     {
10652         GenerateContextLostErrorOnCurrentGlobalContext();
10653     }
10654 }
10655 
GL_SamplerParameterIivOES(GLuint sampler,GLenum pname,const GLint * param)10656 void GL_APIENTRY GL_SamplerParameterIivOES(GLuint sampler, GLenum pname, const GLint *param)
10657 {
10658     Context *context = GetValidGlobalContext();
10659     EVENT(context, GLSamplerParameterIivOES,
10660           "context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),
10661           sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)param);
10662 
10663     if (context)
10664     {
10665         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
10666         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10667         bool isCallValid =
10668             (context->skipValidation() ||
10669              ValidateSamplerParameterIivOES(context, angle::EntryPoint::GLSamplerParameterIivOES,
10670                                             samplerPacked, pname, param));
10671         if (isCallValid)
10672         {
10673             context->samplerParameterIiv(samplerPacked, pname, param);
10674         }
10675         ANGLE_CAPTURE(SamplerParameterIivOES, isCallValid, context, samplerPacked, pname, param);
10676     }
10677     else
10678     {
10679         GenerateContextLostErrorOnCurrentGlobalContext();
10680     }
10681 }
10682 
GL_SamplerParameterIuivOES(GLuint sampler,GLenum pname,const GLuint * param)10683 void GL_APIENTRY GL_SamplerParameterIuivOES(GLuint sampler, GLenum pname, const GLuint *param)
10684 {
10685     Context *context = GetValidGlobalContext();
10686     EVENT(context, GLSamplerParameterIuivOES,
10687           "context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),
10688           sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)param);
10689 
10690     if (context)
10691     {
10692         SamplerID samplerPacked                               = PackParam<SamplerID>(sampler);
10693         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10694         bool isCallValid =
10695             (context->skipValidation() ||
10696              ValidateSamplerParameterIuivOES(context, angle::EntryPoint::GLSamplerParameterIuivOES,
10697                                              samplerPacked, pname, param));
10698         if (isCallValid)
10699         {
10700             context->samplerParameterIuiv(samplerPacked, pname, param);
10701         }
10702         ANGLE_CAPTURE(SamplerParameterIuivOES, isCallValid, context, samplerPacked, pname, param);
10703     }
10704     else
10705     {
10706         GenerateContextLostErrorOnCurrentGlobalContext();
10707     }
10708 }
10709 
GL_TexParameterIivOES(GLenum target,GLenum pname,const GLint * params)10710 void GL_APIENTRY GL_TexParameterIivOES(GLenum target, GLenum pname, const GLint *params)
10711 {
10712     Context *context = GetValidGlobalContext();
10713     EVENT(context, GLTexParameterIivOES,
10714           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10715           GLenumToString(GLenumGroup::TextureTarget, target),
10716           GLenumToString(GLenumGroup::TextureParameterName, pname), (uintptr_t)params);
10717 
10718     if (context)
10719     {
10720         TextureType targetPacked                              = PackParam<TextureType>(target);
10721         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10722         bool isCallValid =
10723             (context->skipValidation() ||
10724              ValidateTexParameterIivOES(context, angle::EntryPoint::GLTexParameterIivOES,
10725                                         targetPacked, pname, params));
10726         if (isCallValid)
10727         {
10728             context->texParameterIiv(targetPacked, pname, params);
10729         }
10730         ANGLE_CAPTURE(TexParameterIivOES, isCallValid, context, targetPacked, pname, params);
10731     }
10732     else
10733     {
10734         GenerateContextLostErrorOnCurrentGlobalContext();
10735     }
10736 }
10737 
GL_TexParameterIuivOES(GLenum target,GLenum pname,const GLuint * params)10738 void GL_APIENTRY GL_TexParameterIuivOES(GLenum target, GLenum pname, const GLuint *params)
10739 {
10740     Context *context = GetValidGlobalContext();
10741     EVENT(context, GLTexParameterIuivOES,
10742           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10743           GLenumToString(GLenumGroup::TextureTarget, target),
10744           GLenumToString(GLenumGroup::TextureParameterName, pname), (uintptr_t)params);
10745 
10746     if (context)
10747     {
10748         TextureType targetPacked                              = PackParam<TextureType>(target);
10749         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10750         bool isCallValid =
10751             (context->skipValidation() ||
10752              ValidateTexParameterIuivOES(context, angle::EntryPoint::GLTexParameterIuivOES,
10753                                          targetPacked, pname, params));
10754         if (isCallValid)
10755         {
10756             context->texParameterIuiv(targetPacked, pname, params);
10757         }
10758         ANGLE_CAPTURE(TexParameterIuivOES, isCallValid, context, targetPacked, pname, params);
10759     }
10760     else
10761     {
10762         GenerateContextLostErrorOnCurrentGlobalContext();
10763     }
10764 }
10765 
10766 // GL_OES_texture_buffer
GL_TexBufferOES(GLenum target,GLenum internalformat,GLuint buffer)10767 void GL_APIENTRY GL_TexBufferOES(GLenum target, GLenum internalformat, GLuint buffer)
10768 {
10769     Context *context = GetValidGlobalContext();
10770     EVENT(context, GLTexBufferOES, "context = %d, target = %s, internalformat = %s, buffer = %u",
10771           CID(context), GLenumToString(GLenumGroup::TextureTarget, target),
10772           GLenumToString(GLenumGroup::InternalFormat, internalformat), buffer);
10773 
10774     if (context)
10775     {
10776         TextureType targetPacked                              = PackParam<TextureType>(target);
10777         BufferID bufferPacked                                 = PackParam<BufferID>(buffer);
10778         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10779         bool isCallValid                                      = (context->skipValidation() ||
10780                             ValidateTexBufferOES(context, angle::EntryPoint::GLTexBufferOES,
10781                                                  targetPacked, internalformat, bufferPacked));
10782         if (isCallValid)
10783         {
10784             context->texBuffer(targetPacked, internalformat, bufferPacked);
10785         }
10786         ANGLE_CAPTURE(TexBufferOES, isCallValid, context, targetPacked, internalformat,
10787                       bufferPacked);
10788     }
10789     else
10790     {
10791         GenerateContextLostErrorOnCurrentGlobalContext();
10792     }
10793 }
10794 
GL_TexBufferRangeOES(GLenum target,GLenum internalformat,GLuint buffer,GLintptr offset,GLsizeiptr size)10795 void GL_APIENTRY GL_TexBufferRangeOES(GLenum target,
10796                                       GLenum internalformat,
10797                                       GLuint buffer,
10798                                       GLintptr offset,
10799                                       GLsizeiptr size)
10800 {
10801     Context *context = GetValidGlobalContext();
10802     EVENT(context, GLTexBufferRangeOES,
10803           "context = %d, target = %s, internalformat = %s, buffer = %u, offset = %llu, size = %llu",
10804           CID(context), GLenumToString(GLenumGroup::TextureTarget, target),
10805           GLenumToString(GLenumGroup::InternalFormat, internalformat), buffer,
10806           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(size));
10807 
10808     if (context)
10809     {
10810         TextureType targetPacked                              = PackParam<TextureType>(target);
10811         BufferID bufferPacked                                 = PackParam<BufferID>(buffer);
10812         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10813         bool isCallValid =
10814             (context->skipValidation() ||
10815              ValidateTexBufferRangeOES(context, angle::EntryPoint::GLTexBufferRangeOES,
10816                                        targetPacked, internalformat, bufferPacked, offset, size));
10817         if (isCallValid)
10818         {
10819             context->texBufferRange(targetPacked, internalformat, bufferPacked, offset, size);
10820         }
10821         ANGLE_CAPTURE(TexBufferRangeOES, isCallValid, context, targetPacked, internalformat,
10822                       bufferPacked, offset, size);
10823     }
10824     else
10825     {
10826         GenerateContextLostErrorOnCurrentGlobalContext();
10827     }
10828 }
10829 
10830 // GL_OES_texture_compression_astc
10831 
10832 // GL_OES_texture_cube_map
GL_GetTexGenfvOES(GLenum coord,GLenum pname,GLfloat * params)10833 void GL_APIENTRY GL_GetTexGenfvOES(GLenum coord, GLenum pname, GLfloat *params)
10834 {
10835     Context *context = GetValidGlobalContext();
10836     EVENT(context, GLGetTexGenfvOES,
10837           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10838           GLenumToString(GLenumGroup::TextureCoordName, coord),
10839           GLenumToString(GLenumGroup::TextureGenParameter, pname), (uintptr_t)params);
10840 
10841     if (context)
10842     {
10843         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10844         bool isCallValid                                      = (context->skipValidation() ||
10845                             ValidateGetTexGenfvOES(context, angle::EntryPoint::GLGetTexGenfvOES,
10846                                                    coord, pname, params));
10847         if (isCallValid)
10848         {
10849             context->getTexGenfv(coord, pname, params);
10850         }
10851         ANGLE_CAPTURE(GetTexGenfvOES, isCallValid, context, coord, pname, params);
10852     }
10853     else
10854     {
10855         GenerateContextLostErrorOnCurrentGlobalContext();
10856     }
10857 }
10858 
GL_GetTexGenivOES(GLenum coord,GLenum pname,GLint * params)10859 void GL_APIENTRY GL_GetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
10860 {
10861     Context *context = GetValidGlobalContext();
10862     EVENT(context, GLGetTexGenivOES,
10863           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10864           GLenumToString(GLenumGroup::TextureCoordName, coord),
10865           GLenumToString(GLenumGroup::TextureGenParameter, pname), (uintptr_t)params);
10866 
10867     if (context)
10868     {
10869         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10870         bool isCallValid                                      = (context->skipValidation() ||
10871                             ValidateGetTexGenivOES(context, angle::EntryPoint::GLGetTexGenivOES,
10872                                                    coord, pname, params));
10873         if (isCallValid)
10874         {
10875             context->getTexGeniv(coord, pname, params);
10876         }
10877         ANGLE_CAPTURE(GetTexGenivOES, isCallValid, context, coord, pname, params);
10878     }
10879     else
10880     {
10881         GenerateContextLostErrorOnCurrentGlobalContext();
10882     }
10883 }
10884 
GL_GetTexGenxvOES(GLenum coord,GLenum pname,GLfixed * params)10885 void GL_APIENTRY GL_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
10886 {
10887     Context *context = GetValidGlobalContext();
10888     EVENT(context, GLGetTexGenxvOES,
10889           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10890           GLenumToString(GLenumGroup::TextureCoordName, coord),
10891           GLenumToString(GLenumGroup::TextureGenParameter, pname), (uintptr_t)params);
10892 
10893     if (context)
10894     {
10895         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10896         bool isCallValid                                      = (context->skipValidation() ||
10897                             ValidateGetTexGenxvOES(context, angle::EntryPoint::GLGetTexGenxvOES,
10898                                                    coord, pname, params));
10899         if (isCallValid)
10900         {
10901             context->getTexGenxv(coord, pname, params);
10902         }
10903         ANGLE_CAPTURE(GetTexGenxvOES, isCallValid, context, coord, pname, params);
10904     }
10905     else
10906     {
10907         GenerateContextLostErrorOnCurrentGlobalContext();
10908     }
10909 }
10910 
GL_TexGenfOES(GLenum coord,GLenum pname,GLfloat param)10911 void GL_APIENTRY GL_TexGenfOES(GLenum coord, GLenum pname, GLfloat param)
10912 {
10913     Context *context = GetValidGlobalContext();
10914     EVENT(context, GLTexGenfOES, "context = %d, coord = %s, pname = %s, param = %f", CID(context),
10915           GLenumToString(GLenumGroup::TextureCoordName, coord),
10916           GLenumToString(GLenumGroup::TextureGenParameter, pname), param);
10917 
10918     if (context)
10919     {
10920         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10921         bool isCallValid =
10922             (context->skipValidation() ||
10923              ValidateTexGenfOES(context, angle::EntryPoint::GLTexGenfOES, coord, pname, param));
10924         if (isCallValid)
10925         {
10926             context->texGenf(coord, pname, param);
10927         }
10928         ANGLE_CAPTURE(TexGenfOES, isCallValid, context, coord, pname, param);
10929     }
10930     else
10931     {
10932         GenerateContextLostErrorOnCurrentGlobalContext();
10933     }
10934 }
10935 
GL_TexGenfvOES(GLenum coord,GLenum pname,const GLfloat * params)10936 void GL_APIENTRY GL_TexGenfvOES(GLenum coord, GLenum pname, const GLfloat *params)
10937 {
10938     Context *context = GetValidGlobalContext();
10939     EVENT(context, GLTexGenfvOES,
10940           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10941           GLenumToString(GLenumGroup::TextureCoordName, coord),
10942           GLenumToString(GLenumGroup::TextureGenParameter, pname), (uintptr_t)params);
10943 
10944     if (context)
10945     {
10946         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10947         bool isCallValid =
10948             (context->skipValidation() ||
10949              ValidateTexGenfvOES(context, angle::EntryPoint::GLTexGenfvOES, coord, pname, params));
10950         if (isCallValid)
10951         {
10952             context->texGenfv(coord, pname, params);
10953         }
10954         ANGLE_CAPTURE(TexGenfvOES, isCallValid, context, coord, pname, params);
10955     }
10956     else
10957     {
10958         GenerateContextLostErrorOnCurrentGlobalContext();
10959     }
10960 }
10961 
GL_TexGeniOES(GLenum coord,GLenum pname,GLint param)10962 void GL_APIENTRY GL_TexGeniOES(GLenum coord, GLenum pname, GLint param)
10963 {
10964     Context *context = GetValidGlobalContext();
10965     EVENT(context, GLTexGeniOES, "context = %d, coord = %s, pname = %s, param = %d", CID(context),
10966           GLenumToString(GLenumGroup::TextureCoordName, coord),
10967           GLenumToString(GLenumGroup::TextureGenParameter, pname), param);
10968 
10969     if (context)
10970     {
10971         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10972         bool isCallValid =
10973             (context->skipValidation() ||
10974              ValidateTexGeniOES(context, angle::EntryPoint::GLTexGeniOES, coord, pname, param));
10975         if (isCallValid)
10976         {
10977             context->texGeni(coord, pname, param);
10978         }
10979         ANGLE_CAPTURE(TexGeniOES, isCallValid, context, coord, pname, param);
10980     }
10981     else
10982     {
10983         GenerateContextLostErrorOnCurrentGlobalContext();
10984     }
10985 }
10986 
GL_TexGenivOES(GLenum coord,GLenum pname,const GLint * params)10987 void GL_APIENTRY GL_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
10988 {
10989     Context *context = GetValidGlobalContext();
10990     EVENT(context, GLTexGenivOES,
10991           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10992           GLenumToString(GLenumGroup::TextureCoordName, coord),
10993           GLenumToString(GLenumGroup::TextureGenParameter, pname), (uintptr_t)params);
10994 
10995     if (context)
10996     {
10997         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
10998         bool isCallValid =
10999             (context->skipValidation() ||
11000              ValidateTexGenivOES(context, angle::EntryPoint::GLTexGenivOES, coord, pname, params));
11001         if (isCallValid)
11002         {
11003             context->texGeniv(coord, pname, params);
11004         }
11005         ANGLE_CAPTURE(TexGenivOES, isCallValid, context, coord, pname, params);
11006     }
11007     else
11008     {
11009         GenerateContextLostErrorOnCurrentGlobalContext();
11010     }
11011 }
11012 
GL_TexGenxOES(GLenum coord,GLenum pname,GLfixed param)11013 void GL_APIENTRY GL_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
11014 {
11015     Context *context = GetValidGlobalContext();
11016     EVENT(context, GLTexGenxOES, "context = %d, coord = %s, pname = %s, param = 0x%X", CID(context),
11017           GLenumToString(GLenumGroup::TextureCoordName, coord),
11018           GLenumToString(GLenumGroup::TextureGenParameter, pname), param);
11019 
11020     if (context)
11021     {
11022         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
11023         bool isCallValid =
11024             (context->skipValidation() ||
11025              ValidateTexGenxOES(context, angle::EntryPoint::GLTexGenxOES, coord, pname, param));
11026         if (isCallValid)
11027         {
11028             context->texGenx(coord, pname, param);
11029         }
11030         ANGLE_CAPTURE(TexGenxOES, isCallValid, context, coord, pname, param);
11031     }
11032     else
11033     {
11034         GenerateContextLostErrorOnCurrentGlobalContext();
11035     }
11036 }
11037 
GL_TexGenxvOES(GLenum coord,GLenum pname,const GLfixed * params)11038 void GL_APIENTRY GL_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
11039 {
11040     Context *context = GetValidGlobalContext();
11041     EVENT(context, GLTexGenxvOES,
11042           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
11043           GLenumToString(GLenumGroup::TextureCoordName, coord),
11044           GLenumToString(GLenumGroup::TextureGenParameter, pname), (uintptr_t)params);
11045 
11046     if (context)
11047     {
11048         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
11049         bool isCallValid =
11050             (context->skipValidation() ||
11051              ValidateTexGenxvOES(context, angle::EntryPoint::GLTexGenxvOES, coord, pname, params));
11052         if (isCallValid)
11053         {
11054             context->texGenxv(coord, pname, params);
11055         }
11056         ANGLE_CAPTURE(TexGenxvOES, isCallValid, context, coord, pname, params);
11057     }
11058     else
11059     {
11060         GenerateContextLostErrorOnCurrentGlobalContext();
11061     }
11062 }
11063 
11064 // GL_OES_texture_cube_map_array
11065 
11066 // GL_OES_texture_float
11067 
11068 // GL_OES_texture_float_linear
11069 
11070 // GL_OES_texture_half_float
11071 
11072 // GL_OES_texture_half_float_linear
11073 
11074 // GL_OES_texture_npot
11075 
11076 // GL_OES_texture_stencil8
11077 
11078 // GL_OES_texture_storage_multisample_2d_array
GL_TexStorage3DMultisampleOES(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLboolean fixedsamplelocations)11079 void GL_APIENTRY GL_TexStorage3DMultisampleOES(GLenum target,
11080                                                GLsizei samples,
11081                                                GLenum internalformat,
11082                                                GLsizei width,
11083                                                GLsizei height,
11084                                                GLsizei depth,
11085                                                GLboolean fixedsamplelocations)
11086 {
11087     Context *context = GetValidGlobalContext();
11088     EVENT(context, GLTexStorage3DMultisampleOES,
11089           "context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d, "
11090           "depth = %d, fixedsamplelocations = %s",
11091           CID(context), GLenumToString(GLenumGroup::TextureTarget, target), samples,
11092           GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height, depth,
11093           GLbooleanToString(fixedsamplelocations));
11094 
11095     if (context)
11096     {
11097         TextureType targetPacked                              = PackParam<TextureType>(target);
11098         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
11099         bool isCallValid =
11100             (context->skipValidation() ||
11101              ValidateTexStorage3DMultisampleOES(
11102                  context, angle::EntryPoint::GLTexStorage3DMultisampleOES, targetPacked, samples,
11103                  internalformat, width, height, depth, fixedsamplelocations));
11104         if (isCallValid)
11105         {
11106             context->texStorage3DMultisample(targetPacked, samples, internalformat, width, height,
11107                                              depth, fixedsamplelocations);
11108         }
11109         ANGLE_CAPTURE(TexStorage3DMultisampleOES, isCallValid, context, targetPacked, samples,
11110                       internalformat, width, height, depth, fixedsamplelocations);
11111     }
11112     else
11113     {
11114         GenerateContextLostErrorOnCurrentGlobalContext();
11115     }
11116 }
11117 
11118 // GL_OES_vertex_array_object
GL_BindVertexArrayOES(GLuint array)11119 void GL_APIENTRY GL_BindVertexArrayOES(GLuint array)
11120 {
11121     Context *context = GetValidGlobalContext();
11122     EVENT(context, GLBindVertexArrayOES, "context = %d, array = %u", CID(context), array);
11123 
11124     if (context)
11125     {
11126         VertexArrayID arrayPacked                             = PackParam<VertexArrayID>(array);
11127         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
11128         bool isCallValid                                      = (context->skipValidation() ||
11129                             ValidateBindVertexArrayOES(
11130                                 context, angle::EntryPoint::GLBindVertexArrayOES, arrayPacked));
11131         if (isCallValid)
11132         {
11133             context->bindVertexArray(arrayPacked);
11134         }
11135         ANGLE_CAPTURE(BindVertexArrayOES, isCallValid, context, arrayPacked);
11136     }
11137     else
11138     {
11139         GenerateContextLostErrorOnCurrentGlobalContext();
11140     }
11141 }
11142 
GL_DeleteVertexArraysOES(GLsizei n,const GLuint * arrays)11143 void GL_APIENTRY GL_DeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
11144 {
11145     Context *context = GetValidGlobalContext();
11146     EVENT(context, GLDeleteVertexArraysOES, "context = %d, n = %d, arrays = 0x%016" PRIxPTR "",
11147           CID(context), n, (uintptr_t)arrays);
11148 
11149     if (context)
11150     {
11151         const VertexArrayID *arraysPacked = PackParam<const VertexArrayID *>(arrays);
11152         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
11153         bool isCallValid =
11154             (context->skipValidation() ||
11155              ValidateDeleteVertexArraysOES(context, angle::EntryPoint::GLDeleteVertexArraysOES, n,
11156                                            arraysPacked));
11157         if (isCallValid)
11158         {
11159             context->deleteVertexArrays(n, arraysPacked);
11160         }
11161         ANGLE_CAPTURE(DeleteVertexArraysOES, isCallValid, context, n, arraysPacked);
11162     }
11163     else
11164     {
11165         GenerateContextLostErrorOnCurrentGlobalContext();
11166     }
11167 }
11168 
GL_GenVertexArraysOES(GLsizei n,GLuint * arrays)11169 void GL_APIENTRY GL_GenVertexArraysOES(GLsizei n, GLuint *arrays)
11170 {
11171     Context *context = GetValidGlobalContext();
11172     EVENT(context, GLGenVertexArraysOES, "context = %d, n = %d, arrays = 0x%016" PRIxPTR "",
11173           CID(context), n, (uintptr_t)arrays);
11174 
11175     if (context)
11176     {
11177         VertexArrayID *arraysPacked                           = PackParam<VertexArrayID *>(arrays);
11178         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
11179         bool isCallValid                                      = (context->skipValidation() ||
11180                             ValidateGenVertexArraysOES(
11181                                 context, angle::EntryPoint::GLGenVertexArraysOES, n, arraysPacked));
11182         if (isCallValid)
11183         {
11184             context->genVertexArrays(n, arraysPacked);
11185         }
11186         ANGLE_CAPTURE(GenVertexArraysOES, isCallValid, context, n, arraysPacked);
11187     }
11188     else
11189     {
11190         GenerateContextLostErrorOnCurrentGlobalContext();
11191     }
11192 }
11193 
GL_IsVertexArrayOES(GLuint array)11194 GLboolean GL_APIENTRY GL_IsVertexArrayOES(GLuint array)
11195 {
11196     Context *context = GetValidGlobalContext();
11197     EVENT(context, GLIsVertexArrayOES, "context = %d, array = %u", CID(context), array);
11198 
11199     GLboolean returnValue;
11200     if (context)
11201     {
11202         VertexArrayID arrayPacked                             = PackParam<VertexArrayID>(array);
11203         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
11204         bool isCallValid =
11205             (context->skipValidation() ||
11206              ValidateIsVertexArrayOES(context, angle::EntryPoint::GLIsVertexArrayOES, arrayPacked));
11207         if (isCallValid)
11208         {
11209             returnValue = context->isVertexArray(arrayPacked);
11210         }
11211         else
11212         {
11213             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsVertexArrayOES, GLboolean>();
11214         }
11215         ANGLE_CAPTURE(IsVertexArrayOES, isCallValid, context, arrayPacked, returnValue);
11216     }
11217     else
11218     {
11219         GenerateContextLostErrorOnCurrentGlobalContext();
11220         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsVertexArrayOES, GLboolean>();
11221     }
11222     return returnValue;
11223 }
11224 
11225 // GL_OES_vertex_half_float
11226 
11227 // GL_OES_vertex_type_10_10_10_2
11228 
11229 // GL_OVR_multiview
GL_FramebufferTextureMultiviewOVR(GLenum target,GLenum attachment,GLuint texture,GLint level,GLint baseViewIndex,GLsizei numViews)11230 void GL_APIENTRY GL_FramebufferTextureMultiviewOVR(GLenum target,
11231                                                    GLenum attachment,
11232                                                    GLuint texture,
11233                                                    GLint level,
11234                                                    GLint baseViewIndex,
11235                                                    GLsizei numViews)
11236 {
11237     Context *context = GetValidGlobalContext();
11238     EVENT(context, GLFramebufferTextureMultiviewOVR,
11239           "context = %d, target = %s, attachment = %s, texture = %u, level = %d, baseViewIndex = "
11240           "%d, numViews = %d",
11241           CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),
11242           GLenumToString(GLenumGroup::FramebufferAttachment, attachment), texture, level,
11243           baseViewIndex, numViews);
11244 
11245     if (context)
11246     {
11247         TextureID texturePacked                               = PackParam<TextureID>(texture);
11248         std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);
11249         bool isCallValid                                      = (context->skipValidation() ||
11250                             ValidateFramebufferTextureMultiviewOVR(
11251                                 context, angle::EntryPoint::GLFramebufferTextureMultiviewOVR,
11252                                 target, attachment, texturePacked, level, baseViewIndex, numViews));
11253         if (isCallValid)
11254         {
11255             context->framebufferTextureMultiview(target, attachment, texturePacked, level,
11256                                                  baseViewIndex, numViews);
11257         }
11258         ANGLE_CAPTURE(FramebufferTextureMultiviewOVR, isCallValid, context, target, attachment,
11259                       texturePacked, level, baseViewIndex, numViews);
11260     }
11261     else
11262     {
11263         GenerateContextLostErrorOnCurrentGlobalContext();
11264     }
11265 }
11266 
11267 // GL_OVR_multiview2
11268 }  // extern "C"
11269