xref: /aosp_15_r20/external/angle/src/libGLESv2/entry_points_gles_ext_autogen.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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 "common/gl_enum_utils.h"
15 #include "libANGLE/Context.h"
16 #include "libANGLE/Context.inl.h"
17 #include "libANGLE/capture/capture_gles_ext_autogen.h"
18 #include "libANGLE/context_private_call_autogen.h"
19 #include "libANGLE/entry_points_utils.h"
20 #include "libANGLE/validationESEXT.h"
21 #include "libGLESv2/global_state.h"
22 
23 using namespace gl;
24 
25 #include "libANGLE/capture/capture_gles_1_0_autogen.h"
26 #include "libANGLE/capture/capture_gles_2_0_autogen.h"
27 #include "libANGLE/capture/capture_gles_3_0_autogen.h"
28 #include "libANGLE/capture/capture_gles_3_1_autogen.h"
29 #include "libANGLE/capture/capture_gles_3_2_autogen.h"
30 #include "libANGLE/validationES1.h"
31 #include "libANGLE/validationES2.h"
32 #include "libANGLE/validationES3.h"
33 #include "libANGLE/validationES31.h"
34 #include "libANGLE/validationES32.h"
35 
36 using namespace gl;
37 
38 extern "C" {
39 
40 // GL_AMD_performance_monitor
GL_BeginPerfMonitorAMD(GLuint monitor)41 void GL_APIENTRY GL_BeginPerfMonitorAMD(GLuint monitor)
42 {
43     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
44     Context *context = GetValidGlobalContext();
45     EVENT(context, GLBeginPerfMonitorAMD, "context = %d, monitor = %u", CID(context), monitor);
46 
47     if (context)
48     {
49         SCOPED_SHARE_CONTEXT_LOCK(context);
50         bool isCallValid =
51             (context->skipValidation() ||
52              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
53                                                 context->getMutableErrorSetForValidation(),
54                                                 angle::EntryPoint::GLBeginPerfMonitorAMD) &&
55               ValidateBeginPerfMonitorAMD(context, angle::EntryPoint::GLBeginPerfMonitorAMD,
56                                           monitor)));
57         if (isCallValid)
58         {
59             context->beginPerfMonitor(monitor);
60         }
61         ANGLE_CAPTURE_GL(BeginPerfMonitorAMD, isCallValid, context, monitor);
62     }
63     else
64     {
65         GenerateContextLostErrorOnCurrentGlobalContext();
66     }
67     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
68 }
69 
GL_DeletePerfMonitorsAMD(GLsizei n,GLuint * monitors)70 void GL_APIENTRY GL_DeletePerfMonitorsAMD(GLsizei n, GLuint *monitors)
71 {
72     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
73     Context *context = GetValidGlobalContext();
74     EVENT(context, GLDeletePerfMonitorsAMD, "context = %d, n = %d, monitors = 0x%016" PRIxPTR "",
75           CID(context), n, (uintptr_t)monitors);
76 
77     if (context)
78     {
79         SCOPED_SHARE_CONTEXT_LOCK(context);
80         bool isCallValid = (context->skipValidation() ||
81                             ValidateDeletePerfMonitorsAMD(
82                                 context, angle::EntryPoint::GLDeletePerfMonitorsAMD, n, monitors));
83         if (isCallValid)
84         {
85             context->deletePerfMonitors(n, monitors);
86         }
87         ANGLE_CAPTURE_GL(DeletePerfMonitorsAMD, isCallValid, context, n, monitors);
88     }
89     else
90     {
91         GenerateContextLostErrorOnCurrentGlobalContext();
92     }
93     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
94 }
95 
GL_EndPerfMonitorAMD(GLuint monitor)96 void GL_APIENTRY GL_EndPerfMonitorAMD(GLuint monitor)
97 {
98     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
99     Context *context = GetValidGlobalContext();
100     EVENT(context, GLEndPerfMonitorAMD, "context = %d, monitor = %u", CID(context), monitor);
101 
102     if (context)
103     {
104         SCOPED_SHARE_CONTEXT_LOCK(context);
105         bool isCallValid =
106             (context->skipValidation() ||
107              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
108                                                 context->getMutableErrorSetForValidation(),
109                                                 angle::EntryPoint::GLEndPerfMonitorAMD) &&
110               ValidateEndPerfMonitorAMD(context, angle::EntryPoint::GLEndPerfMonitorAMD, monitor)));
111         if (isCallValid)
112         {
113             context->endPerfMonitor(monitor);
114         }
115         ANGLE_CAPTURE_GL(EndPerfMonitorAMD, isCallValid, context, monitor);
116     }
117     else
118     {
119         GenerateContextLostErrorOnCurrentGlobalContext();
120     }
121     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
122 }
123 
GL_GenPerfMonitorsAMD(GLsizei n,GLuint * monitors)124 void GL_APIENTRY GL_GenPerfMonitorsAMD(GLsizei n, GLuint *monitors)
125 {
126     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
127     Context *context = GetValidGlobalContext();
128     EVENT(context, GLGenPerfMonitorsAMD, "context = %d, n = %d, monitors = 0x%016" PRIxPTR "",
129           CID(context), n, (uintptr_t)monitors);
130 
131     if (context)
132     {
133         SCOPED_SHARE_CONTEXT_LOCK(context);
134         bool isCallValid = (context->skipValidation() ||
135                             ValidateGenPerfMonitorsAMD(
136                                 context, angle::EntryPoint::GLGenPerfMonitorsAMD, n, monitors));
137         if (isCallValid)
138         {
139             context->genPerfMonitors(n, monitors);
140         }
141         ANGLE_CAPTURE_GL(GenPerfMonitorsAMD, isCallValid, context, n, monitors);
142     }
143     else
144     {
145         GenerateContextLostErrorOnCurrentGlobalContext();
146     }
147     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
148 }
149 
GL_GetPerfMonitorCounterDataAMD(GLuint monitor,GLenum pname,GLsizei dataSize,GLuint * data,GLint * bytesWritten)150 void GL_APIENTRY GL_GetPerfMonitorCounterDataAMD(GLuint monitor,
151                                                  GLenum pname,
152                                                  GLsizei dataSize,
153                                                  GLuint *data,
154                                                  GLint *bytesWritten)
155 {
156     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
157     Context *context = GetValidGlobalContext();
158     EVENT(context, GLGetPerfMonitorCounterDataAMD,
159           "context = %d, monitor = %u, pname = %s, dataSize = %d, data = 0x%016" PRIxPTR
160           ", bytesWritten = 0x%016" PRIxPTR "",
161           CID(context), monitor, GLenumToString(GLESEnum::AllEnums, pname), dataSize,
162           (uintptr_t)data, (uintptr_t)bytesWritten);
163 
164     if (context)
165     {
166         SCOPED_SHARE_CONTEXT_LOCK(context);
167         bool isCallValid = (context->skipValidation() ||
168                             ValidateGetPerfMonitorCounterDataAMD(
169                                 context, angle::EntryPoint::GLGetPerfMonitorCounterDataAMD, monitor,
170                                 pname, dataSize, data, bytesWritten));
171         if (isCallValid)
172         {
173             context->getPerfMonitorCounterData(monitor, pname, dataSize, data, bytesWritten);
174         }
175         ANGLE_CAPTURE_GL(GetPerfMonitorCounterDataAMD, isCallValid, context, monitor, pname,
176                          dataSize, data, bytesWritten);
177     }
178     else
179     {
180         GenerateContextLostErrorOnCurrentGlobalContext();
181     }
182     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
183 }
184 
GL_GetPerfMonitorCounterInfoAMD(GLuint group,GLuint counter,GLenum pname,void * data)185 void GL_APIENTRY GL_GetPerfMonitorCounterInfoAMD(GLuint group,
186                                                  GLuint counter,
187                                                  GLenum pname,
188                                                  void *data)
189 {
190     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
191     Context *context = GetValidGlobalContext();
192     EVENT(context, GLGetPerfMonitorCounterInfoAMD,
193           "context = %d, group = %u, counter = %u, pname = %s, data = 0x%016" PRIxPTR "",
194           CID(context), group, counter, GLenumToString(GLESEnum::AllEnums, pname), (uintptr_t)data);
195 
196     if (context)
197     {
198         SCOPED_SHARE_CONTEXT_LOCK(context);
199         bool isCallValid = (context->skipValidation() ||
200                             ValidateGetPerfMonitorCounterInfoAMD(
201                                 context, angle::EntryPoint::GLGetPerfMonitorCounterInfoAMD, group,
202                                 counter, pname, data));
203         if (isCallValid)
204         {
205             context->getPerfMonitorCounterInfo(group, counter, pname, data);
206         }
207         ANGLE_CAPTURE_GL(GetPerfMonitorCounterInfoAMD, isCallValid, context, group, counter, pname,
208                          data);
209     }
210     else
211     {
212         GenerateContextLostErrorOnCurrentGlobalContext();
213     }
214     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
215 }
216 
GL_GetPerfMonitorCounterStringAMD(GLuint group,GLuint counter,GLsizei bufSize,GLsizei * length,GLchar * counterString)217 void GL_APIENTRY GL_GetPerfMonitorCounterStringAMD(GLuint group,
218                                                    GLuint counter,
219                                                    GLsizei bufSize,
220                                                    GLsizei *length,
221                                                    GLchar *counterString)
222 {
223     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
224     Context *context = GetValidGlobalContext();
225     EVENT(context, GLGetPerfMonitorCounterStringAMD,
226           "context = %d, group = %u, counter = %u, bufSize = %d, length = 0x%016" PRIxPTR
227           ", counterString = 0x%016" PRIxPTR "",
228           CID(context), group, counter, bufSize, (uintptr_t)length, (uintptr_t)counterString);
229 
230     if (context)
231     {
232         SCOPED_SHARE_CONTEXT_LOCK(context);
233         bool isCallValid = (context->skipValidation() ||
234                             ValidateGetPerfMonitorCounterStringAMD(
235                                 context, angle::EntryPoint::GLGetPerfMonitorCounterStringAMD, group,
236                                 counter, bufSize, length, counterString));
237         if (isCallValid)
238         {
239             context->getPerfMonitorCounterString(group, counter, bufSize, length, counterString);
240         }
241         ANGLE_CAPTURE_GL(GetPerfMonitorCounterStringAMD, isCallValid, context, group, counter,
242                          bufSize, length, counterString);
243     }
244     else
245     {
246         GenerateContextLostErrorOnCurrentGlobalContext();
247     }
248     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
249 }
250 
GL_GetPerfMonitorCountersAMD(GLuint group,GLint * numCounters,GLint * maxActiveCounters,GLsizei counterSize,GLuint * counters)251 void GL_APIENTRY GL_GetPerfMonitorCountersAMD(GLuint group,
252                                               GLint *numCounters,
253                                               GLint *maxActiveCounters,
254                                               GLsizei counterSize,
255                                               GLuint *counters)
256 {
257     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
258     Context *context = GetValidGlobalContext();
259     EVENT(context, GLGetPerfMonitorCountersAMD,
260           "context = %d, group = %u, numCounters = 0x%016" PRIxPTR
261           ", maxActiveCounters = 0x%016" PRIxPTR ", counterSize = %d, counters = 0x%016" PRIxPTR "",
262           CID(context), group, (uintptr_t)numCounters, (uintptr_t)maxActiveCounters, counterSize,
263           (uintptr_t)counters);
264 
265     if (context)
266     {
267         SCOPED_SHARE_CONTEXT_LOCK(context);
268         bool isCallValid = (context->skipValidation() ||
269                             ValidateGetPerfMonitorCountersAMD(
270                                 context, angle::EntryPoint::GLGetPerfMonitorCountersAMD, group,
271                                 numCounters, maxActiveCounters, counterSize, counters));
272         if (isCallValid)
273         {
274             context->getPerfMonitorCounters(group, numCounters, maxActiveCounters, counterSize,
275                                             counters);
276         }
277         ANGLE_CAPTURE_GL(GetPerfMonitorCountersAMD, isCallValid, context, group, numCounters,
278                          maxActiveCounters, counterSize, counters);
279     }
280     else
281     {
282         GenerateContextLostErrorOnCurrentGlobalContext();
283     }
284     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
285 }
286 
GL_GetPerfMonitorGroupStringAMD(GLuint group,GLsizei bufSize,GLsizei * length,GLchar * groupString)287 void GL_APIENTRY GL_GetPerfMonitorGroupStringAMD(GLuint group,
288                                                  GLsizei bufSize,
289                                                  GLsizei *length,
290                                                  GLchar *groupString)
291 {
292     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
293     Context *context = GetValidGlobalContext();
294     EVENT(context, GLGetPerfMonitorGroupStringAMD,
295           "context = %d, group = %u, bufSize = %d, length = 0x%016" PRIxPTR
296           ", groupString = 0x%016" PRIxPTR "",
297           CID(context), group, bufSize, (uintptr_t)length, (uintptr_t)groupString);
298 
299     if (context)
300     {
301         SCOPED_SHARE_CONTEXT_LOCK(context);
302         bool isCallValid = (context->skipValidation() ||
303                             ValidateGetPerfMonitorGroupStringAMD(
304                                 context, angle::EntryPoint::GLGetPerfMonitorGroupStringAMD, group,
305                                 bufSize, length, groupString));
306         if (isCallValid)
307         {
308             context->getPerfMonitorGroupString(group, bufSize, length, groupString);
309         }
310         ANGLE_CAPTURE_GL(GetPerfMonitorGroupStringAMD, isCallValid, context, group, bufSize, length,
311                          groupString);
312     }
313     else
314     {
315         GenerateContextLostErrorOnCurrentGlobalContext();
316     }
317     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
318 }
319 
GL_GetPerfMonitorGroupsAMD(GLint * numGroups,GLsizei groupsSize,GLuint * groups)320 void GL_APIENTRY GL_GetPerfMonitorGroupsAMD(GLint *numGroups, GLsizei groupsSize, GLuint *groups)
321 {
322     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
323     Context *context = GetValidGlobalContext();
324     EVENT(context, GLGetPerfMonitorGroupsAMD,
325           "context = %d, numGroups = 0x%016" PRIxPTR ", groupsSize = %d, groups = 0x%016" PRIxPTR
326           "",
327           CID(context), (uintptr_t)numGroups, groupsSize, (uintptr_t)groups);
328 
329     if (context)
330     {
331         SCOPED_SHARE_CONTEXT_LOCK(context);
332         bool isCallValid =
333             (context->skipValidation() ||
334              ValidateGetPerfMonitorGroupsAMD(context, angle::EntryPoint::GLGetPerfMonitorGroupsAMD,
335                                              numGroups, groupsSize, groups));
336         if (isCallValid)
337         {
338             context->getPerfMonitorGroups(numGroups, groupsSize, groups);
339         }
340         ANGLE_CAPTURE_GL(GetPerfMonitorGroupsAMD, isCallValid, context, numGroups, groupsSize,
341                          groups);
342     }
343     else
344     {
345         GenerateContextLostErrorOnCurrentGlobalContext();
346     }
347     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
348 }
349 
GL_SelectPerfMonitorCountersAMD(GLuint monitor,GLboolean enable,GLuint group,GLint numCounters,GLuint * counterList)350 void GL_APIENTRY GL_SelectPerfMonitorCountersAMD(GLuint monitor,
351                                                  GLboolean enable,
352                                                  GLuint group,
353                                                  GLint numCounters,
354                                                  GLuint *counterList)
355 {
356     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
357     Context *context = GetValidGlobalContext();
358     EVENT(context, GLSelectPerfMonitorCountersAMD,
359           "context = %d, monitor = %u, enable = %s, group = %u, numCounters = %d, counterList = "
360           "0x%016" PRIxPTR "",
361           CID(context), monitor, GLbooleanToString(enable), group, numCounters,
362           (uintptr_t)counterList);
363 
364     if (context)
365     {
366         SCOPED_SHARE_CONTEXT_LOCK(context);
367         bool isCallValid =
368             (context->skipValidation() ||
369              (ValidatePixelLocalStorageInactive(
370                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
371                   angle::EntryPoint::GLSelectPerfMonitorCountersAMD) &&
372               ValidateSelectPerfMonitorCountersAMD(
373                   context, angle::EntryPoint::GLSelectPerfMonitorCountersAMD, monitor, enable,
374                   group, numCounters, counterList)));
375         if (isCallValid)
376         {
377             context->selectPerfMonitorCounters(monitor, enable, group, numCounters, counterList);
378         }
379         ANGLE_CAPTURE_GL(SelectPerfMonitorCountersAMD, isCallValid, context, monitor, enable, group,
380                          numCounters, counterList);
381     }
382     else
383     {
384         GenerateContextLostErrorOnCurrentGlobalContext();
385     }
386     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
387 }
388 
389 // GL_ANDROID_extension_pack_es31a
390 
391 // GL_ANGLE_base_vertex_base_instance
GL_DrawArraysInstancedBaseInstanceANGLE(GLenum mode,GLint first,GLsizei count,GLsizei instanceCount,GLuint baseInstance)392 void GL_APIENTRY GL_DrawArraysInstancedBaseInstanceANGLE(GLenum mode,
393                                                          GLint first,
394                                                          GLsizei count,
395                                                          GLsizei instanceCount,
396                                                          GLuint baseInstance)
397 {
398     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
399     Context *context = GetValidGlobalContext();
400     EVENT(context, GLDrawArraysInstancedBaseInstanceANGLE,
401           "context = %d, mode = %s, first = %d, count = %d, instanceCount = %d, baseInstance = %u",
402           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), first, count, instanceCount,
403           baseInstance);
404 
405     if (context)
406     {
407         PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);
408         SCOPED_SHARE_CONTEXT_LOCK(context);
409         bool isCallValid = (context->skipValidation() ||
410                             ValidateDrawArraysInstancedBaseInstanceANGLE(
411                                 context, angle::EntryPoint::GLDrawArraysInstancedBaseInstanceANGLE,
412                                 modePacked, first, count, instanceCount, baseInstance));
413         if (isCallValid)
414         {
415             context->drawArraysInstancedBaseInstanceANGLE(modePacked, first, count, instanceCount,
416                                                           baseInstance);
417         }
418         ANGLE_CAPTURE_GL(DrawArraysInstancedBaseInstanceANGLE, isCallValid, context, modePacked,
419                          first, count, instanceCount, baseInstance);
420     }
421     else
422     {
423         GenerateContextLostErrorOnCurrentGlobalContext();
424     }
425     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
426 }
427 
GL_DrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei instanceCount,GLint baseVertex,GLuint baseInstance)428 void GL_APIENTRY GL_DrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode,
429                                                                      GLsizei count,
430                                                                      GLenum type,
431                                                                      const void *indices,
432                                                                      GLsizei instanceCount,
433                                                                      GLint baseVertex,
434                                                                      GLuint baseInstance)
435 {
436     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
437     Context *context = GetValidGlobalContext();
438     EVENT(context, GLDrawElementsInstancedBaseVertexBaseInstanceANGLE,
439           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
440           ", instanceCount = %d, baseVertex = %d, baseInstance = %u",
441           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), count,
442           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, instanceCount,
443           baseVertex, baseInstance);
444 
445     if (context)
446     {
447         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
448         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
449         SCOPED_SHARE_CONTEXT_LOCK(context);
450         bool isCallValid =
451             (context->skipValidation() ||
452              ValidateDrawElementsInstancedBaseVertexBaseInstanceANGLE(
453                  context, angle::EntryPoint::GLDrawElementsInstancedBaseVertexBaseInstanceANGLE,
454                  modePacked, count, typePacked, indices, instanceCount, baseVertex, baseInstance));
455         if (isCallValid)
456         {
457             context->drawElementsInstancedBaseVertexBaseInstanceANGLE(
458                 modePacked, count, typePacked, indices, instanceCount, baseVertex, baseInstance);
459         }
460         ANGLE_CAPTURE_GL(DrawElementsInstancedBaseVertexBaseInstanceANGLE, isCallValid, context,
461                          modePacked, count, typePacked, indices, instanceCount, baseVertex,
462                          baseInstance);
463     }
464     else
465     {
466         GenerateContextLostErrorOnCurrentGlobalContext();
467     }
468     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
469 }
470 
GL_MultiDrawArraysInstancedBaseInstanceANGLE(GLenum mode,const GLint * firsts,const GLsizei * counts,const GLsizei * instanceCounts,const GLuint * baseInstances,GLsizei drawcount)471 void GL_APIENTRY GL_MultiDrawArraysInstancedBaseInstanceANGLE(GLenum mode,
472                                                               const GLint *firsts,
473                                                               const GLsizei *counts,
474                                                               const GLsizei *instanceCounts,
475                                                               const GLuint *baseInstances,
476                                                               GLsizei drawcount)
477 {
478     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
479     Context *context = GetValidGlobalContext();
480     EVENT(context, GLMultiDrawArraysInstancedBaseInstanceANGLE,
481           "context = %d, mode = %s, firsts = 0x%016" PRIxPTR ", counts = 0x%016" PRIxPTR
482           ", instanceCounts = 0x%016" PRIxPTR ", baseInstances = 0x%016" PRIxPTR ", drawcount = %d",
483           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), (uintptr_t)firsts,
484           (uintptr_t)counts, (uintptr_t)instanceCounts, (uintptr_t)baseInstances, drawcount);
485 
486     if (context)
487     {
488         PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);
489         SCOPED_SHARE_CONTEXT_LOCK(context);
490         bool isCallValid =
491             (context->skipValidation() ||
492              (ValidatePixelLocalStorageInactive(
493                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
494                   angle::EntryPoint::GLMultiDrawArraysInstancedBaseInstanceANGLE) &&
495               ValidateMultiDrawArraysInstancedBaseInstanceANGLE(
496                   context, angle::EntryPoint::GLMultiDrawArraysInstancedBaseInstanceANGLE,
497                   modePacked, firsts, counts, instanceCounts, baseInstances, drawcount)));
498         if (isCallValid)
499         {
500             context->multiDrawArraysInstancedBaseInstance(modePacked, firsts, counts,
501                                                           instanceCounts, baseInstances, drawcount);
502         }
503         ANGLE_CAPTURE_GL(MultiDrawArraysInstancedBaseInstanceANGLE, isCallValid, context,
504                          modePacked, firsts, counts, instanceCounts, baseInstances, drawcount);
505     }
506     else
507     {
508         GenerateContextLostErrorOnCurrentGlobalContext();
509     }
510     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
511 }
512 
513 void GL_APIENTRY
GL_MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode,const GLsizei * counts,GLenum type,const void * const * indices,const GLsizei * instanceCounts,const GLint * baseVertices,const GLuint * baseInstances,GLsizei drawcount)514 GL_MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode,
515                                                          const GLsizei *counts,
516                                                          GLenum type,
517                                                          const void *const *indices,
518                                                          const GLsizei *instanceCounts,
519                                                          const GLint *baseVertices,
520                                                          const GLuint *baseInstances,
521                                                          GLsizei drawcount)
522 {
523     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
524     Context *context = GetValidGlobalContext();
525     EVENT(context, GLMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE,
526           "context = %d, mode = %s, counts = 0x%016" PRIxPTR ", type = %s, indices = 0x%016" PRIxPTR
527           ", instanceCounts = 0x%016" PRIxPTR ", baseVertices = 0x%016" PRIxPTR
528           ", baseInstances = 0x%016" PRIxPTR ", drawcount = %d",
529           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), (uintptr_t)counts,
530           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices,
531           (uintptr_t)instanceCounts, (uintptr_t)baseVertices, (uintptr_t)baseInstances, drawcount);
532 
533     if (context)
534     {
535         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
536         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
537         SCOPED_SHARE_CONTEXT_LOCK(context);
538         bool isCallValid =
539             (context->skipValidation() ||
540              (ValidatePixelLocalStorageInactive(
541                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
542                   angle::EntryPoint::GLMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE) &&
543               ValidateMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(
544                   context,
545                   angle::EntryPoint::GLMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE,
546                   modePacked, counts, typePacked, indices, instanceCounts, baseVertices,
547                   baseInstances, drawcount)));
548         if (isCallValid)
549         {
550             context->multiDrawElementsInstancedBaseVertexBaseInstance(
551                 modePacked, counts, typePacked, indices, instanceCounts, baseVertices,
552                 baseInstances, drawcount);
553         }
554         ANGLE_CAPTURE_GL(MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE, isCallValid,
555                          context, modePacked, counts, typePacked, indices, instanceCounts,
556                          baseVertices, baseInstances, drawcount);
557     }
558     else
559     {
560         GenerateContextLostErrorOnCurrentGlobalContext();
561     }
562     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
563 }
564 
565 // GL_ANGLE_blob_cache
GL_BlobCacheCallbacksANGLE(GLSETBLOBPROCANGLE set,GLGETBLOBPROCANGLE get,const void * userParam)566 void GL_APIENTRY GL_BlobCacheCallbacksANGLE(GLSETBLOBPROCANGLE set,
567                                             GLGETBLOBPROCANGLE get,
568                                             const void *userParam)
569 {
570     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
571     Context *context = GetValidGlobalContext();
572     EVENT(context, GLBlobCacheCallbacksANGLE,
573           "context = %d, set = 0x%016" PRIxPTR ", get = 0x%016" PRIxPTR
574           ", userParam = 0x%016" PRIxPTR "",
575           CID(context), (uintptr_t)set, (uintptr_t)get, (uintptr_t)userParam);
576 
577     if (context)
578     {
579         SCOPED_SHARE_CONTEXT_LOCK(context);
580         bool isCallValid =
581             (context->skipValidation() ||
582              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
583                                                 context->getMutableErrorSetForValidation(),
584                                                 angle::EntryPoint::GLBlobCacheCallbacksANGLE) &&
585               ValidateBlobCacheCallbacksANGLE(context, angle::EntryPoint::GLBlobCacheCallbacksANGLE,
586                                               set, get, userParam)));
587         if (isCallValid)
588         {
589             context->blobCacheCallbacks(set, get, userParam);
590         }
591         ANGLE_CAPTURE_GL(BlobCacheCallbacksANGLE, isCallValid, context, set, get, userParam);
592     }
593     else
594     {
595         GenerateContextLostErrorOnCurrentGlobalContext();
596     }
597     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
598 }
599 
GL_GetPointervANGLE(GLenum pname,void ** params)600 void GL_APIENTRY GL_GetPointervANGLE(GLenum pname, void **params)
601 {
602     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
603     Context *context = GetValidGlobalContext();
604     EVENT(context, GLGetPointervANGLE, "context = %d, pname = %s, params = 0x%016" PRIxPTR "",
605           CID(context), GLenumToString(GLESEnum::AllEnums, pname), (uintptr_t)params);
606 
607     if (context)
608     {
609         SCOPED_SHARE_CONTEXT_LOCK(context);
610         bool isCallValid = (context->skipValidation() ||
611                             ValidateGetPointervANGLE(context, angle::EntryPoint::GLGetPointervANGLE,
612                                                      pname, params));
613         if (isCallValid)
614         {
615             context->getPointerv(pname, params);
616         }
617         ANGLE_CAPTURE_GL(GetPointervANGLE, isCallValid, context, pname, params);
618     }
619     else
620     {
621         GenerateContextLostErrorOnCurrentGlobalContext();
622     }
623     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
624 }
625 
626 // GL_ANGLE_client_arrays
627 
628 // GL_ANGLE_clip_cull_distance
629 
630 // 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)631 void GL_APIENTRY GL_CopyTexture3DANGLE(GLuint sourceId,
632                                        GLint sourceLevel,
633                                        GLenum destTarget,
634                                        GLuint destId,
635                                        GLint destLevel,
636                                        GLint internalFormat,
637                                        GLenum destType,
638                                        GLboolean unpackFlipY,
639                                        GLboolean unpackPremultiplyAlpha,
640                                        GLboolean unpackUnmultiplyAlpha)
641 {
642     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
643     Context *context = GetValidGlobalContext();
644     EVENT(context, GLCopyTexture3DANGLE,
645           "context = %d, sourceId = %u, sourceLevel = %d, destTarget = %s, destId = %u, destLevel "
646           "= %d, internalFormat = %d, destType = %s, unpackFlipY = %s, unpackPremultiplyAlpha = "
647           "%s, unpackUnmultiplyAlpha = %s",
648           CID(context), sourceId, sourceLevel, GLenumToString(GLESEnum::AllEnums, destTarget),
649           destId, destLevel, internalFormat, GLenumToString(GLESEnum::AllEnums, destType),
650           GLbooleanToString(unpackFlipY), GLbooleanToString(unpackPremultiplyAlpha),
651           GLbooleanToString(unpackUnmultiplyAlpha));
652 
653     if (context)
654     {
655         TextureID sourceIdPacked       = PackParam<TextureID>(sourceId);
656         TextureTarget destTargetPacked = PackParam<TextureTarget>(destTarget);
657         TextureID destIdPacked         = PackParam<TextureID>(destId);
658         SCOPED_SHARE_CONTEXT_LOCK(context);
659         bool isCallValid =
660             (context->skipValidation() ||
661              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
662                                                 context->getMutableErrorSetForValidation(),
663                                                 angle::EntryPoint::GLCopyTexture3DANGLE) &&
664               ValidateCopyTexture3DANGLE(
665                   context, angle::EntryPoint::GLCopyTexture3DANGLE, sourceIdPacked, sourceLevel,
666                   destTargetPacked, destIdPacked, destLevel, internalFormat, destType, unpackFlipY,
667                   unpackPremultiplyAlpha, unpackUnmultiplyAlpha)));
668         if (isCallValid)
669         {
670             context->copyTexture3D(sourceIdPacked, sourceLevel, destTargetPacked, destIdPacked,
671                                    destLevel, internalFormat, destType, unpackFlipY,
672                                    unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
673         }
674         ANGLE_CAPTURE_GL(CopyTexture3DANGLE, isCallValid, context, sourceIdPacked, sourceLevel,
675                          destTargetPacked, destIdPacked, destLevel, internalFormat, destType,
676                          unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
677     }
678     else
679     {
680         GenerateContextLostErrorOnCurrentGlobalContext();
681     }
682     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
683 }
684 
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)685 void GL_APIENTRY GL_CopySubTexture3DANGLE(GLuint sourceId,
686                                           GLint sourceLevel,
687                                           GLenum destTarget,
688                                           GLuint destId,
689                                           GLint destLevel,
690                                           GLint xoffset,
691                                           GLint yoffset,
692                                           GLint zoffset,
693                                           GLint x,
694                                           GLint y,
695                                           GLint z,
696                                           GLint width,
697                                           GLint height,
698                                           GLint depth,
699                                           GLboolean unpackFlipY,
700                                           GLboolean unpackPremultiplyAlpha,
701                                           GLboolean unpackUnmultiplyAlpha)
702 {
703     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
704     Context *context = GetValidGlobalContext();
705     EVENT(context, GLCopySubTexture3DANGLE,
706           "context = %d, sourceId = %u, sourceLevel = %d, destTarget = %s, destId = %u, destLevel "
707           "= %d, xoffset = %d, yoffset = %d, zoffset = %d, x = %d, y = %d, z = %d, width = %d, "
708           "height = %d, depth = %d, unpackFlipY = %s, unpackPremultiplyAlpha = %s, "
709           "unpackUnmultiplyAlpha = %s",
710           CID(context), sourceId, sourceLevel, GLenumToString(GLESEnum::AllEnums, destTarget),
711           destId, destLevel, xoffset, yoffset, zoffset, x, y, z, width, height, depth,
712           GLbooleanToString(unpackFlipY), GLbooleanToString(unpackPremultiplyAlpha),
713           GLbooleanToString(unpackUnmultiplyAlpha));
714 
715     if (context)
716     {
717         TextureID sourceIdPacked       = PackParam<TextureID>(sourceId);
718         TextureTarget destTargetPacked = PackParam<TextureTarget>(destTarget);
719         TextureID destIdPacked         = PackParam<TextureID>(destId);
720         SCOPED_SHARE_CONTEXT_LOCK(context);
721         bool isCallValid =
722             (context->skipValidation() ||
723              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
724                                                 context->getMutableErrorSetForValidation(),
725                                                 angle::EntryPoint::GLCopySubTexture3DANGLE) &&
726               ValidateCopySubTexture3DANGLE(context, angle::EntryPoint::GLCopySubTexture3DANGLE,
727                                             sourceIdPacked, sourceLevel, destTargetPacked,
728                                             destIdPacked, destLevel, xoffset, yoffset, zoffset, x,
729                                             y, z, width, height, depth, unpackFlipY,
730                                             unpackPremultiplyAlpha, unpackUnmultiplyAlpha)));
731         if (isCallValid)
732         {
733             context->copySubTexture3D(sourceIdPacked, sourceLevel, destTargetPacked, destIdPacked,
734                                       destLevel, xoffset, yoffset, zoffset, x, y, z, width, height,
735                                       depth, unpackFlipY, unpackPremultiplyAlpha,
736                                       unpackUnmultiplyAlpha);
737         }
738         ANGLE_CAPTURE_GL(CopySubTexture3DANGLE, isCallValid, context, sourceIdPacked, sourceLevel,
739                          destTargetPacked, destIdPacked, destLevel, xoffset, yoffset, zoffset, x, y,
740                          z, width, height, depth, unpackFlipY, unpackPremultiplyAlpha,
741                          unpackUnmultiplyAlpha);
742     }
743     else
744     {
745         GenerateContextLostErrorOnCurrentGlobalContext();
746     }
747     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
748 }
749 
750 // GL_ANGLE_depth_texture
751 
752 // 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)753 void GL_APIENTRY GL_BlitFramebufferANGLE(GLint srcX0,
754                                          GLint srcY0,
755                                          GLint srcX1,
756                                          GLint srcY1,
757                                          GLint dstX0,
758                                          GLint dstY0,
759                                          GLint dstX1,
760                                          GLint dstY1,
761                                          GLbitfield mask,
762                                          GLenum filter)
763 {
764     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
765     Context *context = GetValidGlobalContext();
766     EVENT(context, GLBlitFramebufferANGLE,
767           "context = %d, srcX0 = %d, srcY0 = %d, srcX1 = %d, srcY1 = %d, dstX0 = %d, dstY0 = %d, "
768           "dstX1 = %d, dstY1 = %d, mask = %s, filter = %s",
769           CID(context), srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
770           GLbitfieldToString(GLESEnum::ClearBufferMask, mask).c_str(),
771           GLenumToString(GLESEnum::BlitFramebufferFilter, filter));
772 
773     if (context)
774     {
775         SCOPED_SHARE_CONTEXT_LOCK(context);
776         bool isCallValid =
777             (context->skipValidation() ||
778              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
779                                                 context->getMutableErrorSetForValidation(),
780                                                 angle::EntryPoint::GLBlitFramebufferANGLE) &&
781               ValidateBlitFramebufferANGLE(context, angle::EntryPoint::GLBlitFramebufferANGLE,
782                                            srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
783                                            mask, filter)));
784         if (isCallValid)
785         {
786             context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
787                                      filter);
788         }
789         ANGLE_CAPTURE_GL(BlitFramebufferANGLE, isCallValid, context, srcX0, srcY0, srcX1, srcY1,
790                          dstX0, dstY0, dstX1, dstY1, mask, filter);
791     }
792     else
793     {
794         GenerateContextLostErrorOnCurrentGlobalContext();
795     }
796     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
797 }
798 
799 // GL_ANGLE_framebuffer_multisample
GL_RenderbufferStorageMultisampleANGLE(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height)800 void GL_APIENTRY GL_RenderbufferStorageMultisampleANGLE(GLenum target,
801                                                         GLsizei samples,
802                                                         GLenum internalformat,
803                                                         GLsizei width,
804                                                         GLsizei height)
805 {
806     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
807     Context *context = GetValidGlobalContext();
808     EVENT(context, GLRenderbufferStorageMultisampleANGLE,
809           "context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d",
810           CID(context), GLenumToString(GLESEnum::RenderbufferTarget, target), samples,
811           GLenumToString(GLESEnum::InternalFormat, internalformat), width, height);
812 
813     if (context)
814     {
815         SCOPED_SHARE_CONTEXT_LOCK(context);
816         bool isCallValid =
817             (context->skipValidation() ||
818              (ValidatePixelLocalStorageInactive(
819                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
820                   angle::EntryPoint::GLRenderbufferStorageMultisampleANGLE) &&
821               ValidateRenderbufferStorageMultisampleANGLE(
822                   context, angle::EntryPoint::GLRenderbufferStorageMultisampleANGLE, target,
823                   samples, internalformat, width, height)));
824         if (isCallValid)
825         {
826             context->renderbufferStorageMultisample(target, samples, internalformat, width, height);
827         }
828         ANGLE_CAPTURE_GL(RenderbufferStorageMultisampleANGLE, isCallValid, context, target, samples,
829                          internalformat, width, height);
830     }
831     else
832     {
833         GenerateContextLostErrorOnCurrentGlobalContext();
834     }
835     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
836 }
837 
838 // GL_ANGLE_get_image
839 void GL_APIENTRY
GL_GetTexImageANGLE(GLenum target,GLint level,GLenum format,GLenum type,void * pixels)840 GL_GetTexImageANGLE(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
841 {
842     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
843     Context *context = GetValidGlobalContext();
844     EVENT(context, GLGetTexImageANGLE,
845           "context = %d, target = %s, level = %d, format = %s, type = %s, pixels = 0x%016" PRIxPTR
846           "",
847           CID(context), GLenumToString(GLESEnum::TextureTarget, target), level,
848           GLenumToString(GLESEnum::PixelFormat, format), GLenumToString(GLESEnum::PixelType, type),
849           (uintptr_t)pixels);
850 
851     if (context)
852     {
853         TextureTarget targetPacked = PackParam<TextureTarget>(target);
854         SCOPED_SHARE_CONTEXT_LOCK(context);
855         bool isCallValid = (context->skipValidation() ||
856                             ValidateGetTexImageANGLE(context, angle::EntryPoint::GLGetTexImageANGLE,
857                                                      targetPacked, level, format, type, pixels));
858         if (isCallValid)
859         {
860             context->getTexImage(targetPacked, level, format, type, pixels);
861         }
862         ANGLE_CAPTURE_GL(GetTexImageANGLE, isCallValid, context, targetPacked, level, format, type,
863                          pixels);
864     }
865     else
866     {
867         GenerateContextLostErrorOnCurrentGlobalContext();
868     }
869     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
870 }
871 
GL_GetCompressedTexImageANGLE(GLenum target,GLint level,void * pixels)872 void GL_APIENTRY GL_GetCompressedTexImageANGLE(GLenum target, GLint level, void *pixels)
873 {
874     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
875     Context *context = GetValidGlobalContext();
876     EVENT(context, GLGetCompressedTexImageANGLE,
877           "context = %d, target = %s, level = %d, pixels = 0x%016" PRIxPTR "", CID(context),
878           GLenumToString(GLESEnum::TextureTarget, target), level, (uintptr_t)pixels);
879 
880     if (context)
881     {
882         TextureTarget targetPacked = PackParam<TextureTarget>(target);
883         SCOPED_SHARE_CONTEXT_LOCK(context);
884         bool isCallValid = (context->skipValidation() ||
885                             ValidateGetCompressedTexImageANGLE(
886                                 context, angle::EntryPoint::GLGetCompressedTexImageANGLE,
887                                 targetPacked, level, pixels));
888         if (isCallValid)
889         {
890             context->getCompressedTexImage(targetPacked, level, pixels);
891         }
892         ANGLE_CAPTURE_GL(GetCompressedTexImageANGLE, isCallValid, context, targetPacked, level,
893                          pixels);
894     }
895     else
896     {
897         GenerateContextLostErrorOnCurrentGlobalContext();
898     }
899     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
900 }
901 
GL_GetRenderbufferImageANGLE(GLenum target,GLenum format,GLenum type,void * pixels)902 void GL_APIENTRY GL_GetRenderbufferImageANGLE(GLenum target,
903                                               GLenum format,
904                                               GLenum type,
905                                               void *pixels)
906 {
907     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
908     Context *context = GetValidGlobalContext();
909     EVENT(context, GLGetRenderbufferImageANGLE,
910           "context = %d, target = %s, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",
911           CID(context), GLenumToString(GLESEnum::RenderbufferTarget, target),
912           GLenumToString(GLESEnum::PixelFormat, format), GLenumToString(GLESEnum::PixelType, type),
913           (uintptr_t)pixels);
914 
915     if (context)
916     {
917         SCOPED_SHARE_CONTEXT_LOCK(context);
918         bool isCallValid = (context->skipValidation() ||
919                             ValidateGetRenderbufferImageANGLE(
920                                 context, angle::EntryPoint::GLGetRenderbufferImageANGLE, target,
921                                 format, type, pixels));
922         if (isCallValid)
923         {
924             context->getRenderbufferImage(target, format, type, pixels);
925         }
926         ANGLE_CAPTURE_GL(GetRenderbufferImageANGLE, isCallValid, context, target, format, type,
927                          pixels);
928     }
929     else
930     {
931         GenerateContextLostErrorOnCurrentGlobalContext();
932     }
933     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
934 }
935 
936 // GL_ANGLE_get_serialized_context_string
937 
938 // GL_ANGLE_get_tex_level_parameter
GL_GetTexLevelParameterivANGLE(GLenum target,GLint level,GLenum pname,GLint * params)939 void GL_APIENTRY GL_GetTexLevelParameterivANGLE(GLenum target,
940                                                 GLint level,
941                                                 GLenum pname,
942                                                 GLint *params)
943 {
944     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
945     Context *context = GetValidGlobalContext();
946     EVENT(context, GLGetTexLevelParameterivANGLE,
947           "context = %d, target = %s, level = %d, pname = %s, params = 0x%016" PRIxPTR "",
948           CID(context), GLenumToString(GLESEnum::TextureTarget, target), level,
949           GLenumToString(GLESEnum::GetTextureParameter, pname), (uintptr_t)params);
950 
951     if (context)
952     {
953         TextureTarget targetPacked = PackParam<TextureTarget>(target);
954         SCOPED_SHARE_CONTEXT_LOCK(context);
955         bool isCallValid = (context->skipValidation() ||
956                             ValidateGetTexLevelParameterivANGLE(
957                                 context, angle::EntryPoint::GLGetTexLevelParameterivANGLE,
958                                 targetPacked, level, pname, params));
959         if (isCallValid)
960         {
961             context->getTexLevelParameteriv(targetPacked, level, pname, params);
962         }
963         ANGLE_CAPTURE_GL(GetTexLevelParameterivANGLE, isCallValid, context, targetPacked, level,
964                          pname, params);
965     }
966     else
967     {
968         GenerateContextLostErrorOnCurrentGlobalContext();
969     }
970     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
971 }
972 
GL_GetTexLevelParameterfvANGLE(GLenum target,GLint level,GLenum pname,GLfloat * params)973 void GL_APIENTRY GL_GetTexLevelParameterfvANGLE(GLenum target,
974                                                 GLint level,
975                                                 GLenum pname,
976                                                 GLfloat *params)
977 {
978     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
979     Context *context = GetValidGlobalContext();
980     EVENT(context, GLGetTexLevelParameterfvANGLE,
981           "context = %d, target = %s, level = %d, pname = %s, params = 0x%016" PRIxPTR "",
982           CID(context), GLenumToString(GLESEnum::AllEnums, target), level,
983           GLenumToString(GLESEnum::AllEnums, pname), (uintptr_t)params);
984 
985     if (context)
986     {
987         TextureTarget targetPacked = PackParam<TextureTarget>(target);
988         SCOPED_SHARE_CONTEXT_LOCK(context);
989         bool isCallValid = (context->skipValidation() ||
990                             ValidateGetTexLevelParameterfvANGLE(
991                                 context, angle::EntryPoint::GLGetTexLevelParameterfvANGLE,
992                                 targetPacked, level, pname, params));
993         if (isCallValid)
994         {
995             context->getTexLevelParameterfv(targetPacked, level, pname, params);
996         }
997         ANGLE_CAPTURE_GL(GetTexLevelParameterfvANGLE, isCallValid, context, targetPacked, level,
998                          pname, params);
999     }
1000     else
1001     {
1002         GenerateContextLostErrorOnCurrentGlobalContext();
1003     }
1004     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1005 }
1006 
1007 // GL_ANGLE_instanced_arrays
GL_DrawArraysInstancedANGLE(GLenum mode,GLint first,GLsizei count,GLsizei primcount)1008 void GL_APIENTRY GL_DrawArraysInstancedANGLE(GLenum mode,
1009                                              GLint first,
1010                                              GLsizei count,
1011                                              GLsizei primcount)
1012 {
1013     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1014     Context *context = GetValidGlobalContext();
1015     EVENT(context, GLDrawArraysInstancedANGLE,
1016           "context = %d, mode = %s, first = %d, count = %d, primcount = %d", CID(context),
1017           GLenumToString(GLESEnum::PrimitiveType, mode), first, count, primcount);
1018 
1019     if (context)
1020     {
1021         PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);
1022         SCOPED_SHARE_CONTEXT_LOCK(context);
1023         bool isCallValid = (context->skipValidation() ||
1024                             ValidateDrawArraysInstancedANGLE(
1025                                 context, angle::EntryPoint::GLDrawArraysInstancedANGLE, modePacked,
1026                                 first, count, primcount));
1027         if (isCallValid)
1028         {
1029             context->drawArraysInstanced(modePacked, first, count, primcount);
1030         }
1031         ANGLE_CAPTURE_GL(DrawArraysInstancedANGLE, isCallValid, context, modePacked, first, count,
1032                          primcount);
1033     }
1034     else
1035     {
1036         GenerateContextLostErrorOnCurrentGlobalContext();
1037     }
1038     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1039 }
1040 
GL_DrawElementsInstancedANGLE(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei primcount)1041 void GL_APIENTRY GL_DrawElementsInstancedANGLE(GLenum mode,
1042                                                GLsizei count,
1043                                                GLenum type,
1044                                                const void *indices,
1045                                                GLsizei primcount)
1046 {
1047     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1048     Context *context = GetValidGlobalContext();
1049     EVENT(context, GLDrawElementsInstancedANGLE,
1050           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
1051           ", primcount = %d",
1052           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), count,
1053           GLenumToString(GLESEnum::PrimitiveType, type), (uintptr_t)indices, primcount);
1054 
1055     if (context)
1056     {
1057         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
1058         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
1059         SCOPED_SHARE_CONTEXT_LOCK(context);
1060         bool isCallValid = (context->skipValidation() ||
1061                             ValidateDrawElementsInstancedANGLE(
1062                                 context, angle::EntryPoint::GLDrawElementsInstancedANGLE,
1063                                 modePacked, count, typePacked, indices, primcount));
1064         if (isCallValid)
1065         {
1066             context->drawElementsInstanced(modePacked, count, typePacked, indices, primcount);
1067         }
1068         ANGLE_CAPTURE_GL(DrawElementsInstancedANGLE, isCallValid, context, modePacked, count,
1069                          typePacked, indices, primcount);
1070     }
1071     else
1072     {
1073         GenerateContextLostErrorOnCurrentGlobalContext();
1074     }
1075     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1076 }
1077 
GL_VertexAttribDivisorANGLE(GLuint index,GLuint divisor)1078 void GL_APIENTRY GL_VertexAttribDivisorANGLE(GLuint index, GLuint divisor)
1079 {
1080     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1081     Context *context = GetValidGlobalContext();
1082     EVENT(context, GLVertexAttribDivisorANGLE, "context = %d, index = %u, divisor = %u",
1083           CID(context), index, divisor);
1084 
1085     if (context)
1086     {
1087         SCOPED_SHARE_CONTEXT_LOCK(context);
1088         bool isCallValid =
1089             (context->skipValidation() ||
1090              ValidateVertexAttribDivisorANGLE(
1091                  context, angle::EntryPoint::GLVertexAttribDivisorANGLE, index, divisor));
1092         if (isCallValid)
1093         {
1094             context->vertexAttribDivisor(index, divisor);
1095         }
1096         ANGLE_CAPTURE_GL(VertexAttribDivisorANGLE, isCallValid, context, index, divisor);
1097     }
1098     else
1099     {
1100         GenerateContextLostErrorOnCurrentGlobalContext();
1101     }
1102     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1103 }
1104 
1105 // GL_ANGLE_logic_op
GL_LogicOpANGLE(GLenum opcode)1106 void GL_APIENTRY GL_LogicOpANGLE(GLenum opcode)
1107 {
1108     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1109     Context *context = GetValidGlobalContext();
1110     EVENT(context, GLLogicOpANGLE, "context = %d, opcode = %s", CID(context),
1111           GLenumToString(GLESEnum::LogicOp, opcode));
1112 
1113     if (context)
1114     {
1115         LogicalOperation opcodePacked = PackParam<LogicalOperation>(opcode);
1116         bool isCallValid =
1117             (context->skipValidation() ||
1118              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1119                                                 context->getMutableErrorSetForValidation(),
1120                                                 angle::EntryPoint::GLLogicOpANGLE) &&
1121               ValidateLogicOpANGLE(context->getPrivateState(),
1122                                    context->getMutableErrorSetForValidation(),
1123                                    angle::EntryPoint::GLLogicOpANGLE, opcodePacked)));
1124         if (isCallValid)
1125         {
1126             ContextPrivateLogicOpANGLE(context->getMutablePrivateState(),
1127                                        context->getMutablePrivateStateCache(), opcodePacked);
1128         }
1129         ANGLE_CAPTURE_GL(LogicOpANGLE, isCallValid, context, opcodePacked);
1130     }
1131     else
1132     {
1133         GenerateContextLostErrorOnCurrentGlobalContext();
1134     }
1135     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1136 }
1137 
1138 // GL_ANGLE_lossy_etc_decode
1139 
1140 // 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)1141 void GL_APIENTRY GL_TexStorageMemFlags2DANGLE(GLenum target,
1142                                               GLsizei levels,
1143                                               GLenum internalFormat,
1144                                               GLsizei width,
1145                                               GLsizei height,
1146                                               GLuint memory,
1147                                               GLuint64 offset,
1148                                               GLbitfield createFlags,
1149                                               GLbitfield usageFlags,
1150                                               const void *imageCreateInfoPNext)
1151 {
1152     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1153     Context *context = GetValidGlobalContext();
1154     EVENT(context, GLTexStorageMemFlags2DANGLE,
1155           "context = %d, target = %s, levels = %d, internalFormat = %s, width = %d, height = %d, "
1156           "memory = %u, offset = %llu, createFlags = %s, usageFlags = %s, imageCreateInfoPNext = "
1157           "0x%016" PRIxPTR "",
1158           CID(context), GLenumToString(GLESEnum::TextureTarget, target), levels,
1159           GLenumToString(GLESEnum::AllEnums, internalFormat), width, height, memory,
1160           static_cast<unsigned long long>(offset),
1161           GLbitfieldToString(GLESEnum::AllEnums, createFlags).c_str(),
1162           GLbitfieldToString(GLESEnum::AllEnums, usageFlags).c_str(),
1163           (uintptr_t)imageCreateInfoPNext);
1164 
1165     if (context)
1166     {
1167         TextureType targetPacked    = PackParam<TextureType>(target);
1168         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
1169         SCOPED_SHARE_CONTEXT_LOCK(context);
1170         bool isCallValid =
1171             (context->skipValidation() ||
1172              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1173                                                 context->getMutableErrorSetForValidation(),
1174                                                 angle::EntryPoint::GLTexStorageMemFlags2DANGLE) &&
1175               ValidateTexStorageMemFlags2DANGLE(
1176                   context, angle::EntryPoint::GLTexStorageMemFlags2DANGLE, targetPacked, levels,
1177                   internalFormat, width, height, memoryPacked, offset, createFlags, usageFlags,
1178                   imageCreateInfoPNext)));
1179         if (isCallValid)
1180         {
1181             context->texStorageMemFlags2D(targetPacked, levels, internalFormat, width, height,
1182                                           memoryPacked, offset, createFlags, usageFlags,
1183                                           imageCreateInfoPNext);
1184         }
1185         ANGLE_CAPTURE_GL(TexStorageMemFlags2DANGLE, isCallValid, context, targetPacked, levels,
1186                          internalFormat, width, height, memoryPacked, offset, createFlags,
1187                          usageFlags, imageCreateInfoPNext);
1188     }
1189     else
1190     {
1191         GenerateContextLostErrorOnCurrentGlobalContext();
1192     }
1193     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1194 }
1195 
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)1196 void GL_APIENTRY GL_TexStorageMemFlags2DMultisampleANGLE(GLenum target,
1197                                                          GLsizei samples,
1198                                                          GLenum internalFormat,
1199                                                          GLsizei width,
1200                                                          GLsizei height,
1201                                                          GLboolean fixedSampleLocations,
1202                                                          GLuint memory,
1203                                                          GLuint64 offset,
1204                                                          GLbitfield createFlags,
1205                                                          GLbitfield usageFlags,
1206                                                          const void *imageCreateInfoPNext)
1207 {
1208     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1209     Context *context = GetValidGlobalContext();
1210     EVENT(context, GLTexStorageMemFlags2DMultisampleANGLE,
1211           "context = %d, target = %s, samples = %d, internalFormat = %s, width = %d, height = %d, "
1212           "fixedSampleLocations = %s, memory = %u, offset = %llu, createFlags = %s, usageFlags = "
1213           "%s, imageCreateInfoPNext = 0x%016" PRIxPTR "",
1214           CID(context), GLenumToString(GLESEnum::TextureTarget, target), samples,
1215           GLenumToString(GLESEnum::AllEnums, internalFormat), width, height,
1216           GLbooleanToString(fixedSampleLocations), memory, static_cast<unsigned long long>(offset),
1217           GLbitfieldToString(GLESEnum::AllEnums, createFlags).c_str(),
1218           GLbitfieldToString(GLESEnum::AllEnums, usageFlags).c_str(),
1219           (uintptr_t)imageCreateInfoPNext);
1220 
1221     if (context)
1222     {
1223         TextureType targetPacked    = PackParam<TextureType>(target);
1224         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
1225         SCOPED_SHARE_CONTEXT_LOCK(context);
1226         bool isCallValid =
1227             (context->skipValidation() ||
1228              (ValidatePixelLocalStorageInactive(
1229                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
1230                   angle::EntryPoint::GLTexStorageMemFlags2DMultisampleANGLE) &&
1231               ValidateTexStorageMemFlags2DMultisampleANGLE(
1232                   context, angle::EntryPoint::GLTexStorageMemFlags2DMultisampleANGLE, targetPacked,
1233                   samples, internalFormat, width, height, fixedSampleLocations, memoryPacked,
1234                   offset, createFlags, usageFlags, imageCreateInfoPNext)));
1235         if (isCallValid)
1236         {
1237             context->texStorageMemFlags2DMultisample(
1238                 targetPacked, samples, internalFormat, width, height, fixedSampleLocations,
1239                 memoryPacked, offset, createFlags, usageFlags, imageCreateInfoPNext);
1240         }
1241         ANGLE_CAPTURE_GL(TexStorageMemFlags2DMultisampleANGLE, isCallValid, context, targetPacked,
1242                          samples, internalFormat, width, height, fixedSampleLocations, memoryPacked,
1243                          offset, createFlags, usageFlags, imageCreateInfoPNext);
1244     }
1245     else
1246     {
1247         GenerateContextLostErrorOnCurrentGlobalContext();
1248     }
1249     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1250 }
1251 
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)1252 void GL_APIENTRY GL_TexStorageMemFlags3DANGLE(GLenum target,
1253                                               GLsizei levels,
1254                                               GLenum internalFormat,
1255                                               GLsizei width,
1256                                               GLsizei height,
1257                                               GLsizei depth,
1258                                               GLuint memory,
1259                                               GLuint64 offset,
1260                                               GLbitfield createFlags,
1261                                               GLbitfield usageFlags,
1262                                               const void *imageCreateInfoPNext)
1263 {
1264     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1265     Context *context = GetValidGlobalContext();
1266     EVENT(context, GLTexStorageMemFlags3DANGLE,
1267           "context = %d, target = %s, levels = %d, internalFormat = %s, width = %d, height = %d, "
1268           "depth = %d, memory = %u, offset = %llu, createFlags = %s, usageFlags = %s, "
1269           "imageCreateInfoPNext = 0x%016" PRIxPTR "",
1270           CID(context), GLenumToString(GLESEnum::TextureTarget, target), levels,
1271           GLenumToString(GLESEnum::AllEnums, internalFormat), width, height, depth, memory,
1272           static_cast<unsigned long long>(offset),
1273           GLbitfieldToString(GLESEnum::AllEnums, createFlags).c_str(),
1274           GLbitfieldToString(GLESEnum::AllEnums, usageFlags).c_str(),
1275           (uintptr_t)imageCreateInfoPNext);
1276 
1277     if (context)
1278     {
1279         TextureType targetPacked    = PackParam<TextureType>(target);
1280         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
1281         SCOPED_SHARE_CONTEXT_LOCK(context);
1282         bool isCallValid =
1283             (context->skipValidation() ||
1284              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1285                                                 context->getMutableErrorSetForValidation(),
1286                                                 angle::EntryPoint::GLTexStorageMemFlags3DANGLE) &&
1287               ValidateTexStorageMemFlags3DANGLE(
1288                   context, angle::EntryPoint::GLTexStorageMemFlags3DANGLE, targetPacked, levels,
1289                   internalFormat, width, height, depth, memoryPacked, offset, createFlags,
1290                   usageFlags, imageCreateInfoPNext)));
1291         if (isCallValid)
1292         {
1293             context->texStorageMemFlags3D(targetPacked, levels, internalFormat, width, height,
1294                                           depth, memoryPacked, offset, createFlags, usageFlags,
1295                                           imageCreateInfoPNext);
1296         }
1297         ANGLE_CAPTURE_GL(TexStorageMemFlags3DANGLE, isCallValid, context, targetPacked, levels,
1298                          internalFormat, width, height, depth, memoryPacked, offset, createFlags,
1299                          usageFlags, imageCreateInfoPNext);
1300     }
1301     else
1302     {
1303         GenerateContextLostErrorOnCurrentGlobalContext();
1304     }
1305     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1306 }
1307 
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)1308 void GL_APIENTRY GL_TexStorageMemFlags3DMultisampleANGLE(GLenum target,
1309                                                          GLsizei samples,
1310                                                          GLenum internalFormat,
1311                                                          GLsizei width,
1312                                                          GLsizei height,
1313                                                          GLsizei depth,
1314                                                          GLboolean fixedSampleLocations,
1315                                                          GLuint memory,
1316                                                          GLuint64 offset,
1317                                                          GLbitfield createFlags,
1318                                                          GLbitfield usageFlags,
1319                                                          const void *imageCreateInfoPNext)
1320 {
1321     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1322     Context *context = GetValidGlobalContext();
1323     EVENT(context, GLTexStorageMemFlags3DMultisampleANGLE,
1324           "context = %d, target = %s, samples = %d, internalFormat = %s, width = %d, height = %d, "
1325           "depth = %d, fixedSampleLocations = %s, memory = %u, offset = %llu, createFlags = %s, "
1326           "usageFlags = %s, imageCreateInfoPNext = 0x%016" PRIxPTR "",
1327           CID(context), GLenumToString(GLESEnum::TextureTarget, target), samples,
1328           GLenumToString(GLESEnum::AllEnums, internalFormat), width, height, depth,
1329           GLbooleanToString(fixedSampleLocations), memory, static_cast<unsigned long long>(offset),
1330           GLbitfieldToString(GLESEnum::AllEnums, createFlags).c_str(),
1331           GLbitfieldToString(GLESEnum::AllEnums, usageFlags).c_str(),
1332           (uintptr_t)imageCreateInfoPNext);
1333 
1334     if (context)
1335     {
1336         TextureType targetPacked    = PackParam<TextureType>(target);
1337         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
1338         SCOPED_SHARE_CONTEXT_LOCK(context);
1339         bool isCallValid =
1340             (context->skipValidation() ||
1341              (ValidatePixelLocalStorageInactive(
1342                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
1343                   angle::EntryPoint::GLTexStorageMemFlags3DMultisampleANGLE) &&
1344               ValidateTexStorageMemFlags3DMultisampleANGLE(
1345                   context, angle::EntryPoint::GLTexStorageMemFlags3DMultisampleANGLE, targetPacked,
1346                   samples, internalFormat, width, height, depth, fixedSampleLocations, memoryPacked,
1347                   offset, createFlags, usageFlags, imageCreateInfoPNext)));
1348         if (isCallValid)
1349         {
1350             context->texStorageMemFlags3DMultisample(
1351                 targetPacked, samples, internalFormat, width, height, depth, fixedSampleLocations,
1352                 memoryPacked, offset, createFlags, usageFlags, imageCreateInfoPNext);
1353         }
1354         ANGLE_CAPTURE_GL(TexStorageMemFlags3DMultisampleANGLE, isCallValid, context, targetPacked,
1355                          samples, internalFormat, width, height, depth, fixedSampleLocations,
1356                          memoryPacked, offset, createFlags, usageFlags, imageCreateInfoPNext);
1357     }
1358     else
1359     {
1360         GenerateContextLostErrorOnCurrentGlobalContext();
1361     }
1362     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1363 }
1364 
1365 // GL_ANGLE_memory_object_fuchsia
GL_ImportMemoryZirconHandleANGLE(GLuint memory,GLuint64 size,GLenum handleType,GLuint handle)1366 void GL_APIENTRY GL_ImportMemoryZirconHandleANGLE(GLuint memory,
1367                                                   GLuint64 size,
1368                                                   GLenum handleType,
1369                                                   GLuint handle)
1370 {
1371     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1372     Context *context = GetValidGlobalContext();
1373     EVENT(context, GLImportMemoryZirconHandleANGLE,
1374           "context = %d, memory = %u, size = %llu, handleType = %s, handle = %u", CID(context),
1375           memory, static_cast<unsigned long long>(size),
1376           GLenumToString(GLESEnum::ExternalHandleType, handleType), handle);
1377 
1378     if (context)
1379     {
1380         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
1381         HandleType handleTypePacked = PackParam<HandleType>(handleType);
1382         SCOPED_SHARE_CONTEXT_LOCK(context);
1383         bool isCallValid =
1384             (context->skipValidation() ||
1385              (ValidatePixelLocalStorageInactive(
1386                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
1387                   angle::EntryPoint::GLImportMemoryZirconHandleANGLE) &&
1388               ValidateImportMemoryZirconHandleANGLE(
1389                   context, angle::EntryPoint::GLImportMemoryZirconHandleANGLE, memoryPacked, size,
1390                   handleTypePacked, handle)));
1391         if (isCallValid)
1392         {
1393             context->importMemoryZirconHandle(memoryPacked, size, handleTypePacked, handle);
1394         }
1395         ANGLE_CAPTURE_GL(ImportMemoryZirconHandleANGLE, isCallValid, context, memoryPacked, size,
1396                          handleTypePacked, handle);
1397     }
1398     else
1399     {
1400         GenerateContextLostErrorOnCurrentGlobalContext();
1401     }
1402     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1403 }
1404 
1405 // GL_ANGLE_memory_size
1406 
1407 // GL_ANGLE_multi_draw
GL_MultiDrawArraysANGLE(GLenum mode,const GLint * firsts,const GLsizei * counts,GLsizei drawcount)1408 void GL_APIENTRY GL_MultiDrawArraysANGLE(GLenum mode,
1409                                          const GLint *firsts,
1410                                          const GLsizei *counts,
1411                                          GLsizei drawcount)
1412 {
1413     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1414     Context *context = GetValidGlobalContext();
1415     EVENT(context, GLMultiDrawArraysANGLE,
1416           "context = %d, mode = %s, firsts = 0x%016" PRIxPTR ", counts = 0x%016" PRIxPTR
1417           ", drawcount = %d",
1418           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), (uintptr_t)firsts,
1419           (uintptr_t)counts, drawcount);
1420 
1421     if (context)
1422     {
1423         PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);
1424         SCOPED_SHARE_CONTEXT_LOCK(context);
1425         bool isCallValid =
1426             (context->skipValidation() ||
1427              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1428                                                 context->getMutableErrorSetForValidation(),
1429                                                 angle::EntryPoint::GLMultiDrawArraysANGLE) &&
1430               ValidateMultiDrawArraysANGLE(context, angle::EntryPoint::GLMultiDrawArraysANGLE,
1431                                            modePacked, firsts, counts, drawcount)));
1432         if (isCallValid)
1433         {
1434             context->multiDrawArrays(modePacked, firsts, counts, drawcount);
1435         }
1436         ANGLE_CAPTURE_GL(MultiDrawArraysANGLE, isCallValid, context, modePacked, firsts, counts,
1437                          drawcount);
1438     }
1439     else
1440     {
1441         GenerateContextLostErrorOnCurrentGlobalContext();
1442     }
1443     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1444 }
1445 
GL_MultiDrawArraysInstancedANGLE(GLenum mode,const GLint * firsts,const GLsizei * counts,const GLsizei * instanceCounts,GLsizei drawcount)1446 void GL_APIENTRY GL_MultiDrawArraysInstancedANGLE(GLenum mode,
1447                                                   const GLint *firsts,
1448                                                   const GLsizei *counts,
1449                                                   const GLsizei *instanceCounts,
1450                                                   GLsizei drawcount)
1451 {
1452     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1453     Context *context = GetValidGlobalContext();
1454     EVENT(context, GLMultiDrawArraysInstancedANGLE,
1455           "context = %d, mode = %s, firsts = 0x%016" PRIxPTR ", counts = 0x%016" PRIxPTR
1456           ", instanceCounts = 0x%016" PRIxPTR ", drawcount = %d",
1457           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), (uintptr_t)firsts,
1458           (uintptr_t)counts, (uintptr_t)instanceCounts, drawcount);
1459 
1460     if (context)
1461     {
1462         PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);
1463         SCOPED_SHARE_CONTEXT_LOCK(context);
1464         bool isCallValid =
1465             (context->skipValidation() ||
1466              (ValidatePixelLocalStorageInactive(
1467                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
1468                   angle::EntryPoint::GLMultiDrawArraysInstancedANGLE) &&
1469               ValidateMultiDrawArraysInstancedANGLE(
1470                   context, angle::EntryPoint::GLMultiDrawArraysInstancedANGLE, modePacked, firsts,
1471                   counts, instanceCounts, drawcount)));
1472         if (isCallValid)
1473         {
1474             context->multiDrawArraysInstanced(modePacked, firsts, counts, instanceCounts,
1475                                               drawcount);
1476         }
1477         ANGLE_CAPTURE_GL(MultiDrawArraysInstancedANGLE, isCallValid, context, modePacked, firsts,
1478                          counts, instanceCounts, drawcount);
1479     }
1480     else
1481     {
1482         GenerateContextLostErrorOnCurrentGlobalContext();
1483     }
1484     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1485 }
1486 
GL_MultiDrawElementsANGLE(GLenum mode,const GLsizei * counts,GLenum type,const void * const * indices,GLsizei drawcount)1487 void GL_APIENTRY GL_MultiDrawElementsANGLE(GLenum mode,
1488                                            const GLsizei *counts,
1489                                            GLenum type,
1490                                            const void *const *indices,
1491                                            GLsizei drawcount)
1492 {
1493     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1494     Context *context = GetValidGlobalContext();
1495     EVENT(context, GLMultiDrawElementsANGLE,
1496           "context = %d, mode = %s, counts = 0x%016" PRIxPTR ", type = %s, indices = 0x%016" PRIxPTR
1497           ", drawcount = %d",
1498           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), (uintptr_t)counts,
1499           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, drawcount);
1500 
1501     if (context)
1502     {
1503         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
1504         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
1505         SCOPED_SHARE_CONTEXT_LOCK(context);
1506         bool isCallValid =
1507             (context->skipValidation() ||
1508              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1509                                                 context->getMutableErrorSetForValidation(),
1510                                                 angle::EntryPoint::GLMultiDrawElementsANGLE) &&
1511               ValidateMultiDrawElementsANGLE(context, angle::EntryPoint::GLMultiDrawElementsANGLE,
1512                                              modePacked, counts, typePacked, indices, drawcount)));
1513         if (isCallValid)
1514         {
1515             context->multiDrawElements(modePacked, counts, typePacked, indices, drawcount);
1516         }
1517         ANGLE_CAPTURE_GL(MultiDrawElementsANGLE, isCallValid, context, modePacked, counts,
1518                          typePacked, indices, drawcount);
1519     }
1520     else
1521     {
1522         GenerateContextLostErrorOnCurrentGlobalContext();
1523     }
1524     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1525 }
1526 
GL_MultiDrawElementsInstancedANGLE(GLenum mode,const GLsizei * counts,GLenum type,const void * const * indices,const GLsizei * instanceCounts,GLsizei drawcount)1527 void GL_APIENTRY GL_MultiDrawElementsInstancedANGLE(GLenum mode,
1528                                                     const GLsizei *counts,
1529                                                     GLenum type,
1530                                                     const void *const *indices,
1531                                                     const GLsizei *instanceCounts,
1532                                                     GLsizei drawcount)
1533 {
1534     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1535     Context *context = GetValidGlobalContext();
1536     EVENT(context, GLMultiDrawElementsInstancedANGLE,
1537           "context = %d, mode = %s, counts = 0x%016" PRIxPTR ", type = %s, indices = 0x%016" PRIxPTR
1538           ", instanceCounts = 0x%016" PRIxPTR ", drawcount = %d",
1539           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), (uintptr_t)counts,
1540           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices,
1541           (uintptr_t)instanceCounts, drawcount);
1542 
1543     if (context)
1544     {
1545         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
1546         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
1547         SCOPED_SHARE_CONTEXT_LOCK(context);
1548         bool isCallValid =
1549             (context->skipValidation() ||
1550              (ValidatePixelLocalStorageInactive(
1551                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
1552                   angle::EntryPoint::GLMultiDrawElementsInstancedANGLE) &&
1553               ValidateMultiDrawElementsInstancedANGLE(
1554                   context, angle::EntryPoint::GLMultiDrawElementsInstancedANGLE, modePacked, counts,
1555                   typePacked, indices, instanceCounts, drawcount)));
1556         if (isCallValid)
1557         {
1558             context->multiDrawElementsInstanced(modePacked, counts, typePacked, indices,
1559                                                 instanceCounts, drawcount);
1560         }
1561         ANGLE_CAPTURE_GL(MultiDrawElementsInstancedANGLE, isCallValid, context, modePacked, counts,
1562                          typePacked, indices, instanceCounts, drawcount);
1563     }
1564     else
1565     {
1566         GenerateContextLostErrorOnCurrentGlobalContext();
1567     }
1568     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1569 }
1570 
1571 // GL_ANGLE_pack_reverse_row_order
1572 
1573 // GL_ANGLE_polygon_mode
GL_PolygonModeANGLE(GLenum face,GLenum mode)1574 void GL_APIENTRY GL_PolygonModeANGLE(GLenum face, GLenum mode)
1575 {
1576     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1577     Context *context = GetValidGlobalContext();
1578     EVENT(context, GLPolygonModeANGLE, "context = %d, face = %s, mode = %s", CID(context),
1579           GLenumToString(GLESEnum::TriangleFace, face),
1580           GLenumToString(GLESEnum::PolygonMode, mode));
1581 
1582     if (context)
1583     {
1584         PolygonMode modePacked = PackParam<PolygonMode>(mode);
1585         bool isCallValid =
1586             (context->skipValidation() ||
1587              ValidatePolygonModeANGLE(context->getPrivateState(),
1588                                       context->getMutableErrorSetForValidation(),
1589                                       angle::EntryPoint::GLPolygonModeANGLE, face, modePacked));
1590         if (isCallValid)
1591         {
1592             ContextPrivatePolygonMode(context->getMutablePrivateState(),
1593                                       context->getMutablePrivateStateCache(), face, modePacked);
1594         }
1595         ANGLE_CAPTURE_GL(PolygonModeANGLE, isCallValid, context, face, modePacked);
1596     }
1597     else
1598     {
1599         GenerateContextLostErrorOnCurrentGlobalContext();
1600     }
1601     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1602 }
1603 
1604 // GL_ANGLE_program_binary
1605 
1606 // GL_ANGLE_program_binary_readiness_query
1607 
1608 // GL_ANGLE_program_cache_control
1609 
1610 // GL_ANGLE_provoking_vertex
GL_ProvokingVertexANGLE(GLenum provokeMode)1611 void GL_APIENTRY GL_ProvokingVertexANGLE(GLenum provokeMode)
1612 {
1613     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1614     Context *context = GetValidGlobalContext();
1615     EVENT(context, GLProvokingVertexANGLE, "context = %d, provokeMode = %s", CID(context),
1616           GLenumToString(GLESEnum::VertexProvokingMode, provokeMode));
1617 
1618     if (context)
1619     {
1620         ProvokingVertexConvention provokeModePacked =
1621             PackParam<ProvokingVertexConvention>(provokeMode);
1622         bool isCallValid =
1623             (context->skipValidation() ||
1624              ValidateProvokingVertexANGLE(
1625                  context->getPrivateState(), context->getMutableErrorSetForValidation(),
1626                  angle::EntryPoint::GLProvokingVertexANGLE, provokeModePacked));
1627         if (isCallValid)
1628         {
1629             ContextPrivateProvokingVertex(context->getMutablePrivateState(),
1630                                           context->getMutablePrivateStateCache(),
1631                                           provokeModePacked);
1632         }
1633         ANGLE_CAPTURE_GL(ProvokingVertexANGLE, isCallValid, context, provokeModePacked);
1634     }
1635     else
1636     {
1637         GenerateContextLostErrorOnCurrentGlobalContext();
1638     }
1639     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1640 }
1641 
1642 // GL_ANGLE_renderability_validation
1643 
1644 // GL_ANGLE_request_extension
GL_RequestExtensionANGLE(const GLchar * name)1645 void GL_APIENTRY GL_RequestExtensionANGLE(const GLchar *name)
1646 {
1647     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1648     Context *context = GetValidGlobalContext();
1649     EVENT(context, GLRequestExtensionANGLE, "context = %d, name = 0x%016" PRIxPTR "", CID(context),
1650           (uintptr_t)name);
1651 
1652     if (context)
1653     {
1654         SCOPED_SHARE_CONTEXT_LOCK(context);
1655         bool isCallValid =
1656             (context->skipValidation() ||
1657              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1658                                                 context->getMutableErrorSetForValidation(),
1659                                                 angle::EntryPoint::GLRequestExtensionANGLE) &&
1660               ValidateRequestExtensionANGLE(context, angle::EntryPoint::GLRequestExtensionANGLE,
1661                                             name)));
1662         if (isCallValid)
1663         {
1664             context->requestExtension(name);
1665         }
1666         ANGLE_CAPTURE_GL(RequestExtensionANGLE, isCallValid, context, name);
1667     }
1668     else
1669     {
1670         GenerateContextLostErrorOnCurrentGlobalContext();
1671     }
1672     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1673 }
1674 
GL_DisableExtensionANGLE(const GLchar * name)1675 void GL_APIENTRY GL_DisableExtensionANGLE(const GLchar *name)
1676 {
1677     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1678     Context *context = GetValidGlobalContext();
1679     EVENT(context, GLDisableExtensionANGLE, "context = %d, name = 0x%016" PRIxPTR "", CID(context),
1680           (uintptr_t)name);
1681 
1682     if (context)
1683     {
1684         SCOPED_SHARE_CONTEXT_LOCK(context);
1685         bool isCallValid =
1686             (context->skipValidation() ||
1687              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1688                                                 context->getMutableErrorSetForValidation(),
1689                                                 angle::EntryPoint::GLDisableExtensionANGLE) &&
1690               ValidateDisableExtensionANGLE(context, angle::EntryPoint::GLDisableExtensionANGLE,
1691                                             name)));
1692         if (isCallValid)
1693         {
1694             context->disableExtension(name);
1695         }
1696         ANGLE_CAPTURE_GL(DisableExtensionANGLE, isCallValid, context, name);
1697     }
1698     else
1699     {
1700         GenerateContextLostErrorOnCurrentGlobalContext();
1701     }
1702     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1703 }
1704 
1705 // GL_ANGLE_rgbx_internal_format
1706 
1707 // GL_ANGLE_robust_client_memory
GL_GetBooleanvRobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,GLboolean * params)1708 void GL_APIENTRY GL_GetBooleanvRobustANGLE(GLenum pname,
1709                                            GLsizei bufSize,
1710                                            GLsizei *length,
1711                                            GLboolean *params)
1712 {
1713     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1714     Context *context = GetValidGlobalContext();
1715     EVENT(context, GLGetBooleanvRobustANGLE,
1716           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1717           ", params = 0x%016" PRIxPTR "",
1718           CID(context), GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length,
1719           (uintptr_t)params);
1720 
1721     if (context)
1722     {
1723         SCOPED_SHARE_CONTEXT_LOCK(context);
1724         bool isCallValid =
1725             (context->skipValidation() ||
1726              ValidateGetBooleanvRobustANGLE(context, angle::EntryPoint::GLGetBooleanvRobustANGLE,
1727                                             pname, bufSize, length, params));
1728         if (isCallValid)
1729         {
1730             context->getBooleanvRobust(pname, bufSize, length, params);
1731         }
1732         ANGLE_CAPTURE_GL(GetBooleanvRobustANGLE, isCallValid, context, pname, bufSize, length,
1733                          params);
1734     }
1735     else
1736     {
1737         GenerateContextLostErrorOnCurrentGlobalContext();
1738     }
1739     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1740 }
1741 
GL_GetBufferParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1742 void GL_APIENTRY GL_GetBufferParameterivRobustANGLE(GLenum target,
1743                                                     GLenum pname,
1744                                                     GLsizei bufSize,
1745                                                     GLsizei *length,
1746                                                     GLint *params)
1747 {
1748     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1749     Context *context = GetValidGlobalContext();
1750     EVENT(context, GLGetBufferParameterivRobustANGLE,
1751           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1752           ", params = 0x%016" PRIxPTR "",
1753           CID(context), GLenumToString(GLESEnum::AllEnums, target),
1754           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
1755 
1756     if (context)
1757     {
1758         BufferBinding targetPacked = PackParam<BufferBinding>(target);
1759         SCOPED_SHARE_CONTEXT_LOCK(context);
1760         bool isCallValid = (context->skipValidation() ||
1761                             ValidateGetBufferParameterivRobustANGLE(
1762                                 context, angle::EntryPoint::GLGetBufferParameterivRobustANGLE,
1763                                 targetPacked, pname, bufSize, length, params));
1764         if (isCallValid)
1765         {
1766             context->getBufferParameterivRobust(targetPacked, pname, bufSize, length, params);
1767         }
1768         ANGLE_CAPTURE_GL(GetBufferParameterivRobustANGLE, isCallValid, context, targetPacked, pname,
1769                          bufSize, length, params);
1770     }
1771     else
1772     {
1773         GenerateContextLostErrorOnCurrentGlobalContext();
1774     }
1775     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1776 }
1777 
GL_GetFloatvRobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)1778 void GL_APIENTRY GL_GetFloatvRobustANGLE(GLenum pname,
1779                                          GLsizei bufSize,
1780                                          GLsizei *length,
1781                                          GLfloat *params)
1782 {
1783     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1784     Context *context = GetValidGlobalContext();
1785     EVENT(context, GLGetFloatvRobustANGLE,
1786           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1787           ", params = 0x%016" PRIxPTR "",
1788           CID(context), GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length,
1789           (uintptr_t)params);
1790 
1791     if (context)
1792     {
1793         SCOPED_SHARE_CONTEXT_LOCK(context);
1794         bool isCallValid =
1795             (context->skipValidation() ||
1796              ValidateGetFloatvRobustANGLE(context, angle::EntryPoint::GLGetFloatvRobustANGLE, pname,
1797                                           bufSize, length, params));
1798         if (isCallValid)
1799         {
1800             context->getFloatvRobust(pname, bufSize, length, params);
1801         }
1802         ANGLE_CAPTURE_GL(GetFloatvRobustANGLE, isCallValid, context, pname, bufSize, length,
1803                          params);
1804     }
1805     else
1806     {
1807         GenerateContextLostErrorOnCurrentGlobalContext();
1808     }
1809     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1810 }
1811 
GL_GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,GLenum attachment,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1812 void GL_APIENTRY GL_GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
1813                                                                    GLenum attachment,
1814                                                                    GLenum pname,
1815                                                                    GLsizei bufSize,
1816                                                                    GLsizei *length,
1817                                                                    GLint *params)
1818 {
1819     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1820     Context *context = GetValidGlobalContext();
1821     EVENT(context, GLGetFramebufferAttachmentParameterivRobustANGLE,
1822           "context = %d, target = %s, attachment = %s, pname = %s, bufSize = %d, length = "
1823           "0x%016" PRIxPTR ", params = 0x%016" PRIxPTR "",
1824           CID(context), GLenumToString(GLESEnum::AllEnums, target),
1825           GLenumToString(GLESEnum::AllEnums, attachment), GLenumToString(GLESEnum::AllEnums, pname),
1826           bufSize, (uintptr_t)length, (uintptr_t)params);
1827 
1828     if (context)
1829     {
1830         SCOPED_SHARE_CONTEXT_LOCK(context);
1831         bool isCallValid =
1832             (context->skipValidation() ||
1833              ValidateGetFramebufferAttachmentParameterivRobustANGLE(
1834                  context, angle::EntryPoint::GLGetFramebufferAttachmentParameterivRobustANGLE,
1835                  target, attachment, pname, bufSize, length, params));
1836         if (isCallValid)
1837         {
1838             context->getFramebufferAttachmentParameterivRobust(target, attachment, pname, bufSize,
1839                                                                length, params);
1840         }
1841         ANGLE_CAPTURE_GL(GetFramebufferAttachmentParameterivRobustANGLE, isCallValid, context,
1842                          target, attachment, pname, bufSize, length, params);
1843     }
1844     else
1845     {
1846         GenerateContextLostErrorOnCurrentGlobalContext();
1847     }
1848     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1849 }
1850 
GL_GetIntegervRobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,GLint * data)1851 void GL_APIENTRY GL_GetIntegervRobustANGLE(GLenum pname,
1852                                            GLsizei bufSize,
1853                                            GLsizei *length,
1854                                            GLint *data)
1855 {
1856     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1857     Context *context = GetValidGlobalContext();
1858     EVENT(context, GLGetIntegervRobustANGLE,
1859           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1860           ", data = 0x%016" PRIxPTR "",
1861           CID(context), GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length,
1862           (uintptr_t)data);
1863 
1864     if (context)
1865     {
1866         SCOPED_SHARE_CONTEXT_LOCK(context);
1867         bool isCallValid =
1868             (context->skipValidation() ||
1869              ValidateGetIntegervRobustANGLE(context, angle::EntryPoint::GLGetIntegervRobustANGLE,
1870                                             pname, bufSize, length, data));
1871         if (isCallValid)
1872         {
1873             context->getIntegervRobust(pname, bufSize, length, data);
1874         }
1875         ANGLE_CAPTURE_GL(GetIntegervRobustANGLE, isCallValid, context, pname, bufSize, length,
1876                          data);
1877     }
1878     else
1879     {
1880         GenerateContextLostErrorOnCurrentGlobalContext();
1881     }
1882     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1883 }
1884 
GL_GetProgramivRobustANGLE(GLuint program,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1885 void GL_APIENTRY GL_GetProgramivRobustANGLE(GLuint program,
1886                                             GLenum pname,
1887                                             GLsizei bufSize,
1888                                             GLsizei *length,
1889                                             GLint *params)
1890 {
1891     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1892     Context *context = GetGlobalContext();
1893     EVENT(context, GLGetProgramivRobustANGLE,
1894           "context = %d, program = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1895           ", params = 0x%016" PRIxPTR "",
1896           CID(context), program, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
1897           (uintptr_t)length, (uintptr_t)params);
1898 
1899     if (context)
1900     {
1901         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
1902         SCOPED_SHARE_CONTEXT_LOCK(context);
1903         bool isCallValid =
1904             (context->skipValidation() ||
1905              ValidateGetProgramivRobustANGLE(context, angle::EntryPoint::GLGetProgramivRobustANGLE,
1906                                              programPacked, pname, bufSize, length, params));
1907         if (isCallValid)
1908         {
1909             context->getProgramivRobust(programPacked, pname, bufSize, length, params);
1910         }
1911         ANGLE_CAPTURE_GL(GetProgramivRobustANGLE, isCallValid, context, programPacked, pname,
1912                          bufSize, length, params);
1913     }
1914     else
1915     {
1916     }
1917     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1918 }
1919 
GL_GetRenderbufferParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1920 void GL_APIENTRY GL_GetRenderbufferParameterivRobustANGLE(GLenum target,
1921                                                           GLenum pname,
1922                                                           GLsizei bufSize,
1923                                                           GLsizei *length,
1924                                                           GLint *params)
1925 {
1926     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1927     Context *context = GetValidGlobalContext();
1928     EVENT(context, GLGetRenderbufferParameterivRobustANGLE,
1929           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1930           ", params = 0x%016" PRIxPTR "",
1931           CID(context), GLenumToString(GLESEnum::AllEnums, target),
1932           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
1933 
1934     if (context)
1935     {
1936         SCOPED_SHARE_CONTEXT_LOCK(context);
1937         bool isCallValid = (context->skipValidation() ||
1938                             ValidateGetRenderbufferParameterivRobustANGLE(
1939                                 context, angle::EntryPoint::GLGetRenderbufferParameterivRobustANGLE,
1940                                 target, pname, bufSize, length, params));
1941         if (isCallValid)
1942         {
1943             context->getRenderbufferParameterivRobust(target, pname, bufSize, length, params);
1944         }
1945         ANGLE_CAPTURE_GL(GetRenderbufferParameterivRobustANGLE, isCallValid, context, target, pname,
1946                          bufSize, length, params);
1947     }
1948     else
1949     {
1950         GenerateContextLostErrorOnCurrentGlobalContext();
1951     }
1952     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1953 }
1954 
GL_GetShaderivRobustANGLE(GLuint shader,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)1955 void GL_APIENTRY GL_GetShaderivRobustANGLE(GLuint shader,
1956                                            GLenum pname,
1957                                            GLsizei bufSize,
1958                                            GLsizei *length,
1959                                            GLint *params)
1960 {
1961     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1962     Context *context = GetGlobalContext();
1963     EVENT(context, GLGetShaderivRobustANGLE,
1964           "context = %d, shader = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
1965           ", params = 0x%016" PRIxPTR "",
1966           CID(context), shader, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
1967           (uintptr_t)length, (uintptr_t)params);
1968 
1969     if (context)
1970     {
1971         ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);
1972         SCOPED_SHARE_CONTEXT_LOCK(context);
1973         bool isCallValid =
1974             (context->skipValidation() ||
1975              ValidateGetShaderivRobustANGLE(context, angle::EntryPoint::GLGetShaderivRobustANGLE,
1976                                             shaderPacked, pname, bufSize, length, params));
1977         if (isCallValid)
1978         {
1979             context->getShaderivRobust(shaderPacked, pname, bufSize, length, params);
1980         }
1981         ANGLE_CAPTURE_GL(GetShaderivRobustANGLE, isCallValid, context, shaderPacked, pname, bufSize,
1982                          length, params);
1983     }
1984     else
1985     {
1986     }
1987     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1988 }
1989 
GL_GetTexParameterfvRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)1990 void GL_APIENTRY GL_GetTexParameterfvRobustANGLE(GLenum target,
1991                                                  GLenum pname,
1992                                                  GLsizei bufSize,
1993                                                  GLsizei *length,
1994                                                  GLfloat *params)
1995 {
1996     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1997     Context *context = GetValidGlobalContext();
1998     EVENT(context, GLGetTexParameterfvRobustANGLE,
1999           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2000           ", params = 0x%016" PRIxPTR "",
2001           CID(context), GLenumToString(GLESEnum::AllEnums, target),
2002           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
2003 
2004     if (context)
2005     {
2006         TextureType targetPacked = PackParam<TextureType>(target);
2007         SCOPED_SHARE_CONTEXT_LOCK(context);
2008         bool isCallValid = (context->skipValidation() ||
2009                             ValidateGetTexParameterfvRobustANGLE(
2010                                 context, angle::EntryPoint::GLGetTexParameterfvRobustANGLE,
2011                                 targetPacked, pname, bufSize, length, params));
2012         if (isCallValid)
2013         {
2014             context->getTexParameterfvRobust(targetPacked, pname, bufSize, length, params);
2015         }
2016         ANGLE_CAPTURE_GL(GetTexParameterfvRobustANGLE, isCallValid, context, targetPacked, pname,
2017                          bufSize, length, params);
2018     }
2019     else
2020     {
2021         GenerateContextLostErrorOnCurrentGlobalContext();
2022     }
2023     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2024 }
2025 
GL_GetTexParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2026 void GL_APIENTRY GL_GetTexParameterivRobustANGLE(GLenum target,
2027                                                  GLenum pname,
2028                                                  GLsizei bufSize,
2029                                                  GLsizei *length,
2030                                                  GLint *params)
2031 {
2032     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2033     Context *context = GetValidGlobalContext();
2034     EVENT(context, GLGetTexParameterivRobustANGLE,
2035           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2036           ", params = 0x%016" PRIxPTR "",
2037           CID(context), GLenumToString(GLESEnum::AllEnums, target),
2038           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
2039 
2040     if (context)
2041     {
2042         TextureType targetPacked = PackParam<TextureType>(target);
2043         SCOPED_SHARE_CONTEXT_LOCK(context);
2044         bool isCallValid = (context->skipValidation() ||
2045                             ValidateGetTexParameterivRobustANGLE(
2046                                 context, angle::EntryPoint::GLGetTexParameterivRobustANGLE,
2047                                 targetPacked, pname, bufSize, length, params));
2048         if (isCallValid)
2049         {
2050             context->getTexParameterivRobust(targetPacked, pname, bufSize, length, params);
2051         }
2052         ANGLE_CAPTURE_GL(GetTexParameterivRobustANGLE, isCallValid, context, targetPacked, pname,
2053                          bufSize, length, params);
2054     }
2055     else
2056     {
2057         GenerateContextLostErrorOnCurrentGlobalContext();
2058     }
2059     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2060 }
2061 
GL_GetUniformfvRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLfloat * params)2062 void GL_APIENTRY GL_GetUniformfvRobustANGLE(GLuint program,
2063                                             GLint location,
2064                                             GLsizei bufSize,
2065                                             GLsizei *length,
2066                                             GLfloat *params)
2067 {
2068     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2069     Context *context = GetValidGlobalContext();
2070     EVENT(context, GLGetUniformfvRobustANGLE,
2071           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
2072           ", params = 0x%016" PRIxPTR "",
2073           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
2074 
2075     if (context)
2076     {
2077         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
2078         UniformLocation locationPacked = PackParam<UniformLocation>(location);
2079         SCOPED_SHARE_CONTEXT_LOCK(context);
2080         bool isCallValid = (context->skipValidation() ||
2081                             ValidateGetUniformfvRobustANGLE(
2082                                 context, angle::EntryPoint::GLGetUniformfvRobustANGLE,
2083                                 programPacked, locationPacked, bufSize, length, params));
2084         if (isCallValid)
2085         {
2086             context->getUniformfvRobust(programPacked, locationPacked, bufSize, length, params);
2087         }
2088         ANGLE_CAPTURE_GL(GetUniformfvRobustANGLE, isCallValid, context, programPacked,
2089                          locationPacked, bufSize, length, params);
2090     }
2091     else
2092     {
2093         GenerateContextLostErrorOnCurrentGlobalContext();
2094     }
2095     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2096 }
2097 
GL_GetUniformivRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLint * params)2098 void GL_APIENTRY GL_GetUniformivRobustANGLE(GLuint program,
2099                                             GLint location,
2100                                             GLsizei bufSize,
2101                                             GLsizei *length,
2102                                             GLint *params)
2103 {
2104     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2105     Context *context = GetValidGlobalContext();
2106     EVENT(context, GLGetUniformivRobustANGLE,
2107           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
2108           ", params = 0x%016" PRIxPTR "",
2109           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
2110 
2111     if (context)
2112     {
2113         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
2114         UniformLocation locationPacked = PackParam<UniformLocation>(location);
2115         SCOPED_SHARE_CONTEXT_LOCK(context);
2116         bool isCallValid = (context->skipValidation() ||
2117                             ValidateGetUniformivRobustANGLE(
2118                                 context, angle::EntryPoint::GLGetUniformivRobustANGLE,
2119                                 programPacked, locationPacked, bufSize, length, params));
2120         if (isCallValid)
2121         {
2122             context->getUniformivRobust(programPacked, locationPacked, bufSize, length, params);
2123         }
2124         ANGLE_CAPTURE_GL(GetUniformivRobustANGLE, isCallValid, context, programPacked,
2125                          locationPacked, bufSize, length, params);
2126     }
2127     else
2128     {
2129         GenerateContextLostErrorOnCurrentGlobalContext();
2130     }
2131     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2132 }
2133 
GL_GetVertexAttribfvRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)2134 void GL_APIENTRY GL_GetVertexAttribfvRobustANGLE(GLuint index,
2135                                                  GLenum pname,
2136                                                  GLsizei bufSize,
2137                                                  GLsizei *length,
2138                                                  GLfloat *params)
2139 {
2140     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2141     Context *context = GetValidGlobalContext();
2142     EVENT(context, GLGetVertexAttribfvRobustANGLE,
2143           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2144           ", params = 0x%016" PRIxPTR "",
2145           CID(context), index, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
2146           (uintptr_t)length, (uintptr_t)params);
2147 
2148     if (context)
2149     {
2150         SCOPED_SHARE_CONTEXT_LOCK(context);
2151         bool isCallValid = (context->skipValidation() ||
2152                             ValidateGetVertexAttribfvRobustANGLE(
2153                                 context, angle::EntryPoint::GLGetVertexAttribfvRobustANGLE, index,
2154                                 pname, bufSize, length, params));
2155         if (isCallValid)
2156         {
2157             context->getVertexAttribfvRobust(index, pname, bufSize, length, params);
2158         }
2159         ANGLE_CAPTURE_GL(GetVertexAttribfvRobustANGLE, isCallValid, context, index, pname, bufSize,
2160                          length, params);
2161     }
2162     else
2163     {
2164         GenerateContextLostErrorOnCurrentGlobalContext();
2165     }
2166     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2167 }
2168 
GL_GetVertexAttribivRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2169 void GL_APIENTRY GL_GetVertexAttribivRobustANGLE(GLuint index,
2170                                                  GLenum pname,
2171                                                  GLsizei bufSize,
2172                                                  GLsizei *length,
2173                                                  GLint *params)
2174 {
2175     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2176     Context *context = GetValidGlobalContext();
2177     EVENT(context, GLGetVertexAttribivRobustANGLE,
2178           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2179           ", params = 0x%016" PRIxPTR "",
2180           CID(context), index, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
2181           (uintptr_t)length, (uintptr_t)params);
2182 
2183     if (context)
2184     {
2185         SCOPED_SHARE_CONTEXT_LOCK(context);
2186         bool isCallValid = (context->skipValidation() ||
2187                             ValidateGetVertexAttribivRobustANGLE(
2188                                 context, angle::EntryPoint::GLGetVertexAttribivRobustANGLE, index,
2189                                 pname, bufSize, length, params));
2190         if (isCallValid)
2191         {
2192             context->getVertexAttribivRobust(index, pname, bufSize, length, params);
2193         }
2194         ANGLE_CAPTURE_GL(GetVertexAttribivRobustANGLE, isCallValid, context, index, pname, bufSize,
2195                          length, params);
2196     }
2197     else
2198     {
2199         GenerateContextLostErrorOnCurrentGlobalContext();
2200     }
2201     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2202 }
2203 
GL_GetVertexAttribPointervRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,void ** pointer)2204 void GL_APIENTRY GL_GetVertexAttribPointervRobustANGLE(GLuint index,
2205                                                        GLenum pname,
2206                                                        GLsizei bufSize,
2207                                                        GLsizei *length,
2208                                                        void **pointer)
2209 {
2210     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2211     Context *context = GetValidGlobalContext();
2212     EVENT(context, GLGetVertexAttribPointervRobustANGLE,
2213           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2214           ", pointer = 0x%016" PRIxPTR "",
2215           CID(context), index, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
2216           (uintptr_t)length, (uintptr_t)pointer);
2217 
2218     if (context)
2219     {
2220         SCOPED_SHARE_CONTEXT_LOCK(context);
2221         bool isCallValid = (context->skipValidation() ||
2222                             ValidateGetVertexAttribPointervRobustANGLE(
2223                                 context, angle::EntryPoint::GLGetVertexAttribPointervRobustANGLE,
2224                                 index, pname, bufSize, length, pointer));
2225         if (isCallValid)
2226         {
2227             context->getVertexAttribPointervRobust(index, pname, bufSize, length, pointer);
2228         }
2229         ANGLE_CAPTURE_GL(GetVertexAttribPointervRobustANGLE, isCallValid, context, index, pname,
2230                          bufSize, length, pointer);
2231     }
2232     else
2233     {
2234         GenerateContextLostErrorOnCurrentGlobalContext();
2235     }
2236     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2237 }
2238 
GL_ReadPixelsRobustANGLE(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLsizei bufSize,GLsizei * length,GLsizei * columns,GLsizei * rows,void * pixels)2239 void GL_APIENTRY GL_ReadPixelsRobustANGLE(GLint x,
2240                                           GLint y,
2241                                           GLsizei width,
2242                                           GLsizei height,
2243                                           GLenum format,
2244                                           GLenum type,
2245                                           GLsizei bufSize,
2246                                           GLsizei *length,
2247                                           GLsizei *columns,
2248                                           GLsizei *rows,
2249                                           void *pixels)
2250 {
2251     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2252     Context *context = GetValidGlobalContext();
2253     EVENT(context, GLReadPixelsRobustANGLE,
2254           "context = %d, x = %d, y = %d, width = %d, height = %d, format = %s, type = %s, bufSize "
2255           "= %d, length = 0x%016" PRIxPTR ", columns = 0x%016" PRIxPTR ", rows = 0x%016" PRIxPTR
2256           ", pixels = 0x%016" PRIxPTR "",
2257           CID(context), x, y, width, height, GLenumToString(GLESEnum::AllEnums, format),
2258           GLenumToString(GLESEnum::AllEnums, type), bufSize, (uintptr_t)length, (uintptr_t)columns,
2259           (uintptr_t)rows, (uintptr_t)pixels);
2260 
2261     if (context)
2262     {
2263         SCOPED_SHARE_CONTEXT_LOCK(context);
2264         bool isCallValid =
2265             (context->skipValidation() ||
2266              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2267                                                 context->getMutableErrorSetForValidation(),
2268                                                 angle::EntryPoint::GLReadPixelsRobustANGLE) &&
2269               ValidateReadPixelsRobustANGLE(context, angle::EntryPoint::GLReadPixelsRobustANGLE, x,
2270                                             y, width, height, format, type, bufSize, length,
2271                                             columns, rows, pixels)));
2272         if (isCallValid)
2273         {
2274             context->readPixelsRobust(x, y, width, height, format, type, bufSize, length, columns,
2275                                       rows, pixels);
2276         }
2277         ANGLE_CAPTURE_GL(ReadPixelsRobustANGLE, isCallValid, context, x, y, width, height, format,
2278                          type, bufSize, length, columns, rows, pixels);
2279     }
2280     else
2281     {
2282         GenerateContextLostErrorOnCurrentGlobalContext();
2283     }
2284     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2285 }
2286 
GL_TexImage2DRobustANGLE(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,GLsizei bufSize,const void * pixels)2287 void GL_APIENTRY GL_TexImage2DRobustANGLE(GLenum target,
2288                                           GLint level,
2289                                           GLint internalformat,
2290                                           GLsizei width,
2291                                           GLsizei height,
2292                                           GLint border,
2293                                           GLenum format,
2294                                           GLenum type,
2295                                           GLsizei bufSize,
2296                                           const void *pixels)
2297 {
2298     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2299     Context *context = GetValidGlobalContext();
2300     EVENT(context, GLTexImage2DRobustANGLE,
2301           "context = %d, target = %s, level = %d, internalformat = %d, width = %d, height = %d, "
2302           "border = %d, format = %s, type = %s, bufSize = %d, pixels = 0x%016" PRIxPTR "",
2303           CID(context), GLenumToString(GLESEnum::AllEnums, target), level, internalformat, width,
2304           height, border, GLenumToString(GLESEnum::AllEnums, format),
2305           GLenumToString(GLESEnum::AllEnums, type), bufSize, (uintptr_t)pixels);
2306 
2307     if (context)
2308     {
2309         TextureTarget targetPacked = PackParam<TextureTarget>(target);
2310         SCOPED_SHARE_CONTEXT_LOCK(context);
2311         bool isCallValid =
2312             (context->skipValidation() ||
2313              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2314                                                 context->getMutableErrorSetForValidation(),
2315                                                 angle::EntryPoint::GLTexImage2DRobustANGLE) &&
2316               ValidateTexImage2DRobustANGLE(context, angle::EntryPoint::GLTexImage2DRobustANGLE,
2317                                             targetPacked, level, internalformat, width, height,
2318                                             border, format, type, bufSize, pixels)));
2319         if (isCallValid)
2320         {
2321             context->texImage2DRobust(targetPacked, level, internalformat, width, height, border,
2322                                       format, type, bufSize, pixels);
2323         }
2324         ANGLE_CAPTURE_GL(TexImage2DRobustANGLE, isCallValid, context, targetPacked, level,
2325                          internalformat, width, height, border, format, type, bufSize, pixels);
2326     }
2327     else
2328     {
2329         GenerateContextLostErrorOnCurrentGlobalContext();
2330     }
2331     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
2332 }
2333 
GL_TexParameterfvRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,const GLfloat * params)2334 void GL_APIENTRY GL_TexParameterfvRobustANGLE(GLenum target,
2335                                               GLenum pname,
2336                                               GLsizei bufSize,
2337                                               const GLfloat *params)
2338 {
2339     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2340     Context *context = GetValidGlobalContext();
2341     EVENT(context, GLTexParameterfvRobustANGLE,
2342           "context = %d, target = %s, pname = %s, bufSize = %d, params = 0x%016" PRIxPTR "",
2343           CID(context), GLenumToString(GLESEnum::AllEnums, target),
2344           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)params);
2345 
2346     if (context)
2347     {
2348         TextureType targetPacked = PackParam<TextureType>(target);
2349         SCOPED_SHARE_CONTEXT_LOCK(context);
2350         bool isCallValid = (context->skipValidation() ||
2351                             ValidateTexParameterfvRobustANGLE(
2352                                 context, angle::EntryPoint::GLTexParameterfvRobustANGLE,
2353                                 targetPacked, pname, bufSize, params));
2354         if (isCallValid)
2355         {
2356             context->texParameterfvRobust(targetPacked, pname, bufSize, params);
2357         }
2358         ANGLE_CAPTURE_GL(TexParameterfvRobustANGLE, isCallValid, context, targetPacked, pname,
2359                          bufSize, params);
2360     }
2361     else
2362     {
2363         GenerateContextLostErrorOnCurrentGlobalContext();
2364     }
2365     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2366 }
2367 
GL_TexParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,const GLint * params)2368 void GL_APIENTRY GL_TexParameterivRobustANGLE(GLenum target,
2369                                               GLenum pname,
2370                                               GLsizei bufSize,
2371                                               const GLint *params)
2372 {
2373     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2374     Context *context = GetValidGlobalContext();
2375     EVENT(context, GLTexParameterivRobustANGLE,
2376           "context = %d, target = %s, pname = %s, bufSize = %d, params = 0x%016" PRIxPTR "",
2377           CID(context), GLenumToString(GLESEnum::AllEnums, target),
2378           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)params);
2379 
2380     if (context)
2381     {
2382         TextureType targetPacked = PackParam<TextureType>(target);
2383         SCOPED_SHARE_CONTEXT_LOCK(context);
2384         bool isCallValid = (context->skipValidation() ||
2385                             ValidateTexParameterivRobustANGLE(
2386                                 context, angle::EntryPoint::GLTexParameterivRobustANGLE,
2387                                 targetPacked, pname, bufSize, params));
2388         if (isCallValid)
2389         {
2390             context->texParameterivRobust(targetPacked, pname, bufSize, params);
2391         }
2392         ANGLE_CAPTURE_GL(TexParameterivRobustANGLE, isCallValid, context, targetPacked, pname,
2393                          bufSize, params);
2394     }
2395     else
2396     {
2397         GenerateContextLostErrorOnCurrentGlobalContext();
2398     }
2399     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2400 }
2401 
GL_TexSubImage2DRobustANGLE(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,GLsizei bufSize,const void * pixels)2402 void GL_APIENTRY GL_TexSubImage2DRobustANGLE(GLenum target,
2403                                              GLint level,
2404                                              GLint xoffset,
2405                                              GLint yoffset,
2406                                              GLsizei width,
2407                                              GLsizei height,
2408                                              GLenum format,
2409                                              GLenum type,
2410                                              GLsizei bufSize,
2411                                              const void *pixels)
2412 {
2413     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2414     Context *context = GetValidGlobalContext();
2415     EVENT(context, GLTexSubImage2DRobustANGLE,
2416           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, width = %d, height = "
2417           "%d, format = %s, type = %s, bufSize = %d, pixels = 0x%016" PRIxPTR "",
2418           CID(context), GLenumToString(GLESEnum::AllEnums, target), level, xoffset, yoffset, width,
2419           height, GLenumToString(GLESEnum::AllEnums, format),
2420           GLenumToString(GLESEnum::AllEnums, type), bufSize, (uintptr_t)pixels);
2421 
2422     if (context)
2423     {
2424         TextureTarget targetPacked = PackParam<TextureTarget>(target);
2425         SCOPED_SHARE_CONTEXT_LOCK(context);
2426         bool isCallValid =
2427             (context->skipValidation() ||
2428              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2429                                                 context->getMutableErrorSetForValidation(),
2430                                                 angle::EntryPoint::GLTexSubImage2DRobustANGLE) &&
2431               ValidateTexSubImage2DRobustANGLE(
2432                   context, angle::EntryPoint::GLTexSubImage2DRobustANGLE, targetPacked, level,
2433                   xoffset, yoffset, width, height, format, type, bufSize, pixels)));
2434         if (isCallValid)
2435         {
2436             context->texSubImage2DRobust(targetPacked, level, xoffset, yoffset, width, height,
2437                                          format, type, bufSize, pixels);
2438         }
2439         ANGLE_CAPTURE_GL(TexSubImage2DRobustANGLE, isCallValid, context, targetPacked, level,
2440                          xoffset, yoffset, width, height, format, type, bufSize, pixels);
2441     }
2442     else
2443     {
2444         GenerateContextLostErrorOnCurrentGlobalContext();
2445     }
2446     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
2447 }
2448 
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)2449 void GL_APIENTRY GL_TexImage3DRobustANGLE(GLenum target,
2450                                           GLint level,
2451                                           GLint internalformat,
2452                                           GLsizei width,
2453                                           GLsizei height,
2454                                           GLsizei depth,
2455                                           GLint border,
2456                                           GLenum format,
2457                                           GLenum type,
2458                                           GLsizei bufSize,
2459                                           const void *pixels)
2460 {
2461     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2462     Context *context = GetValidGlobalContext();
2463     EVENT(context, GLTexImage3DRobustANGLE,
2464           "context = %d, target = %s, level = %d, internalformat = %d, width = %d, height = %d, "
2465           "depth = %d, border = %d, format = %s, type = %s, bufSize = %d, pixels = 0x%016" PRIxPTR
2466           "",
2467           CID(context), GLenumToString(GLESEnum::AllEnums, target), level, internalformat, width,
2468           height, depth, border, GLenumToString(GLESEnum::AllEnums, format),
2469           GLenumToString(GLESEnum::AllEnums, type), bufSize, (uintptr_t)pixels);
2470 
2471     if (context)
2472     {
2473         TextureTarget targetPacked = PackParam<TextureTarget>(target);
2474         SCOPED_SHARE_CONTEXT_LOCK(context);
2475         bool isCallValid =
2476             (context->skipValidation() ||
2477              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2478                                                 context->getMutableErrorSetForValidation(),
2479                                                 angle::EntryPoint::GLTexImage3DRobustANGLE) &&
2480               ValidateTexImage3DRobustANGLE(context, angle::EntryPoint::GLTexImage3DRobustANGLE,
2481                                             targetPacked, level, internalformat, width, height,
2482                                             depth, border, format, type, bufSize, pixels)));
2483         if (isCallValid)
2484         {
2485             context->texImage3DRobust(targetPacked, level, internalformat, width, height, depth,
2486                                       border, format, type, bufSize, pixels);
2487         }
2488         ANGLE_CAPTURE_GL(TexImage3DRobustANGLE, isCallValid, context, targetPacked, level,
2489                          internalformat, width, height, depth, border, format, type, bufSize,
2490                          pixels);
2491     }
2492     else
2493     {
2494         GenerateContextLostErrorOnCurrentGlobalContext();
2495     }
2496     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
2497 }
2498 
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)2499 void GL_APIENTRY GL_TexSubImage3DRobustANGLE(GLenum target,
2500                                              GLint level,
2501                                              GLint xoffset,
2502                                              GLint yoffset,
2503                                              GLint zoffset,
2504                                              GLsizei width,
2505                                              GLsizei height,
2506                                              GLsizei depth,
2507                                              GLenum format,
2508                                              GLenum type,
2509                                              GLsizei bufSize,
2510                                              const void *pixels)
2511 {
2512     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2513     Context *context = GetValidGlobalContext();
2514     EVENT(
2515         context, GLTexSubImage3DRobustANGLE,
2516         "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width = "
2517         "%d, height = %d, depth = %d, format = %s, type = %s, bufSize = %d, pixels = 0x%016" PRIxPTR
2518         "",
2519         CID(context), GLenumToString(GLESEnum::AllEnums, target), level, xoffset, yoffset, zoffset,
2520         width, height, depth, GLenumToString(GLESEnum::AllEnums, format),
2521         GLenumToString(GLESEnum::AllEnums, type), bufSize, (uintptr_t)pixels);
2522 
2523     if (context)
2524     {
2525         TextureTarget targetPacked = PackParam<TextureTarget>(target);
2526         SCOPED_SHARE_CONTEXT_LOCK(context);
2527         bool isCallValid =
2528             (context->skipValidation() ||
2529              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2530                                                 context->getMutableErrorSetForValidation(),
2531                                                 angle::EntryPoint::GLTexSubImage3DRobustANGLE) &&
2532               ValidateTexSubImage3DRobustANGLE(
2533                   context, angle::EntryPoint::GLTexSubImage3DRobustANGLE, targetPacked, level,
2534                   xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels)));
2535         if (isCallValid)
2536         {
2537             context->texSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset, width,
2538                                          height, depth, format, type, bufSize, pixels);
2539         }
2540         ANGLE_CAPTURE_GL(TexSubImage3DRobustANGLE, isCallValid, context, targetPacked, level,
2541                          xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize,
2542                          pixels);
2543     }
2544     else
2545     {
2546         GenerateContextLostErrorOnCurrentGlobalContext();
2547     }
2548     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
2549 }
2550 
GL_CompressedTexImage2DRobustANGLE(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,GLsizei dataSize,const void * data)2551 void GL_APIENTRY GL_CompressedTexImage2DRobustANGLE(GLenum target,
2552                                                     GLint level,
2553                                                     GLenum internalformat,
2554                                                     GLsizei width,
2555                                                     GLsizei height,
2556                                                     GLint border,
2557                                                     GLsizei imageSize,
2558                                                     GLsizei dataSize,
2559                                                     const void *data)
2560 {
2561     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2562     Context *context = GetValidGlobalContext();
2563     EVENT(context, GLCompressedTexImage2DRobustANGLE,
2564           "context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "
2565           "border = %d, imageSize = %d, dataSize = %d, data = 0x%016" PRIxPTR "",
2566           CID(context), GLenumToString(GLESEnum::AllEnums, target), level,
2567           GLenumToString(GLESEnum::AllEnums, internalformat), width, height, border, imageSize,
2568           dataSize, (uintptr_t)data);
2569 
2570     if (context)
2571     {
2572         TextureTarget targetPacked = PackParam<TextureTarget>(target);
2573         SCOPED_SHARE_CONTEXT_LOCK(context);
2574         bool isCallValid =
2575             (context->skipValidation() ||
2576              (ValidatePixelLocalStorageInactive(
2577                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
2578                   angle::EntryPoint::GLCompressedTexImage2DRobustANGLE) &&
2579               ValidateCompressedTexImage2DRobustANGLE(
2580                   context, angle::EntryPoint::GLCompressedTexImage2DRobustANGLE, targetPacked,
2581                   level, internalformat, width, height, border, imageSize, dataSize, data)));
2582         if (isCallValid)
2583         {
2584             context->compressedTexImage2DRobust(targetPacked, level, internalformat, width, height,
2585                                                 border, imageSize, dataSize, data);
2586         }
2587         ANGLE_CAPTURE_GL(CompressedTexImage2DRobustANGLE, isCallValid, context, targetPacked, level,
2588                          internalformat, width, height, border, imageSize, dataSize, data);
2589     }
2590     else
2591     {
2592         GenerateContextLostErrorOnCurrentGlobalContext();
2593     }
2594     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
2595 }
2596 
GL_CompressedTexSubImage2DRobustANGLE(GLenum target,GLint level,GLsizei xoffset,GLsizei yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,GLsizei dataSize,const void * data)2597 void GL_APIENTRY GL_CompressedTexSubImage2DRobustANGLE(GLenum target,
2598                                                        GLint level,
2599                                                        GLsizei xoffset,
2600                                                        GLsizei yoffset,
2601                                                        GLsizei width,
2602                                                        GLsizei height,
2603                                                        GLenum format,
2604                                                        GLsizei imageSize,
2605                                                        GLsizei dataSize,
2606                                                        const void *data)
2607 {
2608     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2609     Context *context = GetValidGlobalContext();
2610     EVENT(context, GLCompressedTexSubImage2DRobustANGLE,
2611           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, width = %d, height = "
2612           "%d, format = %s, imageSize = %d, dataSize = %d, data = 0x%016" PRIxPTR "",
2613           CID(context), GLenumToString(GLESEnum::AllEnums, target), level, xoffset, yoffset, width,
2614           height, GLenumToString(GLESEnum::AllEnums, format), imageSize, dataSize, (uintptr_t)data);
2615 
2616     if (context)
2617     {
2618         TextureTarget targetPacked = PackParam<TextureTarget>(target);
2619         SCOPED_SHARE_CONTEXT_LOCK(context);
2620         bool isCallValid =
2621             (context->skipValidation() ||
2622              (ValidatePixelLocalStorageInactive(
2623                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
2624                   angle::EntryPoint::GLCompressedTexSubImage2DRobustANGLE) &&
2625               ValidateCompressedTexSubImage2DRobustANGLE(
2626                   context, angle::EntryPoint::GLCompressedTexSubImage2DRobustANGLE, targetPacked,
2627                   level, xoffset, yoffset, width, height, format, imageSize, dataSize, data)));
2628         if (isCallValid)
2629         {
2630             context->compressedTexSubImage2DRobust(targetPacked, level, xoffset, yoffset, width,
2631                                                    height, format, imageSize, dataSize, data);
2632         }
2633         ANGLE_CAPTURE_GL(CompressedTexSubImage2DRobustANGLE, isCallValid, context, targetPacked,
2634                          level, xoffset, yoffset, width, height, format, imageSize, dataSize, data);
2635     }
2636     else
2637     {
2638         GenerateContextLostErrorOnCurrentGlobalContext();
2639     }
2640     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
2641 }
2642 
GL_CompressedTexImage3DRobustANGLE(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,GLsizei dataSize,const void * data)2643 void GL_APIENTRY GL_CompressedTexImage3DRobustANGLE(GLenum target,
2644                                                     GLint level,
2645                                                     GLenum internalformat,
2646                                                     GLsizei width,
2647                                                     GLsizei height,
2648                                                     GLsizei depth,
2649                                                     GLint border,
2650                                                     GLsizei imageSize,
2651                                                     GLsizei dataSize,
2652                                                     const void *data)
2653 {
2654     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2655     Context *context = GetValidGlobalContext();
2656     EVENT(context, GLCompressedTexImage3DRobustANGLE,
2657           "context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "
2658           "depth = %d, border = %d, imageSize = %d, dataSize = %d, data = 0x%016" PRIxPTR "",
2659           CID(context), GLenumToString(GLESEnum::AllEnums, target), level,
2660           GLenumToString(GLESEnum::AllEnums, internalformat), width, height, depth, border,
2661           imageSize, dataSize, (uintptr_t)data);
2662 
2663     if (context)
2664     {
2665         TextureTarget targetPacked = PackParam<TextureTarget>(target);
2666         SCOPED_SHARE_CONTEXT_LOCK(context);
2667         bool isCallValid =
2668             (context->skipValidation() ||
2669              (ValidatePixelLocalStorageInactive(
2670                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
2671                   angle::EntryPoint::GLCompressedTexImage3DRobustANGLE) &&
2672               ValidateCompressedTexImage3DRobustANGLE(
2673                   context, angle::EntryPoint::GLCompressedTexImage3DRobustANGLE, targetPacked,
2674                   level, internalformat, width, height, depth, border, imageSize, dataSize, data)));
2675         if (isCallValid)
2676         {
2677             context->compressedTexImage3DRobust(targetPacked, level, internalformat, width, height,
2678                                                 depth, border, imageSize, dataSize, data);
2679         }
2680         ANGLE_CAPTURE_GL(CompressedTexImage3DRobustANGLE, isCallValid, context, targetPacked, level,
2681                          internalformat, width, height, depth, border, imageSize, dataSize, data);
2682     }
2683     else
2684     {
2685         GenerateContextLostErrorOnCurrentGlobalContext();
2686     }
2687     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
2688 }
2689 
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 void * data)2690 void GL_APIENTRY GL_CompressedTexSubImage3DRobustANGLE(GLenum target,
2691                                                        GLint level,
2692                                                        GLint xoffset,
2693                                                        GLint yoffset,
2694                                                        GLint zoffset,
2695                                                        GLsizei width,
2696                                                        GLsizei height,
2697                                                        GLsizei depth,
2698                                                        GLenum format,
2699                                                        GLsizei imageSize,
2700                                                        GLsizei dataSize,
2701                                                        const void *data)
2702 {
2703     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2704     Context *context = GetValidGlobalContext();
2705     EVENT(context, GLCompressedTexSubImage3DRobustANGLE,
2706           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width "
2707           "= %d, height = %d, depth = %d, format = %s, imageSize = %d, dataSize = %d, data = "
2708           "0x%016" PRIxPTR "",
2709           CID(context), GLenumToString(GLESEnum::AllEnums, target), level, xoffset, yoffset,
2710           zoffset, width, height, depth, GLenumToString(GLESEnum::AllEnums, format), imageSize,
2711           dataSize, (uintptr_t)data);
2712 
2713     if (context)
2714     {
2715         TextureTarget targetPacked = PackParam<TextureTarget>(target);
2716         SCOPED_SHARE_CONTEXT_LOCK(context);
2717         bool isCallValid =
2718             (context->skipValidation() ||
2719              (ValidatePixelLocalStorageInactive(
2720                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
2721                   angle::EntryPoint::GLCompressedTexSubImage3DRobustANGLE) &&
2722               ValidateCompressedTexSubImage3DRobustANGLE(
2723                   context, angle::EntryPoint::GLCompressedTexSubImage3DRobustANGLE, targetPacked,
2724                   level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize,
2725                   dataSize, data)));
2726         if (isCallValid)
2727         {
2728             context->compressedTexSubImage3DRobust(targetPacked, level, xoffset, yoffset, zoffset,
2729                                                    width, height, depth, format, imageSize,
2730                                                    dataSize, data);
2731         }
2732         ANGLE_CAPTURE_GL(CompressedTexSubImage3DRobustANGLE, isCallValid, context, targetPacked,
2733                          level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize,
2734                          dataSize, data);
2735     }
2736     else
2737     {
2738         GenerateContextLostErrorOnCurrentGlobalContext();
2739     }
2740     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
2741 }
2742 
GL_GetQueryivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2743 void GL_APIENTRY GL_GetQueryivRobustANGLE(GLenum target,
2744                                           GLenum pname,
2745                                           GLsizei bufSize,
2746                                           GLsizei *length,
2747                                           GLint *params)
2748 {
2749     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2750     Context *context = GetValidGlobalContext();
2751     EVENT(context, GLGetQueryivRobustANGLE,
2752           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2753           ", params = 0x%016" PRIxPTR "",
2754           CID(context), GLenumToString(GLESEnum::AllEnums, target),
2755           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
2756 
2757     if (context)
2758     {
2759         QueryType targetPacked = PackParam<QueryType>(target);
2760         SCOPED_SHARE_CONTEXT_LOCK(context);
2761         bool isCallValid =
2762             (context->skipValidation() ||
2763              ValidateGetQueryivRobustANGLE(context, angle::EntryPoint::GLGetQueryivRobustANGLE,
2764                                            targetPacked, pname, bufSize, length, params));
2765         if (isCallValid)
2766         {
2767             context->getQueryivRobust(targetPacked, pname, bufSize, length, params);
2768         }
2769         ANGLE_CAPTURE_GL(GetQueryivRobustANGLE, isCallValid, context, targetPacked, pname, bufSize,
2770                          length, params);
2771     }
2772     else
2773     {
2774         GenerateContextLostErrorOnCurrentGlobalContext();
2775     }
2776     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2777 }
2778 
GL_GetQueryObjectuivRobustANGLE(GLuint id,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint * params)2779 void GL_APIENTRY GL_GetQueryObjectuivRobustANGLE(GLuint id,
2780                                                  GLenum pname,
2781                                                  GLsizei bufSize,
2782                                                  GLsizei *length,
2783                                                  GLuint *params)
2784 {
2785     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2786     Context *context = GetValidGlobalContext();
2787     EVENT(context, GLGetQueryObjectuivRobustANGLE,
2788           "context = %d, id = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2789           ", params = 0x%016" PRIxPTR "",
2790           CID(context), id, GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length,
2791           (uintptr_t)params);
2792 
2793     if (context)
2794     {
2795         QueryID idPacked = PackParam<QueryID>(id);
2796         SCOPED_SHARE_CONTEXT_LOCK(context);
2797         bool isCallValid = (context->skipValidation() ||
2798                             ValidateGetQueryObjectuivRobustANGLE(
2799                                 context, angle::EntryPoint::GLGetQueryObjectuivRobustANGLE,
2800                                 idPacked, pname, bufSize, length, params));
2801         if (isCallValid)
2802         {
2803             context->getQueryObjectuivRobust(idPacked, pname, bufSize, length, params);
2804         }
2805         ANGLE_CAPTURE_GL(GetQueryObjectuivRobustANGLE, isCallValid, context, idPacked, pname,
2806                          bufSize, length, params);
2807     }
2808     else
2809     {
2810         GenerateContextLostErrorOnCurrentGlobalContext();
2811     }
2812     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2813 }
2814 
GL_GetBufferPointervRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,void ** params)2815 void GL_APIENTRY GL_GetBufferPointervRobustANGLE(GLenum target,
2816                                                  GLenum pname,
2817                                                  GLsizei bufSize,
2818                                                  GLsizei *length,
2819                                                  void **params)
2820 {
2821     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2822     Context *context = GetValidGlobalContext();
2823     EVENT(context, GLGetBufferPointervRobustANGLE,
2824           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2825           ", params = 0x%016" PRIxPTR "",
2826           CID(context), GLenumToString(GLESEnum::AllEnums, target),
2827           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
2828 
2829     if (context)
2830     {
2831         BufferBinding targetPacked = PackParam<BufferBinding>(target);
2832         SCOPED_SHARE_CONTEXT_LOCK(context);
2833         bool isCallValid = (context->skipValidation() ||
2834                             ValidateGetBufferPointervRobustANGLE(
2835                                 context, angle::EntryPoint::GLGetBufferPointervRobustANGLE,
2836                                 targetPacked, pname, bufSize, length, params));
2837         if (isCallValid)
2838         {
2839             context->getBufferPointervRobust(targetPacked, pname, bufSize, length, params);
2840         }
2841         ANGLE_CAPTURE_GL(GetBufferPointervRobustANGLE, isCallValid, context, targetPacked, pname,
2842                          bufSize, length, params);
2843     }
2844     else
2845     {
2846         GenerateContextLostErrorOnCurrentGlobalContext();
2847     }
2848     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2849 }
2850 
GL_GetIntegeri_vRobustANGLE(GLenum target,GLuint index,GLsizei bufSize,GLsizei * length,GLint * data)2851 void GL_APIENTRY GL_GetIntegeri_vRobustANGLE(GLenum target,
2852                                              GLuint index,
2853                                              GLsizei bufSize,
2854                                              GLsizei *length,
2855                                              GLint *data)
2856 {
2857     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2858     Context *context = GetValidGlobalContext();
2859     EVENT(context, GLGetIntegeri_vRobustANGLE,
2860           "context = %d, target = %s, index = %u, bufSize = %d, length = 0x%016" PRIxPTR
2861           ", data = 0x%016" PRIxPTR "",
2862           CID(context), GLenumToString(GLESEnum::AllEnums, target), index, bufSize,
2863           (uintptr_t)length, (uintptr_t)data);
2864 
2865     if (context)
2866     {
2867         SCOPED_SHARE_CONTEXT_LOCK(context);
2868         bool isCallValid = (context->skipValidation() ||
2869                             ValidateGetIntegeri_vRobustANGLE(
2870                                 context, angle::EntryPoint::GLGetIntegeri_vRobustANGLE, target,
2871                                 index, bufSize, length, data));
2872         if (isCallValid)
2873         {
2874             context->getIntegeri_vRobust(target, index, bufSize, length, data);
2875         }
2876         ANGLE_CAPTURE_GL(GetIntegeri_vRobustANGLE, isCallValid, context, target, index, bufSize,
2877                          length, data);
2878     }
2879     else
2880     {
2881         GenerateContextLostErrorOnCurrentGlobalContext();
2882     }
2883     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2884 }
2885 
GL_GetInternalformativRobustANGLE(GLenum target,GLenum internalformat,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2886 void GL_APIENTRY GL_GetInternalformativRobustANGLE(GLenum target,
2887                                                    GLenum internalformat,
2888                                                    GLenum pname,
2889                                                    GLsizei bufSize,
2890                                                    GLsizei *length,
2891                                                    GLint *params)
2892 {
2893     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2894     Context *context = GetValidGlobalContext();
2895     EVENT(context, GLGetInternalformativRobustANGLE,
2896           "context = %d, target = %s, internalformat = %s, pname = %s, bufSize = %d, length = "
2897           "0x%016" PRIxPTR ", params = 0x%016" PRIxPTR "",
2898           CID(context), GLenumToString(GLESEnum::AllEnums, target),
2899           GLenumToString(GLESEnum::AllEnums, internalformat),
2900           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
2901 
2902     if (context)
2903     {
2904         SCOPED_SHARE_CONTEXT_LOCK(context);
2905         bool isCallValid = (context->skipValidation() ||
2906                             ValidateGetInternalformativRobustANGLE(
2907                                 context, angle::EntryPoint::GLGetInternalformativRobustANGLE,
2908                                 target, internalformat, pname, bufSize, length, params));
2909         if (isCallValid)
2910         {
2911             context->getInternalformativRobust(target, internalformat, pname, bufSize, length,
2912                                                params);
2913         }
2914         ANGLE_CAPTURE_GL(GetInternalformativRobustANGLE, isCallValid, context, target,
2915                          internalformat, pname, bufSize, length, params);
2916     }
2917     else
2918     {
2919         GenerateContextLostErrorOnCurrentGlobalContext();
2920     }
2921     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2922 }
2923 
GL_GetVertexAttribIivRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)2924 void GL_APIENTRY GL_GetVertexAttribIivRobustANGLE(GLuint index,
2925                                                   GLenum pname,
2926                                                   GLsizei bufSize,
2927                                                   GLsizei *length,
2928                                                   GLint *params)
2929 {
2930     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2931     Context *context = GetValidGlobalContext();
2932     EVENT(context, GLGetVertexAttribIivRobustANGLE,
2933           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2934           ", params = 0x%016" PRIxPTR "",
2935           CID(context), index, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
2936           (uintptr_t)length, (uintptr_t)params);
2937 
2938     if (context)
2939     {
2940         SCOPED_SHARE_CONTEXT_LOCK(context);
2941         bool isCallValid = (context->skipValidation() ||
2942                             ValidateGetVertexAttribIivRobustANGLE(
2943                                 context, angle::EntryPoint::GLGetVertexAttribIivRobustANGLE, index,
2944                                 pname, bufSize, length, params));
2945         if (isCallValid)
2946         {
2947             context->getVertexAttribIivRobust(index, pname, bufSize, length, params);
2948         }
2949         ANGLE_CAPTURE_GL(GetVertexAttribIivRobustANGLE, isCallValid, context, index, pname, bufSize,
2950                          length, params);
2951     }
2952     else
2953     {
2954         GenerateContextLostErrorOnCurrentGlobalContext();
2955     }
2956     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2957 }
2958 
GL_GetVertexAttribIuivRobustANGLE(GLuint index,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint * params)2959 void GL_APIENTRY GL_GetVertexAttribIuivRobustANGLE(GLuint index,
2960                                                    GLenum pname,
2961                                                    GLsizei bufSize,
2962                                                    GLsizei *length,
2963                                                    GLuint *params)
2964 {
2965     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2966     Context *context = GetValidGlobalContext();
2967     EVENT(context, GLGetVertexAttribIuivRobustANGLE,
2968           "context = %d, index = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
2969           ", params = 0x%016" PRIxPTR "",
2970           CID(context), index, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
2971           (uintptr_t)length, (uintptr_t)params);
2972 
2973     if (context)
2974     {
2975         SCOPED_SHARE_CONTEXT_LOCK(context);
2976         bool isCallValid = (context->skipValidation() ||
2977                             ValidateGetVertexAttribIuivRobustANGLE(
2978                                 context, angle::EntryPoint::GLGetVertexAttribIuivRobustANGLE, index,
2979                                 pname, bufSize, length, params));
2980         if (isCallValid)
2981         {
2982             context->getVertexAttribIuivRobust(index, pname, bufSize, length, params);
2983         }
2984         ANGLE_CAPTURE_GL(GetVertexAttribIuivRobustANGLE, isCallValid, context, index, pname,
2985                          bufSize, length, params);
2986     }
2987     else
2988     {
2989         GenerateContextLostErrorOnCurrentGlobalContext();
2990     }
2991     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2992 }
2993 
GL_GetUniformuivRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLuint * params)2994 void GL_APIENTRY GL_GetUniformuivRobustANGLE(GLuint program,
2995                                              GLint location,
2996                                              GLsizei bufSize,
2997                                              GLsizei *length,
2998                                              GLuint *params)
2999 {
3000     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3001     Context *context = GetValidGlobalContext();
3002     EVENT(context, GLGetUniformuivRobustANGLE,
3003           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
3004           ", params = 0x%016" PRIxPTR "",
3005           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
3006 
3007     if (context)
3008     {
3009         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
3010         UniformLocation locationPacked = PackParam<UniformLocation>(location);
3011         SCOPED_SHARE_CONTEXT_LOCK(context);
3012         bool isCallValid = (context->skipValidation() ||
3013                             ValidateGetUniformuivRobustANGLE(
3014                                 context, angle::EntryPoint::GLGetUniformuivRobustANGLE,
3015                                 programPacked, locationPacked, bufSize, length, params));
3016         if (isCallValid)
3017         {
3018             context->getUniformuivRobust(programPacked, locationPacked, bufSize, length, params);
3019         }
3020         ANGLE_CAPTURE_GL(GetUniformuivRobustANGLE, isCallValid, context, programPacked,
3021                          locationPacked, bufSize, length, params);
3022     }
3023     else
3024     {
3025         GenerateContextLostErrorOnCurrentGlobalContext();
3026     }
3027     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3028 }
3029 
GL_GetActiveUniformBlockivRobustANGLE(GLuint program,GLuint uniformBlockIndex,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3030 void GL_APIENTRY GL_GetActiveUniformBlockivRobustANGLE(GLuint program,
3031                                                        GLuint uniformBlockIndex,
3032                                                        GLenum pname,
3033                                                        GLsizei bufSize,
3034                                                        GLsizei *length,
3035                                                        GLint *params)
3036 {
3037     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3038     Context *context = GetValidGlobalContext();
3039     EVENT(context, GLGetActiveUniformBlockivRobustANGLE,
3040           "context = %d, program = %u, uniformBlockIndex = %u, pname = %s, bufSize = %d, length = "
3041           "0x%016" PRIxPTR ", params = 0x%016" PRIxPTR "",
3042           CID(context), program, uniformBlockIndex, GLenumToString(GLESEnum::AllEnums, pname),
3043           bufSize, (uintptr_t)length, (uintptr_t)params);
3044 
3045     if (context)
3046     {
3047         ShaderProgramID programPacked             = PackParam<ShaderProgramID>(program);
3048         UniformBlockIndex uniformBlockIndexPacked = PackParam<UniformBlockIndex>(uniformBlockIndex);
3049         SCOPED_SHARE_CONTEXT_LOCK(context);
3050         bool isCallValid =
3051             (context->skipValidation() ||
3052              ValidateGetActiveUniformBlockivRobustANGLE(
3053                  context, angle::EntryPoint::GLGetActiveUniformBlockivRobustANGLE, programPacked,
3054                  uniformBlockIndexPacked, pname, bufSize, length, params));
3055         if (isCallValid)
3056         {
3057             context->getActiveUniformBlockivRobust(programPacked, uniformBlockIndexPacked, pname,
3058                                                    bufSize, length, params);
3059         }
3060         ANGLE_CAPTURE_GL(GetActiveUniformBlockivRobustANGLE, isCallValid, context, programPacked,
3061                          uniformBlockIndexPacked, pname, bufSize, length, params);
3062     }
3063     else
3064     {
3065         GenerateContextLostErrorOnCurrentGlobalContext();
3066     }
3067     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3068 }
3069 
GL_GetInteger64vRobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,GLint64 * data)3070 void GL_APIENTRY GL_GetInteger64vRobustANGLE(GLenum pname,
3071                                              GLsizei bufSize,
3072                                              GLsizei *length,
3073                                              GLint64 *data)
3074 {
3075     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3076     Context *context = GetValidGlobalContext();
3077     EVENT(context, GLGetInteger64vRobustANGLE,
3078           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3079           ", data = 0x%016" PRIxPTR "",
3080           CID(context), GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length,
3081           (uintptr_t)data);
3082 
3083     if (context)
3084     {
3085         SCOPED_SHARE_CONTEXT_LOCK(context);
3086         bool isCallValid = (context->skipValidation() ||
3087                             ValidateGetInteger64vRobustANGLE(
3088                                 context, angle::EntryPoint::GLGetInteger64vRobustANGLE, pname,
3089                                 bufSize, length, data));
3090         if (isCallValid)
3091         {
3092             context->getInteger64vRobust(pname, bufSize, length, data);
3093         }
3094         ANGLE_CAPTURE_GL(GetInteger64vRobustANGLE, isCallValid, context, pname, bufSize, length,
3095                          data);
3096     }
3097     else
3098     {
3099         GenerateContextLostErrorOnCurrentGlobalContext();
3100     }
3101     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3102 }
3103 
GL_GetInteger64i_vRobustANGLE(GLenum target,GLuint index,GLsizei bufSize,GLsizei * length,GLint64 * data)3104 void GL_APIENTRY GL_GetInteger64i_vRobustANGLE(GLenum target,
3105                                                GLuint index,
3106                                                GLsizei bufSize,
3107                                                GLsizei *length,
3108                                                GLint64 *data)
3109 {
3110     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3111     Context *context = GetValidGlobalContext();
3112     EVENT(context, GLGetInteger64i_vRobustANGLE,
3113           "context = %d, target = %s, index = %u, bufSize = %d, length = 0x%016" PRIxPTR
3114           ", data = 0x%016" PRIxPTR "",
3115           CID(context), GLenumToString(GLESEnum::AllEnums, target), index, bufSize,
3116           (uintptr_t)length, (uintptr_t)data);
3117 
3118     if (context)
3119     {
3120         SCOPED_SHARE_CONTEXT_LOCK(context);
3121         bool isCallValid = (context->skipValidation() ||
3122                             ValidateGetInteger64i_vRobustANGLE(
3123                                 context, angle::EntryPoint::GLGetInteger64i_vRobustANGLE, target,
3124                                 index, bufSize, length, data));
3125         if (isCallValid)
3126         {
3127             context->getInteger64i_vRobust(target, index, bufSize, length, data);
3128         }
3129         ANGLE_CAPTURE_GL(GetInteger64i_vRobustANGLE, isCallValid, context, target, index, bufSize,
3130                          length, data);
3131     }
3132     else
3133     {
3134         GenerateContextLostErrorOnCurrentGlobalContext();
3135     }
3136     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3137 }
3138 
GL_GetBufferParameteri64vRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint64 * params)3139 void GL_APIENTRY GL_GetBufferParameteri64vRobustANGLE(GLenum target,
3140                                                       GLenum pname,
3141                                                       GLsizei bufSize,
3142                                                       GLsizei *length,
3143                                                       GLint64 *params)
3144 {
3145     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3146     Context *context = GetValidGlobalContext();
3147     EVENT(context, GLGetBufferParameteri64vRobustANGLE,
3148           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3149           ", params = 0x%016" PRIxPTR "",
3150           CID(context), GLenumToString(GLESEnum::AllEnums, target),
3151           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
3152 
3153     if (context)
3154     {
3155         BufferBinding targetPacked = PackParam<BufferBinding>(target);
3156         SCOPED_SHARE_CONTEXT_LOCK(context);
3157         bool isCallValid = (context->skipValidation() ||
3158                             ValidateGetBufferParameteri64vRobustANGLE(
3159                                 context, angle::EntryPoint::GLGetBufferParameteri64vRobustANGLE,
3160                                 targetPacked, pname, bufSize, length, params));
3161         if (isCallValid)
3162         {
3163             context->getBufferParameteri64vRobust(targetPacked, pname, bufSize, length, params);
3164         }
3165         ANGLE_CAPTURE_GL(GetBufferParameteri64vRobustANGLE, isCallValid, context, targetPacked,
3166                          pname, bufSize, length, params);
3167     }
3168     else
3169     {
3170         GenerateContextLostErrorOnCurrentGlobalContext();
3171     }
3172     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3173 }
3174 
GL_SamplerParameterivRobustANGLE(GLuint sampler,GLuint pname,GLsizei bufSize,const GLint * param)3175 void GL_APIENTRY GL_SamplerParameterivRobustANGLE(GLuint sampler,
3176                                                   GLuint pname,
3177                                                   GLsizei bufSize,
3178                                                   const GLint *param)
3179 {
3180     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3181     Context *context = GetValidGlobalContext();
3182     EVENT(context, GLSamplerParameterivRobustANGLE,
3183           "context = %d, sampler = %u, pname = %u, bufSize = %d, param = 0x%016" PRIxPTR "",
3184           CID(context), sampler, pname, bufSize, (uintptr_t)param);
3185 
3186     if (context)
3187     {
3188         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
3189         SCOPED_SHARE_CONTEXT_LOCK(context);
3190         bool isCallValid = (context->skipValidation() ||
3191                             ValidateSamplerParameterivRobustANGLE(
3192                                 context, angle::EntryPoint::GLSamplerParameterivRobustANGLE,
3193                                 samplerPacked, pname, bufSize, param));
3194         if (isCallValid)
3195         {
3196             context->samplerParameterivRobust(samplerPacked, pname, bufSize, param);
3197         }
3198         ANGLE_CAPTURE_GL(SamplerParameterivRobustANGLE, isCallValid, context, samplerPacked, pname,
3199                          bufSize, param);
3200     }
3201     else
3202     {
3203         GenerateContextLostErrorOnCurrentGlobalContext();
3204     }
3205     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3206 }
3207 
GL_SamplerParameterfvRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,const GLfloat * param)3208 void GL_APIENTRY GL_SamplerParameterfvRobustANGLE(GLuint sampler,
3209                                                   GLenum pname,
3210                                                   GLsizei bufSize,
3211                                                   const GLfloat *param)
3212 {
3213     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3214     Context *context = GetValidGlobalContext();
3215     EVENT(context, GLSamplerParameterfvRobustANGLE,
3216           "context = %d, sampler = %u, pname = %s, bufSize = %d, param = 0x%016" PRIxPTR "",
3217           CID(context), sampler, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
3218           (uintptr_t)param);
3219 
3220     if (context)
3221     {
3222         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
3223         SCOPED_SHARE_CONTEXT_LOCK(context);
3224         bool isCallValid = (context->skipValidation() ||
3225                             ValidateSamplerParameterfvRobustANGLE(
3226                                 context, angle::EntryPoint::GLSamplerParameterfvRobustANGLE,
3227                                 samplerPacked, pname, bufSize, param));
3228         if (isCallValid)
3229         {
3230             context->samplerParameterfvRobust(samplerPacked, pname, bufSize, param);
3231         }
3232         ANGLE_CAPTURE_GL(SamplerParameterfvRobustANGLE, isCallValid, context, samplerPacked, pname,
3233                          bufSize, param);
3234     }
3235     else
3236     {
3237         GenerateContextLostErrorOnCurrentGlobalContext();
3238     }
3239     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3240 }
3241 
GL_GetSamplerParameterivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3242 void GL_APIENTRY GL_GetSamplerParameterivRobustANGLE(GLuint sampler,
3243                                                      GLenum pname,
3244                                                      GLsizei bufSize,
3245                                                      GLsizei *length,
3246                                                      GLint *params)
3247 {
3248     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3249     Context *context = GetValidGlobalContext();
3250     EVENT(context, GLGetSamplerParameterivRobustANGLE,
3251           "context = %d, sampler = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3252           ", params = 0x%016" PRIxPTR "",
3253           CID(context), sampler, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
3254           (uintptr_t)length, (uintptr_t)params);
3255 
3256     if (context)
3257     {
3258         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
3259         SCOPED_SHARE_CONTEXT_LOCK(context);
3260         bool isCallValid = (context->skipValidation() ||
3261                             ValidateGetSamplerParameterivRobustANGLE(
3262                                 context, angle::EntryPoint::GLGetSamplerParameterivRobustANGLE,
3263                                 samplerPacked, pname, bufSize, length, params));
3264         if (isCallValid)
3265         {
3266             context->getSamplerParameterivRobust(samplerPacked, pname, bufSize, length, params);
3267         }
3268         ANGLE_CAPTURE_GL(GetSamplerParameterivRobustANGLE, isCallValid, context, samplerPacked,
3269                          pname, bufSize, length, params);
3270     }
3271     else
3272     {
3273         GenerateContextLostErrorOnCurrentGlobalContext();
3274     }
3275     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3276 }
3277 
GL_GetSamplerParameterfvRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)3278 void GL_APIENTRY GL_GetSamplerParameterfvRobustANGLE(GLuint sampler,
3279                                                      GLenum pname,
3280                                                      GLsizei bufSize,
3281                                                      GLsizei *length,
3282                                                      GLfloat *params)
3283 {
3284     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3285     Context *context = GetValidGlobalContext();
3286     EVENT(context, GLGetSamplerParameterfvRobustANGLE,
3287           "context = %d, sampler = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3288           ", params = 0x%016" PRIxPTR "",
3289           CID(context), sampler, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
3290           (uintptr_t)length, (uintptr_t)params);
3291 
3292     if (context)
3293     {
3294         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
3295         SCOPED_SHARE_CONTEXT_LOCK(context);
3296         bool isCallValid = (context->skipValidation() ||
3297                             ValidateGetSamplerParameterfvRobustANGLE(
3298                                 context, angle::EntryPoint::GLGetSamplerParameterfvRobustANGLE,
3299                                 samplerPacked, pname, bufSize, length, params));
3300         if (isCallValid)
3301         {
3302             context->getSamplerParameterfvRobust(samplerPacked, pname, bufSize, length, params);
3303         }
3304         ANGLE_CAPTURE_GL(GetSamplerParameterfvRobustANGLE, isCallValid, context, samplerPacked,
3305                          pname, bufSize, length, params);
3306     }
3307     else
3308     {
3309         GenerateContextLostErrorOnCurrentGlobalContext();
3310     }
3311     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3312 }
3313 
GL_GetFramebufferParameterivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3314 void GL_APIENTRY GL_GetFramebufferParameterivRobustANGLE(GLenum target,
3315                                                          GLenum pname,
3316                                                          GLsizei bufSize,
3317                                                          GLsizei *length,
3318                                                          GLint *params)
3319 {
3320     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3321     Context *context = GetValidGlobalContext();
3322     EVENT(context, GLGetFramebufferParameterivRobustANGLE,
3323           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3324           ", params = 0x%016" PRIxPTR "",
3325           CID(context), GLenumToString(GLESEnum::AllEnums, target),
3326           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
3327 
3328     if (context)
3329     {
3330         SCOPED_SHARE_CONTEXT_LOCK(context);
3331         bool isCallValid = (context->skipValidation() ||
3332                             ValidateGetFramebufferParameterivRobustANGLE(
3333                                 context, angle::EntryPoint::GLGetFramebufferParameterivRobustANGLE,
3334                                 target, pname, bufSize, length, params));
3335         if (isCallValid)
3336         {
3337             context->getFramebufferParameterivRobust(target, pname, bufSize, length, params);
3338         }
3339         ANGLE_CAPTURE_GL(GetFramebufferParameterivRobustANGLE, isCallValid, context, target, pname,
3340                          bufSize, length, params);
3341     }
3342     else
3343     {
3344         GenerateContextLostErrorOnCurrentGlobalContext();
3345     }
3346     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3347 }
3348 
GL_GetProgramInterfaceivRobustANGLE(GLuint program,GLenum programInterface,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3349 void GL_APIENTRY GL_GetProgramInterfaceivRobustANGLE(GLuint program,
3350                                                      GLenum programInterface,
3351                                                      GLenum pname,
3352                                                      GLsizei bufSize,
3353                                                      GLsizei *length,
3354                                                      GLint *params)
3355 {
3356     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3357     Context *context = GetValidGlobalContext();
3358     EVENT(context, GLGetProgramInterfaceivRobustANGLE,
3359           "context = %d, program = %u, programInterface = %s, pname = %s, bufSize = %d, length = "
3360           "0x%016" PRIxPTR ", params = 0x%016" PRIxPTR "",
3361           CID(context), program, GLenumToString(GLESEnum::AllEnums, programInterface),
3362           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
3363 
3364     if (context)
3365     {
3366         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
3367         SCOPED_SHARE_CONTEXT_LOCK(context);
3368         bool isCallValid = (context->skipValidation() ||
3369                             ValidateGetProgramInterfaceivRobustANGLE(
3370                                 context, angle::EntryPoint::GLGetProgramInterfaceivRobustANGLE,
3371                                 programPacked, programInterface, pname, bufSize, length, params));
3372         if (isCallValid)
3373         {
3374             context->getProgramInterfaceivRobust(programPacked, programInterface, pname, bufSize,
3375                                                  length, params);
3376         }
3377         ANGLE_CAPTURE_GL(GetProgramInterfaceivRobustANGLE, isCallValid, context, programPacked,
3378                          programInterface, pname, bufSize, length, params);
3379     }
3380     else
3381     {
3382         GenerateContextLostErrorOnCurrentGlobalContext();
3383     }
3384     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3385 }
3386 
GL_GetBooleani_vRobustANGLE(GLenum target,GLuint index,GLsizei bufSize,GLsizei * length,GLboolean * data)3387 void GL_APIENTRY GL_GetBooleani_vRobustANGLE(GLenum target,
3388                                              GLuint index,
3389                                              GLsizei bufSize,
3390                                              GLsizei *length,
3391                                              GLboolean *data)
3392 {
3393     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3394     Context *context = GetValidGlobalContext();
3395     EVENT(context, GLGetBooleani_vRobustANGLE,
3396           "context = %d, target = %s, index = %u, bufSize = %d, length = 0x%016" PRIxPTR
3397           ", data = 0x%016" PRIxPTR "",
3398           CID(context), GLenumToString(GLESEnum::AllEnums, target), index, bufSize,
3399           (uintptr_t)length, (uintptr_t)data);
3400 
3401     if (context)
3402     {
3403         SCOPED_SHARE_CONTEXT_LOCK(context);
3404         bool isCallValid = (context->skipValidation() ||
3405                             ValidateGetBooleani_vRobustANGLE(
3406                                 context, angle::EntryPoint::GLGetBooleani_vRobustANGLE, target,
3407                                 index, bufSize, length, data));
3408         if (isCallValid)
3409         {
3410             context->getBooleani_vRobust(target, index, bufSize, length, data);
3411         }
3412         ANGLE_CAPTURE_GL(GetBooleani_vRobustANGLE, isCallValid, context, target, index, bufSize,
3413                          length, data);
3414     }
3415     else
3416     {
3417         GenerateContextLostErrorOnCurrentGlobalContext();
3418     }
3419     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3420 }
3421 
GL_GetMultisamplefvRobustANGLE(GLenum pname,GLuint index,GLsizei bufSize,GLsizei * length,GLfloat * val)3422 void GL_APIENTRY GL_GetMultisamplefvRobustANGLE(GLenum pname,
3423                                                 GLuint index,
3424                                                 GLsizei bufSize,
3425                                                 GLsizei *length,
3426                                                 GLfloat *val)
3427 {
3428     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3429     Context *context = GetValidGlobalContext();
3430     EVENT(context, GLGetMultisamplefvRobustANGLE,
3431           "context = %d, pname = %s, index = %u, bufSize = %d, length = 0x%016" PRIxPTR
3432           ", val = 0x%016" PRIxPTR "",
3433           CID(context), GLenumToString(GLESEnum::AllEnums, pname), index, bufSize,
3434           (uintptr_t)length, (uintptr_t)val);
3435 
3436     if (context)
3437     {
3438         SCOPED_SHARE_CONTEXT_LOCK(context);
3439         bool isCallValid = (context->skipValidation() ||
3440                             ValidateGetMultisamplefvRobustANGLE(
3441                                 context, angle::EntryPoint::GLGetMultisamplefvRobustANGLE, pname,
3442                                 index, bufSize, length, val));
3443         if (isCallValid)
3444         {
3445             context->getMultisamplefvRobust(pname, index, bufSize, length, val);
3446         }
3447         ANGLE_CAPTURE_GL(GetMultisamplefvRobustANGLE, isCallValid, context, pname, index, bufSize,
3448                          length, val);
3449     }
3450     else
3451     {
3452         GenerateContextLostErrorOnCurrentGlobalContext();
3453     }
3454     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3455 }
3456 
GL_GetTexLevelParameterivRobustANGLE(GLenum target,GLint level,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3457 void GL_APIENTRY GL_GetTexLevelParameterivRobustANGLE(GLenum target,
3458                                                       GLint level,
3459                                                       GLenum pname,
3460                                                       GLsizei bufSize,
3461                                                       GLsizei *length,
3462                                                       GLint *params)
3463 {
3464     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3465     Context *context = GetValidGlobalContext();
3466     EVENT(context, GLGetTexLevelParameterivRobustANGLE,
3467           "context = %d, target = %s, level = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3468           ", params = 0x%016" PRIxPTR "",
3469           CID(context), GLenumToString(GLESEnum::AllEnums, target), level,
3470           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
3471 
3472     if (context)
3473     {
3474         TextureTarget targetPacked = PackParam<TextureTarget>(target);
3475         SCOPED_SHARE_CONTEXT_LOCK(context);
3476         bool isCallValid = (context->skipValidation() ||
3477                             ValidateGetTexLevelParameterivRobustANGLE(
3478                                 context, angle::EntryPoint::GLGetTexLevelParameterivRobustANGLE,
3479                                 targetPacked, level, pname, bufSize, length, params));
3480         if (isCallValid)
3481         {
3482             context->getTexLevelParameterivRobust(targetPacked, level, pname, bufSize, length,
3483                                                   params);
3484         }
3485         ANGLE_CAPTURE_GL(GetTexLevelParameterivRobustANGLE, isCallValid, context, targetPacked,
3486                          level, pname, bufSize, length, params);
3487     }
3488     else
3489     {
3490         GenerateContextLostErrorOnCurrentGlobalContext();
3491     }
3492     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3493 }
3494 
GL_GetTexLevelParameterfvRobustANGLE(GLenum target,GLint level,GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)3495 void GL_APIENTRY GL_GetTexLevelParameterfvRobustANGLE(GLenum target,
3496                                                       GLint level,
3497                                                       GLenum pname,
3498                                                       GLsizei bufSize,
3499                                                       GLsizei *length,
3500                                                       GLfloat *params)
3501 {
3502     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3503     Context *context = GetValidGlobalContext();
3504     EVENT(context, GLGetTexLevelParameterfvRobustANGLE,
3505           "context = %d, target = %s, level = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3506           ", params = 0x%016" PRIxPTR "",
3507           CID(context), GLenumToString(GLESEnum::AllEnums, target), level,
3508           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
3509 
3510     if (context)
3511     {
3512         TextureTarget targetPacked = PackParam<TextureTarget>(target);
3513         SCOPED_SHARE_CONTEXT_LOCK(context);
3514         bool isCallValid = (context->skipValidation() ||
3515                             ValidateGetTexLevelParameterfvRobustANGLE(
3516                                 context, angle::EntryPoint::GLGetTexLevelParameterfvRobustANGLE,
3517                                 targetPacked, level, pname, bufSize, length, params));
3518         if (isCallValid)
3519         {
3520             context->getTexLevelParameterfvRobust(targetPacked, level, pname, bufSize, length,
3521                                                   params);
3522         }
3523         ANGLE_CAPTURE_GL(GetTexLevelParameterfvRobustANGLE, isCallValid, context, targetPacked,
3524                          level, pname, bufSize, length, params);
3525     }
3526     else
3527     {
3528         GenerateContextLostErrorOnCurrentGlobalContext();
3529     }
3530     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3531 }
3532 
GL_GetPointervRobustANGLERobustANGLE(GLenum pname,GLsizei bufSize,GLsizei * length,void ** params)3533 void GL_APIENTRY GL_GetPointervRobustANGLERobustANGLE(GLenum pname,
3534                                                       GLsizei bufSize,
3535                                                       GLsizei *length,
3536                                                       void **params)
3537 {
3538     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3539     Context *context = GetValidGlobalContext();
3540     EVENT(context, GLGetPointervRobustANGLERobustANGLE,
3541           "context = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3542           ", params = 0x%016" PRIxPTR "",
3543           CID(context), GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length,
3544           (uintptr_t)params);
3545 
3546     if (context)
3547     {
3548         SCOPED_SHARE_CONTEXT_LOCK(context);
3549         bool isCallValid = (context->skipValidation() ||
3550                             ValidateGetPointervRobustANGLERobustANGLE(
3551                                 context, angle::EntryPoint::GLGetPointervRobustANGLERobustANGLE,
3552                                 pname, bufSize, length, params));
3553         if (isCallValid)
3554         {
3555             context->getPointervRobustANGLERobust(pname, bufSize, length, params);
3556         }
3557         ANGLE_CAPTURE_GL(GetPointervRobustANGLERobustANGLE, isCallValid, context, pname, bufSize,
3558                          length, params);
3559     }
3560     else
3561     {
3562         GenerateContextLostErrorOnCurrentGlobalContext();
3563     }
3564     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3565 }
3566 
GL_ReadnPixelsRobustANGLE(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLsizei bufSize,GLsizei * length,GLsizei * columns,GLsizei * rows,void * data)3567 void GL_APIENTRY GL_ReadnPixelsRobustANGLE(GLint x,
3568                                            GLint y,
3569                                            GLsizei width,
3570                                            GLsizei height,
3571                                            GLenum format,
3572                                            GLenum type,
3573                                            GLsizei bufSize,
3574                                            GLsizei *length,
3575                                            GLsizei *columns,
3576                                            GLsizei *rows,
3577                                            void *data)
3578 {
3579     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3580     Context *context = GetValidGlobalContext();
3581     EVENT(context, GLReadnPixelsRobustANGLE,
3582           "context = %d, x = %d, y = %d, width = %d, height = %d, format = %s, type = %s, bufSize "
3583           "= %d, length = 0x%016" PRIxPTR ", columns = 0x%016" PRIxPTR ", rows = 0x%016" PRIxPTR
3584           ", data = 0x%016" PRIxPTR "",
3585           CID(context), x, y, width, height, GLenumToString(GLESEnum::AllEnums, format),
3586           GLenumToString(GLESEnum::AllEnums, type), bufSize, (uintptr_t)length, (uintptr_t)columns,
3587           (uintptr_t)rows, (uintptr_t)data);
3588 
3589     if (context)
3590     {
3591         SCOPED_SHARE_CONTEXT_LOCK(context);
3592         bool isCallValid =
3593             (context->skipValidation() ||
3594              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
3595                                                 context->getMutableErrorSetForValidation(),
3596                                                 angle::EntryPoint::GLReadnPixelsRobustANGLE) &&
3597               ValidateReadnPixelsRobustANGLE(context, angle::EntryPoint::GLReadnPixelsRobustANGLE,
3598                                              x, y, width, height, format, type, bufSize, length,
3599                                              columns, rows, data)));
3600         if (isCallValid)
3601         {
3602             context->readnPixelsRobust(x, y, width, height, format, type, bufSize, length, columns,
3603                                        rows, data);
3604         }
3605         ANGLE_CAPTURE_GL(ReadnPixelsRobustANGLE, isCallValid, context, x, y, width, height, format,
3606                          type, bufSize, length, columns, rows, data);
3607     }
3608     else
3609     {
3610         GenerateContextLostErrorOnCurrentGlobalContext();
3611     }
3612     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3613 }
3614 
GL_GetnUniformfvRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLfloat * params)3615 void GL_APIENTRY GL_GetnUniformfvRobustANGLE(GLuint program,
3616                                              GLint location,
3617                                              GLsizei bufSize,
3618                                              GLsizei *length,
3619                                              GLfloat *params)
3620 {
3621     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3622     Context *context = GetValidGlobalContext();
3623     EVENT(context, GLGetnUniformfvRobustANGLE,
3624           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
3625           ", params = 0x%016" PRIxPTR "",
3626           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
3627 
3628     if (context)
3629     {
3630         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
3631         UniformLocation locationPacked = PackParam<UniformLocation>(location);
3632         SCOPED_SHARE_CONTEXT_LOCK(context);
3633         bool isCallValid = (context->skipValidation() ||
3634                             ValidateGetnUniformfvRobustANGLE(
3635                                 context, angle::EntryPoint::GLGetnUniformfvRobustANGLE,
3636                                 programPacked, locationPacked, bufSize, length, params));
3637         if (isCallValid)
3638         {
3639             context->getnUniformfvRobust(programPacked, locationPacked, bufSize, length, params);
3640         }
3641         ANGLE_CAPTURE_GL(GetnUniformfvRobustANGLE, isCallValid, context, programPacked,
3642                          locationPacked, bufSize, length, params);
3643     }
3644     else
3645     {
3646         GenerateContextLostErrorOnCurrentGlobalContext();
3647     }
3648     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3649 }
3650 
GL_GetnUniformivRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLint * params)3651 void GL_APIENTRY GL_GetnUniformivRobustANGLE(GLuint program,
3652                                              GLint location,
3653                                              GLsizei bufSize,
3654                                              GLsizei *length,
3655                                              GLint *params)
3656 {
3657     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3658     Context *context = GetValidGlobalContext();
3659     EVENT(context, GLGetnUniformivRobustANGLE,
3660           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
3661           ", params = 0x%016" PRIxPTR "",
3662           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
3663 
3664     if (context)
3665     {
3666         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
3667         UniformLocation locationPacked = PackParam<UniformLocation>(location);
3668         SCOPED_SHARE_CONTEXT_LOCK(context);
3669         bool isCallValid = (context->skipValidation() ||
3670                             ValidateGetnUniformivRobustANGLE(
3671                                 context, angle::EntryPoint::GLGetnUniformivRobustANGLE,
3672                                 programPacked, locationPacked, bufSize, length, params));
3673         if (isCallValid)
3674         {
3675             context->getnUniformivRobust(programPacked, locationPacked, bufSize, length, params);
3676         }
3677         ANGLE_CAPTURE_GL(GetnUniformivRobustANGLE, isCallValid, context, programPacked,
3678                          locationPacked, bufSize, length, params);
3679     }
3680     else
3681     {
3682         GenerateContextLostErrorOnCurrentGlobalContext();
3683     }
3684     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3685 }
3686 
GL_GetnUniformuivRobustANGLE(GLuint program,GLint location,GLsizei bufSize,GLsizei * length,GLuint * params)3687 void GL_APIENTRY GL_GetnUniformuivRobustANGLE(GLuint program,
3688                                               GLint location,
3689                                               GLsizei bufSize,
3690                                               GLsizei *length,
3691                                               GLuint *params)
3692 {
3693     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3694     Context *context = GetValidGlobalContext();
3695     EVENT(context, GLGetnUniformuivRobustANGLE,
3696           "context = %d, program = %u, location = %d, bufSize = %d, length = 0x%016" PRIxPTR
3697           ", params = 0x%016" PRIxPTR "",
3698           CID(context), program, location, bufSize, (uintptr_t)length, (uintptr_t)params);
3699 
3700     if (context)
3701     {
3702         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
3703         UniformLocation locationPacked = PackParam<UniformLocation>(location);
3704         SCOPED_SHARE_CONTEXT_LOCK(context);
3705         bool isCallValid = (context->skipValidation() ||
3706                             ValidateGetnUniformuivRobustANGLE(
3707                                 context, angle::EntryPoint::GLGetnUniformuivRobustANGLE,
3708                                 programPacked, locationPacked, bufSize, length, params));
3709         if (isCallValid)
3710         {
3711             context->getnUniformuivRobust(programPacked, locationPacked, bufSize, length, params);
3712         }
3713         ANGLE_CAPTURE_GL(GetnUniformuivRobustANGLE, isCallValid, context, programPacked,
3714                          locationPacked, bufSize, length, params);
3715     }
3716     else
3717     {
3718         GenerateContextLostErrorOnCurrentGlobalContext();
3719     }
3720     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3721 }
3722 
GL_TexParameterIivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,const GLint * params)3723 void GL_APIENTRY GL_TexParameterIivRobustANGLE(GLenum target,
3724                                                GLenum pname,
3725                                                GLsizei bufSize,
3726                                                const GLint *params)
3727 {
3728     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3729     Context *context = GetValidGlobalContext();
3730     EVENT(context, GLTexParameterIivRobustANGLE,
3731           "context = %d, target = %s, pname = %s, bufSize = %d, params = 0x%016" PRIxPTR "",
3732           CID(context), GLenumToString(GLESEnum::AllEnums, target),
3733           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)params);
3734 
3735     if (context)
3736     {
3737         TextureType targetPacked = PackParam<TextureType>(target);
3738         SCOPED_SHARE_CONTEXT_LOCK(context);
3739         bool isCallValid = (context->skipValidation() ||
3740                             ValidateTexParameterIivRobustANGLE(
3741                                 context, angle::EntryPoint::GLTexParameterIivRobustANGLE,
3742                                 targetPacked, pname, bufSize, params));
3743         if (isCallValid)
3744         {
3745             context->texParameterIivRobust(targetPacked, pname, bufSize, params);
3746         }
3747         ANGLE_CAPTURE_GL(TexParameterIivRobustANGLE, isCallValid, context, targetPacked, pname,
3748                          bufSize, params);
3749     }
3750     else
3751     {
3752         GenerateContextLostErrorOnCurrentGlobalContext();
3753     }
3754     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3755 }
3756 
GL_TexParameterIuivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,const GLuint * params)3757 void GL_APIENTRY GL_TexParameterIuivRobustANGLE(GLenum target,
3758                                                 GLenum pname,
3759                                                 GLsizei bufSize,
3760                                                 const GLuint *params)
3761 {
3762     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3763     Context *context = GetValidGlobalContext();
3764     EVENT(context, GLTexParameterIuivRobustANGLE,
3765           "context = %d, target = %s, pname = %s, bufSize = %d, params = 0x%016" PRIxPTR "",
3766           CID(context), GLenumToString(GLESEnum::AllEnums, target),
3767           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)params);
3768 
3769     if (context)
3770     {
3771         TextureType targetPacked = PackParam<TextureType>(target);
3772         SCOPED_SHARE_CONTEXT_LOCK(context);
3773         bool isCallValid = (context->skipValidation() ||
3774                             ValidateTexParameterIuivRobustANGLE(
3775                                 context, angle::EntryPoint::GLTexParameterIuivRobustANGLE,
3776                                 targetPacked, pname, bufSize, params));
3777         if (isCallValid)
3778         {
3779             context->texParameterIuivRobust(targetPacked, pname, bufSize, params);
3780         }
3781         ANGLE_CAPTURE_GL(TexParameterIuivRobustANGLE, isCallValid, context, targetPacked, pname,
3782                          bufSize, params);
3783     }
3784     else
3785     {
3786         GenerateContextLostErrorOnCurrentGlobalContext();
3787     }
3788     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3789 }
3790 
GL_GetTexParameterIivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3791 void GL_APIENTRY GL_GetTexParameterIivRobustANGLE(GLenum target,
3792                                                   GLenum pname,
3793                                                   GLsizei bufSize,
3794                                                   GLsizei *length,
3795                                                   GLint *params)
3796 {
3797     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3798     Context *context = GetValidGlobalContext();
3799     EVENT(context, GLGetTexParameterIivRobustANGLE,
3800           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3801           ", params = 0x%016" PRIxPTR "",
3802           CID(context), GLenumToString(GLESEnum::AllEnums, target),
3803           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
3804 
3805     if (context)
3806     {
3807         TextureType targetPacked = PackParam<TextureType>(target);
3808         SCOPED_SHARE_CONTEXT_LOCK(context);
3809         bool isCallValid = (context->skipValidation() ||
3810                             ValidateGetTexParameterIivRobustANGLE(
3811                                 context, angle::EntryPoint::GLGetTexParameterIivRobustANGLE,
3812                                 targetPacked, pname, bufSize, length, params));
3813         if (isCallValid)
3814         {
3815             context->getTexParameterIivRobust(targetPacked, pname, bufSize, length, params);
3816         }
3817         ANGLE_CAPTURE_GL(GetTexParameterIivRobustANGLE, isCallValid, context, targetPacked, pname,
3818                          bufSize, length, params);
3819     }
3820     else
3821     {
3822         GenerateContextLostErrorOnCurrentGlobalContext();
3823     }
3824     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3825 }
3826 
GL_GetTexParameterIuivRobustANGLE(GLenum target,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint * params)3827 void GL_APIENTRY GL_GetTexParameterIuivRobustANGLE(GLenum target,
3828                                                    GLenum pname,
3829                                                    GLsizei bufSize,
3830                                                    GLsizei *length,
3831                                                    GLuint *params)
3832 {
3833     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3834     Context *context = GetValidGlobalContext();
3835     EVENT(context, GLGetTexParameterIuivRobustANGLE,
3836           "context = %d, target = %s, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3837           ", params = 0x%016" PRIxPTR "",
3838           CID(context), GLenumToString(GLESEnum::AllEnums, target),
3839           GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length, (uintptr_t)params);
3840 
3841     if (context)
3842     {
3843         TextureType targetPacked = PackParam<TextureType>(target);
3844         SCOPED_SHARE_CONTEXT_LOCK(context);
3845         bool isCallValid = (context->skipValidation() ||
3846                             ValidateGetTexParameterIuivRobustANGLE(
3847                                 context, angle::EntryPoint::GLGetTexParameterIuivRobustANGLE,
3848                                 targetPacked, pname, bufSize, length, params));
3849         if (isCallValid)
3850         {
3851             context->getTexParameterIuivRobust(targetPacked, pname, bufSize, length, params);
3852         }
3853         ANGLE_CAPTURE_GL(GetTexParameterIuivRobustANGLE, isCallValid, context, targetPacked, pname,
3854                          bufSize, length, params);
3855     }
3856     else
3857     {
3858         GenerateContextLostErrorOnCurrentGlobalContext();
3859     }
3860     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3861 }
3862 
GL_SamplerParameterIivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,const GLint * param)3863 void GL_APIENTRY GL_SamplerParameterIivRobustANGLE(GLuint sampler,
3864                                                    GLenum pname,
3865                                                    GLsizei bufSize,
3866                                                    const GLint *param)
3867 {
3868     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3869     Context *context = GetValidGlobalContext();
3870     EVENT(context, GLSamplerParameterIivRobustANGLE,
3871           "context = %d, sampler = %u, pname = %s, bufSize = %d, param = 0x%016" PRIxPTR "",
3872           CID(context), sampler, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
3873           (uintptr_t)param);
3874 
3875     if (context)
3876     {
3877         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
3878         SCOPED_SHARE_CONTEXT_LOCK(context);
3879         bool isCallValid = (context->skipValidation() ||
3880                             ValidateSamplerParameterIivRobustANGLE(
3881                                 context, angle::EntryPoint::GLSamplerParameterIivRobustANGLE,
3882                                 samplerPacked, pname, bufSize, param));
3883         if (isCallValid)
3884         {
3885             context->samplerParameterIivRobust(samplerPacked, pname, bufSize, param);
3886         }
3887         ANGLE_CAPTURE_GL(SamplerParameterIivRobustANGLE, isCallValid, context, samplerPacked, pname,
3888                          bufSize, param);
3889     }
3890     else
3891     {
3892         GenerateContextLostErrorOnCurrentGlobalContext();
3893     }
3894     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3895 }
3896 
GL_SamplerParameterIuivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,const GLuint * param)3897 void GL_APIENTRY GL_SamplerParameterIuivRobustANGLE(GLuint sampler,
3898                                                     GLenum pname,
3899                                                     GLsizei bufSize,
3900                                                     const GLuint *param)
3901 {
3902     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3903     Context *context = GetValidGlobalContext();
3904     EVENT(context, GLSamplerParameterIuivRobustANGLE,
3905           "context = %d, sampler = %u, pname = %s, bufSize = %d, param = 0x%016" PRIxPTR "",
3906           CID(context), sampler, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
3907           (uintptr_t)param);
3908 
3909     if (context)
3910     {
3911         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
3912         SCOPED_SHARE_CONTEXT_LOCK(context);
3913         bool isCallValid = (context->skipValidation() ||
3914                             ValidateSamplerParameterIuivRobustANGLE(
3915                                 context, angle::EntryPoint::GLSamplerParameterIuivRobustANGLE,
3916                                 samplerPacked, pname, bufSize, param));
3917         if (isCallValid)
3918         {
3919             context->samplerParameterIuivRobust(samplerPacked, pname, bufSize, param);
3920         }
3921         ANGLE_CAPTURE_GL(SamplerParameterIuivRobustANGLE, isCallValid, context, samplerPacked,
3922                          pname, bufSize, param);
3923     }
3924     else
3925     {
3926         GenerateContextLostErrorOnCurrentGlobalContext();
3927     }
3928     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3929 }
3930 
GL_GetSamplerParameterIivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)3931 void GL_APIENTRY GL_GetSamplerParameterIivRobustANGLE(GLuint sampler,
3932                                                       GLenum pname,
3933                                                       GLsizei bufSize,
3934                                                       GLsizei *length,
3935                                                       GLint *params)
3936 {
3937     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3938     Context *context = GetValidGlobalContext();
3939     EVENT(context, GLGetSamplerParameterIivRobustANGLE,
3940           "context = %d, sampler = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3941           ", params = 0x%016" PRIxPTR "",
3942           CID(context), sampler, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
3943           (uintptr_t)length, (uintptr_t)params);
3944 
3945     if (context)
3946     {
3947         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
3948         SCOPED_SHARE_CONTEXT_LOCK(context);
3949         bool isCallValid = (context->skipValidation() ||
3950                             ValidateGetSamplerParameterIivRobustANGLE(
3951                                 context, angle::EntryPoint::GLGetSamplerParameterIivRobustANGLE,
3952                                 samplerPacked, pname, bufSize, length, params));
3953         if (isCallValid)
3954         {
3955             context->getSamplerParameterIivRobust(samplerPacked, pname, bufSize, length, params);
3956         }
3957         ANGLE_CAPTURE_GL(GetSamplerParameterIivRobustANGLE, isCallValid, context, samplerPacked,
3958                          pname, bufSize, length, params);
3959     }
3960     else
3961     {
3962         GenerateContextLostErrorOnCurrentGlobalContext();
3963     }
3964     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3965 }
3966 
GL_GetSamplerParameterIuivRobustANGLE(GLuint sampler,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint * params)3967 void GL_APIENTRY GL_GetSamplerParameterIuivRobustANGLE(GLuint sampler,
3968                                                        GLenum pname,
3969                                                        GLsizei bufSize,
3970                                                        GLsizei *length,
3971                                                        GLuint *params)
3972 {
3973     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
3974     Context *context = GetValidGlobalContext();
3975     EVENT(context, GLGetSamplerParameterIuivRobustANGLE,
3976           "context = %d, sampler = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
3977           ", params = 0x%016" PRIxPTR "",
3978           CID(context), sampler, GLenumToString(GLESEnum::AllEnums, pname), bufSize,
3979           (uintptr_t)length, (uintptr_t)params);
3980 
3981     if (context)
3982     {
3983         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
3984         SCOPED_SHARE_CONTEXT_LOCK(context);
3985         bool isCallValid = (context->skipValidation() ||
3986                             ValidateGetSamplerParameterIuivRobustANGLE(
3987                                 context, angle::EntryPoint::GLGetSamplerParameterIuivRobustANGLE,
3988                                 samplerPacked, pname, bufSize, length, params));
3989         if (isCallValid)
3990         {
3991             context->getSamplerParameterIuivRobust(samplerPacked, pname, bufSize, length, params);
3992         }
3993         ANGLE_CAPTURE_GL(GetSamplerParameterIuivRobustANGLE, isCallValid, context, samplerPacked,
3994                          pname, bufSize, length, params);
3995     }
3996     else
3997     {
3998         GenerateContextLostErrorOnCurrentGlobalContext();
3999     }
4000     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4001 }
4002 
GL_GetQueryObjectivRobustANGLE(GLuint id,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)4003 void GL_APIENTRY GL_GetQueryObjectivRobustANGLE(GLuint id,
4004                                                 GLenum pname,
4005                                                 GLsizei bufSize,
4006                                                 GLsizei *length,
4007                                                 GLint *params)
4008 {
4009     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4010     Context *context = GetGlobalContext();
4011     EVENT(context, GLGetQueryObjectivRobustANGLE,
4012           "context = %d, id = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
4013           ", params = 0x%016" PRIxPTR "",
4014           CID(context), id, GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length,
4015           (uintptr_t)params);
4016 
4017     if (context)
4018     {
4019         QueryID idPacked = PackParam<QueryID>(id);
4020         SCOPED_SHARE_CONTEXT_LOCK(context);
4021         bool isCallValid = (context->skipValidation() ||
4022                             ValidateGetQueryObjectivRobustANGLE(
4023                                 context, angle::EntryPoint::GLGetQueryObjectivRobustANGLE, idPacked,
4024                                 pname, bufSize, length, params));
4025         if (isCallValid)
4026         {
4027             context->getQueryObjectivRobust(idPacked, pname, bufSize, length, params);
4028         }
4029         ANGLE_CAPTURE_GL(GetQueryObjectivRobustANGLE, isCallValid, context, idPacked, pname,
4030                          bufSize, length, params);
4031     }
4032     else
4033     {
4034     }
4035     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4036 }
4037 
GL_GetQueryObjecti64vRobustANGLE(GLuint id,GLenum pname,GLsizei bufSize,GLsizei * length,GLint64 * params)4038 void GL_APIENTRY GL_GetQueryObjecti64vRobustANGLE(GLuint id,
4039                                                   GLenum pname,
4040                                                   GLsizei bufSize,
4041                                                   GLsizei *length,
4042                                                   GLint64 *params)
4043 {
4044     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4045     Context *context = GetGlobalContext();
4046     EVENT(context, GLGetQueryObjecti64vRobustANGLE,
4047           "context = %d, id = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
4048           ", params = 0x%016" PRIxPTR "",
4049           CID(context), id, GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length,
4050           (uintptr_t)params);
4051 
4052     if (context)
4053     {
4054         QueryID idPacked = PackParam<QueryID>(id);
4055         SCOPED_SHARE_CONTEXT_LOCK(context);
4056         bool isCallValid = (context->skipValidation() ||
4057                             ValidateGetQueryObjecti64vRobustANGLE(
4058                                 context, angle::EntryPoint::GLGetQueryObjecti64vRobustANGLE,
4059                                 idPacked, pname, bufSize, length, params));
4060         if (isCallValid)
4061         {
4062             context->getQueryObjecti64vRobust(idPacked, pname, bufSize, length, params);
4063         }
4064         ANGLE_CAPTURE_GL(GetQueryObjecti64vRobustANGLE, isCallValid, context, idPacked, pname,
4065                          bufSize, length, params);
4066     }
4067     else
4068     {
4069     }
4070     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4071 }
4072 
GL_GetQueryObjectui64vRobustANGLE(GLuint id,GLenum pname,GLsizei bufSize,GLsizei * length,GLuint64 * params)4073 void GL_APIENTRY GL_GetQueryObjectui64vRobustANGLE(GLuint id,
4074                                                    GLenum pname,
4075                                                    GLsizei bufSize,
4076                                                    GLsizei *length,
4077                                                    GLuint64 *params)
4078 {
4079     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4080     Context *context = GetValidGlobalContext();
4081     EVENT(context, GLGetQueryObjectui64vRobustANGLE,
4082           "context = %d, id = %u, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
4083           ", params = 0x%016" PRIxPTR "",
4084           CID(context), id, GLenumToString(GLESEnum::AllEnums, pname), bufSize, (uintptr_t)length,
4085           (uintptr_t)params);
4086 
4087     if (context)
4088     {
4089         QueryID idPacked = PackParam<QueryID>(id);
4090         SCOPED_SHARE_CONTEXT_LOCK(context);
4091         bool isCallValid = (context->skipValidation() ||
4092                             ValidateGetQueryObjectui64vRobustANGLE(
4093                                 context, angle::EntryPoint::GLGetQueryObjectui64vRobustANGLE,
4094                                 idPacked, pname, bufSize, length, params));
4095         if (isCallValid)
4096         {
4097             context->getQueryObjectui64vRobust(idPacked, pname, bufSize, length, params);
4098         }
4099         ANGLE_CAPTURE_GL(GetQueryObjectui64vRobustANGLE, isCallValid, context, idPacked, pname,
4100                          bufSize, length, params);
4101     }
4102     else
4103     {
4104         GenerateContextLostErrorOnCurrentGlobalContext();
4105     }
4106     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4107 }
4108 
4109 // GL_ANGLE_robust_fragment_shader_output
4110 
4111 // GL_ANGLE_robust_resource_initialization
4112 
4113 // GL_ANGLE_semaphore_fuchsia
GL_ImportSemaphoreZirconHandleANGLE(GLuint semaphore,GLenum handleType,GLuint handle)4114 void GL_APIENTRY GL_ImportSemaphoreZirconHandleANGLE(GLuint semaphore,
4115                                                      GLenum handleType,
4116                                                      GLuint handle)
4117 {
4118     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4119     Context *context = GetValidGlobalContext();
4120     EVENT(context, GLImportSemaphoreZirconHandleANGLE,
4121           "context = %d, semaphore = %u, handleType = %s, handle = %u", CID(context), semaphore,
4122           GLenumToString(GLESEnum::ExternalHandleType, handleType), handle);
4123 
4124     if (context)
4125     {
4126         SemaphoreID semaphorePacked = PackParam<SemaphoreID>(semaphore);
4127         HandleType handleTypePacked = PackParam<HandleType>(handleType);
4128         SCOPED_SHARE_CONTEXT_LOCK(context);
4129         bool isCallValid =
4130             (context->skipValidation() ||
4131              (ValidatePixelLocalStorageInactive(
4132                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
4133                   angle::EntryPoint::GLImportSemaphoreZirconHandleANGLE) &&
4134               ValidateImportSemaphoreZirconHandleANGLE(
4135                   context, angle::EntryPoint::GLImportSemaphoreZirconHandleANGLE, semaphorePacked,
4136                   handleTypePacked, handle)));
4137         if (isCallValid)
4138         {
4139             context->importSemaphoreZirconHandle(semaphorePacked, handleTypePacked, handle);
4140         }
4141         ANGLE_CAPTURE_GL(ImportSemaphoreZirconHandleANGLE, isCallValid, context, semaphorePacked,
4142                          handleTypePacked, handle);
4143     }
4144     else
4145     {
4146         GenerateContextLostErrorOnCurrentGlobalContext();
4147     }
4148     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4149 }
4150 
4151 // GL_ANGLE_shader_binary
4152 
4153 // GL_ANGLE_shader_pixel_local_storage
GL_FramebufferMemorylessPixelLocalStorageANGLE(GLint plane,GLenum internalformat)4154 void GL_APIENTRY GL_FramebufferMemorylessPixelLocalStorageANGLE(GLint plane, GLenum internalformat)
4155 {
4156     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4157     Context *context = GetValidGlobalContext();
4158     EVENT(context, GLFramebufferMemorylessPixelLocalStorageANGLE,
4159           "context = %d, plane = %d, internalformat = %s", CID(context), plane,
4160           GLenumToString(GLESEnum::AllEnums, internalformat));
4161 
4162     if (context)
4163     {
4164         SCOPED_SHARE_CONTEXT_LOCK(context);
4165         bool isCallValid =
4166             (context->skipValidation() ||
4167              ValidateFramebufferMemorylessPixelLocalStorageANGLE(
4168                  context, angle::EntryPoint::GLFramebufferMemorylessPixelLocalStorageANGLE, plane,
4169                  internalformat));
4170         if (isCallValid)
4171         {
4172             context->framebufferMemorylessPixelLocalStorage(plane, internalformat);
4173         }
4174         ANGLE_CAPTURE_GL(FramebufferMemorylessPixelLocalStorageANGLE, isCallValid, context, plane,
4175                          internalformat);
4176     }
4177     else
4178     {
4179         GenerateContextLostErrorOnCurrentGlobalContext();
4180     }
4181     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4182 }
4183 
GL_FramebufferTexturePixelLocalStorageANGLE(GLint plane,GLuint backingtexture,GLint level,GLint layer)4184 void GL_APIENTRY GL_FramebufferTexturePixelLocalStorageANGLE(GLint plane,
4185                                                              GLuint backingtexture,
4186                                                              GLint level,
4187                                                              GLint layer)
4188 {
4189     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4190     Context *context = GetValidGlobalContext();
4191     EVENT(context, GLFramebufferTexturePixelLocalStorageANGLE,
4192           "context = %d, plane = %d, backingtexture = %u, level = %d, layer = %d", CID(context),
4193           plane, backingtexture, level, layer);
4194 
4195     if (context)
4196     {
4197         TextureID backingtexturePacked = PackParam<TextureID>(backingtexture);
4198         SCOPED_SHARE_CONTEXT_LOCK(context);
4199         bool isCallValid =
4200             (context->skipValidation() ||
4201              ValidateFramebufferTexturePixelLocalStorageANGLE(
4202                  context, angle::EntryPoint::GLFramebufferTexturePixelLocalStorageANGLE, plane,
4203                  backingtexturePacked, level, layer));
4204         if (isCallValid)
4205         {
4206             context->framebufferTexturePixelLocalStorage(plane, backingtexturePacked, level, layer);
4207         }
4208         ANGLE_CAPTURE_GL(FramebufferTexturePixelLocalStorageANGLE, isCallValid, context, plane,
4209                          backingtexturePacked, level, layer);
4210     }
4211     else
4212     {
4213         GenerateContextLostErrorOnCurrentGlobalContext();
4214     }
4215     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4216 }
4217 
GL_FramebufferPixelLocalClearValuefvANGLE(GLint plane,const GLfloat * value)4218 void GL_APIENTRY GL_FramebufferPixelLocalClearValuefvANGLE(GLint plane, const GLfloat *value)
4219 {
4220     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4221     Context *context = GetValidGlobalContext();
4222     EVENT(context, GLFramebufferPixelLocalClearValuefvANGLE,
4223           "context = %d, plane = %d, value = 0x%016" PRIxPTR "", CID(context), plane,
4224           (uintptr_t)value);
4225 
4226     if (context)
4227     {
4228         SCOPED_SHARE_CONTEXT_LOCK(context);
4229         bool isCallValid =
4230             (context->skipValidation() ||
4231              (ValidatePixelLocalStorageInactive(
4232                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
4233                   angle::EntryPoint::GLFramebufferPixelLocalClearValuefvANGLE) &&
4234               ValidateFramebufferPixelLocalClearValuefvANGLE(
4235                   context, angle::EntryPoint::GLFramebufferPixelLocalClearValuefvANGLE, plane,
4236                   value)));
4237         if (isCallValid)
4238         {
4239             context->framebufferPixelLocalClearValuefv(plane, value);
4240         }
4241         ANGLE_CAPTURE_GL(FramebufferPixelLocalClearValuefvANGLE, isCallValid, context, plane,
4242                          value);
4243     }
4244     else
4245     {
4246         GenerateContextLostErrorOnCurrentGlobalContext();
4247     }
4248     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4249 }
4250 
GL_FramebufferPixelLocalClearValueivANGLE(GLint plane,const GLint * value)4251 void GL_APIENTRY GL_FramebufferPixelLocalClearValueivANGLE(GLint plane, const GLint *value)
4252 {
4253     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4254     Context *context = GetValidGlobalContext();
4255     EVENT(context, GLFramebufferPixelLocalClearValueivANGLE,
4256           "context = %d, plane = %d, value = 0x%016" PRIxPTR "", CID(context), plane,
4257           (uintptr_t)value);
4258 
4259     if (context)
4260     {
4261         SCOPED_SHARE_CONTEXT_LOCK(context);
4262         bool isCallValid =
4263             (context->skipValidation() ||
4264              (ValidatePixelLocalStorageInactive(
4265                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
4266                   angle::EntryPoint::GLFramebufferPixelLocalClearValueivANGLE) &&
4267               ValidateFramebufferPixelLocalClearValueivANGLE(
4268                   context, angle::EntryPoint::GLFramebufferPixelLocalClearValueivANGLE, plane,
4269                   value)));
4270         if (isCallValid)
4271         {
4272             context->framebufferPixelLocalClearValueiv(plane, value);
4273         }
4274         ANGLE_CAPTURE_GL(FramebufferPixelLocalClearValueivANGLE, isCallValid, context, plane,
4275                          value);
4276     }
4277     else
4278     {
4279         GenerateContextLostErrorOnCurrentGlobalContext();
4280     }
4281     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4282 }
4283 
GL_FramebufferPixelLocalClearValueuivANGLE(GLint plane,const GLuint * value)4284 void GL_APIENTRY GL_FramebufferPixelLocalClearValueuivANGLE(GLint plane, const GLuint *value)
4285 {
4286     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4287     Context *context = GetValidGlobalContext();
4288     EVENT(context, GLFramebufferPixelLocalClearValueuivANGLE,
4289           "context = %d, plane = %d, value = 0x%016" PRIxPTR "", CID(context), plane,
4290           (uintptr_t)value);
4291 
4292     if (context)
4293     {
4294         SCOPED_SHARE_CONTEXT_LOCK(context);
4295         bool isCallValid =
4296             (context->skipValidation() ||
4297              (ValidatePixelLocalStorageInactive(
4298                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
4299                   angle::EntryPoint::GLFramebufferPixelLocalClearValueuivANGLE) &&
4300               ValidateFramebufferPixelLocalClearValueuivANGLE(
4301                   context, angle::EntryPoint::GLFramebufferPixelLocalClearValueuivANGLE, plane,
4302                   value)));
4303         if (isCallValid)
4304         {
4305             context->framebufferPixelLocalClearValueuiv(plane, value);
4306         }
4307         ANGLE_CAPTURE_GL(FramebufferPixelLocalClearValueuivANGLE, isCallValid, context, plane,
4308                          value);
4309     }
4310     else
4311     {
4312         GenerateContextLostErrorOnCurrentGlobalContext();
4313     }
4314     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4315 }
4316 
GL_BeginPixelLocalStorageANGLE(GLsizei n,const GLenum * loadops)4317 void GL_APIENTRY GL_BeginPixelLocalStorageANGLE(GLsizei n, const GLenum *loadops)
4318 {
4319     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4320     Context *context = GetValidGlobalContext();
4321     EVENT(context, GLBeginPixelLocalStorageANGLE,
4322           "context = %d, n = %d, loadops = 0x%016" PRIxPTR "", CID(context), n, (uintptr_t)loadops);
4323 
4324     if (context)
4325     {
4326         SCOPED_SHARE_CONTEXT_LOCK(context);
4327         bool isCallValid =
4328             (context->skipValidation() ||
4329              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
4330                                                 context->getMutableErrorSetForValidation(),
4331                                                 angle::EntryPoint::GLBeginPixelLocalStorageANGLE) &&
4332               ValidateBeginPixelLocalStorageANGLE(
4333                   context, angle::EntryPoint::GLBeginPixelLocalStorageANGLE, n, loadops)));
4334         if (isCallValid)
4335         {
4336             context->beginPixelLocalStorage(n, loadops);
4337         }
4338         ANGLE_CAPTURE_GL(BeginPixelLocalStorageANGLE, isCallValid, context, n, loadops);
4339     }
4340     else
4341     {
4342         GenerateContextLostErrorOnCurrentGlobalContext();
4343     }
4344     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4345 }
4346 
GL_EndPixelLocalStorageANGLE(GLsizei n,const GLenum * storeops)4347 void GL_APIENTRY GL_EndPixelLocalStorageANGLE(GLsizei n, const GLenum *storeops)
4348 {
4349     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4350     Context *context = GetValidGlobalContext();
4351     EVENT(context, GLEndPixelLocalStorageANGLE,
4352           "context = %d, n = %d, storeops = 0x%016" PRIxPTR "", CID(context), n,
4353           (uintptr_t)storeops);
4354 
4355     if (context)
4356     {
4357         SCOPED_SHARE_CONTEXT_LOCK(context);
4358         bool isCallValid =
4359             (context->skipValidation() ||
4360              ValidateEndPixelLocalStorageANGLE(
4361                  context, angle::EntryPoint::GLEndPixelLocalStorageANGLE, n, storeops));
4362         if (isCallValid)
4363         {
4364             context->endPixelLocalStorage(n, storeops);
4365         }
4366         ANGLE_CAPTURE_GL(EndPixelLocalStorageANGLE, isCallValid, context, n, storeops);
4367     }
4368     else
4369     {
4370         GenerateContextLostErrorOnCurrentGlobalContext();
4371     }
4372     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4373 }
4374 
GL_PixelLocalStorageBarrierANGLE()4375 void GL_APIENTRY GL_PixelLocalStorageBarrierANGLE()
4376 {
4377     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4378     Context *context = GetValidGlobalContext();
4379     EVENT(context, GLPixelLocalStorageBarrierANGLE, "context = %d", CID(context));
4380 
4381     if (context)
4382     {
4383         SCOPED_SHARE_CONTEXT_LOCK(context);
4384         bool isCallValid = (context->skipValidation() ||
4385                             ValidatePixelLocalStorageBarrierANGLE(
4386                                 context, angle::EntryPoint::GLPixelLocalStorageBarrierANGLE));
4387         if (isCallValid)
4388         {
4389             context->pixelLocalStorageBarrier();
4390         }
4391         ANGLE_CAPTURE_GL(PixelLocalStorageBarrierANGLE, isCallValid, context);
4392     }
4393     else
4394     {
4395         GenerateContextLostErrorOnCurrentGlobalContext();
4396     }
4397     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4398 }
4399 
GL_FramebufferPixelLocalStorageInterruptANGLE()4400 void GL_APIENTRY GL_FramebufferPixelLocalStorageInterruptANGLE()
4401 {
4402     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4403     Context *context = GetValidGlobalContext();
4404     EVENT(context, GLFramebufferPixelLocalStorageInterruptANGLE, "context = %d", CID(context));
4405 
4406     if (context)
4407     {
4408         SCOPED_SHARE_CONTEXT_LOCK(context);
4409         bool isCallValid =
4410             (context->skipValidation() ||
4411              ValidateFramebufferPixelLocalStorageInterruptANGLE(
4412                  context, angle::EntryPoint::GLFramebufferPixelLocalStorageInterruptANGLE));
4413         if (isCallValid)
4414         {
4415             context->framebufferPixelLocalStorageInterrupt();
4416         }
4417         ANGLE_CAPTURE_GL(FramebufferPixelLocalStorageInterruptANGLE, isCallValid, context);
4418     }
4419     else
4420     {
4421         GenerateContextLostErrorOnCurrentGlobalContext();
4422     }
4423     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4424 }
4425 
GL_FramebufferPixelLocalStorageRestoreANGLE()4426 void GL_APIENTRY GL_FramebufferPixelLocalStorageRestoreANGLE()
4427 {
4428     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4429     Context *context = GetValidGlobalContext();
4430     EVENT(context, GLFramebufferPixelLocalStorageRestoreANGLE, "context = %d", CID(context));
4431 
4432     if (context)
4433     {
4434         SCOPED_SHARE_CONTEXT_LOCK(context);
4435         bool isCallValid =
4436             (context->skipValidation() ||
4437              (ValidatePixelLocalStorageInactive(
4438                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
4439                   angle::EntryPoint::GLFramebufferPixelLocalStorageRestoreANGLE) &&
4440               ValidateFramebufferPixelLocalStorageRestoreANGLE(
4441                   context, angle::EntryPoint::GLFramebufferPixelLocalStorageRestoreANGLE)));
4442         if (isCallValid)
4443         {
4444             context->framebufferPixelLocalStorageRestore();
4445         }
4446         ANGLE_CAPTURE_GL(FramebufferPixelLocalStorageRestoreANGLE, isCallValid, context);
4447     }
4448     else
4449     {
4450         GenerateContextLostErrorOnCurrentGlobalContext();
4451     }
4452     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4453 }
4454 
GL_GetFramebufferPixelLocalStorageParameterfvANGLE(GLint plane,GLenum pname,GLfloat * params)4455 void GL_APIENTRY GL_GetFramebufferPixelLocalStorageParameterfvANGLE(GLint plane,
4456                                                                     GLenum pname,
4457                                                                     GLfloat *params)
4458 {
4459     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4460     Context *context = GetValidGlobalContext();
4461     EVENT(context, GLGetFramebufferPixelLocalStorageParameterfvANGLE,
4462           "context = %d, plane = %d, pname = %s, params = 0x%016" PRIxPTR "", CID(context), plane,
4463           GLenumToString(GLESEnum::PLSQueryFloat, pname), (uintptr_t)params);
4464 
4465     if (context)
4466     {
4467         SCOPED_SHARE_CONTEXT_LOCK(context);
4468         bool isCallValid =
4469             (context->skipValidation() ||
4470              ValidateGetFramebufferPixelLocalStorageParameterfvANGLE(
4471                  context, angle::EntryPoint::GLGetFramebufferPixelLocalStorageParameterfvANGLE,
4472                  plane, pname, params));
4473         if (isCallValid)
4474         {
4475             context->getFramebufferPixelLocalStorageParameterfv(plane, pname, params);
4476         }
4477         ANGLE_CAPTURE_GL(GetFramebufferPixelLocalStorageParameterfvANGLE, isCallValid, context,
4478                          plane, pname, params);
4479     }
4480     else
4481     {
4482         GenerateContextLostErrorOnCurrentGlobalContext();
4483     }
4484     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4485 }
4486 
GL_GetFramebufferPixelLocalStorageParameterivANGLE(GLint plane,GLenum pname,GLint * params)4487 void GL_APIENTRY GL_GetFramebufferPixelLocalStorageParameterivANGLE(GLint plane,
4488                                                                     GLenum pname,
4489                                                                     GLint *params)
4490 {
4491     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4492     Context *context = GetValidGlobalContext();
4493     EVENT(context, GLGetFramebufferPixelLocalStorageParameterivANGLE,
4494           "context = %d, plane = %d, pname = %s, params = 0x%016" PRIxPTR "", CID(context), plane,
4495           GLenumToString(GLESEnum::PLSQueryInt, pname), (uintptr_t)params);
4496 
4497     if (context)
4498     {
4499         SCOPED_SHARE_CONTEXT_LOCK(context);
4500         bool isCallValid =
4501             (context->skipValidation() ||
4502              ValidateGetFramebufferPixelLocalStorageParameterivANGLE(
4503                  context, angle::EntryPoint::GLGetFramebufferPixelLocalStorageParameterivANGLE,
4504                  plane, pname, params));
4505         if (isCallValid)
4506         {
4507             context->getFramebufferPixelLocalStorageParameteriv(plane, pname, params);
4508         }
4509         ANGLE_CAPTURE_GL(GetFramebufferPixelLocalStorageParameterivANGLE, isCallValid, context,
4510                          plane, pname, params);
4511     }
4512     else
4513     {
4514         GenerateContextLostErrorOnCurrentGlobalContext();
4515     }
4516     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4517 }
4518 
GL_GetFramebufferPixelLocalStorageParameterfvRobustANGLE(GLint plane,GLenum pname,GLsizei bufSize,GLsizei * length,GLfloat * params)4519 void GL_APIENTRY GL_GetFramebufferPixelLocalStorageParameterfvRobustANGLE(GLint plane,
4520                                                                           GLenum pname,
4521                                                                           GLsizei bufSize,
4522                                                                           GLsizei *length,
4523                                                                           GLfloat *params)
4524 {
4525     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4526     Context *context = GetValidGlobalContext();
4527     EVENT(context, GLGetFramebufferPixelLocalStorageParameterfvRobustANGLE,
4528           "context = %d, plane = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
4529           ", params = 0x%016" PRIxPTR "",
4530           CID(context), plane, GLenumToString(GLESEnum::PLSQueryFloat, pname), bufSize,
4531           (uintptr_t)length, (uintptr_t)params);
4532 
4533     if (context)
4534     {
4535         SCOPED_SHARE_CONTEXT_LOCK(context);
4536         bool isCallValid =
4537             (context->skipValidation() ||
4538              ValidateGetFramebufferPixelLocalStorageParameterfvRobustANGLE(
4539                  context,
4540                  angle::EntryPoint::GLGetFramebufferPixelLocalStorageParameterfvRobustANGLE, plane,
4541                  pname, bufSize, length, params));
4542         if (isCallValid)
4543         {
4544             context->getFramebufferPixelLocalStorageParameterfvRobust(plane, pname, bufSize, length,
4545                                                                       params);
4546         }
4547         ANGLE_CAPTURE_GL(GetFramebufferPixelLocalStorageParameterfvRobustANGLE, isCallValid,
4548                          context, plane, pname, bufSize, length, params);
4549     }
4550     else
4551     {
4552         GenerateContextLostErrorOnCurrentGlobalContext();
4553     }
4554     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4555 }
4556 
GL_GetFramebufferPixelLocalStorageParameterivRobustANGLE(GLint plane,GLenum pname,GLsizei bufSize,GLsizei * length,GLint * params)4557 void GL_APIENTRY GL_GetFramebufferPixelLocalStorageParameterivRobustANGLE(GLint plane,
4558                                                                           GLenum pname,
4559                                                                           GLsizei bufSize,
4560                                                                           GLsizei *length,
4561                                                                           GLint *params)
4562 {
4563     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4564     Context *context = GetValidGlobalContext();
4565     EVENT(context, GLGetFramebufferPixelLocalStorageParameterivRobustANGLE,
4566           "context = %d, plane = %d, pname = %s, bufSize = %d, length = 0x%016" PRIxPTR
4567           ", params = 0x%016" PRIxPTR "",
4568           CID(context), plane, GLenumToString(GLESEnum::PLSQueryInt, pname), bufSize,
4569           (uintptr_t)length, (uintptr_t)params);
4570 
4571     if (context)
4572     {
4573         SCOPED_SHARE_CONTEXT_LOCK(context);
4574         bool isCallValid =
4575             (context->skipValidation() ||
4576              ValidateGetFramebufferPixelLocalStorageParameterivRobustANGLE(
4577                  context,
4578                  angle::EntryPoint::GLGetFramebufferPixelLocalStorageParameterivRobustANGLE, plane,
4579                  pname, bufSize, length, params));
4580         if (isCallValid)
4581         {
4582             context->getFramebufferPixelLocalStorageParameterivRobust(plane, pname, bufSize, length,
4583                                                                       params);
4584         }
4585         ANGLE_CAPTURE_GL(GetFramebufferPixelLocalStorageParameterivRobustANGLE, isCallValid,
4586                          context, plane, pname, bufSize, length, params);
4587     }
4588     else
4589     {
4590         GenerateContextLostErrorOnCurrentGlobalContext();
4591     }
4592     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4593 }
4594 
4595 // GL_ANGLE_stencil_texturing
4596 
4597 // GL_ANGLE_texture_compression_dxt3
4598 
4599 // GL_ANGLE_texture_compression_dxt5
4600 
4601 // GL_ANGLE_texture_external_update
GL_TexImage2DExternalANGLE(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type)4602 void GL_APIENTRY GL_TexImage2DExternalANGLE(GLenum target,
4603                                             GLint level,
4604                                             GLint internalformat,
4605                                             GLsizei width,
4606                                             GLsizei height,
4607                                             GLint border,
4608                                             GLenum format,
4609                                             GLenum type)
4610 {
4611     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4612     Context *context = GetValidGlobalContext();
4613     EVENT(context, GLTexImage2DExternalANGLE,
4614           "context = %d, target = %s, level = %d, internalformat = %d, width = %d, height = %d, "
4615           "border = %d, format = %s, type = %s",
4616           CID(context), GLenumToString(GLESEnum::TextureTarget, target), level, internalformat,
4617           width, height, border, GLenumToString(GLESEnum::PixelFormat, format),
4618           GLenumToString(GLESEnum::PixelType, type));
4619 
4620     if (context)
4621     {
4622         TextureTarget targetPacked = PackParam<TextureTarget>(target);
4623         SCOPED_SHARE_CONTEXT_LOCK(context);
4624         bool isCallValid =
4625             (context->skipValidation() ||
4626              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
4627                                                 context->getMutableErrorSetForValidation(),
4628                                                 angle::EntryPoint::GLTexImage2DExternalANGLE) &&
4629               ValidateTexImage2DExternalANGLE(context, angle::EntryPoint::GLTexImage2DExternalANGLE,
4630                                               targetPacked, level, internalformat, width, height,
4631                                               border, format, type)));
4632         if (isCallValid)
4633         {
4634             context->texImage2DExternal(targetPacked, level, internalformat, width, height, border,
4635                                         format, type);
4636         }
4637         ANGLE_CAPTURE_GL(TexImage2DExternalANGLE, isCallValid, context, targetPacked, level,
4638                          internalformat, width, height, border, format, type);
4639     }
4640     else
4641     {
4642         GenerateContextLostErrorOnCurrentGlobalContext();
4643     }
4644     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
4645 }
4646 
GL_InvalidateTextureANGLE(GLenum target)4647 void GL_APIENTRY GL_InvalidateTextureANGLE(GLenum target)
4648 {
4649     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4650     Context *context = GetValidGlobalContext();
4651     EVENT(context, GLInvalidateTextureANGLE, "context = %d, target = %s", CID(context),
4652           GLenumToString(GLESEnum::TextureTarget, target));
4653 
4654     if (context)
4655     {
4656         TextureType targetPacked = PackParam<TextureType>(target);
4657         SCOPED_SHARE_CONTEXT_LOCK(context);
4658         bool isCallValid =
4659             (context->skipValidation() ||
4660              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
4661                                                 context->getMutableErrorSetForValidation(),
4662                                                 angle::EntryPoint::GLInvalidateTextureANGLE) &&
4663               ValidateInvalidateTextureANGLE(context, angle::EntryPoint::GLInvalidateTextureANGLE,
4664                                              targetPacked)));
4665         if (isCallValid)
4666         {
4667             context->invalidateTexture(targetPacked);
4668         }
4669         ANGLE_CAPTURE_GL(InvalidateTextureANGLE, isCallValid, context, targetPacked);
4670     }
4671     else
4672     {
4673         GenerateContextLostErrorOnCurrentGlobalContext();
4674     }
4675     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4676 }
4677 
4678 // GL_ANGLE_texture_multisample
GL_TexStorage2DMultisampleANGLE(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height,GLboolean fixedsamplelocations)4679 void GL_APIENTRY GL_TexStorage2DMultisampleANGLE(GLenum target,
4680                                                  GLsizei samples,
4681                                                  GLenum internalformat,
4682                                                  GLsizei width,
4683                                                  GLsizei height,
4684                                                  GLboolean fixedsamplelocations)
4685 {
4686     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4687     Context *context = GetValidGlobalContext();
4688     EVENT(context, GLTexStorage2DMultisampleANGLE,
4689           "context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d, "
4690           "fixedsamplelocations = %s",
4691           CID(context), GLenumToString(GLESEnum::AllEnums, target), samples,
4692           GLenumToString(GLESEnum::AllEnums, internalformat), width, height,
4693           GLbooleanToString(fixedsamplelocations));
4694 
4695     if (context)
4696     {
4697         TextureType targetPacked = PackParam<TextureType>(target);
4698         SCOPED_SHARE_CONTEXT_LOCK(context);
4699         bool isCallValid =
4700             (context->skipValidation() ||
4701              (ValidatePixelLocalStorageInactive(
4702                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
4703                   angle::EntryPoint::GLTexStorage2DMultisampleANGLE) &&
4704               ValidateTexStorage2DMultisampleANGLE(
4705                   context, angle::EntryPoint::GLTexStorage2DMultisampleANGLE, targetPacked, samples,
4706                   internalformat, width, height, fixedsamplelocations)));
4707         if (isCallValid)
4708         {
4709             context->texStorage2DMultisample(targetPacked, samples, internalformat, width, height,
4710                                              fixedsamplelocations);
4711         }
4712         ANGLE_CAPTURE_GL(TexStorage2DMultisampleANGLE, isCallValid, context, targetPacked, samples,
4713                          internalformat, width, height, fixedsamplelocations);
4714     }
4715     else
4716     {
4717         GenerateContextLostErrorOnCurrentGlobalContext();
4718     }
4719     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4720 }
4721 
GL_GetMultisamplefvANGLE(GLenum pname,GLuint index,GLfloat * val)4722 void GL_APIENTRY GL_GetMultisamplefvANGLE(GLenum pname, GLuint index, GLfloat *val)
4723 {
4724     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4725     Context *context = GetValidGlobalContext();
4726     EVENT(context, GLGetMultisamplefvANGLE,
4727           "context = %d, pname = %s, index = %u, val = 0x%016" PRIxPTR "", CID(context),
4728           GLenumToString(GLESEnum::AllEnums, pname), index, (uintptr_t)val);
4729 
4730     if (context)
4731     {
4732         SCOPED_SHARE_CONTEXT_LOCK(context);
4733         bool isCallValid =
4734             (context->skipValidation() ||
4735              ValidateGetMultisamplefvANGLE(context, angle::EntryPoint::GLGetMultisamplefvANGLE,
4736                                            pname, index, val));
4737         if (isCallValid)
4738         {
4739             context->getMultisamplefv(pname, index, val);
4740         }
4741         ANGLE_CAPTURE_GL(GetMultisamplefvANGLE, isCallValid, context, pname, index, val);
4742     }
4743     else
4744     {
4745         GenerateContextLostErrorOnCurrentGlobalContext();
4746     }
4747     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4748 }
4749 
GL_SampleMaskiANGLE(GLuint maskNumber,GLbitfield mask)4750 void GL_APIENTRY GL_SampleMaskiANGLE(GLuint maskNumber, GLbitfield mask)
4751 {
4752     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4753     Context *context = GetValidGlobalContext();
4754     EVENT(context, GLSampleMaskiANGLE, "context = %d, maskNumber = %u, mask = %s", CID(context),
4755           maskNumber, GLbitfieldToString(GLESEnum::AllEnums, mask).c_str());
4756 
4757     if (context)
4758     {
4759         bool isCallValid =
4760             (context->skipValidation() ||
4761              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
4762                                                 context->getMutableErrorSetForValidation(),
4763                                                 angle::EntryPoint::GLSampleMaskiANGLE) &&
4764               ValidateSampleMaskiANGLE(context->getPrivateState(),
4765                                        context->getMutableErrorSetForValidation(),
4766                                        angle::EntryPoint::GLSampleMaskiANGLE, maskNumber, mask)));
4767         if (isCallValid)
4768         {
4769             ContextPrivateSampleMaski(context->getMutablePrivateState(),
4770                                       context->getMutablePrivateStateCache(), maskNumber, mask);
4771         }
4772         ANGLE_CAPTURE_GL(SampleMaskiANGLE, isCallValid, context, maskNumber, mask);
4773     }
4774     else
4775     {
4776         GenerateContextLostErrorOnCurrentGlobalContext();
4777     }
4778     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4779 }
4780 
4781 
4782 // GL_ANGLE_texture_usage
4783 
4784 // GL_ANGLE_translated_shader_source
GL_GetTranslatedShaderSourceANGLE(GLuint shader,GLsizei bufSize,GLsizei * length,GLchar * source)4785 void GL_APIENTRY GL_GetTranslatedShaderSourceANGLE(GLuint shader,
4786                                                    GLsizei bufSize,
4787                                                    GLsizei *length,
4788                                                    GLchar *source)
4789 {
4790     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4791     Context *context = GetValidGlobalContext();
4792     EVENT(context, GLGetTranslatedShaderSourceANGLE,
4793           "context = %d, shader = %u, bufSize = %d, length = 0x%016" PRIxPTR
4794           ", source = 0x%016" PRIxPTR "",
4795           CID(context), shader, bufSize, (uintptr_t)length, (uintptr_t)source);
4796 
4797     if (context)
4798     {
4799         ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);
4800         SCOPED_SHARE_CONTEXT_LOCK(context);
4801         bool isCallValid = (context->skipValidation() ||
4802                             ValidateGetTranslatedShaderSourceANGLE(
4803                                 context, angle::EntryPoint::GLGetTranslatedShaderSourceANGLE,
4804                                 shaderPacked, bufSize, length, source));
4805         if (isCallValid)
4806         {
4807             context->getTranslatedShaderSource(shaderPacked, bufSize, length, source);
4808         }
4809         ANGLE_CAPTURE_GL(GetTranslatedShaderSourceANGLE, isCallValid, context, shaderPacked,
4810                          bufSize, length, source);
4811     }
4812     else
4813     {
4814         GenerateContextLostErrorOnCurrentGlobalContext();
4815     }
4816     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4817 }
4818 
4819 // GL_ANGLE_vulkan_image
GL_AcquireTexturesANGLE(GLuint numTextures,const GLuint * textures,const GLenum * layouts)4820 void GL_APIENTRY GL_AcquireTexturesANGLE(GLuint numTextures,
4821                                          const GLuint *textures,
4822                                          const GLenum *layouts)
4823 {
4824     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4825     Context *context = GetValidGlobalContext();
4826     EVENT(context, GLAcquireTexturesANGLE,
4827           "context = %d, numTextures = %u, textures = 0x%016" PRIxPTR ", layouts = 0x%016" PRIxPTR
4828           "",
4829           CID(context), numTextures, (uintptr_t)textures, (uintptr_t)layouts);
4830 
4831     if (context)
4832     {
4833         const TextureID *texturesPacked = PackParam<const TextureID *>(textures);
4834         SCOPED_SHARE_CONTEXT_LOCK(context);
4835         bool isCallValid =
4836             (context->skipValidation() ||
4837              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
4838                                                 context->getMutableErrorSetForValidation(),
4839                                                 angle::EntryPoint::GLAcquireTexturesANGLE) &&
4840               ValidateAcquireTexturesANGLE(context, angle::EntryPoint::GLAcquireTexturesANGLE,
4841                                            numTextures, texturesPacked, layouts)));
4842         if (isCallValid)
4843         {
4844             context->acquireTextures(numTextures, texturesPacked, layouts);
4845         }
4846         ANGLE_CAPTURE_GL(AcquireTexturesANGLE, isCallValid, context, numTextures, texturesPacked,
4847                          layouts);
4848     }
4849     else
4850     {
4851         GenerateContextLostErrorOnCurrentGlobalContext();
4852     }
4853     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4854 }
4855 
GL_ReleaseTexturesANGLE(GLuint numTextures,const GLuint * textures,GLenum * layouts)4856 void GL_APIENTRY GL_ReleaseTexturesANGLE(GLuint numTextures,
4857                                          const GLuint *textures,
4858                                          GLenum *layouts)
4859 {
4860     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4861     Context *context = GetValidGlobalContext();
4862     EVENT(context, GLReleaseTexturesANGLE,
4863           "context = %d, numTextures = %u, textures = 0x%016" PRIxPTR ", layouts = 0x%016" PRIxPTR
4864           "",
4865           CID(context), numTextures, (uintptr_t)textures, (uintptr_t)layouts);
4866 
4867     if (context)
4868     {
4869         const TextureID *texturesPacked = PackParam<const TextureID *>(textures);
4870         SCOPED_SHARE_CONTEXT_LOCK(context);
4871         bool isCallValid =
4872             (context->skipValidation() ||
4873              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
4874                                                 context->getMutableErrorSetForValidation(),
4875                                                 angle::EntryPoint::GLReleaseTexturesANGLE) &&
4876               ValidateReleaseTexturesANGLE(context, angle::EntryPoint::GLReleaseTexturesANGLE,
4877                                            numTextures, texturesPacked, layouts)));
4878         if (isCallValid)
4879         {
4880             context->releaseTextures(numTextures, texturesPacked, layouts);
4881         }
4882         ANGLE_CAPTURE_GL(ReleaseTexturesANGLE, isCallValid, context, numTextures, texturesPacked,
4883                          layouts);
4884     }
4885     else
4886     {
4887         GenerateContextLostErrorOnCurrentGlobalContext();
4888     }
4889     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4890 }
4891 
4892 // GL_ANGLE_yuv_internal_format
4893 
4894 // GL_APPLE_clip_distance
4895 
4896 // GL_ARB_sync
4897 // ClientWaitSync is already defined.
4898 
4899 // DeleteSync is already defined.
4900 
4901 // FenceSync is already defined.
4902 
4903 // GetInteger64v is already defined.
4904 
4905 // GetSynciv is already defined.
4906 
4907 // IsSync is already defined.
4908 
4909 // WaitSync is already defined.
4910 
4911 // GL_ARM_rgba8
4912 
4913 // GL_ARM_shader_framebuffer_fetch
4914 
4915 // GL_ARM_shader_framebuffer_fetch_depth_stencil
4916 
4917 // GL_CHROMIUM_bind_uniform_location
GL_BindUniformLocationCHROMIUM(GLuint program,GLint location,const GLchar * name)4918 void GL_APIENTRY GL_BindUniformLocationCHROMIUM(GLuint program, GLint location, const GLchar *name)
4919 {
4920     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4921     Context *context = GetValidGlobalContext();
4922     EVENT(context, GLBindUniformLocationCHROMIUM,
4923           "context = %d, program = %u, location = %d, name = 0x%016" PRIxPTR "", CID(context),
4924           program, location, (uintptr_t)name);
4925 
4926     if (context)
4927     {
4928         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
4929         UniformLocation locationPacked = PackParam<UniformLocation>(location);
4930         SCOPED_SHARE_CONTEXT_LOCK(context);
4931         bool isCallValid =
4932             (context->skipValidation() ||
4933              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
4934                                                 context->getMutableErrorSetForValidation(),
4935                                                 angle::EntryPoint::GLBindUniformLocationCHROMIUM) &&
4936               ValidateBindUniformLocationCHROMIUM(context,
4937                                                   angle::EntryPoint::GLBindUniformLocationCHROMIUM,
4938                                                   programPacked, locationPacked, name)));
4939         if (isCallValid)
4940         {
4941             context->bindUniformLocation(programPacked, locationPacked, name);
4942         }
4943         ANGLE_CAPTURE_GL(BindUniformLocationCHROMIUM, isCallValid, context, programPacked,
4944                          locationPacked, name);
4945     }
4946     else
4947     {
4948         GenerateContextLostErrorOnCurrentGlobalContext();
4949     }
4950     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4951 }
4952 
4953 // GL_CHROMIUM_copy_compressed_texture
GL_CompressedCopyTextureCHROMIUM(GLuint sourceId,GLuint destId)4954 void GL_APIENTRY GL_CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId)
4955 {
4956     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4957     Context *context = GetValidGlobalContext();
4958     EVENT(context, GLCompressedCopyTextureCHROMIUM, "context = %d, sourceId = %u, destId = %u",
4959           CID(context), sourceId, destId);
4960 
4961     if (context)
4962     {
4963         TextureID sourceIdPacked = PackParam<TextureID>(sourceId);
4964         TextureID destIdPacked   = PackParam<TextureID>(destId);
4965         SCOPED_SHARE_CONTEXT_LOCK(context);
4966         bool isCallValid =
4967             (context->skipValidation() ||
4968              (ValidatePixelLocalStorageInactive(
4969                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
4970                   angle::EntryPoint::GLCompressedCopyTextureCHROMIUM) &&
4971               ValidateCompressedCopyTextureCHROMIUM(
4972                   context, angle::EntryPoint::GLCompressedCopyTextureCHROMIUM, sourceIdPacked,
4973                   destIdPacked)));
4974         if (isCallValid)
4975         {
4976             context->compressedCopyTexture(sourceIdPacked, destIdPacked);
4977         }
4978         ANGLE_CAPTURE_GL(CompressedCopyTextureCHROMIUM, isCallValid, context, sourceIdPacked,
4979                          destIdPacked);
4980     }
4981     else
4982     {
4983         GenerateContextLostErrorOnCurrentGlobalContext();
4984     }
4985     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
4986 }
4987 
4988 // 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)4989 void GL_APIENTRY GL_CopyTextureCHROMIUM(GLuint sourceId,
4990                                         GLint sourceLevel,
4991                                         GLenum destTarget,
4992                                         GLuint destId,
4993                                         GLint destLevel,
4994                                         GLint internalFormat,
4995                                         GLenum destType,
4996                                         GLboolean unpackFlipY,
4997                                         GLboolean unpackPremultiplyAlpha,
4998                                         GLboolean unpackUnmultiplyAlpha)
4999 {
5000     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5001     Context *context = GetValidGlobalContext();
5002     EVENT(context, GLCopyTextureCHROMIUM,
5003           "context = %d, sourceId = %u, sourceLevel = %d, destTarget = %s, destId = %u, destLevel "
5004           "= %d, internalFormat = %d, destType = %s, unpackFlipY = %s, unpackPremultiplyAlpha = "
5005           "%s, unpackUnmultiplyAlpha = %s",
5006           CID(context), sourceId, sourceLevel, GLenumToString(GLESEnum::AllEnums, destTarget),
5007           destId, destLevel, internalFormat, GLenumToString(GLESEnum::AllEnums, destType),
5008           GLbooleanToString(unpackFlipY), GLbooleanToString(unpackPremultiplyAlpha),
5009           GLbooleanToString(unpackUnmultiplyAlpha));
5010 
5011     if (context)
5012     {
5013         TextureID sourceIdPacked       = PackParam<TextureID>(sourceId);
5014         TextureTarget destTargetPacked = PackParam<TextureTarget>(destTarget);
5015         TextureID destIdPacked         = PackParam<TextureID>(destId);
5016         SCOPED_SHARE_CONTEXT_LOCK(context);
5017         bool isCallValid =
5018             (context->skipValidation() ||
5019              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5020                                                 context->getMutableErrorSetForValidation(),
5021                                                 angle::EntryPoint::GLCopyTextureCHROMIUM) &&
5022               ValidateCopyTextureCHROMIUM(
5023                   context, angle::EntryPoint::GLCopyTextureCHROMIUM, sourceIdPacked, sourceLevel,
5024                   destTargetPacked, destIdPacked, destLevel, internalFormat, destType, unpackFlipY,
5025                   unpackPremultiplyAlpha, unpackUnmultiplyAlpha)));
5026         if (isCallValid)
5027         {
5028             context->copyTexture(sourceIdPacked, sourceLevel, destTargetPacked, destIdPacked,
5029                                  destLevel, internalFormat, destType, unpackFlipY,
5030                                  unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
5031         }
5032         ANGLE_CAPTURE_GL(CopyTextureCHROMIUM, isCallValid, context, sourceIdPacked, sourceLevel,
5033                          destTargetPacked, destIdPacked, destLevel, internalFormat, destType,
5034                          unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
5035     }
5036     else
5037     {
5038         GenerateContextLostErrorOnCurrentGlobalContext();
5039     }
5040     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5041 }
5042 
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)5043 void GL_APIENTRY GL_CopySubTextureCHROMIUM(GLuint sourceId,
5044                                            GLint sourceLevel,
5045                                            GLenum destTarget,
5046                                            GLuint destId,
5047                                            GLint destLevel,
5048                                            GLint xoffset,
5049                                            GLint yoffset,
5050                                            GLint x,
5051                                            GLint y,
5052                                            GLint width,
5053                                            GLint height,
5054                                            GLboolean unpackFlipY,
5055                                            GLboolean unpackPremultiplyAlpha,
5056                                            GLboolean unpackUnmultiplyAlpha)
5057 {
5058     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5059     Context *context = GetValidGlobalContext();
5060     EVENT(context, GLCopySubTextureCHROMIUM,
5061           "context = %d, sourceId = %u, sourceLevel = %d, destTarget = %s, destId = %u, destLevel "
5062           "= %d, xoffset = %d, yoffset = %d, x = %d, y = %d, width = %d, height = %d, unpackFlipY "
5063           "= %s, unpackPremultiplyAlpha = %s, unpackUnmultiplyAlpha = %s",
5064           CID(context), sourceId, sourceLevel, GLenumToString(GLESEnum::AllEnums, destTarget),
5065           destId, destLevel, xoffset, yoffset, x, y, width, height, GLbooleanToString(unpackFlipY),
5066           GLbooleanToString(unpackPremultiplyAlpha), GLbooleanToString(unpackUnmultiplyAlpha));
5067 
5068     if (context)
5069     {
5070         TextureID sourceIdPacked       = PackParam<TextureID>(sourceId);
5071         TextureTarget destTargetPacked = PackParam<TextureTarget>(destTarget);
5072         TextureID destIdPacked         = PackParam<TextureID>(destId);
5073         SCOPED_SHARE_CONTEXT_LOCK(context);
5074         bool isCallValid =
5075             (context->skipValidation() ||
5076              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5077                                                 context->getMutableErrorSetForValidation(),
5078                                                 angle::EntryPoint::GLCopySubTextureCHROMIUM) &&
5079               ValidateCopySubTextureCHROMIUM(
5080                   context, angle::EntryPoint::GLCopySubTextureCHROMIUM, sourceIdPacked, sourceLevel,
5081                   destTargetPacked, destIdPacked, destLevel, xoffset, yoffset, x, y, width, height,
5082                   unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha)));
5083         if (isCallValid)
5084         {
5085             context->copySubTexture(sourceIdPacked, sourceLevel, destTargetPacked, destIdPacked,
5086                                     destLevel, xoffset, yoffset, x, y, width, height, unpackFlipY,
5087                                     unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
5088         }
5089         ANGLE_CAPTURE_GL(CopySubTextureCHROMIUM, isCallValid, context, sourceIdPacked, sourceLevel,
5090                          destTargetPacked, destIdPacked, destLevel, xoffset, yoffset, x, y, width,
5091                          height, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
5092     }
5093     else
5094     {
5095         GenerateContextLostErrorOnCurrentGlobalContext();
5096     }
5097     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5098 }
5099 
5100 // GL_CHROMIUM_framebuffer_mixed_samples
GL_CoverageModulationCHROMIUM(GLenum components)5101 void GL_APIENTRY GL_CoverageModulationCHROMIUM(GLenum components)
5102 {
5103     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5104     Context *context = GetValidGlobalContext();
5105     EVENT(context, GLCoverageModulationCHROMIUM, "context = %d, components = %s", CID(context),
5106           GLenumToString(GLESEnum::AllEnums, components));
5107 
5108     if (context)
5109     {
5110         bool isCallValid =
5111             (context->skipValidation() ||
5112              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5113                                                 context->getMutableErrorSetForValidation(),
5114                                                 angle::EntryPoint::GLCoverageModulationCHROMIUM) &&
5115               ValidateCoverageModulationCHROMIUM(
5116                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
5117                   angle::EntryPoint::GLCoverageModulationCHROMIUM, components)));
5118         if (isCallValid)
5119         {
5120             ContextPrivateCoverageModulation(context->getMutablePrivateState(),
5121                                              context->getMutablePrivateStateCache(), components);
5122         }
5123         ANGLE_CAPTURE_GL(CoverageModulationCHROMIUM, isCallValid, context, components);
5124     }
5125     else
5126     {
5127         GenerateContextLostErrorOnCurrentGlobalContext();
5128     }
5129     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5130 }
5131 
5132 // GL_CHROMIUM_lose_context
GL_LoseContextCHROMIUM(GLenum current,GLenum other)5133 void GL_APIENTRY GL_LoseContextCHROMIUM(GLenum current, GLenum other)
5134 {
5135     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5136     Context *context = GetValidGlobalContext();
5137     EVENT(context, GLLoseContextCHROMIUM, "context = %d, current = %s, other = %s", CID(context),
5138           GLenumToString(GLESEnum::GraphicsResetStatus, current),
5139           GLenumToString(GLESEnum::GraphicsResetStatus, other));
5140 
5141     if (context)
5142     {
5143         GraphicsResetStatus currentPacked = PackParam<GraphicsResetStatus>(current);
5144         GraphicsResetStatus otherPacked   = PackParam<GraphicsResetStatus>(other);
5145         SCOPED_SHARE_CONTEXT_LOCK(context);
5146         bool isCallValid =
5147             (context->skipValidation() ||
5148              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5149                                                 context->getMutableErrorSetForValidation(),
5150                                                 angle::EntryPoint::GLLoseContextCHROMIUM) &&
5151               ValidateLoseContextCHROMIUM(context, angle::EntryPoint::GLLoseContextCHROMIUM,
5152                                           currentPacked, otherPacked)));
5153         if (isCallValid)
5154         {
5155             context->loseContext(currentPacked, otherPacked);
5156         }
5157         ANGLE_CAPTURE_GL(LoseContextCHROMIUM, isCallValid, context, currentPacked, otherPacked);
5158     }
5159     else
5160     {
5161         GenerateContextLostErrorOnCurrentGlobalContext();
5162     }
5163     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5164 }
5165 
5166 // GL_EXT_EGL_image_array
5167 
5168 // GL_EXT_EGL_image_storage
GL_EGLImageTargetTexStorageEXT(GLenum target,GLeglImageOES image,const GLint * attrib_list)5169 void GL_APIENTRY GL_EGLImageTargetTexStorageEXT(GLenum target,
5170                                                 GLeglImageOES image,
5171                                                 const GLint *attrib_list)
5172 {
5173     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5174     Context *context = GetValidGlobalContext();
5175     EVENT(context, GLEGLImageTargetTexStorageEXT,
5176           "context = %d, target = %s, image = 0x%016" PRIxPTR ", attrib_list = 0x%016" PRIxPTR "",
5177           CID(context), GLenumToString(GLESEnum::AllEnums, target), (uintptr_t)image,
5178           (uintptr_t)attrib_list);
5179 
5180     if (context)
5181     {
5182         egl::ImageID imagePacked = PackParam<egl::ImageID>(image);
5183         SCOPED_EGL_IMAGE_SHARE_CONTEXT_LOCK(context, imagePacked);
5184         bool isCallValid =
5185             (context->skipValidation() ||
5186              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5187                                                 context->getMutableErrorSetForValidation(),
5188                                                 angle::EntryPoint::GLEGLImageTargetTexStorageEXT) &&
5189               ValidateEGLImageTargetTexStorageEXT(context,
5190                                                   angle::EntryPoint::GLEGLImageTargetTexStorageEXT,
5191                                                   target, imagePacked, attrib_list)));
5192         if (isCallValid)
5193         {
5194             context->eGLImageTargetTexStorage(target, imagePacked, attrib_list);
5195         }
5196         ANGLE_CAPTURE_GL(EGLImageTargetTexStorageEXT, isCallValid, context, target, imagePacked,
5197                          attrib_list);
5198     }
5199     else
5200     {
5201         GenerateContextLostErrorOnCurrentGlobalContext();
5202     }
5203     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5204 }
5205 
GL_EGLImageTargetTextureStorageEXT(GLuint texture,GLeglImageOES image,const GLint * attrib_list)5206 void GL_APIENTRY GL_EGLImageTargetTextureStorageEXT(GLuint texture,
5207                                                     GLeglImageOES image,
5208                                                     const GLint *attrib_list)
5209 {
5210     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5211     Context *context = GetValidGlobalContext();
5212     EVENT(context, GLEGLImageTargetTextureStorageEXT,
5213           "context = %d, texture = %u, image = 0x%016" PRIxPTR ", attrib_list = 0x%016" PRIxPTR "",
5214           CID(context), texture, (uintptr_t)image, (uintptr_t)attrib_list);
5215 
5216     if (context)
5217     {
5218         egl::ImageID imagePacked = PackParam<egl::ImageID>(image);
5219         SCOPED_EGL_IMAGE_SHARE_CONTEXT_LOCK(context, imagePacked);
5220         bool isCallValid =
5221             (context->skipValidation() ||
5222              (ValidatePixelLocalStorageInactive(
5223                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
5224                   angle::EntryPoint::GLEGLImageTargetTextureStorageEXT) &&
5225               ValidateEGLImageTargetTextureStorageEXT(
5226                   context, angle::EntryPoint::GLEGLImageTargetTextureStorageEXT, texture,
5227                   imagePacked, attrib_list)));
5228         if (isCallValid)
5229         {
5230             context->eGLImageTargetTextureStorage(texture, imagePacked, attrib_list);
5231         }
5232         ANGLE_CAPTURE_GL(EGLImageTargetTextureStorageEXT, isCallValid, context, texture,
5233                          imagePacked, attrib_list);
5234     }
5235     else
5236     {
5237         GenerateContextLostErrorOnCurrentGlobalContext();
5238     }
5239     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5240 }
5241 
5242 // GL_EXT_EGL_image_storage_compression
5243 
5244 // GL_EXT_YUV_target
5245 
5246 // GL_EXT_base_instance
GL_DrawArraysInstancedBaseInstanceEXT(GLenum mode,GLint first,GLsizei count,GLsizei instancecount,GLuint baseinstance)5247 void GL_APIENTRY GL_DrawArraysInstancedBaseInstanceEXT(GLenum mode,
5248                                                        GLint first,
5249                                                        GLsizei count,
5250                                                        GLsizei instancecount,
5251                                                        GLuint baseinstance)
5252 {
5253     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5254     Context *context = GetValidGlobalContext();
5255     EVENT(context, GLDrawArraysInstancedBaseInstanceEXT,
5256           "context = %d, mode = %s, first = %d, count = %d, instancecount = %d, baseinstance = %u",
5257           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), first, count, instancecount,
5258           baseinstance);
5259 
5260     if (context)
5261     {
5262         PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);
5263         SCOPED_SHARE_CONTEXT_LOCK(context);
5264         bool isCallValid = (context->skipValidation() ||
5265                             ValidateDrawArraysInstancedBaseInstanceEXT(
5266                                 context, angle::EntryPoint::GLDrawArraysInstancedBaseInstanceEXT,
5267                                 modePacked, first, count, instancecount, baseinstance));
5268         if (isCallValid)
5269         {
5270             context->drawArraysInstancedBaseInstance(modePacked, first, count, instancecount,
5271                                                      baseinstance);
5272         }
5273         ANGLE_CAPTURE_GL(DrawArraysInstancedBaseInstanceEXT, isCallValid, context, modePacked,
5274                          first, count, instancecount, baseinstance);
5275     }
5276     else
5277     {
5278         GenerateContextLostErrorOnCurrentGlobalContext();
5279     }
5280     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5281 }
5282 
GL_DrawElementsInstancedBaseInstanceEXT(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei instancecount,GLuint baseinstance)5283 void GL_APIENTRY GL_DrawElementsInstancedBaseInstanceEXT(GLenum mode,
5284                                                          GLsizei count,
5285                                                          GLenum type,
5286                                                          const void *indices,
5287                                                          GLsizei instancecount,
5288                                                          GLuint baseinstance)
5289 {
5290     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5291     Context *context = GetValidGlobalContext();
5292     EVENT(context, GLDrawElementsInstancedBaseInstanceEXT,
5293           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
5294           ", instancecount = %d, baseinstance = %u",
5295           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), count,
5296           GLenumToString(GLESEnum::PrimitiveType, type), (uintptr_t)indices, instancecount,
5297           baseinstance);
5298 
5299     if (context)
5300     {
5301         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
5302         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
5303         SCOPED_SHARE_CONTEXT_LOCK(context);
5304         bool isCallValid =
5305             (context->skipValidation() ||
5306              ValidateDrawElementsInstancedBaseInstanceEXT(
5307                  context, angle::EntryPoint::GLDrawElementsInstancedBaseInstanceEXT, modePacked,
5308                  count, typePacked, indices, instancecount, baseinstance));
5309         if (isCallValid)
5310         {
5311             context->drawElementsInstancedBaseInstance(modePacked, count, typePacked, indices,
5312                                                        instancecount, baseinstance);
5313         }
5314         ANGLE_CAPTURE_GL(DrawElementsInstancedBaseInstanceEXT, isCallValid, context, modePacked,
5315                          count, typePacked, indices, instancecount, baseinstance);
5316     }
5317     else
5318     {
5319         GenerateContextLostErrorOnCurrentGlobalContext();
5320     }
5321     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5322 }
5323 
GL_DrawElementsInstancedBaseVertexBaseInstanceEXT(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei instancecount,GLint basevertex,GLuint baseinstance)5324 void GL_APIENTRY GL_DrawElementsInstancedBaseVertexBaseInstanceEXT(GLenum mode,
5325                                                                    GLsizei count,
5326                                                                    GLenum type,
5327                                                                    const void *indices,
5328                                                                    GLsizei instancecount,
5329                                                                    GLint basevertex,
5330                                                                    GLuint baseinstance)
5331 {
5332     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5333     Context *context = GetValidGlobalContext();
5334     EVENT(context, GLDrawElementsInstancedBaseVertexBaseInstanceEXT,
5335           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
5336           ", instancecount = %d, basevertex = %d, baseinstance = %u",
5337           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), count,
5338           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, instancecount,
5339           basevertex, baseinstance);
5340 
5341     if (context)
5342     {
5343         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
5344         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
5345         SCOPED_SHARE_CONTEXT_LOCK(context);
5346         bool isCallValid =
5347             (context->skipValidation() ||
5348              ValidateDrawElementsInstancedBaseVertexBaseInstanceEXT(
5349                  context, angle::EntryPoint::GLDrawElementsInstancedBaseVertexBaseInstanceEXT,
5350                  modePacked, count, typePacked, indices, instancecount, basevertex, baseinstance));
5351         if (isCallValid)
5352         {
5353             context->drawElementsInstancedBaseVertexBaseInstance(
5354                 modePacked, count, typePacked, indices, instancecount, basevertex, baseinstance);
5355         }
5356         ANGLE_CAPTURE_GL(DrawElementsInstancedBaseVertexBaseInstanceEXT, isCallValid, context,
5357                          modePacked, count, typePacked, indices, instancecount, basevertex,
5358                          baseinstance);
5359     }
5360     else
5361     {
5362         GenerateContextLostErrorOnCurrentGlobalContext();
5363     }
5364     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5365 }
5366 
5367 // GL_EXT_blend_func_extended
GL_BindFragDataLocationEXT(GLuint program,GLuint color,const GLchar * name)5368 void GL_APIENTRY GL_BindFragDataLocationEXT(GLuint program, GLuint color, const GLchar *name)
5369 {
5370     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5371     Context *context = GetValidGlobalContext();
5372     EVENT(context, GLBindFragDataLocationEXT,
5373           "context = %d, program = %u, color = %u, name = 0x%016" PRIxPTR "", CID(context), program,
5374           color, (uintptr_t)name);
5375 
5376     if (context)
5377     {
5378         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
5379         SCOPED_SHARE_CONTEXT_LOCK(context);
5380         bool isCallValid =
5381             (context->skipValidation() ||
5382              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5383                                                 context->getMutableErrorSetForValidation(),
5384                                                 angle::EntryPoint::GLBindFragDataLocationEXT) &&
5385               ValidateBindFragDataLocationEXT(context, angle::EntryPoint::GLBindFragDataLocationEXT,
5386                                               programPacked, color, name)));
5387         if (isCallValid)
5388         {
5389             context->bindFragDataLocation(programPacked, color, name);
5390         }
5391         ANGLE_CAPTURE_GL(BindFragDataLocationEXT, isCallValid, context, programPacked, color, name);
5392     }
5393     else
5394     {
5395         GenerateContextLostErrorOnCurrentGlobalContext();
5396     }
5397     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5398 }
5399 
GL_BindFragDataLocationIndexedEXT(GLuint program,GLuint colorNumber,GLuint index,const GLchar * name)5400 void GL_APIENTRY GL_BindFragDataLocationIndexedEXT(GLuint program,
5401                                                    GLuint colorNumber,
5402                                                    GLuint index,
5403                                                    const GLchar *name)
5404 {
5405     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5406     Context *context = GetValidGlobalContext();
5407     EVENT(context, GLBindFragDataLocationIndexedEXT,
5408           "context = %d, program = %u, colorNumber = %u, index = %u, name = 0x%016" PRIxPTR "",
5409           CID(context), program, colorNumber, index, (uintptr_t)name);
5410 
5411     if (context)
5412     {
5413         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
5414         SCOPED_SHARE_CONTEXT_LOCK(context);
5415         bool isCallValid =
5416             (context->skipValidation() ||
5417              (ValidatePixelLocalStorageInactive(
5418                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
5419                   angle::EntryPoint::GLBindFragDataLocationIndexedEXT) &&
5420               ValidateBindFragDataLocationIndexedEXT(
5421                   context, angle::EntryPoint::GLBindFragDataLocationIndexedEXT, programPacked,
5422                   colorNumber, index, name)));
5423         if (isCallValid)
5424         {
5425             context->bindFragDataLocationIndexed(programPacked, colorNumber, index, name);
5426         }
5427         ANGLE_CAPTURE_GL(BindFragDataLocationIndexedEXT, isCallValid, context, programPacked,
5428                          colorNumber, index, name);
5429     }
5430     else
5431     {
5432         GenerateContextLostErrorOnCurrentGlobalContext();
5433     }
5434     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5435 }
5436 
GL_GetFragDataIndexEXT(GLuint program,const GLchar * name)5437 GLint GL_APIENTRY GL_GetFragDataIndexEXT(GLuint program, const GLchar *name)
5438 {
5439     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5440     Context *context = GetValidGlobalContext();
5441     EVENT(context, GLGetFragDataIndexEXT, "context = %d, program = %u, name = 0x%016" PRIxPTR "",
5442           CID(context), program, (uintptr_t)name);
5443 
5444     GLint returnValue;
5445     if (context)
5446     {
5447         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
5448         SCOPED_SHARE_CONTEXT_LOCK(context);
5449         bool isCallValid =
5450             (context->skipValidation() ||
5451              ValidateGetFragDataIndexEXT(context, angle::EntryPoint::GLGetFragDataIndexEXT,
5452                                          programPacked, name));
5453         if (isCallValid)
5454         {
5455             returnValue = context->getFragDataIndex(programPacked, name);
5456         }
5457         else
5458         {
5459             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetFragDataIndexEXT, GLint>();
5460         }
5461         ANGLE_CAPTURE_GL(GetFragDataIndexEXT, isCallValid, context, programPacked, name,
5462                          returnValue);
5463     }
5464     else
5465     {
5466         GenerateContextLostErrorOnCurrentGlobalContext();
5467         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetFragDataIndexEXT, GLint>();
5468     }
5469     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5470     return returnValue;
5471 }
5472 
GL_GetProgramResourceLocationIndexEXT(GLuint program,GLenum programInterface,const GLchar * name)5473 GLint GL_APIENTRY GL_GetProgramResourceLocationIndexEXT(GLuint program,
5474                                                         GLenum programInterface,
5475                                                         const GLchar *name)
5476 {
5477     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5478     Context *context = GetValidGlobalContext();
5479     EVENT(context, GLGetProgramResourceLocationIndexEXT,
5480           "context = %d, program = %u, programInterface = %s, name = 0x%016" PRIxPTR "",
5481           CID(context), program, GLenumToString(GLESEnum::ProgramInterface, programInterface),
5482           (uintptr_t)name);
5483 
5484     GLint returnValue;
5485     if (context)
5486     {
5487         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
5488         SCOPED_SHARE_CONTEXT_LOCK(context);
5489         bool isCallValid = (context->skipValidation() ||
5490                             ValidateGetProgramResourceLocationIndexEXT(
5491                                 context, angle::EntryPoint::GLGetProgramResourceLocationIndexEXT,
5492                                 programPacked, programInterface, name));
5493         if (isCallValid)
5494         {
5495             returnValue =
5496                 context->getProgramResourceLocationIndex(programPacked, programInterface, name);
5497         }
5498         else
5499         {
5500             returnValue =
5501                 GetDefaultReturnValue<angle::EntryPoint::GLGetProgramResourceLocationIndexEXT,
5502                                       GLint>();
5503         }
5504         ANGLE_CAPTURE_GL(GetProgramResourceLocationIndexEXT, isCallValid, context, programPacked,
5505                          programInterface, name, returnValue);
5506     }
5507     else
5508     {
5509         GenerateContextLostErrorOnCurrentGlobalContext();
5510         returnValue =
5511             GetDefaultReturnValue<angle::EntryPoint::GLGetProgramResourceLocationIndexEXT, GLint>();
5512     }
5513     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5514     return returnValue;
5515 }
5516 
5517 // GL_EXT_blend_minmax
5518 
5519 // GL_EXT_buffer_storage
GL_BufferStorageEXT(GLenum target,GLsizeiptr size,const void * data,GLbitfield flags)5520 void GL_APIENTRY GL_BufferStorageEXT(GLenum target,
5521                                      GLsizeiptr size,
5522                                      const void *data,
5523                                      GLbitfield flags)
5524 {
5525     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5526     Context *context = GetValidGlobalContext();
5527     EVENT(context, GLBufferStorageEXT,
5528           "context = %d, target = %s, size = %llu, data = 0x%016" PRIxPTR ", flags = %s",
5529           CID(context), GLenumToString(GLESEnum::BufferStorageTarget, target),
5530           static_cast<unsigned long long>(size), (uintptr_t)data,
5531           GLbitfieldToString(GLESEnum::BufferStorageMask, flags).c_str());
5532 
5533     if (context)
5534     {
5535         BufferBinding targetPacked = PackParam<BufferBinding>(target);
5536         SCOPED_SHARE_CONTEXT_LOCK(context);
5537         bool isCallValid =
5538             (context->skipValidation() ||
5539              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5540                                                 context->getMutableErrorSetForValidation(),
5541                                                 angle::EntryPoint::GLBufferStorageEXT) &&
5542               ValidateBufferStorageEXT(context, angle::EntryPoint::GLBufferStorageEXT, targetPacked,
5543                                        size, data, flags)));
5544         if (isCallValid)
5545         {
5546             context->bufferStorage(targetPacked, size, data, flags);
5547         }
5548         ANGLE_CAPTURE_GL(BufferStorageEXT, isCallValid, context, targetPacked, size, data, flags);
5549     }
5550     else
5551     {
5552         GenerateContextLostErrorOnCurrentGlobalContext();
5553     }
5554     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5555 }
5556 
5557 // GL_EXT_clear_texture
5558 void GL_APIENTRY
GL_ClearTexImageEXT(GLuint texture,GLint level,GLenum format,GLenum type,const void * data)5559 GL_ClearTexImageEXT(GLuint texture, GLint level, GLenum format, GLenum type, const void *data)
5560 {
5561     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5562     Context *context = GetValidGlobalContext();
5563     EVENT(context, GLClearTexImageEXT,
5564           "context = %d, texture = %u, level = %d, format = %s, type = %s, data = 0x%016" PRIxPTR
5565           "",
5566           CID(context), texture, level, GLenumToString(GLESEnum::PixelFormat, format),
5567           GLenumToString(GLESEnum::PixelType, type), (uintptr_t)data);
5568 
5569     if (context)
5570     {
5571         TextureID texturePacked = PackParam<TextureID>(texture);
5572         SCOPED_SHARE_CONTEXT_LOCK(context);
5573         bool isCallValid =
5574             (context->skipValidation() ||
5575              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5576                                                 context->getMutableErrorSetForValidation(),
5577                                                 angle::EntryPoint::GLClearTexImageEXT) &&
5578               ValidateClearTexImageEXT(context, angle::EntryPoint::GLClearTexImageEXT,
5579                                        texturePacked, level, format, type, data)));
5580         if (isCallValid)
5581         {
5582             context->clearTexImage(texturePacked, level, format, type, data);
5583         }
5584         ANGLE_CAPTURE_GL(ClearTexImageEXT, isCallValid, context, texturePacked, level, format, type,
5585                          data);
5586     }
5587     else
5588     {
5589         GenerateContextLostErrorOnCurrentGlobalContext();
5590     }
5591     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5592 }
5593 
GL_ClearTexSubImageEXT(GLuint texture,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const void * data)5594 void GL_APIENTRY GL_ClearTexSubImageEXT(GLuint texture,
5595                                         GLint level,
5596                                         GLint xoffset,
5597                                         GLint yoffset,
5598                                         GLint zoffset,
5599                                         GLsizei width,
5600                                         GLsizei height,
5601                                         GLsizei depth,
5602                                         GLenum format,
5603                                         GLenum type,
5604                                         const void *data)
5605 {
5606     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5607     Context *context = GetValidGlobalContext();
5608     EVENT(context, GLClearTexSubImageEXT,
5609           "context = %d, texture = %u, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width "
5610           "= %d, height = %d, depth = %d, format = %s, type = %s, data = 0x%016" PRIxPTR "",
5611           CID(context), texture, level, xoffset, yoffset, zoffset, width, height, depth,
5612           GLenumToString(GLESEnum::PixelFormat, format), GLenumToString(GLESEnum::PixelType, type),
5613           (uintptr_t)data);
5614 
5615     if (context)
5616     {
5617         TextureID texturePacked = PackParam<TextureID>(texture);
5618         SCOPED_SHARE_CONTEXT_LOCK(context);
5619         bool isCallValid =
5620             (context->skipValidation() ||
5621              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5622                                                 context->getMutableErrorSetForValidation(),
5623                                                 angle::EntryPoint::GLClearTexSubImageEXT) &&
5624               ValidateClearTexSubImageEXT(context, angle::EntryPoint::GLClearTexSubImageEXT,
5625                                           texturePacked, level, xoffset, yoffset, zoffset, width,
5626                                           height, depth, format, type, data)));
5627         if (isCallValid)
5628         {
5629             context->clearTexSubImage(texturePacked, level, xoffset, yoffset, zoffset, width,
5630                                       height, depth, format, type, data);
5631         }
5632         ANGLE_CAPTURE_GL(ClearTexSubImageEXT, isCallValid, context, texturePacked, level, xoffset,
5633                          yoffset, zoffset, width, height, depth, format, type, data);
5634     }
5635     else
5636     {
5637         GenerateContextLostErrorOnCurrentGlobalContext();
5638     }
5639     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5640 }
5641 
5642 // GL_EXT_clip_control
GL_ClipControlEXT(GLenum origin,GLenum depth)5643 void GL_APIENTRY GL_ClipControlEXT(GLenum origin, GLenum depth)
5644 {
5645     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5646     Context *context = GetValidGlobalContext();
5647     EVENT(context, GLClipControlEXT, "context = %d, origin = %s, depth = %s", CID(context),
5648           GLenumToString(GLESEnum::AllEnums, origin), GLenumToString(GLESEnum::AllEnums, depth));
5649 
5650     if (context)
5651     {
5652         ClipOrigin originPacked   = PackParam<ClipOrigin>(origin);
5653         ClipDepthMode depthPacked = PackParam<ClipDepthMode>(depth);
5654         bool isCallValid =
5655             (context->skipValidation() ||
5656              ValidateClipControlEXT(
5657                  context->getPrivateState(), context->getMutableErrorSetForValidation(),
5658                  angle::EntryPoint::GLClipControlEXT, originPacked, depthPacked));
5659         if (isCallValid)
5660         {
5661             ContextPrivateClipControl(context->getMutablePrivateState(),
5662                                       context->getMutablePrivateStateCache(), originPacked,
5663                                       depthPacked);
5664         }
5665         ANGLE_CAPTURE_GL(ClipControlEXT, isCallValid, context, originPacked, depthPacked);
5666     }
5667     else
5668     {
5669         GenerateContextLostErrorOnCurrentGlobalContext();
5670     }
5671     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5672 }
5673 
5674 // GL_EXT_clip_cull_distance
5675 
5676 // GL_EXT_color_buffer_float
5677 
5678 // GL_EXT_color_buffer_half_float
5679 
5680 // GL_EXT_conservative_depth
5681 
5682 // 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)5683 void GL_APIENTRY GL_CopyImageSubDataEXT(GLuint srcName,
5684                                         GLenum srcTarget,
5685                                         GLint srcLevel,
5686                                         GLint srcX,
5687                                         GLint srcY,
5688                                         GLint srcZ,
5689                                         GLuint dstName,
5690                                         GLenum dstTarget,
5691                                         GLint dstLevel,
5692                                         GLint dstX,
5693                                         GLint dstY,
5694                                         GLint dstZ,
5695                                         GLsizei srcWidth,
5696                                         GLsizei srcHeight,
5697                                         GLsizei srcDepth)
5698 {
5699     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5700     Context *context = GetValidGlobalContext();
5701     EVENT(context, GLCopyImageSubDataEXT,
5702           "context = %d, srcName = %u, srcTarget = %s, srcLevel = %d, srcX = %d, srcY = %d, srcZ = "
5703           "%d, dstName = %u, dstTarget = %s, dstLevel = %d, dstX = %d, dstY = %d, dstZ = %d, "
5704           "srcWidth = %d, srcHeight = %d, srcDepth = %d",
5705           CID(context), srcName, GLenumToString(GLESEnum::CopyBufferSubDataTarget, srcTarget),
5706           srcLevel, srcX, srcY, srcZ, dstName,
5707           GLenumToString(GLESEnum::CopyBufferSubDataTarget, dstTarget), dstLevel, dstX, dstY, dstZ,
5708           srcWidth, srcHeight, srcDepth);
5709 
5710     if (context)
5711     {
5712         SCOPED_SHARE_CONTEXT_LOCK(context);
5713         bool isCallValid =
5714             (context->skipValidation() ||
5715              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5716                                                 context->getMutableErrorSetForValidation(),
5717                                                 angle::EntryPoint::GLCopyImageSubDataEXT) &&
5718               ValidateCopyImageSubDataEXT(context, angle::EntryPoint::GLCopyImageSubDataEXT,
5719                                           srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName,
5720                                           dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth,
5721                                           srcHeight, srcDepth)));
5722         if (isCallValid)
5723         {
5724             context->copyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName,
5725                                       dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight,
5726                                       srcDepth);
5727         }
5728         ANGLE_CAPTURE_GL(CopyImageSubDataEXT, isCallValid, context, srcName, srcTarget, srcLevel,
5729                          srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth,
5730                          srcHeight, srcDepth);
5731     }
5732     else
5733     {
5734         GenerateContextLostErrorOnCurrentGlobalContext();
5735     }
5736     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5737 }
5738 
5739 // GL_EXT_debug_label
5740 void GL_APIENTRY
GL_GetObjectLabelEXT(GLenum type,GLuint object,GLsizei bufSize,GLsizei * length,GLchar * label)5741 GL_GetObjectLabelEXT(GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label)
5742 {
5743     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5744     Context *context = GetValidGlobalContext();
5745     EVENT(context, GLGetObjectLabelEXT,
5746           "context = %d, type = %s, object = %u, bufSize = %d, length = 0x%016" PRIxPTR
5747           ", label = 0x%016" PRIxPTR "",
5748           CID(context), GLenumToString(GLESEnum::AllEnums, type), object, bufSize,
5749           (uintptr_t)length, (uintptr_t)label);
5750 
5751     if (context)
5752     {
5753         SCOPED_SHARE_CONTEXT_LOCK(context);
5754         bool isCallValid =
5755             (context->skipValidation() ||
5756              ValidateGetObjectLabelEXT(context, angle::EntryPoint::GLGetObjectLabelEXT, type,
5757                                        object, bufSize, length, label));
5758         if (isCallValid)
5759         {
5760             context->getObjectLabel(type, object, bufSize, length, label);
5761         }
5762         ANGLE_CAPTURE_GL(GetObjectLabelEXT, isCallValid, context, type, object, bufSize, length,
5763                          label);
5764     }
5765     else
5766     {
5767         GenerateContextLostErrorOnCurrentGlobalContext();
5768     }
5769     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5770 }
5771 
GL_LabelObjectEXT(GLenum type,GLuint object,GLsizei length,const GLchar * label)5772 void GL_APIENTRY GL_LabelObjectEXT(GLenum type, GLuint object, GLsizei length, const GLchar *label)
5773 {
5774     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5775     Context *context = GetValidGlobalContext();
5776     EVENT(context, GLLabelObjectEXT,
5777           "context = %d, type = %s, object = %u, length = %d, label = 0x%016" PRIxPTR "",
5778           CID(context), GLenumToString(GLESEnum::AllEnums, type), object, length, (uintptr_t)label);
5779 
5780     if (context)
5781     {
5782         SCOPED_SHARE_CONTEXT_LOCK(context);
5783         bool isCallValid =
5784             (context->skipValidation() ||
5785              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5786                                                 context->getMutableErrorSetForValidation(),
5787                                                 angle::EntryPoint::GLLabelObjectEXT) &&
5788               ValidateLabelObjectEXT(context, angle::EntryPoint::GLLabelObjectEXT, type, object,
5789                                      length, label)));
5790         if (isCallValid)
5791         {
5792             context->labelObject(type, object, length, label);
5793         }
5794         ANGLE_CAPTURE_GL(LabelObjectEXT, isCallValid, context, type, object, length, label);
5795     }
5796     else
5797     {
5798         GenerateContextLostErrorOnCurrentGlobalContext();
5799     }
5800     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5801 }
5802 
5803 // GL_EXT_debug_marker
GL_InsertEventMarkerEXT(GLsizei length,const GLchar * marker)5804 void GL_APIENTRY GL_InsertEventMarkerEXT(GLsizei length, const GLchar *marker)
5805 {
5806     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5807     Context *context = GetValidGlobalContext();
5808     // Don't run the EVENT() macro on the EXT_debug_marker entry points.
5809     // It can interfere with the debug events being set by the caller.
5810     // EVENT(context, GLInsertEventMarkerEXT, "context = %d, length = %d, marker = 0x%016" PRIxPTR
5811     // "", CID(context), length, (uintptr_t)marker);
5812 
5813     if (context)
5814     {
5815         SCOPED_SHARE_CONTEXT_LOCK(context);
5816         bool isCallValid =
5817             (context->skipValidation() ||
5818              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5819                                                 context->getMutableErrorSetForValidation(),
5820                                                 angle::EntryPoint::GLInsertEventMarkerEXT) &&
5821               ValidateInsertEventMarkerEXT(context, angle::EntryPoint::GLInsertEventMarkerEXT,
5822                                            length, marker)));
5823         if (isCallValid)
5824         {
5825             context->insertEventMarker(length, marker);
5826         }
5827         ANGLE_CAPTURE_GL(InsertEventMarkerEXT, isCallValid, context, length, marker);
5828     }
5829     else
5830     {
5831         GenerateContextLostErrorOnCurrentGlobalContext();
5832     }
5833     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5834 }
5835 
GL_PopGroupMarkerEXT()5836 void GL_APIENTRY GL_PopGroupMarkerEXT()
5837 {
5838     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5839     Context *context = GetValidGlobalContext();
5840     // Don't run the EVENT() macro on the EXT_debug_marker entry points.
5841     // It can interfere with the debug events being set by the caller.
5842     // EVENT(context, GLPopGroupMarkerEXT, "context = %d", CID(context));
5843 
5844     if (context)
5845     {
5846         SCOPED_SHARE_CONTEXT_LOCK(context);
5847         bool isCallValid =
5848             (context->skipValidation() ||
5849              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5850                                                 context->getMutableErrorSetForValidation(),
5851                                                 angle::EntryPoint::GLPopGroupMarkerEXT) &&
5852               ValidatePopGroupMarkerEXT(context, angle::EntryPoint::GLPopGroupMarkerEXT)));
5853         if (isCallValid)
5854         {
5855             context->popGroupMarker();
5856         }
5857         ANGLE_CAPTURE_GL(PopGroupMarkerEXT, isCallValid, context);
5858     }
5859     else
5860     {
5861         GenerateContextLostErrorOnCurrentGlobalContext();
5862     }
5863     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5864 }
5865 
GL_PushGroupMarkerEXT(GLsizei length,const GLchar * marker)5866 void GL_APIENTRY GL_PushGroupMarkerEXT(GLsizei length, const GLchar *marker)
5867 {
5868     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5869     Context *context = GetValidGlobalContext();
5870     // Don't run the EVENT() macro on the EXT_debug_marker entry points.
5871     // It can interfere with the debug events being set by the caller.
5872     // EVENT(context, GLPushGroupMarkerEXT, "context = %d, length = %d, marker = 0x%016" PRIxPTR "",
5873     // CID(context), length, (uintptr_t)marker);
5874 
5875     if (context)
5876     {
5877         SCOPED_SHARE_CONTEXT_LOCK(context);
5878         bool isCallValid =
5879             (context->skipValidation() ||
5880              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5881                                                 context->getMutableErrorSetForValidation(),
5882                                                 angle::EntryPoint::GLPushGroupMarkerEXT) &&
5883               ValidatePushGroupMarkerEXT(context, angle::EntryPoint::GLPushGroupMarkerEXT, length,
5884                                          marker)));
5885         if (isCallValid)
5886         {
5887             context->pushGroupMarker(length, marker);
5888         }
5889         ANGLE_CAPTURE_GL(PushGroupMarkerEXT, isCallValid, context, length, marker);
5890     }
5891     else
5892     {
5893         GenerateContextLostErrorOnCurrentGlobalContext();
5894     }
5895     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5896 }
5897 
5898 // GL_EXT_depth_clamp
5899 
5900 // GL_EXT_discard_framebuffer
GL_DiscardFramebufferEXT(GLenum target,GLsizei numAttachments,const GLenum * attachments)5901 void GL_APIENTRY GL_DiscardFramebufferEXT(GLenum target,
5902                                           GLsizei numAttachments,
5903                                           const GLenum *attachments)
5904 {
5905     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5906     Context *context = GetValidGlobalContext();
5907     EVENT(context, GLDiscardFramebufferEXT,
5908           "context = %d, target = %s, numAttachments = %d, attachments = 0x%016" PRIxPTR "",
5909           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target), numAttachments,
5910           (uintptr_t)attachments);
5911 
5912     if (context)
5913     {
5914         SCOPED_SHARE_CONTEXT_LOCK(context);
5915         bool isCallValid =
5916             (context->skipValidation() ||
5917              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5918                                                 context->getMutableErrorSetForValidation(),
5919                                                 angle::EntryPoint::GLDiscardFramebufferEXT) &&
5920               ValidateDiscardFramebufferEXT(context, angle::EntryPoint::GLDiscardFramebufferEXT,
5921                                             target, numAttachments, attachments)));
5922         if (isCallValid)
5923         {
5924             context->discardFramebuffer(target, numAttachments, attachments);
5925         }
5926         ANGLE_CAPTURE_GL(DiscardFramebufferEXT, isCallValid, context, target, numAttachments,
5927                          attachments);
5928     }
5929     else
5930     {
5931         GenerateContextLostErrorOnCurrentGlobalContext();
5932     }
5933     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5934 }
5935 
5936 // GL_EXT_disjoint_timer_query
GL_BeginQueryEXT(GLenum target,GLuint id)5937 void GL_APIENTRY GL_BeginQueryEXT(GLenum target, GLuint id)
5938 {
5939     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5940     Context *context = GetValidGlobalContext();
5941     EVENT(context, GLBeginQueryEXT, "context = %d, target = %s, id = %u", CID(context),
5942           GLenumToString(GLESEnum::QueryTarget, target), id);
5943 
5944     if (context)
5945     {
5946         QueryType targetPacked = PackParam<QueryType>(target);
5947         QueryID idPacked       = PackParam<QueryID>(id);
5948         SCOPED_SHARE_CONTEXT_LOCK(context);
5949         bool isCallValid =
5950             (context->skipValidation() ||
5951              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
5952                                                 context->getMutableErrorSetForValidation(),
5953                                                 angle::EntryPoint::GLBeginQueryEXT) &&
5954               ValidateBeginQueryEXT(context, angle::EntryPoint::GLBeginQueryEXT, targetPacked,
5955                                     idPacked)));
5956         if (isCallValid)
5957         {
5958             context->beginQuery(targetPacked, idPacked);
5959         }
5960         ANGLE_CAPTURE_GL(BeginQueryEXT, isCallValid, context, targetPacked, idPacked);
5961     }
5962     else
5963     {
5964         GenerateContextLostErrorOnCurrentGlobalContext();
5965     }
5966     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5967 }
5968 
GL_DeleteQueriesEXT(GLsizei n,const GLuint * ids)5969 void GL_APIENTRY GL_DeleteQueriesEXT(GLsizei n, const GLuint *ids)
5970 {
5971     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5972     Context *context = GetValidGlobalContext();
5973     EVENT(context, GLDeleteQueriesEXT, "context = %d, n = %d, ids = 0x%016" PRIxPTR "",
5974           CID(context), n, (uintptr_t)ids);
5975 
5976     if (context)
5977     {
5978         const QueryID *idsPacked = PackParam<const QueryID *>(ids);
5979         SCOPED_SHARE_CONTEXT_LOCK(context);
5980         bool isCallValid = (context->skipValidation() ||
5981                             ValidateDeleteQueriesEXT(context, angle::EntryPoint::GLDeleteQueriesEXT,
5982                                                      n, idsPacked));
5983         if (isCallValid)
5984         {
5985             context->deleteQueries(n, idsPacked);
5986         }
5987         ANGLE_CAPTURE_GL(DeleteQueriesEXT, isCallValid, context, n, idsPacked);
5988     }
5989     else
5990     {
5991         GenerateContextLostErrorOnCurrentGlobalContext();
5992     }
5993     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5994 }
5995 
GL_EndQueryEXT(GLenum target)5996 void GL_APIENTRY GL_EndQueryEXT(GLenum target)
5997 {
5998     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
5999     Context *context = GetValidGlobalContext();
6000     EVENT(context, GLEndQueryEXT, "context = %d, target = %s", CID(context),
6001           GLenumToString(GLESEnum::QueryTarget, target));
6002 
6003     if (context)
6004     {
6005         QueryType targetPacked = PackParam<QueryType>(target);
6006         SCOPED_SHARE_CONTEXT_LOCK(context);
6007         bool isCallValid =
6008             (context->skipValidation() ||
6009              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
6010                                                 context->getMutableErrorSetForValidation(),
6011                                                 angle::EntryPoint::GLEndQueryEXT) &&
6012               ValidateEndQueryEXT(context, angle::EntryPoint::GLEndQueryEXT, targetPacked)));
6013         if (isCallValid)
6014         {
6015             context->endQuery(targetPacked);
6016         }
6017         ANGLE_CAPTURE_GL(EndQueryEXT, isCallValid, context, targetPacked);
6018     }
6019     else
6020     {
6021         GenerateContextLostErrorOnCurrentGlobalContext();
6022     }
6023     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6024 }
6025 
GL_GenQueriesEXT(GLsizei n,GLuint * ids)6026 void GL_APIENTRY GL_GenQueriesEXT(GLsizei n, GLuint *ids)
6027 {
6028     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6029     Context *context = GetValidGlobalContext();
6030     EVENT(context, GLGenQueriesEXT, "context = %d, n = %d, ids = 0x%016" PRIxPTR "", CID(context),
6031           n, (uintptr_t)ids);
6032 
6033     if (context)
6034     {
6035         QueryID *idsPacked = PackParam<QueryID *>(ids);
6036         SCOPED_SHARE_CONTEXT_LOCK(context);
6037         bool isCallValid =
6038             (context->skipValidation() ||
6039              ValidateGenQueriesEXT(context, angle::EntryPoint::GLGenQueriesEXT, n, idsPacked));
6040         if (isCallValid)
6041         {
6042             context->genQueries(n, idsPacked);
6043         }
6044         ANGLE_CAPTURE_GL(GenQueriesEXT, isCallValid, context, n, idsPacked);
6045     }
6046     else
6047     {
6048         GenerateContextLostErrorOnCurrentGlobalContext();
6049     }
6050     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6051 }
6052 
GL_GetInteger64vEXT(GLenum pname,GLint64 * data)6053 void GL_APIENTRY GL_GetInteger64vEXT(GLenum pname, GLint64 *data)
6054 {
6055     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6056     Context *context = GetValidGlobalContext();
6057     EVENT(context, GLGetInteger64vEXT, "context = %d, pname = %s, data = 0x%016" PRIxPTR "",
6058           CID(context), GLenumToString(GLESEnum::GetPName, pname), (uintptr_t)data);
6059 
6060     if (context)
6061     {
6062         SCOPED_SHARE_CONTEXT_LOCK(context);
6063         bool isCallValid =
6064             (context->skipValidation() ||
6065              ValidateGetInteger64vEXT(context, angle::EntryPoint::GLGetInteger64vEXT, pname, data));
6066         if (isCallValid)
6067         {
6068             context->getInteger64v(pname, data);
6069         }
6070         ANGLE_CAPTURE_GL(GetInteger64vEXT, isCallValid, context, pname, data);
6071     }
6072     else
6073     {
6074         GenerateContextLostErrorOnCurrentGlobalContext();
6075     }
6076     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6077 }
6078 
GL_GetQueryObjecti64vEXT(GLuint id,GLenum pname,GLint64 * params)6079 void GL_APIENTRY GL_GetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64 *params)
6080 {
6081     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6082     Context *context = GetGlobalContext();
6083     EVENT(context, GLGetQueryObjecti64vEXT,
6084           "context = %d, id = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), id,
6085           GLenumToString(GLESEnum::QueryObjectParameterName, pname), (uintptr_t)params);
6086 
6087     if (context)
6088     {
6089         QueryID idPacked = PackParam<QueryID>(id);
6090         SCOPED_SHARE_CONTEXT_LOCK(context);
6091         bool isCallValid =
6092             (context->skipValidation() ||
6093              ValidateGetQueryObjecti64vEXT(context, angle::EntryPoint::GLGetQueryObjecti64vEXT,
6094                                            idPacked, pname, params));
6095         if (isCallValid)
6096         {
6097             context->getQueryObjecti64v(idPacked, pname, params);
6098         }
6099         ANGLE_CAPTURE_GL(GetQueryObjecti64vEXT, isCallValid, context, idPacked, pname, params);
6100     }
6101     else
6102     {
6103     }
6104     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6105 }
6106 
GL_GetQueryObjectivEXT(GLuint id,GLenum pname,GLint * params)6107 void GL_APIENTRY GL_GetQueryObjectivEXT(GLuint id, GLenum pname, GLint *params)
6108 {
6109     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6110     Context *context = GetGlobalContext();
6111     EVENT(context, GLGetQueryObjectivEXT,
6112           "context = %d, id = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), id,
6113           GLenumToString(GLESEnum::QueryObjectParameterName, pname), (uintptr_t)params);
6114 
6115     if (context)
6116     {
6117         QueryID idPacked = PackParam<QueryID>(id);
6118         SCOPED_SHARE_CONTEXT_LOCK(context);
6119         bool isCallValid =
6120             (context->skipValidation() ||
6121              ValidateGetQueryObjectivEXT(context, angle::EntryPoint::GLGetQueryObjectivEXT,
6122                                          idPacked, pname, params));
6123         if (isCallValid)
6124         {
6125             context->getQueryObjectiv(idPacked, pname, params);
6126         }
6127         ANGLE_CAPTURE_GL(GetQueryObjectivEXT, isCallValid, context, idPacked, pname, params);
6128     }
6129     else
6130     {
6131     }
6132     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6133 }
6134 
GL_GetQueryObjectui64vEXT(GLuint id,GLenum pname,GLuint64 * params)6135 void GL_APIENTRY GL_GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64 *params)
6136 {
6137     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6138     Context *context = GetValidGlobalContext();
6139     EVENT(context, GLGetQueryObjectui64vEXT,
6140           "context = %d, id = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), id,
6141           GLenumToString(GLESEnum::QueryObjectParameterName, pname), (uintptr_t)params);
6142 
6143     if (context)
6144     {
6145         QueryID idPacked = PackParam<QueryID>(id);
6146         SCOPED_SHARE_CONTEXT_LOCK(context);
6147         bool isCallValid =
6148             (context->skipValidation() ||
6149              ValidateGetQueryObjectui64vEXT(context, angle::EntryPoint::GLGetQueryObjectui64vEXT,
6150                                             idPacked, pname, params));
6151         if (isCallValid)
6152         {
6153             context->getQueryObjectui64v(idPacked, pname, params);
6154         }
6155         ANGLE_CAPTURE_GL(GetQueryObjectui64vEXT, isCallValid, context, idPacked, pname, params);
6156     }
6157     else
6158     {
6159         GenerateContextLostErrorOnCurrentGlobalContext();
6160     }
6161     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6162 }
6163 
GL_GetQueryObjectuivEXT(GLuint id,GLenum pname,GLuint * params)6164 void GL_APIENTRY GL_GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params)
6165 {
6166     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6167     Context *context = GetValidGlobalContext();
6168     EVENT(context, GLGetQueryObjectuivEXT,
6169           "context = %d, id = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), id,
6170           GLenumToString(GLESEnum::QueryObjectParameterName, pname), (uintptr_t)params);
6171 
6172     if (context)
6173     {
6174         QueryID idPacked = PackParam<QueryID>(id);
6175         SCOPED_SHARE_CONTEXT_LOCK(context);
6176         bool isCallValid =
6177             (context->skipValidation() ||
6178              ValidateGetQueryObjectuivEXT(context, angle::EntryPoint::GLGetQueryObjectuivEXT,
6179                                           idPacked, pname, params));
6180         if (isCallValid)
6181         {
6182             context->getQueryObjectuiv(idPacked, pname, params);
6183         }
6184         ANGLE_CAPTURE_GL(GetQueryObjectuivEXT, isCallValid, context, idPacked, pname, params);
6185     }
6186     else
6187     {
6188         GenerateContextLostErrorOnCurrentGlobalContext();
6189     }
6190     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6191 }
6192 
GL_GetQueryivEXT(GLenum target,GLenum pname,GLint * params)6193 void GL_APIENTRY GL_GetQueryivEXT(GLenum target, GLenum pname, GLint *params)
6194 {
6195     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6196     Context *context = GetValidGlobalContext();
6197     EVENT(context, GLGetQueryivEXT,
6198           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
6199           GLenumToString(GLESEnum::QueryTarget, target),
6200           GLenumToString(GLESEnum::QueryParameterName, pname), (uintptr_t)params);
6201 
6202     if (context)
6203     {
6204         QueryType targetPacked = PackParam<QueryType>(target);
6205         SCOPED_SHARE_CONTEXT_LOCK(context);
6206         bool isCallValid = (context->skipValidation() ||
6207                             ValidateGetQueryivEXT(context, angle::EntryPoint::GLGetQueryivEXT,
6208                                                   targetPacked, pname, params));
6209         if (isCallValid)
6210         {
6211             context->getQueryiv(targetPacked, pname, params);
6212         }
6213         ANGLE_CAPTURE_GL(GetQueryivEXT, isCallValid, context, targetPacked, pname, params);
6214     }
6215     else
6216     {
6217         GenerateContextLostErrorOnCurrentGlobalContext();
6218     }
6219     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6220 }
6221 
GL_IsQueryEXT(GLuint id)6222 GLboolean GL_APIENTRY GL_IsQueryEXT(GLuint id)
6223 {
6224     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6225     Context *context = GetValidGlobalContext();
6226     EVENT(context, GLIsQueryEXT, "context = %d, id = %u", CID(context), id);
6227 
6228     GLboolean returnValue;
6229     if (context)
6230     {
6231         QueryID idPacked = PackParam<QueryID>(id);
6232         SCOPED_SHARE_CONTEXT_LOCK(context);
6233         bool isCallValid = (context->skipValidation() ||
6234                             ValidateIsQueryEXT(context, angle::EntryPoint::GLIsQueryEXT, idPacked));
6235         if (isCallValid)
6236         {
6237             returnValue = context->isQuery(idPacked);
6238         }
6239         else
6240         {
6241             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsQueryEXT, GLboolean>();
6242         }
6243         ANGLE_CAPTURE_GL(IsQueryEXT, isCallValid, context, idPacked, returnValue);
6244     }
6245     else
6246     {
6247         GenerateContextLostErrorOnCurrentGlobalContext();
6248         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsQueryEXT, GLboolean>();
6249     }
6250     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6251     return returnValue;
6252 }
6253 
GL_QueryCounterEXT(GLuint id,GLenum target)6254 void GL_APIENTRY GL_QueryCounterEXT(GLuint id, GLenum target)
6255 {
6256     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6257     Context *context = GetValidGlobalContext();
6258     EVENT(context, GLQueryCounterEXT, "context = %d, id = %u, target = %s", CID(context), id,
6259           GLenumToString(GLESEnum::QueryCounterTarget, target));
6260 
6261     if (context)
6262     {
6263         QueryID idPacked       = PackParam<QueryID>(id);
6264         QueryType targetPacked = PackParam<QueryType>(target);
6265         SCOPED_SHARE_CONTEXT_LOCK(context);
6266         bool isCallValid =
6267             (context->skipValidation() ||
6268              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
6269                                                 context->getMutableErrorSetForValidation(),
6270                                                 angle::EntryPoint::GLQueryCounterEXT) &&
6271               ValidateQueryCounterEXT(context, angle::EntryPoint::GLQueryCounterEXT, idPacked,
6272                                       targetPacked)));
6273         if (isCallValid)
6274         {
6275             context->queryCounter(idPacked, targetPacked);
6276         }
6277         ANGLE_CAPTURE_GL(QueryCounterEXT, isCallValid, context, idPacked, targetPacked);
6278     }
6279     else
6280     {
6281         GenerateContextLostErrorOnCurrentGlobalContext();
6282     }
6283     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6284 }
6285 
6286 // GL_EXT_draw_buffers
GL_DrawBuffersEXT(GLsizei n,const GLenum * bufs)6287 void GL_APIENTRY GL_DrawBuffersEXT(GLsizei n, const GLenum *bufs)
6288 {
6289     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6290     Context *context = GetValidGlobalContext();
6291     EVENT(context, GLDrawBuffersEXT, "context = %d, n = %d, bufs = 0x%016" PRIxPTR "", CID(context),
6292           n, (uintptr_t)bufs);
6293 
6294     if (context)
6295     {
6296         SCOPED_SHARE_CONTEXT_LOCK(context);
6297         bool isCallValid =
6298             (context->skipValidation() ||
6299              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
6300                                                 context->getMutableErrorSetForValidation(),
6301                                                 angle::EntryPoint::GLDrawBuffersEXT) &&
6302               ValidateDrawBuffersEXT(context, angle::EntryPoint::GLDrawBuffersEXT, n, bufs)));
6303         if (isCallValid)
6304         {
6305             context->drawBuffers(n, bufs);
6306         }
6307         ANGLE_CAPTURE_GL(DrawBuffersEXT, isCallValid, context, n, bufs);
6308     }
6309     else
6310     {
6311         GenerateContextLostErrorOnCurrentGlobalContext();
6312     }
6313     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6314 }
6315 
6316 // GL_EXT_draw_buffers_indexed
GL_BlendEquationSeparateiEXT(GLuint buf,GLenum modeRGB,GLenum modeAlpha)6317 void GL_APIENTRY GL_BlendEquationSeparateiEXT(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
6318 {
6319     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6320     Context *context = GetValidGlobalContext();
6321     EVENT(context, GLBlendEquationSeparateiEXT,
6322           "context = %d, buf = %u, modeRGB = %s, modeAlpha = %s", CID(context), buf,
6323           GLenumToString(GLESEnum::BlendEquationModeEXT, modeRGB),
6324           GLenumToString(GLESEnum::BlendEquationModeEXT, modeAlpha));
6325 
6326     if (context)
6327     {
6328         bool isCallValid =
6329             (context->skipValidation() ||
6330              ValidateBlendEquationSeparateiEXT(
6331                  context->getPrivateState(), context->getMutableErrorSetForValidation(),
6332                  angle::EntryPoint::GLBlendEquationSeparateiEXT, buf, modeRGB, modeAlpha));
6333         if (isCallValid)
6334         {
6335             ContextPrivateBlendEquationSeparatei(context->getMutablePrivateState(),
6336                                                  context->getMutablePrivateStateCache(), buf,
6337                                                  modeRGB, modeAlpha);
6338         }
6339         ANGLE_CAPTURE_GL(BlendEquationSeparateiEXT, isCallValid, context, buf, modeRGB, modeAlpha);
6340     }
6341     else
6342     {
6343         GenerateContextLostErrorOnCurrentGlobalContext();
6344     }
6345     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6346 }
6347 
GL_BlendEquationiEXT(GLuint buf,GLenum mode)6348 void GL_APIENTRY GL_BlendEquationiEXT(GLuint buf, GLenum mode)
6349 {
6350     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6351     Context *context = GetValidGlobalContext();
6352     EVENT(context, GLBlendEquationiEXT, "context = %d, buf = %u, mode = %s", CID(context), buf,
6353           GLenumToString(GLESEnum::BlendEquationModeEXT, mode));
6354 
6355     if (context)
6356     {
6357         bool isCallValid =
6358             (context->skipValidation() ||
6359              ValidateBlendEquationiEXT(context->getPrivateState(),
6360                                        context->getMutableErrorSetForValidation(),
6361                                        angle::EntryPoint::GLBlendEquationiEXT, buf, mode));
6362         if (isCallValid)
6363         {
6364             ContextPrivateBlendEquationi(context->getMutablePrivateState(),
6365                                          context->getMutablePrivateStateCache(), buf, mode);
6366         }
6367         ANGLE_CAPTURE_GL(BlendEquationiEXT, isCallValid, context, buf, mode);
6368     }
6369     else
6370     {
6371         GenerateContextLostErrorOnCurrentGlobalContext();
6372     }
6373     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6374 }
6375 
6376 void GL_APIENTRY
GL_BlendFuncSeparateiEXT(GLuint buf,GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)6377 GL_BlendFuncSeparateiEXT(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
6378 {
6379     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6380     Context *context = GetValidGlobalContext();
6381     EVENT(context, GLBlendFuncSeparateiEXT,
6382           "context = %d, buf = %u, srcRGB = %s, dstRGB = %s, srcAlpha = %s, dstAlpha = %s",
6383           CID(context), buf, GLenumToString(GLESEnum::BlendingFactor, srcRGB),
6384           GLenumToString(GLESEnum::BlendingFactor, dstRGB),
6385           GLenumToString(GLESEnum::BlendingFactor, srcAlpha),
6386           GLenumToString(GLESEnum::BlendingFactor, dstAlpha));
6387 
6388     if (context)
6389     {
6390         bool isCallValid =
6391             (context->skipValidation() ||
6392              ValidateBlendFuncSeparateiEXT(context->getPrivateState(),
6393                                            context->getMutableErrorSetForValidation(),
6394                                            angle::EntryPoint::GLBlendFuncSeparateiEXT, buf, srcRGB,
6395                                            dstRGB, srcAlpha, dstAlpha));
6396         if (isCallValid)
6397         {
6398             ContextPrivateBlendFuncSeparatei(context->getMutablePrivateState(),
6399                                              context->getMutablePrivateStateCache(), buf, srcRGB,
6400                                              dstRGB, srcAlpha, dstAlpha);
6401         }
6402         ANGLE_CAPTURE_GL(BlendFuncSeparateiEXT, isCallValid, context, buf, srcRGB, dstRGB, srcAlpha,
6403                          dstAlpha);
6404     }
6405     else
6406     {
6407         GenerateContextLostErrorOnCurrentGlobalContext();
6408     }
6409     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6410 }
6411 
GL_BlendFunciEXT(GLuint buf,GLenum src,GLenum dst)6412 void GL_APIENTRY GL_BlendFunciEXT(GLuint buf, GLenum src, GLenum dst)
6413 {
6414     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6415     Context *context = GetValidGlobalContext();
6416     EVENT(context, GLBlendFunciEXT, "context = %d, buf = %u, src = %s, dst = %s", CID(context), buf,
6417           GLenumToString(GLESEnum::BlendingFactor, src),
6418           GLenumToString(GLESEnum::BlendingFactor, dst));
6419 
6420     if (context)
6421     {
6422         bool isCallValid =
6423             (context->skipValidation() ||
6424              ValidateBlendFunciEXT(context->getPrivateState(),
6425                                    context->getMutableErrorSetForValidation(),
6426                                    angle::EntryPoint::GLBlendFunciEXT, buf, src, dst));
6427         if (isCallValid)
6428         {
6429             ContextPrivateBlendFunci(context->getMutablePrivateState(),
6430                                      context->getMutablePrivateStateCache(), buf, src, dst);
6431         }
6432         ANGLE_CAPTURE_GL(BlendFunciEXT, isCallValid, context, buf, src, dst);
6433     }
6434     else
6435     {
6436         GenerateContextLostErrorOnCurrentGlobalContext();
6437     }
6438     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6439 }
6440 
GL_ColorMaskiEXT(GLuint index,GLboolean r,GLboolean g,GLboolean b,GLboolean a)6441 void GL_APIENTRY GL_ColorMaskiEXT(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
6442 {
6443     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6444     Context *context = GetValidGlobalContext();
6445     EVENT(context, GLColorMaskiEXT, "context = %d, index = %u, r = %s, g = %s, b = %s, a = %s",
6446           CID(context), index, GLbooleanToString(r), GLbooleanToString(g), GLbooleanToString(b),
6447           GLbooleanToString(a));
6448 
6449     if (context)
6450     {
6451         bool isCallValid =
6452             (context->skipValidation() ||
6453              ValidateColorMaskiEXT(context->getPrivateState(),
6454                                    context->getMutableErrorSetForValidation(),
6455                                    angle::EntryPoint::GLColorMaskiEXT, index, r, g, b, a));
6456         if (isCallValid)
6457         {
6458             ContextPrivateColorMaski(context->getMutablePrivateState(),
6459                                      context->getMutablePrivateStateCache(), index, r, g, b, a);
6460         }
6461         ANGLE_CAPTURE_GL(ColorMaskiEXT, isCallValid, context, index, r, g, b, a);
6462     }
6463     else
6464     {
6465         GenerateContextLostErrorOnCurrentGlobalContext();
6466     }
6467     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6468 }
6469 
GL_DisableiEXT(GLenum target,GLuint index)6470 void GL_APIENTRY GL_DisableiEXT(GLenum target, GLuint index)
6471 {
6472     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6473     Context *context = GetValidGlobalContext();
6474     EVENT(context, GLDisableiEXT, "context = %d, target = %s, index = %u", CID(context),
6475           GLenumToString(GLESEnum::EnableCap, target), index);
6476 
6477     if (context)
6478     {
6479         bool isCallValid = (context->skipValidation() ||
6480                             ValidateDisableiEXT(context->getPrivateState(),
6481                                                 context->getMutableErrorSetForValidation(),
6482                                                 angle::EntryPoint::GLDisableiEXT, target, index));
6483         if (isCallValid)
6484         {
6485             ContextPrivateDisablei(context->getMutablePrivateState(),
6486                                    context->getMutablePrivateStateCache(), target, index);
6487         }
6488         ANGLE_CAPTURE_GL(DisableiEXT, isCallValid, context, target, index);
6489     }
6490     else
6491     {
6492         GenerateContextLostErrorOnCurrentGlobalContext();
6493     }
6494     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6495 }
6496 
GL_EnableiEXT(GLenum target,GLuint index)6497 void GL_APIENTRY GL_EnableiEXT(GLenum target, GLuint index)
6498 {
6499     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6500     Context *context = GetValidGlobalContext();
6501     EVENT(context, GLEnableiEXT, "context = %d, target = %s, index = %u", CID(context),
6502           GLenumToString(GLESEnum::EnableCap, target), index);
6503 
6504     if (context)
6505     {
6506         bool isCallValid = (context->skipValidation() ||
6507                             ValidateEnableiEXT(context->getPrivateState(),
6508                                                context->getMutableErrorSetForValidation(),
6509                                                angle::EntryPoint::GLEnableiEXT, target, index));
6510         if (isCallValid)
6511         {
6512             ContextPrivateEnablei(context->getMutablePrivateState(),
6513                                   context->getMutablePrivateStateCache(), target, index);
6514         }
6515         ANGLE_CAPTURE_GL(EnableiEXT, isCallValid, context, target, index);
6516     }
6517     else
6518     {
6519         GenerateContextLostErrorOnCurrentGlobalContext();
6520     }
6521     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6522 }
6523 
GL_IsEnablediEXT(GLenum target,GLuint index)6524 GLboolean GL_APIENTRY GL_IsEnablediEXT(GLenum target, GLuint index)
6525 {
6526     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6527     Context *context = GetValidGlobalContext();
6528     EVENT(context, GLIsEnablediEXT, "context = %d, target = %s, index = %u", CID(context),
6529           GLenumToString(GLESEnum::EnableCap, target), index);
6530 
6531     GLboolean returnValue;
6532     if (context)
6533     {
6534         bool isCallValid =
6535             (context->skipValidation() ||
6536              ValidateIsEnablediEXT(context->getPrivateState(),
6537                                    context->getMutableErrorSetForValidation(),
6538                                    angle::EntryPoint::GLIsEnablediEXT, target, index));
6539         if (isCallValid)
6540         {
6541             returnValue =
6542                 ContextPrivateIsEnabledi(context->getMutablePrivateState(),
6543                                          context->getMutablePrivateStateCache(), target, index);
6544         }
6545         else
6546         {
6547             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnablediEXT, GLboolean>();
6548         }
6549         ANGLE_CAPTURE_GL(IsEnablediEXT, isCallValid, context, target, index, returnValue);
6550     }
6551     else
6552     {
6553         GenerateContextLostErrorOnCurrentGlobalContext();
6554         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnablediEXT, GLboolean>();
6555     }
6556     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6557     return returnValue;
6558 }
6559 
6560 // GL_EXT_draw_elements_base_vertex
GL_DrawElementsBaseVertexEXT(GLenum mode,GLsizei count,GLenum type,const void * indices,GLint basevertex)6561 void GL_APIENTRY GL_DrawElementsBaseVertexEXT(GLenum mode,
6562                                               GLsizei count,
6563                                               GLenum type,
6564                                               const void *indices,
6565                                               GLint basevertex)
6566 {
6567     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6568     Context *context = GetValidGlobalContext();
6569     EVENT(context, GLDrawElementsBaseVertexEXT,
6570           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
6571           ", basevertex = %d",
6572           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), count,
6573           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, basevertex);
6574 
6575     if (context)
6576     {
6577         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
6578         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
6579         SCOPED_SHARE_CONTEXT_LOCK(context);
6580         bool isCallValid = (context->skipValidation() ||
6581                             ValidateDrawElementsBaseVertexEXT(
6582                                 context, angle::EntryPoint::GLDrawElementsBaseVertexEXT, modePacked,
6583                                 count, typePacked, indices, basevertex));
6584         if (isCallValid)
6585         {
6586             context->drawElementsBaseVertex(modePacked, count, typePacked, indices, basevertex);
6587         }
6588         ANGLE_CAPTURE_GL(DrawElementsBaseVertexEXT, isCallValid, context, modePacked, count,
6589                          typePacked, indices, basevertex);
6590     }
6591     else
6592     {
6593         GenerateContextLostErrorOnCurrentGlobalContext();
6594     }
6595     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6596 }
6597 
GL_DrawElementsInstancedBaseVertexEXT(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei instancecount,GLint basevertex)6598 void GL_APIENTRY GL_DrawElementsInstancedBaseVertexEXT(GLenum mode,
6599                                                        GLsizei count,
6600                                                        GLenum type,
6601                                                        const void *indices,
6602                                                        GLsizei instancecount,
6603                                                        GLint basevertex)
6604 {
6605     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6606     Context *context = GetValidGlobalContext();
6607     EVENT(context, GLDrawElementsInstancedBaseVertexEXT,
6608           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
6609           ", instancecount = %d, basevertex = %d",
6610           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), count,
6611           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, instancecount,
6612           basevertex);
6613 
6614     if (context)
6615     {
6616         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
6617         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
6618         SCOPED_SHARE_CONTEXT_LOCK(context);
6619         bool isCallValid = (context->skipValidation() ||
6620                             ValidateDrawElementsInstancedBaseVertexEXT(
6621                                 context, angle::EntryPoint::GLDrawElementsInstancedBaseVertexEXT,
6622                                 modePacked, count, typePacked, indices, instancecount, basevertex));
6623         if (isCallValid)
6624         {
6625             context->drawElementsInstancedBaseVertex(modePacked, count, typePacked, indices,
6626                                                      instancecount, basevertex);
6627         }
6628         ANGLE_CAPTURE_GL(DrawElementsInstancedBaseVertexEXT, isCallValid, context, modePacked,
6629                          count, typePacked, indices, instancecount, basevertex);
6630     }
6631     else
6632     {
6633         GenerateContextLostErrorOnCurrentGlobalContext();
6634     }
6635     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6636 }
6637 
GL_DrawRangeElementsBaseVertexEXT(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const void * indices,GLint basevertex)6638 void GL_APIENTRY GL_DrawRangeElementsBaseVertexEXT(GLenum mode,
6639                                                    GLuint start,
6640                                                    GLuint end,
6641                                                    GLsizei count,
6642                                                    GLenum type,
6643                                                    const void *indices,
6644                                                    GLint basevertex)
6645 {
6646     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6647     Context *context = GetValidGlobalContext();
6648     EVENT(context, GLDrawRangeElementsBaseVertexEXT,
6649           "context = %d, mode = %s, start = %u, end = %u, count = %d, type = %s, indices = "
6650           "0x%016" PRIxPTR ", basevertex = %d",
6651           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), start, end, count,
6652           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, basevertex);
6653 
6654     if (context)
6655     {
6656         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
6657         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
6658         SCOPED_SHARE_CONTEXT_LOCK(context);
6659         bool isCallValid = (context->skipValidation() ||
6660                             ValidateDrawRangeElementsBaseVertexEXT(
6661                                 context, angle::EntryPoint::GLDrawRangeElementsBaseVertexEXT,
6662                                 modePacked, start, end, count, typePacked, indices, basevertex));
6663         if (isCallValid)
6664         {
6665             context->drawRangeElementsBaseVertex(modePacked, start, end, count, typePacked, indices,
6666                                                  basevertex);
6667         }
6668         ANGLE_CAPTURE_GL(DrawRangeElementsBaseVertexEXT, isCallValid, context, modePacked, start,
6669                          end, count, typePacked, indices, basevertex);
6670     }
6671     else
6672     {
6673         GenerateContextLostErrorOnCurrentGlobalContext();
6674     }
6675     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6676 }
6677 
GL_MultiDrawElementsBaseVertexEXT(GLenum mode,const GLsizei * count,GLenum type,const void * const * indices,GLsizei drawcount,const GLint * basevertex)6678 void GL_APIENTRY GL_MultiDrawElementsBaseVertexEXT(GLenum mode,
6679                                                    const GLsizei *count,
6680                                                    GLenum type,
6681                                                    const void *const *indices,
6682                                                    GLsizei drawcount,
6683                                                    const GLint *basevertex)
6684 {
6685     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6686     Context *context = GetValidGlobalContext();
6687     EVENT(context, GLMultiDrawElementsBaseVertexEXT,
6688           "context = %d, mode = %s, count = 0x%016" PRIxPTR ", type = %s, indices = 0x%016" PRIxPTR
6689           ", drawcount = %d, basevertex = 0x%016" PRIxPTR "",
6690           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), (uintptr_t)count,
6691           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, drawcount,
6692           (uintptr_t)basevertex);
6693 
6694     if (context)
6695     {
6696         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
6697         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
6698         SCOPED_SHARE_CONTEXT_LOCK(context);
6699         bool isCallValid =
6700             (context->skipValidation() ||
6701              (ValidatePixelLocalStorageInactive(
6702                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
6703                   angle::EntryPoint::GLMultiDrawElementsBaseVertexEXT) &&
6704               ValidateMultiDrawElementsBaseVertexEXT(
6705                   context, angle::EntryPoint::GLMultiDrawElementsBaseVertexEXT, modePacked, count,
6706                   typePacked, indices, drawcount, basevertex)));
6707         if (isCallValid)
6708         {
6709             context->multiDrawElementsBaseVertex(modePacked, count, typePacked, indices, drawcount,
6710                                                  basevertex);
6711         }
6712         ANGLE_CAPTURE_GL(MultiDrawElementsBaseVertexEXT, isCallValid, context, modePacked, count,
6713                          typePacked, indices, drawcount, basevertex);
6714     }
6715     else
6716     {
6717         GenerateContextLostErrorOnCurrentGlobalContext();
6718     }
6719     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6720 }
6721 
6722 // GL_EXT_external_buffer
GL_BufferStorageExternalEXT(GLenum target,GLintptr offset,GLsizeiptr size,GLeglClientBufferEXT clientBuffer,GLbitfield flags)6723 void GL_APIENTRY GL_BufferStorageExternalEXT(GLenum target,
6724                                              GLintptr offset,
6725                                              GLsizeiptr size,
6726                                              GLeglClientBufferEXT clientBuffer,
6727                                              GLbitfield flags)
6728 {
6729     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6730     Context *context = GetValidGlobalContext();
6731     EVENT(context, GLBufferStorageExternalEXT,
6732           "context = %d, target = %s, offset = %llu, size = %llu, clientBuffer = 0x%016" PRIxPTR
6733           ", flags = %s",
6734           CID(context), GLenumToString(GLESEnum::AllEnums, target),
6735           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(size),
6736           (uintptr_t)clientBuffer, GLbitfieldToString(GLESEnum::BufferStorageMask, flags).c_str());
6737 
6738     if (context)
6739     {
6740         BufferBinding targetPacked = PackParam<BufferBinding>(target);
6741         SCOPED_SHARE_CONTEXT_LOCK(context);
6742         bool isCallValid =
6743             (context->skipValidation() ||
6744              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
6745                                                 context->getMutableErrorSetForValidation(),
6746                                                 angle::EntryPoint::GLBufferStorageExternalEXT) &&
6747               ValidateBufferStorageExternalEXT(context,
6748                                                angle::EntryPoint::GLBufferStorageExternalEXT,
6749                                                targetPacked, offset, size, clientBuffer, flags)));
6750         if (isCallValid)
6751         {
6752             context->bufferStorageExternal(targetPacked, offset, size, clientBuffer, flags);
6753         }
6754         ANGLE_CAPTURE_GL(BufferStorageExternalEXT, isCallValid, context, targetPacked, offset, size,
6755                          clientBuffer, flags);
6756     }
6757     else
6758     {
6759         GenerateContextLostErrorOnCurrentGlobalContext();
6760     }
6761     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6762 }
6763 
GL_NamedBufferStorageExternalEXT(GLuint buffer,GLintptr offset,GLsizeiptr size,GLeglClientBufferEXT clientBuffer,GLbitfield flags)6764 void GL_APIENTRY GL_NamedBufferStorageExternalEXT(GLuint buffer,
6765                                                   GLintptr offset,
6766                                                   GLsizeiptr size,
6767                                                   GLeglClientBufferEXT clientBuffer,
6768                                                   GLbitfield flags)
6769 {
6770     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6771     Context *context = GetValidGlobalContext();
6772     EVENT(context, GLNamedBufferStorageExternalEXT,
6773           "context = %d, buffer = %u, offset = %llu, size = %llu, clientBuffer = 0x%016" PRIxPTR
6774           ", flags = %s",
6775           CID(context), buffer, static_cast<unsigned long long>(offset),
6776           static_cast<unsigned long long>(size), (uintptr_t)clientBuffer,
6777           GLbitfieldToString(GLESEnum::BufferStorageMask, flags).c_str());
6778 
6779     if (context)
6780     {
6781         SCOPED_SHARE_CONTEXT_LOCK(context);
6782         bool isCallValid =
6783             (context->skipValidation() ||
6784              (ValidatePixelLocalStorageInactive(
6785                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
6786                   angle::EntryPoint::GLNamedBufferStorageExternalEXT) &&
6787               ValidateNamedBufferStorageExternalEXT(
6788                   context, angle::EntryPoint::GLNamedBufferStorageExternalEXT, buffer, offset, size,
6789                   clientBuffer, flags)));
6790         if (isCallValid)
6791         {
6792             context->namedBufferStorageExternal(buffer, offset, size, clientBuffer, flags);
6793         }
6794         ANGLE_CAPTURE_GL(NamedBufferStorageExternalEXT, isCallValid, context, buffer, offset, size,
6795                          clientBuffer, flags);
6796     }
6797     else
6798     {
6799         GenerateContextLostErrorOnCurrentGlobalContext();
6800     }
6801     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6802 }
6803 
6804 // GL_EXT_float_blend
6805 
6806 // GL_EXT_geometry_shader
GL_FramebufferTextureEXT(GLenum target,GLenum attachment,GLuint texture,GLint level)6807 void GL_APIENTRY GL_FramebufferTextureEXT(GLenum target,
6808                                           GLenum attachment,
6809                                           GLuint texture,
6810                                           GLint level)
6811 {
6812     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6813     Context *context = GetValidGlobalContext();
6814     EVENT(context, GLFramebufferTextureEXT,
6815           "context = %d, target = %s, attachment = %s, texture = %u, level = %d", CID(context),
6816           GLenumToString(GLESEnum::FramebufferTarget, target),
6817           GLenumToString(GLESEnum::FramebufferAttachment, attachment), texture, level);
6818 
6819     if (context)
6820     {
6821         TextureID texturePacked = PackParam<TextureID>(texture);
6822         SCOPED_SHARE_CONTEXT_LOCK(context);
6823         bool isCallValid =
6824             (context->skipValidation() ||
6825              ValidateFramebufferTextureEXT(context, angle::EntryPoint::GLFramebufferTextureEXT,
6826                                            target, attachment, texturePacked, level));
6827         if (isCallValid)
6828         {
6829             context->framebufferTexture(target, attachment, texturePacked, level);
6830         }
6831         ANGLE_CAPTURE_GL(FramebufferTextureEXT, isCallValid, context, target, attachment,
6832                          texturePacked, level);
6833     }
6834     else
6835     {
6836         GenerateContextLostErrorOnCurrentGlobalContext();
6837     }
6838     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6839 }
6840 
6841 // GL_EXT_gpu_shader5
6842 
6843 // GL_EXT_instanced_arrays
GL_DrawArraysInstancedEXT(GLenum mode,GLint start,GLsizei count,GLsizei primcount)6844 void GL_APIENTRY GL_DrawArraysInstancedEXT(GLenum mode,
6845                                            GLint start,
6846                                            GLsizei count,
6847                                            GLsizei primcount)
6848 {
6849     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6850     Context *context = GetValidGlobalContext();
6851     EVENT(context, GLDrawArraysInstancedEXT,
6852           "context = %d, mode = %s, start = %d, count = %d, primcount = %d", CID(context),
6853           GLenumToString(GLESEnum::PrimitiveType, mode), start, count, primcount);
6854 
6855     if (context)
6856     {
6857         PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);
6858         SCOPED_SHARE_CONTEXT_LOCK(context);
6859         bool isCallValid =
6860             (context->skipValidation() ||
6861              ValidateDrawArraysInstancedEXT(context, angle::EntryPoint::GLDrawArraysInstancedEXT,
6862                                             modePacked, start, count, primcount));
6863         if (isCallValid)
6864         {
6865             context->drawArraysInstanced(modePacked, start, count, primcount);
6866         }
6867         ANGLE_CAPTURE_GL(DrawArraysInstancedEXT, isCallValid, context, modePacked, start, count,
6868                          primcount);
6869     }
6870     else
6871     {
6872         GenerateContextLostErrorOnCurrentGlobalContext();
6873     }
6874     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6875 }
6876 
GL_DrawElementsInstancedEXT(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei primcount)6877 void GL_APIENTRY GL_DrawElementsInstancedEXT(GLenum mode,
6878                                              GLsizei count,
6879                                              GLenum type,
6880                                              const void *indices,
6881                                              GLsizei primcount)
6882 {
6883     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6884     Context *context = GetValidGlobalContext();
6885     EVENT(context, GLDrawElementsInstancedEXT,
6886           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
6887           ", primcount = %d",
6888           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), count,
6889           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, primcount);
6890 
6891     if (context)
6892     {
6893         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
6894         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
6895         SCOPED_SHARE_CONTEXT_LOCK(context);
6896         bool isCallValid = (context->skipValidation() ||
6897                             ValidateDrawElementsInstancedEXT(
6898                                 context, angle::EntryPoint::GLDrawElementsInstancedEXT, modePacked,
6899                                 count, typePacked, indices, primcount));
6900         if (isCallValid)
6901         {
6902             context->drawElementsInstanced(modePacked, count, typePacked, indices, primcount);
6903         }
6904         ANGLE_CAPTURE_GL(DrawElementsInstancedEXT, isCallValid, context, modePacked, count,
6905                          typePacked, indices, primcount);
6906     }
6907     else
6908     {
6909         GenerateContextLostErrorOnCurrentGlobalContext();
6910     }
6911     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6912 }
6913 
GL_VertexAttribDivisorEXT(GLuint index,GLuint divisor)6914 void GL_APIENTRY GL_VertexAttribDivisorEXT(GLuint index, GLuint divisor)
6915 {
6916     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6917     Context *context = GetValidGlobalContext();
6918     EVENT(context, GLVertexAttribDivisorEXT, "context = %d, index = %u, divisor = %u", CID(context),
6919           index, divisor);
6920 
6921     if (context)
6922     {
6923         SCOPED_SHARE_CONTEXT_LOCK(context);
6924         bool isCallValid =
6925             (context->skipValidation() ||
6926              ValidateVertexAttribDivisorEXT(context, angle::EntryPoint::GLVertexAttribDivisorEXT,
6927                                             index, divisor));
6928         if (isCallValid)
6929         {
6930             context->vertexAttribDivisor(index, divisor);
6931         }
6932         ANGLE_CAPTURE_GL(VertexAttribDivisorEXT, isCallValid, context, index, divisor);
6933     }
6934     else
6935     {
6936         GenerateContextLostErrorOnCurrentGlobalContext();
6937     }
6938     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6939 }
6940 
6941 // GL_EXT_map_buffer_range
GL_FlushMappedBufferRangeEXT(GLenum target,GLintptr offset,GLsizeiptr length)6942 void GL_APIENTRY GL_FlushMappedBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length)
6943 {
6944     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6945     Context *context = GetValidGlobalContext();
6946     EVENT(context, GLFlushMappedBufferRangeEXT,
6947           "context = %d, target = %s, offset = %llu, length = %llu", CID(context),
6948           GLenumToString(GLESEnum::BufferTargetARB, target),
6949           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(length));
6950 
6951     if (context)
6952     {
6953         BufferBinding targetPacked = PackParam<BufferBinding>(target);
6954         SCOPED_SHARE_CONTEXT_LOCK(context);
6955         bool isCallValid =
6956             (context->skipValidation() ||
6957              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
6958                                                 context->getMutableErrorSetForValidation(),
6959                                                 angle::EntryPoint::GLFlushMappedBufferRangeEXT) &&
6960               ValidateFlushMappedBufferRangeEXT(context,
6961                                                 angle::EntryPoint::GLFlushMappedBufferRangeEXT,
6962                                                 targetPacked, offset, length)));
6963         if (isCallValid)
6964         {
6965             context->flushMappedBufferRange(targetPacked, offset, length);
6966         }
6967         ANGLE_CAPTURE_GL(FlushMappedBufferRangeEXT, isCallValid, context, targetPacked, offset,
6968                          length);
6969     }
6970     else
6971     {
6972         GenerateContextLostErrorOnCurrentGlobalContext();
6973     }
6974     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6975 }
6976 
GL_MapBufferRangeEXT(GLenum target,GLintptr offset,GLsizeiptr length,GLbitfield access)6977 void *GL_APIENTRY GL_MapBufferRangeEXT(GLenum target,
6978                                        GLintptr offset,
6979                                        GLsizeiptr length,
6980                                        GLbitfield access)
6981 {
6982     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
6983     Context *context = GetValidGlobalContext();
6984     EVENT(context, GLMapBufferRangeEXT,
6985           "context = %d, target = %s, offset = %llu, length = %llu, access = %s", CID(context),
6986           GLenumToString(GLESEnum::BufferTargetARB, target),
6987           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(length),
6988           GLbitfieldToString(GLESEnum::MapBufferAccessMask, access).c_str());
6989 
6990     void *returnValue;
6991     if (context)
6992     {
6993         BufferBinding targetPacked = PackParam<BufferBinding>(target);
6994         SCOPED_SHARE_CONTEXT_LOCK(context);
6995         bool isCallValid =
6996             (context->skipValidation() ||
6997              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
6998                                                 context->getMutableErrorSetForValidation(),
6999                                                 angle::EntryPoint::GLMapBufferRangeEXT) &&
7000               ValidateMapBufferRangeEXT(context, angle::EntryPoint::GLMapBufferRangeEXT,
7001                                         targetPacked, offset, length, access)));
7002         if (isCallValid)
7003         {
7004             returnValue = context->mapBufferRange(targetPacked, offset, length, access);
7005         }
7006         else
7007         {
7008             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferRangeEXT, void *>();
7009         }
7010         ANGLE_CAPTURE_GL(MapBufferRangeEXT, isCallValid, context, targetPacked, offset, length,
7011                          access, returnValue);
7012     }
7013     else
7014     {
7015         GenerateContextLostErrorOnCurrentGlobalContext();
7016         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferRangeEXT, void *>();
7017     }
7018     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7019     return returnValue;
7020 }
7021 
7022 // GL_EXT_memory_object
GL_BufferStorageMemEXT(GLenum target,GLsizeiptr size,GLuint memory,GLuint64 offset)7023 void GL_APIENTRY GL_BufferStorageMemEXT(GLenum target,
7024                                         GLsizeiptr size,
7025                                         GLuint memory,
7026                                         GLuint64 offset)
7027 {
7028     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7029     Context *context = GetValidGlobalContext();
7030     EVENT(context, GLBufferStorageMemEXT,
7031           "context = %d, target = %s, size = %llu, memory = %u, offset = %llu", CID(context),
7032           GLenumToString(GLESEnum::BufferTargetARB, target), static_cast<unsigned long long>(size),
7033           memory, static_cast<unsigned long long>(offset));
7034 
7035     if (context)
7036     {
7037         TextureType targetPacked    = PackParam<TextureType>(target);
7038         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
7039         SCOPED_SHARE_CONTEXT_LOCK(context);
7040         bool isCallValid =
7041             (context->skipValidation() ||
7042              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
7043                                                 context->getMutableErrorSetForValidation(),
7044                                                 angle::EntryPoint::GLBufferStorageMemEXT) &&
7045               ValidateBufferStorageMemEXT(context, angle::EntryPoint::GLBufferStorageMemEXT,
7046                                           targetPacked, size, memoryPacked, offset)));
7047         if (isCallValid)
7048         {
7049             context->bufferStorageMem(targetPacked, size, memoryPacked, offset);
7050         }
7051         ANGLE_CAPTURE_GL(BufferStorageMemEXT, isCallValid, context, targetPacked, size,
7052                          memoryPacked, offset);
7053     }
7054     else
7055     {
7056         GenerateContextLostErrorOnCurrentGlobalContext();
7057     }
7058     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7059 }
7060 
GL_CreateMemoryObjectsEXT(GLsizei n,GLuint * memoryObjects)7061 void GL_APIENTRY GL_CreateMemoryObjectsEXT(GLsizei n, GLuint *memoryObjects)
7062 {
7063     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7064     Context *context = GetValidGlobalContext();
7065     EVENT(context, GLCreateMemoryObjectsEXT,
7066           "context = %d, n = %d, memoryObjects = 0x%016" PRIxPTR "", CID(context), n,
7067           (uintptr_t)memoryObjects);
7068 
7069     if (context)
7070     {
7071         MemoryObjectID *memoryObjectsPacked = PackParam<MemoryObjectID *>(memoryObjects);
7072         SCOPED_SHARE_CONTEXT_LOCK(context);
7073         bool isCallValid =
7074             (context->skipValidation() ||
7075              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
7076                                                 context->getMutableErrorSetForValidation(),
7077                                                 angle::EntryPoint::GLCreateMemoryObjectsEXT) &&
7078               ValidateCreateMemoryObjectsEXT(context, angle::EntryPoint::GLCreateMemoryObjectsEXT,
7079                                              n, memoryObjectsPacked)));
7080         if (isCallValid)
7081         {
7082             context->createMemoryObjects(n, memoryObjectsPacked);
7083         }
7084         ANGLE_CAPTURE_GL(CreateMemoryObjectsEXT, isCallValid, context, n, memoryObjectsPacked);
7085     }
7086     else
7087     {
7088         GenerateContextLostErrorOnCurrentGlobalContext();
7089     }
7090     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7091 }
7092 
GL_DeleteMemoryObjectsEXT(GLsizei n,const GLuint * memoryObjects)7093 void GL_APIENTRY GL_DeleteMemoryObjectsEXT(GLsizei n, const GLuint *memoryObjects)
7094 {
7095     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7096     Context *context = GetValidGlobalContext();
7097     EVENT(context, GLDeleteMemoryObjectsEXT,
7098           "context = %d, n = %d, memoryObjects = 0x%016" PRIxPTR "", CID(context), n,
7099           (uintptr_t)memoryObjects);
7100 
7101     if (context)
7102     {
7103         const MemoryObjectID *memoryObjectsPacked =
7104             PackParam<const MemoryObjectID *>(memoryObjects);
7105         SCOPED_SHARE_CONTEXT_LOCK(context);
7106         bool isCallValid =
7107             (context->skipValidation() ||
7108              ValidateDeleteMemoryObjectsEXT(context, angle::EntryPoint::GLDeleteMemoryObjectsEXT, n,
7109                                             memoryObjectsPacked));
7110         if (isCallValid)
7111         {
7112             context->deleteMemoryObjects(n, memoryObjectsPacked);
7113         }
7114         ANGLE_CAPTURE_GL(DeleteMemoryObjectsEXT, isCallValid, context, n, memoryObjectsPacked);
7115     }
7116     else
7117     {
7118         GenerateContextLostErrorOnCurrentGlobalContext();
7119     }
7120     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7121 }
7122 
GL_GetMemoryObjectParameterivEXT(GLuint memoryObject,GLenum pname,GLint * params)7123 void GL_APIENTRY GL_GetMemoryObjectParameterivEXT(GLuint memoryObject, GLenum pname, GLint *params)
7124 {
7125     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7126     Context *context = GetValidGlobalContext();
7127     EVENT(context, GLGetMemoryObjectParameterivEXT,
7128           "context = %d, memoryObject = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
7129           memoryObject, GLenumToString(GLESEnum::MemoryObjectParameterName, pname),
7130           (uintptr_t)params);
7131 
7132     if (context)
7133     {
7134         MemoryObjectID memoryObjectPacked = PackParam<MemoryObjectID>(memoryObject);
7135         SCOPED_SHARE_CONTEXT_LOCK(context);
7136         bool isCallValid = (context->skipValidation() ||
7137                             ValidateGetMemoryObjectParameterivEXT(
7138                                 context, angle::EntryPoint::GLGetMemoryObjectParameterivEXT,
7139                                 memoryObjectPacked, pname, params));
7140         if (isCallValid)
7141         {
7142             context->getMemoryObjectParameteriv(memoryObjectPacked, pname, params);
7143         }
7144         ANGLE_CAPTURE_GL(GetMemoryObjectParameterivEXT, isCallValid, context, memoryObjectPacked,
7145                          pname, params);
7146     }
7147     else
7148     {
7149         GenerateContextLostErrorOnCurrentGlobalContext();
7150     }
7151     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7152 }
7153 
GL_GetUnsignedBytevEXT(GLenum pname,GLubyte * data)7154 void GL_APIENTRY GL_GetUnsignedBytevEXT(GLenum pname, GLubyte *data)
7155 {
7156     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7157     Context *context = GetValidGlobalContext();
7158     EVENT(context, GLGetUnsignedBytevEXT, "context = %d, pname = %s, data = 0x%016" PRIxPTR "",
7159           CID(context), GLenumToString(GLESEnum::GetPName, pname), (uintptr_t)data);
7160 
7161     if (context)
7162     {
7163         SCOPED_SHARE_CONTEXT_LOCK(context);
7164         bool isCallValid = (context->skipValidation() ||
7165                             ValidateGetUnsignedBytevEXT(
7166                                 context, angle::EntryPoint::GLGetUnsignedBytevEXT, pname, data));
7167         if (isCallValid)
7168         {
7169             context->getUnsignedBytev(pname, data);
7170         }
7171         ANGLE_CAPTURE_GL(GetUnsignedBytevEXT, isCallValid, context, pname, data);
7172     }
7173     else
7174     {
7175         GenerateContextLostErrorOnCurrentGlobalContext();
7176     }
7177     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7178 }
7179 
GL_GetUnsignedBytei_vEXT(GLenum target,GLuint index,GLubyte * data)7180 void GL_APIENTRY GL_GetUnsignedBytei_vEXT(GLenum target, GLuint index, GLubyte *data)
7181 {
7182     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7183     Context *context = GetValidGlobalContext();
7184     EVENT(context, GLGetUnsignedBytei_vEXT,
7185           "context = %d, target = %s, index = %u, data = 0x%016" PRIxPTR "", CID(context),
7186           GLenumToString(GLESEnum::AllEnums, target), index, (uintptr_t)data);
7187 
7188     if (context)
7189     {
7190         SCOPED_SHARE_CONTEXT_LOCK(context);
7191         bool isCallValid =
7192             (context->skipValidation() ||
7193              ValidateGetUnsignedBytei_vEXT(context, angle::EntryPoint::GLGetUnsignedBytei_vEXT,
7194                                            target, index, data));
7195         if (isCallValid)
7196         {
7197             context->getUnsignedBytei_v(target, index, data);
7198         }
7199         ANGLE_CAPTURE_GL(GetUnsignedBytei_vEXT, isCallValid, context, target, index, data);
7200     }
7201     else
7202     {
7203         GenerateContextLostErrorOnCurrentGlobalContext();
7204     }
7205     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7206 }
7207 
GL_IsMemoryObjectEXT(GLuint memoryObject)7208 GLboolean GL_APIENTRY GL_IsMemoryObjectEXT(GLuint memoryObject)
7209 {
7210     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7211     Context *context = GetValidGlobalContext();
7212     EVENT(context, GLIsMemoryObjectEXT, "context = %d, memoryObject = %u", CID(context),
7213           memoryObject);
7214 
7215     GLboolean returnValue;
7216     if (context)
7217     {
7218         MemoryObjectID memoryObjectPacked = PackParam<MemoryObjectID>(memoryObject);
7219         SCOPED_SHARE_CONTEXT_LOCK(context);
7220         bool isCallValid =
7221             (context->skipValidation() ||
7222              ValidateIsMemoryObjectEXT(context, angle::EntryPoint::GLIsMemoryObjectEXT,
7223                                        memoryObjectPacked));
7224         if (isCallValid)
7225         {
7226             returnValue = context->isMemoryObject(memoryObjectPacked);
7227         }
7228         else
7229         {
7230             returnValue =
7231                 GetDefaultReturnValue<angle::EntryPoint::GLIsMemoryObjectEXT, GLboolean>();
7232         }
7233         ANGLE_CAPTURE_GL(IsMemoryObjectEXT, isCallValid, context, memoryObjectPacked, returnValue);
7234     }
7235     else
7236     {
7237         GenerateContextLostErrorOnCurrentGlobalContext();
7238         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsMemoryObjectEXT, GLboolean>();
7239     }
7240     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7241     return returnValue;
7242 }
7243 
GL_MemoryObjectParameterivEXT(GLuint memoryObject,GLenum pname,const GLint * params)7244 void GL_APIENTRY GL_MemoryObjectParameterivEXT(GLuint memoryObject,
7245                                                GLenum pname,
7246                                                const GLint *params)
7247 {
7248     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7249     Context *context = GetValidGlobalContext();
7250     EVENT(context, GLMemoryObjectParameterivEXT,
7251           "context = %d, memoryObject = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
7252           memoryObject, GLenumToString(GLESEnum::MemoryObjectParameterName, pname),
7253           (uintptr_t)params);
7254 
7255     if (context)
7256     {
7257         MemoryObjectID memoryObjectPacked = PackParam<MemoryObjectID>(memoryObject);
7258         SCOPED_SHARE_CONTEXT_LOCK(context);
7259         bool isCallValid =
7260             (context->skipValidation() ||
7261              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
7262                                                 context->getMutableErrorSetForValidation(),
7263                                                 angle::EntryPoint::GLMemoryObjectParameterivEXT) &&
7264               ValidateMemoryObjectParameterivEXT(context,
7265                                                  angle::EntryPoint::GLMemoryObjectParameterivEXT,
7266                                                  memoryObjectPacked, pname, params)));
7267         if (isCallValid)
7268         {
7269             context->memoryObjectParameteriv(memoryObjectPacked, pname, params);
7270         }
7271         ANGLE_CAPTURE_GL(MemoryObjectParameterivEXT, isCallValid, context, memoryObjectPacked,
7272                          pname, params);
7273     }
7274     else
7275     {
7276         GenerateContextLostErrorOnCurrentGlobalContext();
7277     }
7278     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7279 }
7280 
GL_TexStorageMem2DEXT(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height,GLuint memory,GLuint64 offset)7281 void GL_APIENTRY GL_TexStorageMem2DEXT(GLenum target,
7282                                        GLsizei levels,
7283                                        GLenum internalFormat,
7284                                        GLsizei width,
7285                                        GLsizei height,
7286                                        GLuint memory,
7287                                        GLuint64 offset)
7288 {
7289     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7290     Context *context = GetValidGlobalContext();
7291     EVENT(context, GLTexStorageMem2DEXT,
7292           "context = %d, target = %s, levels = %d, internalFormat = %s, width = %d, height = %d, "
7293           "memory = %u, offset = %llu",
7294           CID(context), GLenumToString(GLESEnum::TextureTarget, target), levels,
7295           GLenumToString(GLESEnum::SizedInternalFormat, internalFormat), width, height, memory,
7296           static_cast<unsigned long long>(offset));
7297 
7298     if (context)
7299     {
7300         TextureType targetPacked    = PackParam<TextureType>(target);
7301         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
7302         SCOPED_SHARE_CONTEXT_LOCK(context);
7303         bool isCallValid =
7304             (context->skipValidation() ||
7305              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
7306                                                 context->getMutableErrorSetForValidation(),
7307                                                 angle::EntryPoint::GLTexStorageMem2DEXT) &&
7308               ValidateTexStorageMem2DEXT(context, angle::EntryPoint::GLTexStorageMem2DEXT,
7309                                          targetPacked, levels, internalFormat, width, height,
7310                                          memoryPacked, offset)));
7311         if (isCallValid)
7312         {
7313             context->texStorageMem2D(targetPacked, levels, internalFormat, width, height,
7314                                      memoryPacked, offset);
7315         }
7316         ANGLE_CAPTURE_GL(TexStorageMem2DEXT, isCallValid, context, targetPacked, levels,
7317                          internalFormat, width, height, memoryPacked, offset);
7318     }
7319     else
7320     {
7321         GenerateContextLostErrorOnCurrentGlobalContext();
7322     }
7323     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7324 }
7325 
GL_TexStorageMem2DMultisampleEXT(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLboolean fixedSampleLocations,GLuint memory,GLuint64 offset)7326 void GL_APIENTRY GL_TexStorageMem2DMultisampleEXT(GLenum target,
7327                                                   GLsizei samples,
7328                                                   GLenum internalFormat,
7329                                                   GLsizei width,
7330                                                   GLsizei height,
7331                                                   GLboolean fixedSampleLocations,
7332                                                   GLuint memory,
7333                                                   GLuint64 offset)
7334 {
7335     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7336     Context *context = GetValidGlobalContext();
7337     EVENT(context, GLTexStorageMem2DMultisampleEXT,
7338           "context = %d, target = %s, samples = %d, internalFormat = %s, width = %d, height = %d, "
7339           "fixedSampleLocations = %s, memory = %u, offset = %llu",
7340           CID(context), GLenumToString(GLESEnum::TextureTarget, target), samples,
7341           GLenumToString(GLESEnum::SizedInternalFormat, internalFormat), width, height,
7342           GLbooleanToString(fixedSampleLocations), memory, static_cast<unsigned long long>(offset));
7343 
7344     if (context)
7345     {
7346         TextureType targetPacked    = PackParam<TextureType>(target);
7347         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
7348         SCOPED_SHARE_CONTEXT_LOCK(context);
7349         bool isCallValid =
7350             (context->skipValidation() ||
7351              (ValidatePixelLocalStorageInactive(
7352                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
7353                   angle::EntryPoint::GLTexStorageMem2DMultisampleEXT) &&
7354               ValidateTexStorageMem2DMultisampleEXT(
7355                   context, angle::EntryPoint::GLTexStorageMem2DMultisampleEXT, targetPacked,
7356                   samples, internalFormat, width, height, fixedSampleLocations, memoryPacked,
7357                   offset)));
7358         if (isCallValid)
7359         {
7360             context->texStorageMem2DMultisample(targetPacked, samples, internalFormat, width,
7361                                                 height, fixedSampleLocations, memoryPacked, offset);
7362         }
7363         ANGLE_CAPTURE_GL(TexStorageMem2DMultisampleEXT, isCallValid, context, targetPacked, samples,
7364                          internalFormat, width, height, fixedSampleLocations, memoryPacked, offset);
7365     }
7366     else
7367     {
7368         GenerateContextLostErrorOnCurrentGlobalContext();
7369     }
7370     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7371 }
7372 
GL_TexStorageMem3DEXT(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLuint memory,GLuint64 offset)7373 void GL_APIENTRY GL_TexStorageMem3DEXT(GLenum target,
7374                                        GLsizei levels,
7375                                        GLenum internalFormat,
7376                                        GLsizei width,
7377                                        GLsizei height,
7378                                        GLsizei depth,
7379                                        GLuint memory,
7380                                        GLuint64 offset)
7381 {
7382     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7383     Context *context = GetValidGlobalContext();
7384     EVENT(context, GLTexStorageMem3DEXT,
7385           "context = %d, target = %s, levels = %d, internalFormat = %s, width = %d, height = %d, "
7386           "depth = %d, memory = %u, offset = %llu",
7387           CID(context), GLenumToString(GLESEnum::TextureTarget, target), levels,
7388           GLenumToString(GLESEnum::SizedInternalFormat, internalFormat), width, height, depth,
7389           memory, static_cast<unsigned long long>(offset));
7390 
7391     if (context)
7392     {
7393         TextureType targetPacked    = PackParam<TextureType>(target);
7394         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
7395         SCOPED_SHARE_CONTEXT_LOCK(context);
7396         bool isCallValid =
7397             (context->skipValidation() ||
7398              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
7399                                                 context->getMutableErrorSetForValidation(),
7400                                                 angle::EntryPoint::GLTexStorageMem3DEXT) &&
7401               ValidateTexStorageMem3DEXT(context, angle::EntryPoint::GLTexStorageMem3DEXT,
7402                                          targetPacked, levels, internalFormat, width, height, depth,
7403                                          memoryPacked, offset)));
7404         if (isCallValid)
7405         {
7406             context->texStorageMem3D(targetPacked, levels, internalFormat, width, height, depth,
7407                                      memoryPacked, offset);
7408         }
7409         ANGLE_CAPTURE_GL(TexStorageMem3DEXT, isCallValid, context, targetPacked, levels,
7410                          internalFormat, width, height, depth, memoryPacked, offset);
7411     }
7412     else
7413     {
7414         GenerateContextLostErrorOnCurrentGlobalContext();
7415     }
7416     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7417 }
7418 
GL_TexStorageMem3DMultisampleEXT(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLboolean fixedSampleLocations,GLuint memory,GLuint64 offset)7419 void GL_APIENTRY GL_TexStorageMem3DMultisampleEXT(GLenum target,
7420                                                   GLsizei samples,
7421                                                   GLenum internalFormat,
7422                                                   GLsizei width,
7423                                                   GLsizei height,
7424                                                   GLsizei depth,
7425                                                   GLboolean fixedSampleLocations,
7426                                                   GLuint memory,
7427                                                   GLuint64 offset)
7428 {
7429     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7430     Context *context = GetValidGlobalContext();
7431     EVENT(context, GLTexStorageMem3DMultisampleEXT,
7432           "context = %d, target = %s, samples = %d, internalFormat = %s, width = %d, height = %d, "
7433           "depth = %d, fixedSampleLocations = %s, memory = %u, offset = %llu",
7434           CID(context), GLenumToString(GLESEnum::TextureTarget, target), samples,
7435           GLenumToString(GLESEnum::SizedInternalFormat, internalFormat), width, height, depth,
7436           GLbooleanToString(fixedSampleLocations), memory, static_cast<unsigned long long>(offset));
7437 
7438     if (context)
7439     {
7440         TextureType targetPacked    = PackParam<TextureType>(target);
7441         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
7442         SCOPED_SHARE_CONTEXT_LOCK(context);
7443         bool isCallValid =
7444             (context->skipValidation() ||
7445              (ValidatePixelLocalStorageInactive(
7446                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
7447                   angle::EntryPoint::GLTexStorageMem3DMultisampleEXT) &&
7448               ValidateTexStorageMem3DMultisampleEXT(
7449                   context, angle::EntryPoint::GLTexStorageMem3DMultisampleEXT, targetPacked,
7450                   samples, internalFormat, width, height, depth, fixedSampleLocations, memoryPacked,
7451                   offset)));
7452         if (isCallValid)
7453         {
7454             context->texStorageMem3DMultisample(targetPacked, samples, internalFormat, width,
7455                                                 height, depth, fixedSampleLocations, memoryPacked,
7456                                                 offset);
7457         }
7458         ANGLE_CAPTURE_GL(TexStorageMem3DMultisampleEXT, isCallValid, context, targetPacked, samples,
7459                          internalFormat, width, height, depth, fixedSampleLocations, memoryPacked,
7460                          offset);
7461     }
7462     else
7463     {
7464         GenerateContextLostErrorOnCurrentGlobalContext();
7465     }
7466     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7467 }
7468 
7469 // GL_EXT_memory_object_fd
GL_ImportMemoryFdEXT(GLuint memory,GLuint64 size,GLenum handleType,GLint fd)7470 void GL_APIENTRY GL_ImportMemoryFdEXT(GLuint memory, GLuint64 size, GLenum handleType, GLint fd)
7471 {
7472     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7473     Context *context = GetValidGlobalContext();
7474     EVENT(context, GLImportMemoryFdEXT,
7475           "context = %d, memory = %u, size = %llu, handleType = %s, fd = %d", CID(context), memory,
7476           static_cast<unsigned long long>(size),
7477           GLenumToString(GLESEnum::ExternalHandleType, handleType), fd);
7478 
7479     if (context)
7480     {
7481         MemoryObjectID memoryPacked = PackParam<MemoryObjectID>(memory);
7482         HandleType handleTypePacked = PackParam<HandleType>(handleType);
7483         SCOPED_SHARE_CONTEXT_LOCK(context);
7484         bool isCallValid =
7485             (context->skipValidation() ||
7486              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
7487                                                 context->getMutableErrorSetForValidation(),
7488                                                 angle::EntryPoint::GLImportMemoryFdEXT) &&
7489               ValidateImportMemoryFdEXT(context, angle::EntryPoint::GLImportMemoryFdEXT,
7490                                         memoryPacked, size, handleTypePacked, fd)));
7491         if (isCallValid)
7492         {
7493             context->importMemoryFd(memoryPacked, size, handleTypePacked, fd);
7494         }
7495         ANGLE_CAPTURE_GL(ImportMemoryFdEXT, isCallValid, context, memoryPacked, size,
7496                          handleTypePacked, fd);
7497     }
7498     else
7499     {
7500         GenerateContextLostErrorOnCurrentGlobalContext();
7501     }
7502     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7503 }
7504 
7505 // GL_EXT_multi_draw_indirect
GL_MultiDrawArraysIndirectEXT(GLenum mode,const void * indirect,GLsizei drawcount,GLsizei stride)7506 void GL_APIENTRY GL_MultiDrawArraysIndirectEXT(GLenum mode,
7507                                                const void *indirect,
7508                                                GLsizei drawcount,
7509                                                GLsizei stride)
7510 {
7511     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7512     Context *context = GetValidGlobalContext();
7513     EVENT(context, GLMultiDrawArraysIndirectEXT,
7514           "context = %d, mode = %s, indirect = 0x%016" PRIxPTR ", drawcount = %d, stride = %d",
7515           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), (uintptr_t)indirect,
7516           drawcount, stride);
7517 
7518     if (context)
7519     {
7520         PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);
7521         SCOPED_SHARE_CONTEXT_LOCK(context);
7522         bool isCallValid =
7523             (context->skipValidation() ||
7524              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
7525                                                 context->getMutableErrorSetForValidation(),
7526                                                 angle::EntryPoint::GLMultiDrawArraysIndirectEXT) &&
7527               ValidateMultiDrawArraysIndirectEXT(context,
7528                                                  angle::EntryPoint::GLMultiDrawArraysIndirectEXT,
7529                                                  modePacked, indirect, drawcount, stride)));
7530         if (isCallValid)
7531         {
7532             context->multiDrawArraysIndirect(modePacked, indirect, drawcount, stride);
7533         }
7534         ANGLE_CAPTURE_GL(MultiDrawArraysIndirectEXT, isCallValid, context, modePacked, indirect,
7535                          drawcount, stride);
7536     }
7537     else
7538     {
7539         GenerateContextLostErrorOnCurrentGlobalContext();
7540     }
7541     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7542 }
7543 
GL_MultiDrawElementsIndirectEXT(GLenum mode,GLenum type,const void * indirect,GLsizei drawcount,GLsizei stride)7544 void GL_APIENTRY GL_MultiDrawElementsIndirectEXT(GLenum mode,
7545                                                  GLenum type,
7546                                                  const void *indirect,
7547                                                  GLsizei drawcount,
7548                                                  GLsizei stride)
7549 {
7550     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7551     Context *context = GetValidGlobalContext();
7552     EVENT(context, GLMultiDrawElementsIndirectEXT,
7553           "context = %d, mode = %s, type = %s, indirect = 0x%016" PRIxPTR
7554           ", drawcount = %d, stride = %d",
7555           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode),
7556           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indirect, drawcount, stride);
7557 
7558     if (context)
7559     {
7560         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
7561         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
7562         SCOPED_SHARE_CONTEXT_LOCK(context);
7563         bool isCallValid =
7564             (context->skipValidation() ||
7565              (ValidatePixelLocalStorageInactive(
7566                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
7567                   angle::EntryPoint::GLMultiDrawElementsIndirectEXT) &&
7568               ValidateMultiDrawElementsIndirectEXT(
7569                   context, angle::EntryPoint::GLMultiDrawElementsIndirectEXT, modePacked,
7570                   typePacked, indirect, drawcount, stride)));
7571         if (isCallValid)
7572         {
7573             context->multiDrawElementsIndirect(modePacked, typePacked, indirect, drawcount, stride);
7574         }
7575         ANGLE_CAPTURE_GL(MultiDrawElementsIndirectEXT, isCallValid, context, modePacked, typePacked,
7576                          indirect, drawcount, stride);
7577     }
7578     else
7579     {
7580         GenerateContextLostErrorOnCurrentGlobalContext();
7581     }
7582     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7583 }
7584 
7585 // GL_EXT_multisampled_render_to_texture
GL_FramebufferTexture2DMultisampleEXT(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level,GLsizei samples)7586 void GL_APIENTRY GL_FramebufferTexture2DMultisampleEXT(GLenum target,
7587                                                        GLenum attachment,
7588                                                        GLenum textarget,
7589                                                        GLuint texture,
7590                                                        GLint level,
7591                                                        GLsizei samples)
7592 {
7593     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7594     Context *context = GetValidGlobalContext();
7595     EVENT(context, GLFramebufferTexture2DMultisampleEXT,
7596           "context = %d, target = %s, attachment = %s, textarget = %s, texture = %u, level = %d, "
7597           "samples = %d",
7598           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target),
7599           GLenumToString(GLESEnum::FramebufferAttachment, attachment),
7600           GLenumToString(GLESEnum::TextureTarget, textarget), texture, level, samples);
7601 
7602     if (context)
7603     {
7604         TextureTarget textargetPacked = PackParam<TextureTarget>(textarget);
7605         TextureID texturePacked       = PackParam<TextureID>(texture);
7606         SCOPED_SHARE_CONTEXT_LOCK(context);
7607         bool isCallValid =
7608             (context->skipValidation() ||
7609              ValidateFramebufferTexture2DMultisampleEXT(
7610                  context, angle::EntryPoint::GLFramebufferTexture2DMultisampleEXT, target,
7611                  attachment, textargetPacked, texturePacked, level, samples));
7612         if (isCallValid)
7613         {
7614             context->framebufferTexture2DMultisample(target, attachment, textargetPacked,
7615                                                      texturePacked, level, samples);
7616         }
7617         ANGLE_CAPTURE_GL(FramebufferTexture2DMultisampleEXT, isCallValid, context, target,
7618                          attachment, textargetPacked, texturePacked, level, samples);
7619     }
7620     else
7621     {
7622         GenerateContextLostErrorOnCurrentGlobalContext();
7623     }
7624     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7625 }
7626 
GL_RenderbufferStorageMultisampleEXT(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height)7627 void GL_APIENTRY GL_RenderbufferStorageMultisampleEXT(GLenum target,
7628                                                       GLsizei samples,
7629                                                       GLenum internalformat,
7630                                                       GLsizei width,
7631                                                       GLsizei height)
7632 {
7633     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7634     Context *context = GetValidGlobalContext();
7635     EVENT(context, GLRenderbufferStorageMultisampleEXT,
7636           "context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d",
7637           CID(context), GLenumToString(GLESEnum::RenderbufferTarget, target), samples,
7638           GLenumToString(GLESEnum::InternalFormat, internalformat), width, height);
7639 
7640     if (context)
7641     {
7642         SCOPED_SHARE_CONTEXT_LOCK(context);
7643         bool isCallValid =
7644             (context->skipValidation() ||
7645              (ValidatePixelLocalStorageInactive(
7646                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
7647                   angle::EntryPoint::GLRenderbufferStorageMultisampleEXT) &&
7648               ValidateRenderbufferStorageMultisampleEXT(
7649                   context, angle::EntryPoint::GLRenderbufferStorageMultisampleEXT, target, samples,
7650                   internalformat, width, height)));
7651         if (isCallValid)
7652         {
7653             context->renderbufferStorageMultisampleEXT(target, samples, internalformat, width,
7654                                                        height);
7655         }
7656         ANGLE_CAPTURE_GL(RenderbufferStorageMultisampleEXT, isCallValid, context, target, samples,
7657                          internalformat, width, height);
7658     }
7659     else
7660     {
7661         GenerateContextLostErrorOnCurrentGlobalContext();
7662     }
7663     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7664 }
7665 
7666 // GL_EXT_multisampled_render_to_texture2
7667 
7668 // GL_EXT_occlusion_query_boolean
7669 // BeginQueryEXT is already defined.
7670 
7671 // DeleteQueriesEXT is already defined.
7672 
7673 // EndQueryEXT is already defined.
7674 
7675 // GenQueriesEXT is already defined.
7676 
7677 // GetQueryObjectuivEXT is already defined.
7678 
7679 // GetQueryivEXT is already defined.
7680 
7681 // IsQueryEXT is already defined.
7682 
7683 // GL_EXT_polygon_offset_clamp
GL_PolygonOffsetClampEXT(GLfloat factor,GLfloat units,GLfloat clamp)7684 void GL_APIENTRY GL_PolygonOffsetClampEXT(GLfloat factor, GLfloat units, GLfloat clamp)
7685 {
7686     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7687     Context *context = GetValidGlobalContext();
7688     EVENT(context, GLPolygonOffsetClampEXT, "context = %d, factor = %f, units = %f, clamp = %f",
7689           CID(context), factor, units, clamp);
7690 
7691     if (context)
7692     {
7693         bool isCallValid =
7694             (context->skipValidation() ||
7695              ValidatePolygonOffsetClampEXT(
7696                  context->getPrivateState(), context->getMutableErrorSetForValidation(),
7697                  angle::EntryPoint::GLPolygonOffsetClampEXT, factor, units, clamp));
7698         if (isCallValid)
7699         {
7700             ContextPrivatePolygonOffsetClamp(context->getMutablePrivateState(),
7701                                              context->getMutablePrivateStateCache(), factor, units,
7702                                              clamp);
7703         }
7704         ANGLE_CAPTURE_GL(PolygonOffsetClampEXT, isCallValid, context, factor, units, clamp);
7705     }
7706     else
7707     {
7708         GenerateContextLostErrorOnCurrentGlobalContext();
7709     }
7710     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7711 }
7712 
7713 // GL_EXT_primitive_bounding_box
GL_PrimitiveBoundingBoxEXT(GLfloat minX,GLfloat minY,GLfloat minZ,GLfloat minW,GLfloat maxX,GLfloat maxY,GLfloat maxZ,GLfloat maxW)7714 void GL_APIENTRY GL_PrimitiveBoundingBoxEXT(GLfloat minX,
7715                                             GLfloat minY,
7716                                             GLfloat minZ,
7717                                             GLfloat minW,
7718                                             GLfloat maxX,
7719                                             GLfloat maxY,
7720                                             GLfloat maxZ,
7721                                             GLfloat maxW)
7722 {
7723     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7724     Context *context = GetValidGlobalContext();
7725     EVENT(context, GLPrimitiveBoundingBoxEXT,
7726           "context = %d, minX = %f, minY = %f, minZ = %f, minW = %f, maxX = %f, maxY = %f, maxZ = "
7727           "%f, maxW = %f",
7728           CID(context), minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
7729 
7730     if (context)
7731     {
7732         bool isCallValid =
7733             (context->skipValidation() ||
7734              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
7735                                                 context->getMutableErrorSetForValidation(),
7736                                                 angle::EntryPoint::GLPrimitiveBoundingBoxEXT) &&
7737               ValidatePrimitiveBoundingBoxEXT(context->getPrivateState(),
7738                                               context->getMutableErrorSetForValidation(),
7739                                               angle::EntryPoint::GLPrimitiveBoundingBoxEXT, minX,
7740                                               minY, minZ, minW, maxX, maxY, maxZ, maxW)));
7741         if (isCallValid)
7742         {
7743             ContextPrivatePrimitiveBoundingBox(context->getMutablePrivateState(),
7744                                                context->getMutablePrivateStateCache(), minX, minY,
7745                                                minZ, minW, maxX, maxY, maxZ, maxW);
7746         }
7747         ANGLE_CAPTURE_GL(PrimitiveBoundingBoxEXT, isCallValid, context, minX, minY, minZ, minW,
7748                          maxX, maxY, maxZ, maxW);
7749     }
7750     else
7751     {
7752         GenerateContextLostErrorOnCurrentGlobalContext();
7753     }
7754     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7755 }
7756 
7757 // GL_EXT_protected_textures
7758 
7759 // GL_EXT_pvrtc_sRGB
7760 
7761 // GL_EXT_read_format_bgra
7762 
7763 // GL_EXT_render_snorm
7764 
7765 // GL_EXT_robustness
GL_GetGraphicsResetStatusEXT()7766 GLenum GL_APIENTRY GL_GetGraphicsResetStatusEXT()
7767 {
7768     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7769     Context *context = GetGlobalContext();
7770     EVENT(context, GLGetGraphicsResetStatusEXT, "context = %d", CID(context));
7771 
7772     GLenum returnValue;
7773     if (context)
7774     {
7775         SCOPED_SHARE_CONTEXT_LOCK(context);
7776         bool isCallValid = (context->skipValidation() ||
7777                             ValidateGetGraphicsResetStatusEXT(
7778                                 context, angle::EntryPoint::GLGetGraphicsResetStatusEXT));
7779         if (isCallValid)
7780         {
7781             returnValue = context->getGraphicsResetStatus();
7782         }
7783         else
7784         {
7785             returnValue =
7786                 GetDefaultReturnValue<angle::EntryPoint::GLGetGraphicsResetStatusEXT, GLenum>();
7787         }
7788         ANGLE_CAPTURE_GL(GetGraphicsResetStatusEXT, isCallValid, context, returnValue);
7789     }
7790     else
7791     {
7792 
7793         returnValue =
7794             GetDefaultReturnValue<angle::EntryPoint::GLGetGraphicsResetStatusEXT, GLenum>();
7795     }
7796     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7797     return returnValue;
7798 }
7799 
GL_GetnUniformfvEXT(GLuint program,GLint location,GLsizei bufSize,GLfloat * params)7800 void GL_APIENTRY GL_GetnUniformfvEXT(GLuint program,
7801                                      GLint location,
7802                                      GLsizei bufSize,
7803                                      GLfloat *params)
7804 {
7805     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7806     Context *context = GetValidGlobalContext();
7807     EVENT(context, GLGetnUniformfvEXT,
7808           "context = %d, program = %u, location = %d, bufSize = %d, params = 0x%016" PRIxPTR "",
7809           CID(context), program, location, bufSize, (uintptr_t)params);
7810 
7811     if (context)
7812     {
7813         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7814         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7815         SCOPED_SHARE_CONTEXT_LOCK(context);
7816         bool isCallValid =
7817             (context->skipValidation() ||
7818              ValidateGetnUniformfvEXT(context, angle::EntryPoint::GLGetnUniformfvEXT, programPacked,
7819                                       locationPacked, bufSize, params));
7820         if (isCallValid)
7821         {
7822             context->getnUniformfv(programPacked, locationPacked, bufSize, params);
7823         }
7824         ANGLE_CAPTURE_GL(GetnUniformfvEXT, isCallValid, context, programPacked, locationPacked,
7825                          bufSize, params);
7826     }
7827     else
7828     {
7829         GenerateContextLostErrorOnCurrentGlobalContext();
7830     }
7831     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7832 }
7833 
GL_GetnUniformivEXT(GLuint program,GLint location,GLsizei bufSize,GLint * params)7834 void GL_APIENTRY GL_GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint *params)
7835 {
7836     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7837     Context *context = GetValidGlobalContext();
7838     EVENT(context, GLGetnUniformivEXT,
7839           "context = %d, program = %u, location = %d, bufSize = %d, params = 0x%016" PRIxPTR "",
7840           CID(context), program, location, bufSize, (uintptr_t)params);
7841 
7842     if (context)
7843     {
7844         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
7845         UniformLocation locationPacked = PackParam<UniformLocation>(location);
7846         SCOPED_SHARE_CONTEXT_LOCK(context);
7847         bool isCallValid =
7848             (context->skipValidation() ||
7849              ValidateGetnUniformivEXT(context, angle::EntryPoint::GLGetnUniformivEXT, programPacked,
7850                                       locationPacked, bufSize, params));
7851         if (isCallValid)
7852         {
7853             context->getnUniformiv(programPacked, locationPacked, bufSize, params);
7854         }
7855         ANGLE_CAPTURE_GL(GetnUniformivEXT, isCallValid, context, programPacked, locationPacked,
7856                          bufSize, params);
7857     }
7858     else
7859     {
7860         GenerateContextLostErrorOnCurrentGlobalContext();
7861     }
7862     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7863 }
7864 
GL_ReadnPixelsEXT(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLsizei bufSize,void * data)7865 void GL_APIENTRY GL_ReadnPixelsEXT(GLint x,
7866                                    GLint y,
7867                                    GLsizei width,
7868                                    GLsizei height,
7869                                    GLenum format,
7870                                    GLenum type,
7871                                    GLsizei bufSize,
7872                                    void *data)
7873 {
7874     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7875     Context *context = GetValidGlobalContext();
7876     EVENT(context, GLReadnPixelsEXT,
7877           "context = %d, x = %d, y = %d, width = %d, height = %d, format = %s, type = %s, bufSize "
7878           "= %d, data = 0x%016" PRIxPTR "",
7879           CID(context), x, y, width, height, GLenumToString(GLESEnum::PixelFormat, format),
7880           GLenumToString(GLESEnum::PixelType, type), bufSize, (uintptr_t)data);
7881 
7882     if (context)
7883     {
7884         SCOPED_SHARE_CONTEXT_LOCK(context);
7885         bool isCallValid =
7886             (context->skipValidation() ||
7887              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
7888                                                 context->getMutableErrorSetForValidation(),
7889                                                 angle::EntryPoint::GLReadnPixelsEXT) &&
7890               ValidateReadnPixelsEXT(context, angle::EntryPoint::GLReadnPixelsEXT, x, y, width,
7891                                      height, format, type, bufSize, data)));
7892         if (isCallValid)
7893         {
7894             context->readnPixels(x, y, width, height, format, type, bufSize, data);
7895         }
7896         ANGLE_CAPTURE_GL(ReadnPixelsEXT, isCallValid, context, x, y, width, height, format, type,
7897                          bufSize, data);
7898     }
7899     else
7900     {
7901         GenerateContextLostErrorOnCurrentGlobalContext();
7902     }
7903     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7904 }
7905 
7906 // GL_EXT_sRGB
7907 
7908 // GL_EXT_sRGB_write_control
7909 
7910 // GL_EXT_semaphore
GL_DeleteSemaphoresEXT(GLsizei n,const GLuint * semaphores)7911 void GL_APIENTRY GL_DeleteSemaphoresEXT(GLsizei n, const GLuint *semaphores)
7912 {
7913     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7914     Context *context = GetValidGlobalContext();
7915     EVENT(context, GLDeleteSemaphoresEXT, "context = %d, n = %d, semaphores = 0x%016" PRIxPTR "",
7916           CID(context), n, (uintptr_t)semaphores);
7917 
7918     if (context)
7919     {
7920         const SemaphoreID *semaphoresPacked = PackParam<const SemaphoreID *>(semaphores);
7921         SCOPED_SHARE_CONTEXT_LOCK(context);
7922         bool isCallValid =
7923             (context->skipValidation() ||
7924              ValidateDeleteSemaphoresEXT(context, angle::EntryPoint::GLDeleteSemaphoresEXT, n,
7925                                          semaphoresPacked));
7926         if (isCallValid)
7927         {
7928             context->deleteSemaphores(n, semaphoresPacked);
7929         }
7930         ANGLE_CAPTURE_GL(DeleteSemaphoresEXT, isCallValid, context, n, semaphoresPacked);
7931     }
7932     else
7933     {
7934         GenerateContextLostErrorOnCurrentGlobalContext();
7935     }
7936     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7937 }
7938 
GL_GenSemaphoresEXT(GLsizei n,GLuint * semaphores)7939 void GL_APIENTRY GL_GenSemaphoresEXT(GLsizei n, GLuint *semaphores)
7940 {
7941     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7942     Context *context = GetValidGlobalContext();
7943     EVENT(context, GLGenSemaphoresEXT, "context = %d, n = %d, semaphores = 0x%016" PRIxPTR "",
7944           CID(context), n, (uintptr_t)semaphores);
7945 
7946     if (context)
7947     {
7948         SemaphoreID *semaphoresPacked = PackParam<SemaphoreID *>(semaphores);
7949         SCOPED_SHARE_CONTEXT_LOCK(context);
7950         bool isCallValid = (context->skipValidation() ||
7951                             ValidateGenSemaphoresEXT(context, angle::EntryPoint::GLGenSemaphoresEXT,
7952                                                      n, semaphoresPacked));
7953         if (isCallValid)
7954         {
7955             context->genSemaphores(n, semaphoresPacked);
7956         }
7957         ANGLE_CAPTURE_GL(GenSemaphoresEXT, isCallValid, context, n, semaphoresPacked);
7958     }
7959     else
7960     {
7961         GenerateContextLostErrorOnCurrentGlobalContext();
7962     }
7963     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7964 }
7965 
GL_GetSemaphoreParameterui64vEXT(GLuint semaphore,GLenum pname,GLuint64 * params)7966 void GL_APIENTRY GL_GetSemaphoreParameterui64vEXT(GLuint semaphore, GLenum pname, GLuint64 *params)
7967 {
7968     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7969     Context *context = GetValidGlobalContext();
7970     EVENT(context, GLGetSemaphoreParameterui64vEXT,
7971           "context = %d, semaphore = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
7972           semaphore, GLenumToString(GLESEnum::SemaphoreParameterName, pname), (uintptr_t)params);
7973 
7974     if (context)
7975     {
7976         SemaphoreID semaphorePacked = PackParam<SemaphoreID>(semaphore);
7977         SCOPED_SHARE_CONTEXT_LOCK(context);
7978         bool isCallValid = (context->skipValidation() ||
7979                             ValidateGetSemaphoreParameterui64vEXT(
7980                                 context, angle::EntryPoint::GLGetSemaphoreParameterui64vEXT,
7981                                 semaphorePacked, pname, params));
7982         if (isCallValid)
7983         {
7984             context->getSemaphoreParameterui64v(semaphorePacked, pname, params);
7985         }
7986         ANGLE_CAPTURE_GL(GetSemaphoreParameterui64vEXT, isCallValid, context, semaphorePacked,
7987                          pname, params);
7988     }
7989     else
7990     {
7991         GenerateContextLostErrorOnCurrentGlobalContext();
7992     }
7993     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7994 }
7995 
GL_IsSemaphoreEXT(GLuint semaphore)7996 GLboolean GL_APIENTRY GL_IsSemaphoreEXT(GLuint semaphore)
7997 {
7998     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
7999     Context *context = GetValidGlobalContext();
8000     EVENT(context, GLIsSemaphoreEXT, "context = %d, semaphore = %u", CID(context), semaphore);
8001 
8002     GLboolean returnValue;
8003     if (context)
8004     {
8005         SemaphoreID semaphorePacked = PackParam<SemaphoreID>(semaphore);
8006         SCOPED_SHARE_CONTEXT_LOCK(context);
8007         bool isCallValid =
8008             (context->skipValidation() ||
8009              ValidateIsSemaphoreEXT(context, angle::EntryPoint::GLIsSemaphoreEXT, semaphorePacked));
8010         if (isCallValid)
8011         {
8012             returnValue = context->isSemaphore(semaphorePacked);
8013         }
8014         else
8015         {
8016             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsSemaphoreEXT, GLboolean>();
8017         }
8018         ANGLE_CAPTURE_GL(IsSemaphoreEXT, isCallValid, context, semaphorePacked, returnValue);
8019     }
8020     else
8021     {
8022         GenerateContextLostErrorOnCurrentGlobalContext();
8023         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsSemaphoreEXT, GLboolean>();
8024     }
8025     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8026     return returnValue;
8027 }
8028 
GL_SemaphoreParameterui64vEXT(GLuint semaphore,GLenum pname,const GLuint64 * params)8029 void GL_APIENTRY GL_SemaphoreParameterui64vEXT(GLuint semaphore,
8030                                                GLenum pname,
8031                                                const GLuint64 *params)
8032 {
8033     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8034     Context *context = GetValidGlobalContext();
8035     EVENT(context, GLSemaphoreParameterui64vEXT,
8036           "context = %d, semaphore = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
8037           semaphore, GLenumToString(GLESEnum::SemaphoreParameterName, pname), (uintptr_t)params);
8038 
8039     if (context)
8040     {
8041         SemaphoreID semaphorePacked = PackParam<SemaphoreID>(semaphore);
8042         SCOPED_SHARE_CONTEXT_LOCK(context);
8043         bool isCallValid =
8044             (context->skipValidation() ||
8045              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8046                                                 context->getMutableErrorSetForValidation(),
8047                                                 angle::EntryPoint::GLSemaphoreParameterui64vEXT) &&
8048               ValidateSemaphoreParameterui64vEXT(context,
8049                                                  angle::EntryPoint::GLSemaphoreParameterui64vEXT,
8050                                                  semaphorePacked, pname, params)));
8051         if (isCallValid)
8052         {
8053             context->semaphoreParameterui64v(semaphorePacked, pname, params);
8054         }
8055         ANGLE_CAPTURE_GL(SemaphoreParameterui64vEXT, isCallValid, context, semaphorePacked, pname,
8056                          params);
8057     }
8058     else
8059     {
8060         GenerateContextLostErrorOnCurrentGlobalContext();
8061     }
8062     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8063 }
8064 
GL_SignalSemaphoreEXT(GLuint semaphore,GLuint numBufferBarriers,const GLuint * buffers,GLuint numTextureBarriers,const GLuint * textures,const GLenum * dstLayouts)8065 void GL_APIENTRY GL_SignalSemaphoreEXT(GLuint semaphore,
8066                                        GLuint numBufferBarriers,
8067                                        const GLuint *buffers,
8068                                        GLuint numTextureBarriers,
8069                                        const GLuint *textures,
8070                                        const GLenum *dstLayouts)
8071 {
8072     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8073     Context *context = GetValidGlobalContext();
8074     EVENT(context, GLSignalSemaphoreEXT,
8075           "context = %d, semaphore = %u, numBufferBarriers = %u, buffers = 0x%016" PRIxPTR
8076           ", numTextureBarriers = %u, textures = 0x%016" PRIxPTR ", dstLayouts = 0x%016" PRIxPTR "",
8077           CID(context), semaphore, numBufferBarriers, (uintptr_t)buffers, numTextureBarriers,
8078           (uintptr_t)textures, (uintptr_t)dstLayouts);
8079 
8080     if (context)
8081     {
8082         SemaphoreID semaphorePacked     = PackParam<SemaphoreID>(semaphore);
8083         const BufferID *buffersPacked   = PackParam<const BufferID *>(buffers);
8084         const TextureID *texturesPacked = PackParam<const TextureID *>(textures);
8085         SCOPED_SHARE_CONTEXT_LOCK(context);
8086         bool isCallValid =
8087             (context->skipValidation() ||
8088              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8089                                                 context->getMutableErrorSetForValidation(),
8090                                                 angle::EntryPoint::GLSignalSemaphoreEXT) &&
8091               ValidateSignalSemaphoreEXT(context, angle::EntryPoint::GLSignalSemaphoreEXT,
8092                                          semaphorePacked, numBufferBarriers, buffersPacked,
8093                                          numTextureBarriers, texturesPacked, dstLayouts)));
8094         if (isCallValid)
8095         {
8096             context->signalSemaphore(semaphorePacked, numBufferBarriers, buffersPacked,
8097                                      numTextureBarriers, texturesPacked, dstLayouts);
8098         }
8099         ANGLE_CAPTURE_GL(SignalSemaphoreEXT, isCallValid, context, semaphorePacked,
8100                          numBufferBarriers, buffersPacked, numTextureBarriers, texturesPacked,
8101                          dstLayouts);
8102     }
8103     else
8104     {
8105         GenerateContextLostErrorOnCurrentGlobalContext();
8106     }
8107     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8108 }
8109 
GL_WaitSemaphoreEXT(GLuint semaphore,GLuint numBufferBarriers,const GLuint * buffers,GLuint numTextureBarriers,const GLuint * textures,const GLenum * srcLayouts)8110 void GL_APIENTRY GL_WaitSemaphoreEXT(GLuint semaphore,
8111                                      GLuint numBufferBarriers,
8112                                      const GLuint *buffers,
8113                                      GLuint numTextureBarriers,
8114                                      const GLuint *textures,
8115                                      const GLenum *srcLayouts)
8116 {
8117     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8118     Context *context = GetValidGlobalContext();
8119     EVENT(context, GLWaitSemaphoreEXT,
8120           "context = %d, semaphore = %u, numBufferBarriers = %u, buffers = 0x%016" PRIxPTR
8121           ", numTextureBarriers = %u, textures = 0x%016" PRIxPTR ", srcLayouts = 0x%016" PRIxPTR "",
8122           CID(context), semaphore, numBufferBarriers, (uintptr_t)buffers, numTextureBarriers,
8123           (uintptr_t)textures, (uintptr_t)srcLayouts);
8124 
8125     if (context)
8126     {
8127         SemaphoreID semaphorePacked     = PackParam<SemaphoreID>(semaphore);
8128         const BufferID *buffersPacked   = PackParam<const BufferID *>(buffers);
8129         const TextureID *texturesPacked = PackParam<const TextureID *>(textures);
8130         SCOPED_SHARE_CONTEXT_LOCK(context);
8131         bool isCallValid =
8132             (context->skipValidation() ||
8133              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8134                                                 context->getMutableErrorSetForValidation(),
8135                                                 angle::EntryPoint::GLWaitSemaphoreEXT) &&
8136               ValidateWaitSemaphoreEXT(context, angle::EntryPoint::GLWaitSemaphoreEXT,
8137                                        semaphorePacked, numBufferBarriers, buffersPacked,
8138                                        numTextureBarriers, texturesPacked, srcLayouts)));
8139         if (isCallValid)
8140         {
8141             context->waitSemaphore(semaphorePacked, numBufferBarriers, buffersPacked,
8142                                    numTextureBarriers, texturesPacked, srcLayouts);
8143         }
8144         ANGLE_CAPTURE_GL(WaitSemaphoreEXT, isCallValid, context, semaphorePacked, numBufferBarriers,
8145                          buffersPacked, numTextureBarriers, texturesPacked, srcLayouts);
8146     }
8147     else
8148     {
8149         GenerateContextLostErrorOnCurrentGlobalContext();
8150     }
8151     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8152 }
8153 
8154 // GetUnsignedBytei_vEXT is already defined.
8155 
8156 // GetUnsignedBytevEXT is already defined.
8157 
8158 // GL_EXT_semaphore_fd
GL_ImportSemaphoreFdEXT(GLuint semaphore,GLenum handleType,GLint fd)8159 void GL_APIENTRY GL_ImportSemaphoreFdEXT(GLuint semaphore, GLenum handleType, GLint fd)
8160 {
8161     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8162     Context *context = GetValidGlobalContext();
8163     EVENT(context, GLImportSemaphoreFdEXT, "context = %d, semaphore = %u, handleType = %s, fd = %d",
8164           CID(context), semaphore, GLenumToString(GLESEnum::ExternalHandleType, handleType), fd);
8165 
8166     if (context)
8167     {
8168         SemaphoreID semaphorePacked = PackParam<SemaphoreID>(semaphore);
8169         HandleType handleTypePacked = PackParam<HandleType>(handleType);
8170         SCOPED_SHARE_CONTEXT_LOCK(context);
8171         bool isCallValid =
8172             (context->skipValidation() ||
8173              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8174                                                 context->getMutableErrorSetForValidation(),
8175                                                 angle::EntryPoint::GLImportSemaphoreFdEXT) &&
8176               ValidateImportSemaphoreFdEXT(context, angle::EntryPoint::GLImportSemaphoreFdEXT,
8177                                            semaphorePacked, handleTypePacked, fd)));
8178         if (isCallValid)
8179         {
8180             context->importSemaphoreFd(semaphorePacked, handleTypePacked, fd);
8181         }
8182         ANGLE_CAPTURE_GL(ImportSemaphoreFdEXT, isCallValid, context, semaphorePacked,
8183                          handleTypePacked, fd);
8184     }
8185     else
8186     {
8187         GenerateContextLostErrorOnCurrentGlobalContext();
8188     }
8189     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8190 }
8191 
8192 // GL_EXT_separate_depth_stencil
8193 
8194 // GL_EXT_separate_shader_objects
GL_ActiveShaderProgramEXT(GLuint pipeline,GLuint program)8195 void GL_APIENTRY GL_ActiveShaderProgramEXT(GLuint pipeline, GLuint program)
8196 {
8197     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8198     Context *context = GetValidGlobalContext();
8199     EVENT(context, GLActiveShaderProgramEXT, "context = %d, pipeline = %u, program = %u",
8200           CID(context), pipeline, program);
8201 
8202     if (context)
8203     {
8204         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
8205         ShaderProgramID programPacked    = PackParam<ShaderProgramID>(program);
8206         SCOPED_SHARE_CONTEXT_LOCK(context);
8207         bool isCallValid =
8208             (context->skipValidation() ||
8209              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8210                                                 context->getMutableErrorSetForValidation(),
8211                                                 angle::EntryPoint::GLActiveShaderProgramEXT) &&
8212               ValidateActiveShaderProgramEXT(context, angle::EntryPoint::GLActiveShaderProgramEXT,
8213                                              pipelinePacked, programPacked)));
8214         if (isCallValid)
8215         {
8216             context->activeShaderProgram(pipelinePacked, programPacked);
8217         }
8218         ANGLE_CAPTURE_GL(ActiveShaderProgramEXT, isCallValid, context, pipelinePacked,
8219                          programPacked);
8220     }
8221     else
8222     {
8223         GenerateContextLostErrorOnCurrentGlobalContext();
8224     }
8225     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8226 }
8227 
GL_BindProgramPipelineEXT(GLuint pipeline)8228 void GL_APIENTRY GL_BindProgramPipelineEXT(GLuint pipeline)
8229 {
8230     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8231     Context *context = GetValidGlobalContext();
8232     EVENT(context, GLBindProgramPipelineEXT, "context = %d, pipeline = %u", CID(context), pipeline);
8233 
8234     if (context)
8235     {
8236         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
8237         SCOPED_SHARE_CONTEXT_LOCK(context);
8238         bool isCallValid =
8239             (context->skipValidation() ||
8240              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8241                                                 context->getMutableErrorSetForValidation(),
8242                                                 angle::EntryPoint::GLBindProgramPipelineEXT) &&
8243               ValidateBindProgramPipelineEXT(context, angle::EntryPoint::GLBindProgramPipelineEXT,
8244                                              pipelinePacked)));
8245         if (isCallValid)
8246         {
8247             context->bindProgramPipeline(pipelinePacked);
8248         }
8249         ANGLE_CAPTURE_GL(BindProgramPipelineEXT, isCallValid, context, pipelinePacked);
8250     }
8251     else
8252     {
8253         GenerateContextLostErrorOnCurrentGlobalContext();
8254     }
8255     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8256 }
8257 
GL_CreateShaderProgramvEXT(GLenum type,GLsizei count,const GLchar ** strings)8258 GLuint GL_APIENTRY GL_CreateShaderProgramvEXT(GLenum type, GLsizei count, const GLchar **strings)
8259 {
8260     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8261     Context *context = GetValidGlobalContext();
8262     EVENT(context, GLCreateShaderProgramvEXT,
8263           "context = %d, type = %s, count = %d, strings = 0x%016" PRIxPTR "", CID(context),
8264           GLenumToString(GLESEnum::ShaderType, type), count, (uintptr_t)strings);
8265 
8266     GLuint returnValue;
8267     if (context)
8268     {
8269         ShaderType typePacked = PackParam<ShaderType>(type);
8270         SCOPED_SHARE_CONTEXT_LOCK(context);
8271         bool isCallValid =
8272             (context->skipValidation() ||
8273              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8274                                                 context->getMutableErrorSetForValidation(),
8275                                                 angle::EntryPoint::GLCreateShaderProgramvEXT) &&
8276               ValidateCreateShaderProgramvEXT(context, angle::EntryPoint::GLCreateShaderProgramvEXT,
8277                                               typePacked, count, strings)));
8278         if (isCallValid)
8279         {
8280             returnValue = context->createShaderProgramv(typePacked, count, strings);
8281         }
8282         else
8283         {
8284             returnValue =
8285                 GetDefaultReturnValue<angle::EntryPoint::GLCreateShaderProgramvEXT, GLuint>();
8286         }
8287         ANGLE_CAPTURE_GL(CreateShaderProgramvEXT, isCallValid, context, typePacked, count, strings,
8288                          returnValue);
8289     }
8290     else
8291     {
8292         GenerateContextLostErrorOnCurrentGlobalContext();
8293         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLCreateShaderProgramvEXT, GLuint>();
8294     }
8295     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8296     return returnValue;
8297 }
8298 
GL_DeleteProgramPipelinesEXT(GLsizei n,const GLuint * pipelines)8299 void GL_APIENTRY GL_DeleteProgramPipelinesEXT(GLsizei n, const GLuint *pipelines)
8300 {
8301     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8302     Context *context = GetValidGlobalContext();
8303     EVENT(context, GLDeleteProgramPipelinesEXT,
8304           "context = %d, n = %d, pipelines = 0x%016" PRIxPTR "", CID(context), n,
8305           (uintptr_t)pipelines);
8306 
8307     if (context)
8308     {
8309         const ProgramPipelineID *pipelinesPacked = PackParam<const ProgramPipelineID *>(pipelines);
8310         SCOPED_SHARE_CONTEXT_LOCK(context);
8311         bool isCallValid =
8312             (context->skipValidation() ||
8313              ValidateDeleteProgramPipelinesEXT(
8314                  context, angle::EntryPoint::GLDeleteProgramPipelinesEXT, n, pipelinesPacked));
8315         if (isCallValid)
8316         {
8317             context->deleteProgramPipelines(n, pipelinesPacked);
8318         }
8319         ANGLE_CAPTURE_GL(DeleteProgramPipelinesEXT, isCallValid, context, n, pipelinesPacked);
8320     }
8321     else
8322     {
8323         GenerateContextLostErrorOnCurrentGlobalContext();
8324     }
8325     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8326 }
8327 
GL_GenProgramPipelinesEXT(GLsizei n,GLuint * pipelines)8328 void GL_APIENTRY GL_GenProgramPipelinesEXT(GLsizei n, GLuint *pipelines)
8329 {
8330     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8331     Context *context = GetValidGlobalContext();
8332     EVENT(context, GLGenProgramPipelinesEXT, "context = %d, n = %d, pipelines = 0x%016" PRIxPTR "",
8333           CID(context), n, (uintptr_t)pipelines);
8334 
8335     if (context)
8336     {
8337         ProgramPipelineID *pipelinesPacked = PackParam<ProgramPipelineID *>(pipelines);
8338         SCOPED_SHARE_CONTEXT_LOCK(context);
8339         bool isCallValid =
8340             (context->skipValidation() ||
8341              ValidateGenProgramPipelinesEXT(context, angle::EntryPoint::GLGenProgramPipelinesEXT, n,
8342                                             pipelinesPacked));
8343         if (isCallValid)
8344         {
8345             context->genProgramPipelines(n, pipelinesPacked);
8346         }
8347         ANGLE_CAPTURE_GL(GenProgramPipelinesEXT, isCallValid, context, n, pipelinesPacked);
8348     }
8349     else
8350     {
8351         GenerateContextLostErrorOnCurrentGlobalContext();
8352     }
8353     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8354 }
8355 
GL_GetProgramPipelineInfoLogEXT(GLuint pipeline,GLsizei bufSize,GLsizei * length,GLchar * infoLog)8356 void GL_APIENTRY GL_GetProgramPipelineInfoLogEXT(GLuint pipeline,
8357                                                  GLsizei bufSize,
8358                                                  GLsizei *length,
8359                                                  GLchar *infoLog)
8360 {
8361     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8362     Context *context = GetValidGlobalContext();
8363     EVENT(context, GLGetProgramPipelineInfoLogEXT,
8364           "context = %d, pipeline = %u, bufSize = %d, length = 0x%016" PRIxPTR
8365           ", infoLog = 0x%016" PRIxPTR "",
8366           CID(context), pipeline, bufSize, (uintptr_t)length, (uintptr_t)infoLog);
8367 
8368     if (context)
8369     {
8370         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
8371         SCOPED_SHARE_CONTEXT_LOCK(context);
8372         bool isCallValid = (context->skipValidation() ||
8373                             ValidateGetProgramPipelineInfoLogEXT(
8374                                 context, angle::EntryPoint::GLGetProgramPipelineInfoLogEXT,
8375                                 pipelinePacked, bufSize, length, infoLog));
8376         if (isCallValid)
8377         {
8378             context->getProgramPipelineInfoLog(pipelinePacked, bufSize, length, infoLog);
8379         }
8380         ANGLE_CAPTURE_GL(GetProgramPipelineInfoLogEXT, isCallValid, context, pipelinePacked,
8381                          bufSize, length, infoLog);
8382     }
8383     else
8384     {
8385         GenerateContextLostErrorOnCurrentGlobalContext();
8386     }
8387     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8388 }
8389 
GL_GetProgramPipelineivEXT(GLuint pipeline,GLenum pname,GLint * params)8390 void GL_APIENTRY GL_GetProgramPipelineivEXT(GLuint pipeline, GLenum pname, GLint *params)
8391 {
8392     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8393     Context *context = GetValidGlobalContext();
8394     EVENT(context, GLGetProgramPipelineivEXT,
8395           "context = %d, pipeline = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
8396           pipeline, GLenumToString(GLESEnum::PipelineParameterName, pname), (uintptr_t)params);
8397 
8398     if (context)
8399     {
8400         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
8401         SCOPED_SHARE_CONTEXT_LOCK(context);
8402         bool isCallValid =
8403             (context->skipValidation() ||
8404              ValidateGetProgramPipelineivEXT(context, angle::EntryPoint::GLGetProgramPipelineivEXT,
8405                                              pipelinePacked, pname, params));
8406         if (isCallValid)
8407         {
8408             context->getProgramPipelineiv(pipelinePacked, pname, params);
8409         }
8410         ANGLE_CAPTURE_GL(GetProgramPipelineivEXT, isCallValid, context, pipelinePacked, pname,
8411                          params);
8412     }
8413     else
8414     {
8415         GenerateContextLostErrorOnCurrentGlobalContext();
8416     }
8417     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8418 }
8419 
GL_IsProgramPipelineEXT(GLuint pipeline)8420 GLboolean GL_APIENTRY GL_IsProgramPipelineEXT(GLuint pipeline)
8421 {
8422     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8423     Context *context = GetValidGlobalContext();
8424     EVENT(context, GLIsProgramPipelineEXT, "context = %d, pipeline = %u", CID(context), pipeline);
8425 
8426     GLboolean returnValue;
8427     if (context)
8428     {
8429         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
8430         SCOPED_SHARE_CONTEXT_LOCK(context);
8431         bool isCallValid =
8432             (context->skipValidation() ||
8433              ValidateIsProgramPipelineEXT(context, angle::EntryPoint::GLIsProgramPipelineEXT,
8434                                           pipelinePacked));
8435         if (isCallValid)
8436         {
8437             returnValue = context->isProgramPipeline(pipelinePacked);
8438         }
8439         else
8440         {
8441             returnValue =
8442                 GetDefaultReturnValue<angle::EntryPoint::GLIsProgramPipelineEXT, GLboolean>();
8443         }
8444         ANGLE_CAPTURE_GL(IsProgramPipelineEXT, isCallValid, context, pipelinePacked, returnValue);
8445     }
8446     else
8447     {
8448         GenerateContextLostErrorOnCurrentGlobalContext();
8449         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsProgramPipelineEXT, GLboolean>();
8450     }
8451     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8452     return returnValue;
8453 }
8454 
GL_ProgramParameteriEXT(GLuint program,GLenum pname,GLint value)8455 void GL_APIENTRY GL_ProgramParameteriEXT(GLuint program, GLenum pname, GLint value)
8456 {
8457     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8458     Context *context = GetValidGlobalContext();
8459     EVENT(context, GLProgramParameteriEXT, "context = %d, program = %u, pname = %s, value = %d",
8460           CID(context), program, GLenumToString(GLESEnum::ProgramParameterPName, pname), value);
8461 
8462     if (context)
8463     {
8464         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
8465         SCOPED_SHARE_CONTEXT_LOCK(context);
8466         bool isCallValid =
8467             (context->skipValidation() ||
8468              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8469                                                 context->getMutableErrorSetForValidation(),
8470                                                 angle::EntryPoint::GLProgramParameteriEXT) &&
8471               ValidateProgramParameteriEXT(context, angle::EntryPoint::GLProgramParameteriEXT,
8472                                            programPacked, pname, value)));
8473         if (isCallValid)
8474         {
8475             context->programParameteri(programPacked, pname, value);
8476         }
8477         ANGLE_CAPTURE_GL(ProgramParameteriEXT, isCallValid, context, programPacked, pname, value);
8478     }
8479     else
8480     {
8481         GenerateContextLostErrorOnCurrentGlobalContext();
8482     }
8483     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8484 }
8485 
GL_ProgramUniform1fEXT(GLuint program,GLint location,GLfloat v0)8486 void GL_APIENTRY GL_ProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0)
8487 {
8488     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8489     Context *context = GetValidGlobalContext();
8490     EVENT(context, GLProgramUniform1fEXT, "context = %d, program = %u, location = %d, v0 = %f",
8491           CID(context), program, location, v0);
8492 
8493     if (context)
8494     {
8495         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8496         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8497         SCOPED_SHARE_CONTEXT_LOCK(context);
8498         bool isCallValid =
8499             (context->skipValidation() ||
8500              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8501                                                 context->getMutableErrorSetForValidation(),
8502                                                 angle::EntryPoint::GLProgramUniform1fEXT) &&
8503               ValidateProgramUniform1fEXT(context, angle::EntryPoint::GLProgramUniform1fEXT,
8504                                           programPacked, locationPacked, v0)));
8505         if (isCallValid)
8506         {
8507             context->programUniform1f(programPacked, locationPacked, v0);
8508         }
8509         ANGLE_CAPTURE_GL(ProgramUniform1fEXT, isCallValid, context, programPacked, locationPacked,
8510                          v0);
8511     }
8512     else
8513     {
8514         GenerateContextLostErrorOnCurrentGlobalContext();
8515     }
8516     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8517 }
8518 
GL_ProgramUniform1fvEXT(GLuint program,GLint location,GLsizei count,const GLfloat * value)8519 void GL_APIENTRY GL_ProgramUniform1fvEXT(GLuint program,
8520                                          GLint location,
8521                                          GLsizei count,
8522                                          const GLfloat *value)
8523 {
8524     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8525     Context *context = GetValidGlobalContext();
8526     EVENT(context, GLProgramUniform1fvEXT,
8527           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
8528           CID(context), program, location, count, (uintptr_t)value);
8529 
8530     if (context)
8531     {
8532         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8533         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8534         SCOPED_SHARE_CONTEXT_LOCK(context);
8535         bool isCallValid =
8536             (context->skipValidation() ||
8537              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8538                                                 context->getMutableErrorSetForValidation(),
8539                                                 angle::EntryPoint::GLProgramUniform1fvEXT) &&
8540               ValidateProgramUniform1fvEXT(context, angle::EntryPoint::GLProgramUniform1fvEXT,
8541                                            programPacked, locationPacked, count, value)));
8542         if (isCallValid)
8543         {
8544             context->programUniform1fv(programPacked, locationPacked, count, value);
8545         }
8546         ANGLE_CAPTURE_GL(ProgramUniform1fvEXT, isCallValid, context, programPacked, locationPacked,
8547                          count, value);
8548     }
8549     else
8550     {
8551         GenerateContextLostErrorOnCurrentGlobalContext();
8552     }
8553     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8554 }
8555 
GL_ProgramUniform1iEXT(GLuint program,GLint location,GLint v0)8556 void GL_APIENTRY GL_ProgramUniform1iEXT(GLuint program, GLint location, GLint v0)
8557 {
8558     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8559     Context *context = GetValidGlobalContext();
8560     EVENT(context, GLProgramUniform1iEXT, "context = %d, program = %u, location = %d, v0 = %d",
8561           CID(context), program, location, v0);
8562 
8563     if (context)
8564     {
8565         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8566         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8567         SCOPED_SHARE_CONTEXT_LOCK(context);
8568         bool isCallValid =
8569             (context->skipValidation() ||
8570              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8571                                                 context->getMutableErrorSetForValidation(),
8572                                                 angle::EntryPoint::GLProgramUniform1iEXT) &&
8573               ValidateProgramUniform1iEXT(context, angle::EntryPoint::GLProgramUniform1iEXT,
8574                                           programPacked, locationPacked, v0)));
8575         if (isCallValid)
8576         {
8577             context->programUniform1i(programPacked, locationPacked, v0);
8578         }
8579         ANGLE_CAPTURE_GL(ProgramUniform1iEXT, isCallValid, context, programPacked, locationPacked,
8580                          v0);
8581     }
8582     else
8583     {
8584         GenerateContextLostErrorOnCurrentGlobalContext();
8585     }
8586     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8587 }
8588 
GL_ProgramUniform1ivEXT(GLuint program,GLint location,GLsizei count,const GLint * value)8589 void GL_APIENTRY GL_ProgramUniform1ivEXT(GLuint program,
8590                                          GLint location,
8591                                          GLsizei count,
8592                                          const GLint *value)
8593 {
8594     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8595     Context *context = GetValidGlobalContext();
8596     EVENT(context, GLProgramUniform1ivEXT,
8597           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
8598           CID(context), program, location, count, (uintptr_t)value);
8599 
8600     if (context)
8601     {
8602         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8603         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8604         SCOPED_SHARE_CONTEXT_LOCK(context);
8605         bool isCallValid =
8606             (context->skipValidation() ||
8607              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8608                                                 context->getMutableErrorSetForValidation(),
8609                                                 angle::EntryPoint::GLProgramUniform1ivEXT) &&
8610               ValidateProgramUniform1ivEXT(context, angle::EntryPoint::GLProgramUniform1ivEXT,
8611                                            programPacked, locationPacked, count, value)));
8612         if (isCallValid)
8613         {
8614             context->programUniform1iv(programPacked, locationPacked, count, value);
8615         }
8616         ANGLE_CAPTURE_GL(ProgramUniform1ivEXT, isCallValid, context, programPacked, locationPacked,
8617                          count, value);
8618     }
8619     else
8620     {
8621         GenerateContextLostErrorOnCurrentGlobalContext();
8622     }
8623     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8624 }
8625 
GL_ProgramUniform1uiEXT(GLuint program,GLint location,GLuint v0)8626 void GL_APIENTRY GL_ProgramUniform1uiEXT(GLuint program, GLint location, GLuint v0)
8627 {
8628     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8629     Context *context = GetValidGlobalContext();
8630     EVENT(context, GLProgramUniform1uiEXT, "context = %d, program = %u, location = %d, v0 = %u",
8631           CID(context), program, location, v0);
8632 
8633     if (context)
8634     {
8635         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8636         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8637         SCOPED_SHARE_CONTEXT_LOCK(context);
8638         bool isCallValid =
8639             (context->skipValidation() ||
8640              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8641                                                 context->getMutableErrorSetForValidation(),
8642                                                 angle::EntryPoint::GLProgramUniform1uiEXT) &&
8643               ValidateProgramUniform1uiEXT(context, angle::EntryPoint::GLProgramUniform1uiEXT,
8644                                            programPacked, locationPacked, v0)));
8645         if (isCallValid)
8646         {
8647             context->programUniform1ui(programPacked, locationPacked, v0);
8648         }
8649         ANGLE_CAPTURE_GL(ProgramUniform1uiEXT, isCallValid, context, programPacked, locationPacked,
8650                          v0);
8651     }
8652     else
8653     {
8654         GenerateContextLostErrorOnCurrentGlobalContext();
8655     }
8656     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8657 }
8658 
GL_ProgramUniform1uivEXT(GLuint program,GLint location,GLsizei count,const GLuint * value)8659 void GL_APIENTRY GL_ProgramUniform1uivEXT(GLuint program,
8660                                           GLint location,
8661                                           GLsizei count,
8662                                           const GLuint *value)
8663 {
8664     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8665     Context *context = GetValidGlobalContext();
8666     EVENT(context, GLProgramUniform1uivEXT,
8667           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
8668           CID(context), program, location, count, (uintptr_t)value);
8669 
8670     if (context)
8671     {
8672         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8673         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8674         SCOPED_SHARE_CONTEXT_LOCK(context);
8675         bool isCallValid =
8676             (context->skipValidation() ||
8677              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8678                                                 context->getMutableErrorSetForValidation(),
8679                                                 angle::EntryPoint::GLProgramUniform1uivEXT) &&
8680               ValidateProgramUniform1uivEXT(context, angle::EntryPoint::GLProgramUniform1uivEXT,
8681                                             programPacked, locationPacked, count, value)));
8682         if (isCallValid)
8683         {
8684             context->programUniform1uiv(programPacked, locationPacked, count, value);
8685         }
8686         ANGLE_CAPTURE_GL(ProgramUniform1uivEXT, isCallValid, context, programPacked, locationPacked,
8687                          count, value);
8688     }
8689     else
8690     {
8691         GenerateContextLostErrorOnCurrentGlobalContext();
8692     }
8693     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8694 }
8695 
GL_ProgramUniform2fEXT(GLuint program,GLint location,GLfloat v0,GLfloat v1)8696 void GL_APIENTRY GL_ProgramUniform2fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1)
8697 {
8698     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8699     Context *context = GetValidGlobalContext();
8700     EVENT(context, GLProgramUniform2fEXT,
8701           "context = %d, program = %u, location = %d, v0 = %f, v1 = %f", CID(context), program,
8702           location, v0, v1);
8703 
8704     if (context)
8705     {
8706         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8707         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8708         SCOPED_SHARE_CONTEXT_LOCK(context);
8709         bool isCallValid =
8710             (context->skipValidation() ||
8711              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8712                                                 context->getMutableErrorSetForValidation(),
8713                                                 angle::EntryPoint::GLProgramUniform2fEXT) &&
8714               ValidateProgramUniform2fEXT(context, angle::EntryPoint::GLProgramUniform2fEXT,
8715                                           programPacked, locationPacked, v0, v1)));
8716         if (isCallValid)
8717         {
8718             context->programUniform2f(programPacked, locationPacked, v0, v1);
8719         }
8720         ANGLE_CAPTURE_GL(ProgramUniform2fEXT, isCallValid, context, programPacked, locationPacked,
8721                          v0, v1);
8722     }
8723     else
8724     {
8725         GenerateContextLostErrorOnCurrentGlobalContext();
8726     }
8727     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8728 }
8729 
GL_ProgramUniform2fvEXT(GLuint program,GLint location,GLsizei count,const GLfloat * value)8730 void GL_APIENTRY GL_ProgramUniform2fvEXT(GLuint program,
8731                                          GLint location,
8732                                          GLsizei count,
8733                                          const GLfloat *value)
8734 {
8735     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8736     Context *context = GetValidGlobalContext();
8737     EVENT(context, GLProgramUniform2fvEXT,
8738           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
8739           CID(context), program, location, count, (uintptr_t)value);
8740 
8741     if (context)
8742     {
8743         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8744         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8745         SCOPED_SHARE_CONTEXT_LOCK(context);
8746         bool isCallValid =
8747             (context->skipValidation() ||
8748              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8749                                                 context->getMutableErrorSetForValidation(),
8750                                                 angle::EntryPoint::GLProgramUniform2fvEXT) &&
8751               ValidateProgramUniform2fvEXT(context, angle::EntryPoint::GLProgramUniform2fvEXT,
8752                                            programPacked, locationPacked, count, value)));
8753         if (isCallValid)
8754         {
8755             context->programUniform2fv(programPacked, locationPacked, count, value);
8756         }
8757         ANGLE_CAPTURE_GL(ProgramUniform2fvEXT, isCallValid, context, programPacked, locationPacked,
8758                          count, value);
8759     }
8760     else
8761     {
8762         GenerateContextLostErrorOnCurrentGlobalContext();
8763     }
8764     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8765 }
8766 
GL_ProgramUniform2iEXT(GLuint program,GLint location,GLint v0,GLint v1)8767 void GL_APIENTRY GL_ProgramUniform2iEXT(GLuint program, GLint location, GLint v0, GLint v1)
8768 {
8769     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8770     Context *context = GetValidGlobalContext();
8771     EVENT(context, GLProgramUniform2iEXT,
8772           "context = %d, program = %u, location = %d, v0 = %d, v1 = %d", CID(context), program,
8773           location, v0, v1);
8774 
8775     if (context)
8776     {
8777         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8778         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8779         SCOPED_SHARE_CONTEXT_LOCK(context);
8780         bool isCallValid =
8781             (context->skipValidation() ||
8782              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8783                                                 context->getMutableErrorSetForValidation(),
8784                                                 angle::EntryPoint::GLProgramUniform2iEXT) &&
8785               ValidateProgramUniform2iEXT(context, angle::EntryPoint::GLProgramUniform2iEXT,
8786                                           programPacked, locationPacked, v0, v1)));
8787         if (isCallValid)
8788         {
8789             context->programUniform2i(programPacked, locationPacked, v0, v1);
8790         }
8791         ANGLE_CAPTURE_GL(ProgramUniform2iEXT, isCallValid, context, programPacked, locationPacked,
8792                          v0, v1);
8793     }
8794     else
8795     {
8796         GenerateContextLostErrorOnCurrentGlobalContext();
8797     }
8798     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8799 }
8800 
GL_ProgramUniform2ivEXT(GLuint program,GLint location,GLsizei count,const GLint * value)8801 void GL_APIENTRY GL_ProgramUniform2ivEXT(GLuint program,
8802                                          GLint location,
8803                                          GLsizei count,
8804                                          const GLint *value)
8805 {
8806     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8807     Context *context = GetValidGlobalContext();
8808     EVENT(context, GLProgramUniform2ivEXT,
8809           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
8810           CID(context), program, location, count, (uintptr_t)value);
8811 
8812     if (context)
8813     {
8814         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8815         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8816         SCOPED_SHARE_CONTEXT_LOCK(context);
8817         bool isCallValid =
8818             (context->skipValidation() ||
8819              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8820                                                 context->getMutableErrorSetForValidation(),
8821                                                 angle::EntryPoint::GLProgramUniform2ivEXT) &&
8822               ValidateProgramUniform2ivEXT(context, angle::EntryPoint::GLProgramUniform2ivEXT,
8823                                            programPacked, locationPacked, count, value)));
8824         if (isCallValid)
8825         {
8826             context->programUniform2iv(programPacked, locationPacked, count, value);
8827         }
8828         ANGLE_CAPTURE_GL(ProgramUniform2ivEXT, isCallValid, context, programPacked, locationPacked,
8829                          count, value);
8830     }
8831     else
8832     {
8833         GenerateContextLostErrorOnCurrentGlobalContext();
8834     }
8835     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8836 }
8837 
GL_ProgramUniform2uiEXT(GLuint program,GLint location,GLuint v0,GLuint v1)8838 void GL_APIENTRY GL_ProgramUniform2uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1)
8839 {
8840     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8841     Context *context = GetValidGlobalContext();
8842     EVENT(context, GLProgramUniform2uiEXT,
8843           "context = %d, program = %u, location = %d, v0 = %u, v1 = %u", CID(context), program,
8844           location, v0, v1);
8845 
8846     if (context)
8847     {
8848         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8849         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8850         SCOPED_SHARE_CONTEXT_LOCK(context);
8851         bool isCallValid =
8852             (context->skipValidation() ||
8853              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8854                                                 context->getMutableErrorSetForValidation(),
8855                                                 angle::EntryPoint::GLProgramUniform2uiEXT) &&
8856               ValidateProgramUniform2uiEXT(context, angle::EntryPoint::GLProgramUniform2uiEXT,
8857                                            programPacked, locationPacked, v0, v1)));
8858         if (isCallValid)
8859         {
8860             context->programUniform2ui(programPacked, locationPacked, v0, v1);
8861         }
8862         ANGLE_CAPTURE_GL(ProgramUniform2uiEXT, isCallValid, context, programPacked, locationPacked,
8863                          v0, v1);
8864     }
8865     else
8866     {
8867         GenerateContextLostErrorOnCurrentGlobalContext();
8868     }
8869     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8870 }
8871 
GL_ProgramUniform2uivEXT(GLuint program,GLint location,GLsizei count,const GLuint * value)8872 void GL_APIENTRY GL_ProgramUniform2uivEXT(GLuint program,
8873                                           GLint location,
8874                                           GLsizei count,
8875                                           const GLuint *value)
8876 {
8877     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8878     Context *context = GetValidGlobalContext();
8879     EVENT(context, GLProgramUniform2uivEXT,
8880           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
8881           CID(context), program, location, count, (uintptr_t)value);
8882 
8883     if (context)
8884     {
8885         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8886         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8887         SCOPED_SHARE_CONTEXT_LOCK(context);
8888         bool isCallValid =
8889             (context->skipValidation() ||
8890              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8891                                                 context->getMutableErrorSetForValidation(),
8892                                                 angle::EntryPoint::GLProgramUniform2uivEXT) &&
8893               ValidateProgramUniform2uivEXT(context, angle::EntryPoint::GLProgramUniform2uivEXT,
8894                                             programPacked, locationPacked, count, value)));
8895         if (isCallValid)
8896         {
8897             context->programUniform2uiv(programPacked, locationPacked, count, value);
8898         }
8899         ANGLE_CAPTURE_GL(ProgramUniform2uivEXT, isCallValid, context, programPacked, locationPacked,
8900                          count, value);
8901     }
8902     else
8903     {
8904         GenerateContextLostErrorOnCurrentGlobalContext();
8905     }
8906     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8907 }
8908 
8909 void GL_APIENTRY
GL_ProgramUniform3fEXT(GLuint program,GLint location,GLfloat v0,GLfloat v1,GLfloat v2)8910 GL_ProgramUniform3fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
8911 {
8912     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8913     Context *context = GetValidGlobalContext();
8914     EVENT(context, GLProgramUniform3fEXT,
8915           "context = %d, program = %u, location = %d, v0 = %f, v1 = %f, v2 = %f", CID(context),
8916           program, location, v0, v1, v2);
8917 
8918     if (context)
8919     {
8920         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8921         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8922         SCOPED_SHARE_CONTEXT_LOCK(context);
8923         bool isCallValid =
8924             (context->skipValidation() ||
8925              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8926                                                 context->getMutableErrorSetForValidation(),
8927                                                 angle::EntryPoint::GLProgramUniform3fEXT) &&
8928               ValidateProgramUniform3fEXT(context, angle::EntryPoint::GLProgramUniform3fEXT,
8929                                           programPacked, locationPacked, v0, v1, v2)));
8930         if (isCallValid)
8931         {
8932             context->programUniform3f(programPacked, locationPacked, v0, v1, v2);
8933         }
8934         ANGLE_CAPTURE_GL(ProgramUniform3fEXT, isCallValid, context, programPacked, locationPacked,
8935                          v0, v1, v2);
8936     }
8937     else
8938     {
8939         GenerateContextLostErrorOnCurrentGlobalContext();
8940     }
8941     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8942 }
8943 
GL_ProgramUniform3fvEXT(GLuint program,GLint location,GLsizei count,const GLfloat * value)8944 void GL_APIENTRY GL_ProgramUniform3fvEXT(GLuint program,
8945                                          GLint location,
8946                                          GLsizei count,
8947                                          const GLfloat *value)
8948 {
8949     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8950     Context *context = GetValidGlobalContext();
8951     EVENT(context, GLProgramUniform3fvEXT,
8952           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
8953           CID(context), program, location, count, (uintptr_t)value);
8954 
8955     if (context)
8956     {
8957         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8958         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8959         SCOPED_SHARE_CONTEXT_LOCK(context);
8960         bool isCallValid =
8961             (context->skipValidation() ||
8962              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8963                                                 context->getMutableErrorSetForValidation(),
8964                                                 angle::EntryPoint::GLProgramUniform3fvEXT) &&
8965               ValidateProgramUniform3fvEXT(context, angle::EntryPoint::GLProgramUniform3fvEXT,
8966                                            programPacked, locationPacked, count, value)));
8967         if (isCallValid)
8968         {
8969             context->programUniform3fv(programPacked, locationPacked, count, value);
8970         }
8971         ANGLE_CAPTURE_GL(ProgramUniform3fvEXT, isCallValid, context, programPacked, locationPacked,
8972                          count, value);
8973     }
8974     else
8975     {
8976         GenerateContextLostErrorOnCurrentGlobalContext();
8977     }
8978     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8979 }
8980 
8981 void GL_APIENTRY
GL_ProgramUniform3iEXT(GLuint program,GLint location,GLint v0,GLint v1,GLint v2)8982 GL_ProgramUniform3iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
8983 {
8984     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
8985     Context *context = GetValidGlobalContext();
8986     EVENT(context, GLProgramUniform3iEXT,
8987           "context = %d, program = %u, location = %d, v0 = %d, v1 = %d, v2 = %d", CID(context),
8988           program, location, v0, v1, v2);
8989 
8990     if (context)
8991     {
8992         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
8993         UniformLocation locationPacked = PackParam<UniformLocation>(location);
8994         SCOPED_SHARE_CONTEXT_LOCK(context);
8995         bool isCallValid =
8996             (context->skipValidation() ||
8997              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
8998                                                 context->getMutableErrorSetForValidation(),
8999                                                 angle::EntryPoint::GLProgramUniform3iEXT) &&
9000               ValidateProgramUniform3iEXT(context, angle::EntryPoint::GLProgramUniform3iEXT,
9001                                           programPacked, locationPacked, v0, v1, v2)));
9002         if (isCallValid)
9003         {
9004             context->programUniform3i(programPacked, locationPacked, v0, v1, v2);
9005         }
9006         ANGLE_CAPTURE_GL(ProgramUniform3iEXT, isCallValid, context, programPacked, locationPacked,
9007                          v0, v1, v2);
9008     }
9009     else
9010     {
9011         GenerateContextLostErrorOnCurrentGlobalContext();
9012     }
9013     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9014 }
9015 
GL_ProgramUniform3ivEXT(GLuint program,GLint location,GLsizei count,const GLint * value)9016 void GL_APIENTRY GL_ProgramUniform3ivEXT(GLuint program,
9017                                          GLint location,
9018                                          GLsizei count,
9019                                          const GLint *value)
9020 {
9021     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9022     Context *context = GetValidGlobalContext();
9023     EVENT(context, GLProgramUniform3ivEXT,
9024           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
9025           CID(context), program, location, count, (uintptr_t)value);
9026 
9027     if (context)
9028     {
9029         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9030         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9031         SCOPED_SHARE_CONTEXT_LOCK(context);
9032         bool isCallValid =
9033             (context->skipValidation() ||
9034              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9035                                                 context->getMutableErrorSetForValidation(),
9036                                                 angle::EntryPoint::GLProgramUniform3ivEXT) &&
9037               ValidateProgramUniform3ivEXT(context, angle::EntryPoint::GLProgramUniform3ivEXT,
9038                                            programPacked, locationPacked, count, value)));
9039         if (isCallValid)
9040         {
9041             context->programUniform3iv(programPacked, locationPacked, count, value);
9042         }
9043         ANGLE_CAPTURE_GL(ProgramUniform3ivEXT, isCallValid, context, programPacked, locationPacked,
9044                          count, value);
9045     }
9046     else
9047     {
9048         GenerateContextLostErrorOnCurrentGlobalContext();
9049     }
9050     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9051 }
9052 
9053 void GL_APIENTRY
GL_ProgramUniform3uiEXT(GLuint program,GLint location,GLuint v0,GLuint v1,GLuint v2)9054 GL_ProgramUniform3uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
9055 {
9056     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9057     Context *context = GetValidGlobalContext();
9058     EVENT(context, GLProgramUniform3uiEXT,
9059           "context = %d, program = %u, location = %d, v0 = %u, v1 = %u, v2 = %u", CID(context),
9060           program, location, v0, v1, v2);
9061 
9062     if (context)
9063     {
9064         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9065         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9066         SCOPED_SHARE_CONTEXT_LOCK(context);
9067         bool isCallValid =
9068             (context->skipValidation() ||
9069              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9070                                                 context->getMutableErrorSetForValidation(),
9071                                                 angle::EntryPoint::GLProgramUniform3uiEXT) &&
9072               ValidateProgramUniform3uiEXT(context, angle::EntryPoint::GLProgramUniform3uiEXT,
9073                                            programPacked, locationPacked, v0, v1, v2)));
9074         if (isCallValid)
9075         {
9076             context->programUniform3ui(programPacked, locationPacked, v0, v1, v2);
9077         }
9078         ANGLE_CAPTURE_GL(ProgramUniform3uiEXT, isCallValid, context, programPacked, locationPacked,
9079                          v0, v1, v2);
9080     }
9081     else
9082     {
9083         GenerateContextLostErrorOnCurrentGlobalContext();
9084     }
9085     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9086 }
9087 
GL_ProgramUniform3uivEXT(GLuint program,GLint location,GLsizei count,const GLuint * value)9088 void GL_APIENTRY GL_ProgramUniform3uivEXT(GLuint program,
9089                                           GLint location,
9090                                           GLsizei count,
9091                                           const GLuint *value)
9092 {
9093     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9094     Context *context = GetValidGlobalContext();
9095     EVENT(context, GLProgramUniform3uivEXT,
9096           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
9097           CID(context), program, location, count, (uintptr_t)value);
9098 
9099     if (context)
9100     {
9101         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9102         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9103         SCOPED_SHARE_CONTEXT_LOCK(context);
9104         bool isCallValid =
9105             (context->skipValidation() ||
9106              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9107                                                 context->getMutableErrorSetForValidation(),
9108                                                 angle::EntryPoint::GLProgramUniform3uivEXT) &&
9109               ValidateProgramUniform3uivEXT(context, angle::EntryPoint::GLProgramUniform3uivEXT,
9110                                             programPacked, locationPacked, count, value)));
9111         if (isCallValid)
9112         {
9113             context->programUniform3uiv(programPacked, locationPacked, count, value);
9114         }
9115         ANGLE_CAPTURE_GL(ProgramUniform3uivEXT, isCallValid, context, programPacked, locationPacked,
9116                          count, value);
9117     }
9118     else
9119     {
9120         GenerateContextLostErrorOnCurrentGlobalContext();
9121     }
9122     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9123 }
9124 
GL_ProgramUniform4fEXT(GLuint program,GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)9125 void GL_APIENTRY GL_ProgramUniform4fEXT(GLuint program,
9126                                         GLint location,
9127                                         GLfloat v0,
9128                                         GLfloat v1,
9129                                         GLfloat v2,
9130                                         GLfloat v3)
9131 {
9132     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9133     Context *context = GetValidGlobalContext();
9134     EVENT(context, GLProgramUniform4fEXT,
9135           "context = %d, program = %u, location = %d, v0 = %f, v1 = %f, v2 = %f, v3 = %f",
9136           CID(context), program, location, v0, v1, v2, v3);
9137 
9138     if (context)
9139     {
9140         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9141         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9142         SCOPED_SHARE_CONTEXT_LOCK(context);
9143         bool isCallValid =
9144             (context->skipValidation() ||
9145              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9146                                                 context->getMutableErrorSetForValidation(),
9147                                                 angle::EntryPoint::GLProgramUniform4fEXT) &&
9148               ValidateProgramUniform4fEXT(context, angle::EntryPoint::GLProgramUniform4fEXT,
9149                                           programPacked, locationPacked, v0, v1, v2, v3)));
9150         if (isCallValid)
9151         {
9152             context->programUniform4f(programPacked, locationPacked, v0, v1, v2, v3);
9153         }
9154         ANGLE_CAPTURE_GL(ProgramUniform4fEXT, isCallValid, context, programPacked, locationPacked,
9155                          v0, v1, v2, v3);
9156     }
9157     else
9158     {
9159         GenerateContextLostErrorOnCurrentGlobalContext();
9160     }
9161     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9162 }
9163 
GL_ProgramUniform4fvEXT(GLuint program,GLint location,GLsizei count,const GLfloat * value)9164 void GL_APIENTRY GL_ProgramUniform4fvEXT(GLuint program,
9165                                          GLint location,
9166                                          GLsizei count,
9167                                          const GLfloat *value)
9168 {
9169     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9170     Context *context = GetValidGlobalContext();
9171     EVENT(context, GLProgramUniform4fvEXT,
9172           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
9173           CID(context), program, location, count, (uintptr_t)value);
9174 
9175     if (context)
9176     {
9177         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9178         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9179         SCOPED_SHARE_CONTEXT_LOCK(context);
9180         bool isCallValid =
9181             (context->skipValidation() ||
9182              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9183                                                 context->getMutableErrorSetForValidation(),
9184                                                 angle::EntryPoint::GLProgramUniform4fvEXT) &&
9185               ValidateProgramUniform4fvEXT(context, angle::EntryPoint::GLProgramUniform4fvEXT,
9186                                            programPacked, locationPacked, count, value)));
9187         if (isCallValid)
9188         {
9189             context->programUniform4fv(programPacked, locationPacked, count, value);
9190         }
9191         ANGLE_CAPTURE_GL(ProgramUniform4fvEXT, isCallValid, context, programPacked, locationPacked,
9192                          count, value);
9193     }
9194     else
9195     {
9196         GenerateContextLostErrorOnCurrentGlobalContext();
9197     }
9198     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9199 }
9200 
9201 void GL_APIENTRY
GL_ProgramUniform4iEXT(GLuint program,GLint location,GLint v0,GLint v1,GLint v2,GLint v3)9202 GL_ProgramUniform4iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
9203 {
9204     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9205     Context *context = GetValidGlobalContext();
9206     EVENT(context, GLProgramUniform4iEXT,
9207           "context = %d, program = %u, location = %d, v0 = %d, v1 = %d, v2 = %d, v3 = %d",
9208           CID(context), program, location, v0, v1, v2, v3);
9209 
9210     if (context)
9211     {
9212         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9213         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9214         SCOPED_SHARE_CONTEXT_LOCK(context);
9215         bool isCallValid =
9216             (context->skipValidation() ||
9217              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9218                                                 context->getMutableErrorSetForValidation(),
9219                                                 angle::EntryPoint::GLProgramUniform4iEXT) &&
9220               ValidateProgramUniform4iEXT(context, angle::EntryPoint::GLProgramUniform4iEXT,
9221                                           programPacked, locationPacked, v0, v1, v2, v3)));
9222         if (isCallValid)
9223         {
9224             context->programUniform4i(programPacked, locationPacked, v0, v1, v2, v3);
9225         }
9226         ANGLE_CAPTURE_GL(ProgramUniform4iEXT, isCallValid, context, programPacked, locationPacked,
9227                          v0, v1, v2, v3);
9228     }
9229     else
9230     {
9231         GenerateContextLostErrorOnCurrentGlobalContext();
9232     }
9233     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9234 }
9235 
GL_ProgramUniform4ivEXT(GLuint program,GLint location,GLsizei count,const GLint * value)9236 void GL_APIENTRY GL_ProgramUniform4ivEXT(GLuint program,
9237                                          GLint location,
9238                                          GLsizei count,
9239                                          const GLint *value)
9240 {
9241     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9242     Context *context = GetValidGlobalContext();
9243     EVENT(context, GLProgramUniform4ivEXT,
9244           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
9245           CID(context), program, location, count, (uintptr_t)value);
9246 
9247     if (context)
9248     {
9249         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9250         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9251         SCOPED_SHARE_CONTEXT_LOCK(context);
9252         bool isCallValid =
9253             (context->skipValidation() ||
9254              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9255                                                 context->getMutableErrorSetForValidation(),
9256                                                 angle::EntryPoint::GLProgramUniform4ivEXT) &&
9257               ValidateProgramUniform4ivEXT(context, angle::EntryPoint::GLProgramUniform4ivEXT,
9258                                            programPacked, locationPacked, count, value)));
9259         if (isCallValid)
9260         {
9261             context->programUniform4iv(programPacked, locationPacked, count, value);
9262         }
9263         ANGLE_CAPTURE_GL(ProgramUniform4ivEXT, isCallValid, context, programPacked, locationPacked,
9264                          count, value);
9265     }
9266     else
9267     {
9268         GenerateContextLostErrorOnCurrentGlobalContext();
9269     }
9270     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9271 }
9272 
9273 void GL_APIENTRY
GL_ProgramUniform4uiEXT(GLuint program,GLint location,GLuint v0,GLuint v1,GLuint v2,GLuint v3)9274 GL_ProgramUniform4uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
9275 {
9276     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9277     Context *context = GetValidGlobalContext();
9278     EVENT(context, GLProgramUniform4uiEXT,
9279           "context = %d, program = %u, location = %d, v0 = %u, v1 = %u, v2 = %u, v3 = %u",
9280           CID(context), program, location, v0, v1, v2, v3);
9281 
9282     if (context)
9283     {
9284         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9285         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9286         SCOPED_SHARE_CONTEXT_LOCK(context);
9287         bool isCallValid =
9288             (context->skipValidation() ||
9289              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9290                                                 context->getMutableErrorSetForValidation(),
9291                                                 angle::EntryPoint::GLProgramUniform4uiEXT) &&
9292               ValidateProgramUniform4uiEXT(context, angle::EntryPoint::GLProgramUniform4uiEXT,
9293                                            programPacked, locationPacked, v0, v1, v2, v3)));
9294         if (isCallValid)
9295         {
9296             context->programUniform4ui(programPacked, locationPacked, v0, v1, v2, v3);
9297         }
9298         ANGLE_CAPTURE_GL(ProgramUniform4uiEXT, isCallValid, context, programPacked, locationPacked,
9299                          v0, v1, v2, v3);
9300     }
9301     else
9302     {
9303         GenerateContextLostErrorOnCurrentGlobalContext();
9304     }
9305     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9306 }
9307 
GL_ProgramUniform4uivEXT(GLuint program,GLint location,GLsizei count,const GLuint * value)9308 void GL_APIENTRY GL_ProgramUniform4uivEXT(GLuint program,
9309                                           GLint location,
9310                                           GLsizei count,
9311                                           const GLuint *value)
9312 {
9313     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9314     Context *context = GetValidGlobalContext();
9315     EVENT(context, GLProgramUniform4uivEXT,
9316           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
9317           CID(context), program, location, count, (uintptr_t)value);
9318 
9319     if (context)
9320     {
9321         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9322         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9323         SCOPED_SHARE_CONTEXT_LOCK(context);
9324         bool isCallValid =
9325             (context->skipValidation() ||
9326              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9327                                                 context->getMutableErrorSetForValidation(),
9328                                                 angle::EntryPoint::GLProgramUniform4uivEXT) &&
9329               ValidateProgramUniform4uivEXT(context, angle::EntryPoint::GLProgramUniform4uivEXT,
9330                                             programPacked, locationPacked, count, value)));
9331         if (isCallValid)
9332         {
9333             context->programUniform4uiv(programPacked, locationPacked, count, value);
9334         }
9335         ANGLE_CAPTURE_GL(ProgramUniform4uivEXT, isCallValid, context, programPacked, locationPacked,
9336                          count, value);
9337     }
9338     else
9339     {
9340         GenerateContextLostErrorOnCurrentGlobalContext();
9341     }
9342     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9343 }
9344 
GL_ProgramUniformMatrix2fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)9345 void GL_APIENTRY GL_ProgramUniformMatrix2fvEXT(GLuint program,
9346                                                GLint location,
9347                                                GLsizei count,
9348                                                GLboolean transpose,
9349                                                const GLfloat *value)
9350 {
9351     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9352     Context *context = GetValidGlobalContext();
9353     EVENT(context, GLProgramUniformMatrix2fvEXT,
9354           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
9355           "0x%016" PRIxPTR "",
9356           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
9357 
9358     if (context)
9359     {
9360         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9361         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9362         SCOPED_SHARE_CONTEXT_LOCK(context);
9363         bool isCallValid =
9364             (context->skipValidation() ||
9365              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9366                                                 context->getMutableErrorSetForValidation(),
9367                                                 angle::EntryPoint::GLProgramUniformMatrix2fvEXT) &&
9368               ValidateProgramUniformMatrix2fvEXT(
9369                   context, angle::EntryPoint::GLProgramUniformMatrix2fvEXT, programPacked,
9370                   locationPacked, count, transpose, value)));
9371         if (isCallValid)
9372         {
9373             context->programUniformMatrix2fv(programPacked, locationPacked, count, transpose,
9374                                              value);
9375         }
9376         ANGLE_CAPTURE_GL(ProgramUniformMatrix2fvEXT, isCallValid, context, programPacked,
9377                          locationPacked, count, transpose, value);
9378     }
9379     else
9380     {
9381         GenerateContextLostErrorOnCurrentGlobalContext();
9382     }
9383     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9384 }
9385 
GL_ProgramUniformMatrix2x3fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)9386 void GL_APIENTRY GL_ProgramUniformMatrix2x3fvEXT(GLuint program,
9387                                                  GLint location,
9388                                                  GLsizei count,
9389                                                  GLboolean transpose,
9390                                                  const GLfloat *value)
9391 {
9392     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9393     Context *context = GetValidGlobalContext();
9394     EVENT(context, GLProgramUniformMatrix2x3fvEXT,
9395           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
9396           "0x%016" PRIxPTR "",
9397           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
9398 
9399     if (context)
9400     {
9401         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9402         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9403         SCOPED_SHARE_CONTEXT_LOCK(context);
9404         bool isCallValid =
9405             (context->skipValidation() ||
9406              (ValidatePixelLocalStorageInactive(
9407                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
9408                   angle::EntryPoint::GLProgramUniformMatrix2x3fvEXT) &&
9409               ValidateProgramUniformMatrix2x3fvEXT(
9410                   context, angle::EntryPoint::GLProgramUniformMatrix2x3fvEXT, programPacked,
9411                   locationPacked, count, transpose, value)));
9412         if (isCallValid)
9413         {
9414             context->programUniformMatrix2x3fv(programPacked, locationPacked, count, transpose,
9415                                                value);
9416         }
9417         ANGLE_CAPTURE_GL(ProgramUniformMatrix2x3fvEXT, isCallValid, context, programPacked,
9418                          locationPacked, count, transpose, value);
9419     }
9420     else
9421     {
9422         GenerateContextLostErrorOnCurrentGlobalContext();
9423     }
9424     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9425 }
9426 
GL_ProgramUniformMatrix2x4fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)9427 void GL_APIENTRY GL_ProgramUniformMatrix2x4fvEXT(GLuint program,
9428                                                  GLint location,
9429                                                  GLsizei count,
9430                                                  GLboolean transpose,
9431                                                  const GLfloat *value)
9432 {
9433     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9434     Context *context = GetValidGlobalContext();
9435     EVENT(context, GLProgramUniformMatrix2x4fvEXT,
9436           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
9437           "0x%016" PRIxPTR "",
9438           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
9439 
9440     if (context)
9441     {
9442         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9443         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9444         SCOPED_SHARE_CONTEXT_LOCK(context);
9445         bool isCallValid =
9446             (context->skipValidation() ||
9447              (ValidatePixelLocalStorageInactive(
9448                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
9449                   angle::EntryPoint::GLProgramUniformMatrix2x4fvEXT) &&
9450               ValidateProgramUniformMatrix2x4fvEXT(
9451                   context, angle::EntryPoint::GLProgramUniformMatrix2x4fvEXT, programPacked,
9452                   locationPacked, count, transpose, value)));
9453         if (isCallValid)
9454         {
9455             context->programUniformMatrix2x4fv(programPacked, locationPacked, count, transpose,
9456                                                value);
9457         }
9458         ANGLE_CAPTURE_GL(ProgramUniformMatrix2x4fvEXT, isCallValid, context, programPacked,
9459                          locationPacked, count, transpose, value);
9460     }
9461     else
9462     {
9463         GenerateContextLostErrorOnCurrentGlobalContext();
9464     }
9465     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9466 }
9467 
GL_ProgramUniformMatrix3fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)9468 void GL_APIENTRY GL_ProgramUniformMatrix3fvEXT(GLuint program,
9469                                                GLint location,
9470                                                GLsizei count,
9471                                                GLboolean transpose,
9472                                                const GLfloat *value)
9473 {
9474     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9475     Context *context = GetValidGlobalContext();
9476     EVENT(context, GLProgramUniformMatrix3fvEXT,
9477           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
9478           "0x%016" PRIxPTR "",
9479           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
9480 
9481     if (context)
9482     {
9483         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9484         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9485         SCOPED_SHARE_CONTEXT_LOCK(context);
9486         bool isCallValid =
9487             (context->skipValidation() ||
9488              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9489                                                 context->getMutableErrorSetForValidation(),
9490                                                 angle::EntryPoint::GLProgramUniformMatrix3fvEXT) &&
9491               ValidateProgramUniformMatrix3fvEXT(
9492                   context, angle::EntryPoint::GLProgramUniformMatrix3fvEXT, programPacked,
9493                   locationPacked, count, transpose, value)));
9494         if (isCallValid)
9495         {
9496             context->programUniformMatrix3fv(programPacked, locationPacked, count, transpose,
9497                                              value);
9498         }
9499         ANGLE_CAPTURE_GL(ProgramUniformMatrix3fvEXT, isCallValid, context, programPacked,
9500                          locationPacked, count, transpose, value);
9501     }
9502     else
9503     {
9504         GenerateContextLostErrorOnCurrentGlobalContext();
9505     }
9506     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9507 }
9508 
GL_ProgramUniformMatrix3x2fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)9509 void GL_APIENTRY GL_ProgramUniformMatrix3x2fvEXT(GLuint program,
9510                                                  GLint location,
9511                                                  GLsizei count,
9512                                                  GLboolean transpose,
9513                                                  const GLfloat *value)
9514 {
9515     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9516     Context *context = GetValidGlobalContext();
9517     EVENT(context, GLProgramUniformMatrix3x2fvEXT,
9518           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
9519           "0x%016" PRIxPTR "",
9520           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
9521 
9522     if (context)
9523     {
9524         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9525         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9526         SCOPED_SHARE_CONTEXT_LOCK(context);
9527         bool isCallValid =
9528             (context->skipValidation() ||
9529              (ValidatePixelLocalStorageInactive(
9530                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
9531                   angle::EntryPoint::GLProgramUniformMatrix3x2fvEXT) &&
9532               ValidateProgramUniformMatrix3x2fvEXT(
9533                   context, angle::EntryPoint::GLProgramUniformMatrix3x2fvEXT, programPacked,
9534                   locationPacked, count, transpose, value)));
9535         if (isCallValid)
9536         {
9537             context->programUniformMatrix3x2fv(programPacked, locationPacked, count, transpose,
9538                                                value);
9539         }
9540         ANGLE_CAPTURE_GL(ProgramUniformMatrix3x2fvEXT, isCallValid, context, programPacked,
9541                          locationPacked, count, transpose, value);
9542     }
9543     else
9544     {
9545         GenerateContextLostErrorOnCurrentGlobalContext();
9546     }
9547     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9548 }
9549 
GL_ProgramUniformMatrix3x4fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)9550 void GL_APIENTRY GL_ProgramUniformMatrix3x4fvEXT(GLuint program,
9551                                                  GLint location,
9552                                                  GLsizei count,
9553                                                  GLboolean transpose,
9554                                                  const GLfloat *value)
9555 {
9556     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9557     Context *context = GetValidGlobalContext();
9558     EVENT(context, GLProgramUniformMatrix3x4fvEXT,
9559           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
9560           "0x%016" PRIxPTR "",
9561           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
9562 
9563     if (context)
9564     {
9565         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9566         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9567         SCOPED_SHARE_CONTEXT_LOCK(context);
9568         bool isCallValid =
9569             (context->skipValidation() ||
9570              (ValidatePixelLocalStorageInactive(
9571                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
9572                   angle::EntryPoint::GLProgramUniformMatrix3x4fvEXT) &&
9573               ValidateProgramUniformMatrix3x4fvEXT(
9574                   context, angle::EntryPoint::GLProgramUniformMatrix3x4fvEXT, programPacked,
9575                   locationPacked, count, transpose, value)));
9576         if (isCallValid)
9577         {
9578             context->programUniformMatrix3x4fv(programPacked, locationPacked, count, transpose,
9579                                                value);
9580         }
9581         ANGLE_CAPTURE_GL(ProgramUniformMatrix3x4fvEXT, isCallValid, context, programPacked,
9582                          locationPacked, count, transpose, value);
9583     }
9584     else
9585     {
9586         GenerateContextLostErrorOnCurrentGlobalContext();
9587     }
9588     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9589 }
9590 
GL_ProgramUniformMatrix4fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)9591 void GL_APIENTRY GL_ProgramUniformMatrix4fvEXT(GLuint program,
9592                                                GLint location,
9593                                                GLsizei count,
9594                                                GLboolean transpose,
9595                                                const GLfloat *value)
9596 {
9597     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9598     Context *context = GetValidGlobalContext();
9599     EVENT(context, GLProgramUniformMatrix4fvEXT,
9600           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
9601           "0x%016" PRIxPTR "",
9602           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
9603 
9604     if (context)
9605     {
9606         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9607         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9608         SCOPED_SHARE_CONTEXT_LOCK(context);
9609         bool isCallValid =
9610             (context->skipValidation() ||
9611              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9612                                                 context->getMutableErrorSetForValidation(),
9613                                                 angle::EntryPoint::GLProgramUniformMatrix4fvEXT) &&
9614               ValidateProgramUniformMatrix4fvEXT(
9615                   context, angle::EntryPoint::GLProgramUniformMatrix4fvEXT, programPacked,
9616                   locationPacked, count, transpose, value)));
9617         if (isCallValid)
9618         {
9619             context->programUniformMatrix4fv(programPacked, locationPacked, count, transpose,
9620                                              value);
9621         }
9622         ANGLE_CAPTURE_GL(ProgramUniformMatrix4fvEXT, isCallValid, context, programPacked,
9623                          locationPacked, count, transpose, value);
9624     }
9625     else
9626     {
9627         GenerateContextLostErrorOnCurrentGlobalContext();
9628     }
9629     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9630 }
9631 
GL_ProgramUniformMatrix4x2fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)9632 void GL_APIENTRY GL_ProgramUniformMatrix4x2fvEXT(GLuint program,
9633                                                  GLint location,
9634                                                  GLsizei count,
9635                                                  GLboolean transpose,
9636                                                  const GLfloat *value)
9637 {
9638     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9639     Context *context = GetValidGlobalContext();
9640     EVENT(context, GLProgramUniformMatrix4x2fvEXT,
9641           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
9642           "0x%016" PRIxPTR "",
9643           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
9644 
9645     if (context)
9646     {
9647         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9648         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9649         SCOPED_SHARE_CONTEXT_LOCK(context);
9650         bool isCallValid =
9651             (context->skipValidation() ||
9652              (ValidatePixelLocalStorageInactive(
9653                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
9654                   angle::EntryPoint::GLProgramUniformMatrix4x2fvEXT) &&
9655               ValidateProgramUniformMatrix4x2fvEXT(
9656                   context, angle::EntryPoint::GLProgramUniformMatrix4x2fvEXT, programPacked,
9657                   locationPacked, count, transpose, value)));
9658         if (isCallValid)
9659         {
9660             context->programUniformMatrix4x2fv(programPacked, locationPacked, count, transpose,
9661                                                value);
9662         }
9663         ANGLE_CAPTURE_GL(ProgramUniformMatrix4x2fvEXT, isCallValid, context, programPacked,
9664                          locationPacked, count, transpose, value);
9665     }
9666     else
9667     {
9668         GenerateContextLostErrorOnCurrentGlobalContext();
9669     }
9670     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9671 }
9672 
GL_ProgramUniformMatrix4x3fvEXT(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)9673 void GL_APIENTRY GL_ProgramUniformMatrix4x3fvEXT(GLuint program,
9674                                                  GLint location,
9675                                                  GLsizei count,
9676                                                  GLboolean transpose,
9677                                                  const GLfloat *value)
9678 {
9679     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9680     Context *context = GetValidGlobalContext();
9681     EVENT(context, GLProgramUniformMatrix4x3fvEXT,
9682           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
9683           "0x%016" PRIxPTR "",
9684           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
9685 
9686     if (context)
9687     {
9688         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
9689         UniformLocation locationPacked = PackParam<UniformLocation>(location);
9690         SCOPED_SHARE_CONTEXT_LOCK(context);
9691         bool isCallValid =
9692             (context->skipValidation() ||
9693              (ValidatePixelLocalStorageInactive(
9694                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
9695                   angle::EntryPoint::GLProgramUniformMatrix4x3fvEXT) &&
9696               ValidateProgramUniformMatrix4x3fvEXT(
9697                   context, angle::EntryPoint::GLProgramUniformMatrix4x3fvEXT, programPacked,
9698                   locationPacked, count, transpose, value)));
9699         if (isCallValid)
9700         {
9701             context->programUniformMatrix4x3fv(programPacked, locationPacked, count, transpose,
9702                                                value);
9703         }
9704         ANGLE_CAPTURE_GL(ProgramUniformMatrix4x3fvEXT, isCallValid, context, programPacked,
9705                          locationPacked, count, transpose, value);
9706     }
9707     else
9708     {
9709         GenerateContextLostErrorOnCurrentGlobalContext();
9710     }
9711     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9712 }
9713 
GL_UseProgramStagesEXT(GLuint pipeline,GLbitfield stages,GLuint program)9714 void GL_APIENTRY GL_UseProgramStagesEXT(GLuint pipeline, GLbitfield stages, GLuint program)
9715 {
9716     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9717     Context *context = GetValidGlobalContext();
9718     EVENT(context, GLUseProgramStagesEXT, "context = %d, pipeline = %u, stages = %s, program = %u",
9719           CID(context), pipeline, GLbitfieldToString(GLESEnum::UseProgramStageMask, stages).c_str(),
9720           program);
9721 
9722     if (context)
9723     {
9724         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
9725         ShaderProgramID programPacked    = PackParam<ShaderProgramID>(program);
9726         SCOPED_SHARE_CONTEXT_LOCK(context);
9727         bool isCallValid =
9728             (context->skipValidation() ||
9729              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9730                                                 context->getMutableErrorSetForValidation(),
9731                                                 angle::EntryPoint::GLUseProgramStagesEXT) &&
9732               ValidateUseProgramStagesEXT(context, angle::EntryPoint::GLUseProgramStagesEXT,
9733                                           pipelinePacked, stages, programPacked)));
9734         if (isCallValid)
9735         {
9736             context->useProgramStages(pipelinePacked, stages, programPacked);
9737         }
9738         ANGLE_CAPTURE_GL(UseProgramStagesEXT, isCallValid, context, pipelinePacked, stages,
9739                          programPacked);
9740     }
9741     else
9742     {
9743         GenerateContextLostErrorOnCurrentGlobalContext();
9744     }
9745     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9746 }
9747 
GL_ValidateProgramPipelineEXT(GLuint pipeline)9748 void GL_APIENTRY GL_ValidateProgramPipelineEXT(GLuint pipeline)
9749 {
9750     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9751     Context *context = GetValidGlobalContext();
9752     EVENT(context, GLValidateProgramPipelineEXT, "context = %d, pipeline = %u", CID(context),
9753           pipeline);
9754 
9755     if (context)
9756     {
9757         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
9758         SCOPED_SHARE_CONTEXT_LOCK(context);
9759         bool isCallValid =
9760             (context->skipValidation() ||
9761              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9762                                                 context->getMutableErrorSetForValidation(),
9763                                                 angle::EntryPoint::GLValidateProgramPipelineEXT) &&
9764               ValidateValidateProgramPipelineEXT(
9765                   context, angle::EntryPoint::GLValidateProgramPipelineEXT, pipelinePacked)));
9766         if (isCallValid)
9767         {
9768             context->validateProgramPipeline(pipelinePacked);
9769         }
9770         ANGLE_CAPTURE_GL(ValidateProgramPipelineEXT, isCallValid, context, pipelinePacked);
9771     }
9772     else
9773     {
9774         GenerateContextLostErrorOnCurrentGlobalContext();
9775     }
9776     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9777 }
9778 
9779 // GL_EXT_shader_framebuffer_fetch
9780 
9781 // GL_EXT_shader_framebuffer_fetch_non_coherent
GL_FramebufferFetchBarrierEXT()9782 void GL_APIENTRY GL_FramebufferFetchBarrierEXT()
9783 {
9784     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9785     Context *context = GetValidGlobalContext();
9786     EVENT(context, GLFramebufferFetchBarrierEXT, "context = %d", CID(context));
9787 
9788     if (context)
9789     {
9790         SCOPED_SHARE_CONTEXT_LOCK(context);
9791         bool isCallValid =
9792             (context->skipValidation() ||
9793              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9794                                                 context->getMutableErrorSetForValidation(),
9795                                                 angle::EntryPoint::GLFramebufferFetchBarrierEXT) &&
9796               ValidateFramebufferFetchBarrierEXT(context,
9797                                                  angle::EntryPoint::GLFramebufferFetchBarrierEXT)));
9798         if (isCallValid)
9799         {
9800             context->framebufferFetchBarrier();
9801         }
9802         ANGLE_CAPTURE_GL(FramebufferFetchBarrierEXT, isCallValid, context);
9803     }
9804     else
9805     {
9806         GenerateContextLostErrorOnCurrentGlobalContext();
9807     }
9808     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9809 }
9810 
9811 // GL_EXT_shader_io_blocks
9812 
9813 // GL_EXT_shader_non_constant_global_initializers
9814 
9815 // GL_EXT_shader_texture_lod
9816 
9817 // GL_EXT_shadow_samplers
9818 
9819 // GL_EXT_tessellation_shader
GL_PatchParameteriEXT(GLenum pname,GLint value)9820 void GL_APIENTRY GL_PatchParameteriEXT(GLenum pname, GLint value)
9821 {
9822     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9823     Context *context = GetValidGlobalContext();
9824     EVENT(context, GLPatchParameteriEXT, "context = %d, pname = %s, value = %d", CID(context),
9825           GLenumToString(GLESEnum::PatchParameterName, pname), value);
9826 
9827     if (context)
9828     {
9829         bool isCallValid =
9830             (context->skipValidation() ||
9831              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
9832                                                 context->getMutableErrorSetForValidation(),
9833                                                 angle::EntryPoint::GLPatchParameteriEXT) &&
9834               ValidatePatchParameteriEXT(context->getPrivateState(),
9835                                          context->getMutableErrorSetForValidation(),
9836                                          angle::EntryPoint::GLPatchParameteriEXT, pname, value)));
9837         if (isCallValid)
9838         {
9839             ContextPrivatePatchParameteri(context->getMutablePrivateState(),
9840                                           context->getMutablePrivateStateCache(), pname, value);
9841         }
9842         ANGLE_CAPTURE_GL(PatchParameteriEXT, isCallValid, context, pname, value);
9843     }
9844     else
9845     {
9846         GenerateContextLostErrorOnCurrentGlobalContext();
9847     }
9848     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9849 }
9850 
9851 // GL_EXT_texture_border_clamp
GL_GetSamplerParameterIivEXT(GLuint sampler,GLenum pname,GLint * params)9852 void GL_APIENTRY GL_GetSamplerParameterIivEXT(GLuint sampler, GLenum pname, GLint *params)
9853 {
9854     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9855     Context *context = GetValidGlobalContext();
9856     EVENT(context, GLGetSamplerParameterIivEXT,
9857           "context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
9858           sampler, GLenumToString(GLESEnum::SamplerParameterI, pname), (uintptr_t)params);
9859 
9860     if (context)
9861     {
9862         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
9863         SCOPED_SHARE_CONTEXT_LOCK(context);
9864         bool isCallValid = (context->skipValidation() ||
9865                             ValidateGetSamplerParameterIivEXT(
9866                                 context, angle::EntryPoint::GLGetSamplerParameterIivEXT,
9867                                 samplerPacked, pname, params));
9868         if (isCallValid)
9869         {
9870             context->getSamplerParameterIiv(samplerPacked, pname, params);
9871         }
9872         ANGLE_CAPTURE_GL(GetSamplerParameterIivEXT, isCallValid, context, samplerPacked, pname,
9873                          params);
9874     }
9875     else
9876     {
9877         GenerateContextLostErrorOnCurrentGlobalContext();
9878     }
9879     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9880 }
9881 
GL_GetSamplerParameterIuivEXT(GLuint sampler,GLenum pname,GLuint * params)9882 void GL_APIENTRY GL_GetSamplerParameterIuivEXT(GLuint sampler, GLenum pname, GLuint *params)
9883 {
9884     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9885     Context *context = GetValidGlobalContext();
9886     EVENT(context, GLGetSamplerParameterIuivEXT,
9887           "context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
9888           sampler, GLenumToString(GLESEnum::SamplerParameterI, pname), (uintptr_t)params);
9889 
9890     if (context)
9891     {
9892         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
9893         SCOPED_SHARE_CONTEXT_LOCK(context);
9894         bool isCallValid = (context->skipValidation() ||
9895                             ValidateGetSamplerParameterIuivEXT(
9896                                 context, angle::EntryPoint::GLGetSamplerParameterIuivEXT,
9897                                 samplerPacked, pname, params));
9898         if (isCallValid)
9899         {
9900             context->getSamplerParameterIuiv(samplerPacked, pname, params);
9901         }
9902         ANGLE_CAPTURE_GL(GetSamplerParameterIuivEXT, isCallValid, context, samplerPacked, pname,
9903                          params);
9904     }
9905     else
9906     {
9907         GenerateContextLostErrorOnCurrentGlobalContext();
9908     }
9909     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9910 }
9911 
GL_GetTexParameterIivEXT(GLenum target,GLenum pname,GLint * params)9912 void GL_APIENTRY GL_GetTexParameterIivEXT(GLenum target, GLenum pname, GLint *params)
9913 {
9914     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9915     Context *context = GetValidGlobalContext();
9916     EVENT(context, GLGetTexParameterIivEXT,
9917           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
9918           GLenumToString(GLESEnum::TextureTarget, target),
9919           GLenumToString(GLESEnum::GetTextureParameter, pname), (uintptr_t)params);
9920 
9921     if (context)
9922     {
9923         TextureType targetPacked = PackParam<TextureType>(target);
9924         SCOPED_SHARE_CONTEXT_LOCK(context);
9925         bool isCallValid =
9926             (context->skipValidation() ||
9927              ValidateGetTexParameterIivEXT(context, angle::EntryPoint::GLGetTexParameterIivEXT,
9928                                            targetPacked, pname, params));
9929         if (isCallValid)
9930         {
9931             context->getTexParameterIiv(targetPacked, pname, params);
9932         }
9933         ANGLE_CAPTURE_GL(GetTexParameterIivEXT, isCallValid, context, targetPacked, pname, params);
9934     }
9935     else
9936     {
9937         GenerateContextLostErrorOnCurrentGlobalContext();
9938     }
9939     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9940 }
9941 
GL_GetTexParameterIuivEXT(GLenum target,GLenum pname,GLuint * params)9942 void GL_APIENTRY GL_GetTexParameterIuivEXT(GLenum target, GLenum pname, GLuint *params)
9943 {
9944     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9945     Context *context = GetValidGlobalContext();
9946     EVENT(context, GLGetTexParameterIuivEXT,
9947           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
9948           GLenumToString(GLESEnum::TextureTarget, target),
9949           GLenumToString(GLESEnum::GetTextureParameter, pname), (uintptr_t)params);
9950 
9951     if (context)
9952     {
9953         TextureType targetPacked = PackParam<TextureType>(target);
9954         SCOPED_SHARE_CONTEXT_LOCK(context);
9955         bool isCallValid =
9956             (context->skipValidation() ||
9957              ValidateGetTexParameterIuivEXT(context, angle::EntryPoint::GLGetTexParameterIuivEXT,
9958                                             targetPacked, pname, params));
9959         if (isCallValid)
9960         {
9961             context->getTexParameterIuiv(targetPacked, pname, params);
9962         }
9963         ANGLE_CAPTURE_GL(GetTexParameterIuivEXT, isCallValid, context, targetPacked, pname, params);
9964     }
9965     else
9966     {
9967         GenerateContextLostErrorOnCurrentGlobalContext();
9968     }
9969     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9970 }
9971 
GL_SamplerParameterIivEXT(GLuint sampler,GLenum pname,const GLint * param)9972 void GL_APIENTRY GL_SamplerParameterIivEXT(GLuint sampler, GLenum pname, const GLint *param)
9973 {
9974     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9975     Context *context = GetValidGlobalContext();
9976     EVENT(context, GLSamplerParameterIivEXT,
9977           "context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),
9978           sampler, GLenumToString(GLESEnum::SamplerParameterI, pname), (uintptr_t)param);
9979 
9980     if (context)
9981     {
9982         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
9983         SCOPED_SHARE_CONTEXT_LOCK(context);
9984         bool isCallValid =
9985             (context->skipValidation() ||
9986              ValidateSamplerParameterIivEXT(context, angle::EntryPoint::GLSamplerParameterIivEXT,
9987                                             samplerPacked, pname, param));
9988         if (isCallValid)
9989         {
9990             context->samplerParameterIiv(samplerPacked, pname, param);
9991         }
9992         ANGLE_CAPTURE_GL(SamplerParameterIivEXT, isCallValid, context, samplerPacked, pname, param);
9993     }
9994     else
9995     {
9996         GenerateContextLostErrorOnCurrentGlobalContext();
9997     }
9998     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
9999 }
10000 
GL_SamplerParameterIuivEXT(GLuint sampler,GLenum pname,const GLuint * param)10001 void GL_APIENTRY GL_SamplerParameterIuivEXT(GLuint sampler, GLenum pname, const GLuint *param)
10002 {
10003     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10004     Context *context = GetValidGlobalContext();
10005     EVENT(context, GLSamplerParameterIuivEXT,
10006           "context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),
10007           sampler, GLenumToString(GLESEnum::SamplerParameterI, pname), (uintptr_t)param);
10008 
10009     if (context)
10010     {
10011         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
10012         SCOPED_SHARE_CONTEXT_LOCK(context);
10013         bool isCallValid =
10014             (context->skipValidation() ||
10015              ValidateSamplerParameterIuivEXT(context, angle::EntryPoint::GLSamplerParameterIuivEXT,
10016                                              samplerPacked, pname, param));
10017         if (isCallValid)
10018         {
10019             context->samplerParameterIuiv(samplerPacked, pname, param);
10020         }
10021         ANGLE_CAPTURE_GL(SamplerParameterIuivEXT, isCallValid, context, samplerPacked, pname,
10022                          param);
10023     }
10024     else
10025     {
10026         GenerateContextLostErrorOnCurrentGlobalContext();
10027     }
10028     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10029 }
10030 
GL_TexParameterIivEXT(GLenum target,GLenum pname,const GLint * params)10031 void GL_APIENTRY GL_TexParameterIivEXT(GLenum target, GLenum pname, const GLint *params)
10032 {
10033     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10034     Context *context = GetValidGlobalContext();
10035     EVENT(context, GLTexParameterIivEXT,
10036           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10037           GLenumToString(GLESEnum::TextureTarget, target),
10038           GLenumToString(GLESEnum::TextureParameterName, pname), (uintptr_t)params);
10039 
10040     if (context)
10041     {
10042         TextureType targetPacked = PackParam<TextureType>(target);
10043         SCOPED_SHARE_CONTEXT_LOCK(context);
10044         bool isCallValid =
10045             (context->skipValidation() ||
10046              ValidateTexParameterIivEXT(context, angle::EntryPoint::GLTexParameterIivEXT,
10047                                         targetPacked, pname, params));
10048         if (isCallValid)
10049         {
10050             context->texParameterIiv(targetPacked, pname, params);
10051         }
10052         ANGLE_CAPTURE_GL(TexParameterIivEXT, isCallValid, context, targetPacked, pname, params);
10053     }
10054     else
10055     {
10056         GenerateContextLostErrorOnCurrentGlobalContext();
10057     }
10058     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10059 }
10060 
GL_TexParameterIuivEXT(GLenum target,GLenum pname,const GLuint * params)10061 void GL_APIENTRY GL_TexParameterIuivEXT(GLenum target, GLenum pname, const GLuint *params)
10062 {
10063     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10064     Context *context = GetValidGlobalContext();
10065     EVENT(context, GLTexParameterIuivEXT,
10066           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
10067           GLenumToString(GLESEnum::TextureTarget, target),
10068           GLenumToString(GLESEnum::TextureParameterName, pname), (uintptr_t)params);
10069 
10070     if (context)
10071     {
10072         TextureType targetPacked = PackParam<TextureType>(target);
10073         SCOPED_SHARE_CONTEXT_LOCK(context);
10074         bool isCallValid =
10075             (context->skipValidation() ||
10076              ValidateTexParameterIuivEXT(context, angle::EntryPoint::GLTexParameterIuivEXT,
10077                                          targetPacked, pname, params));
10078         if (isCallValid)
10079         {
10080             context->texParameterIuiv(targetPacked, pname, params);
10081         }
10082         ANGLE_CAPTURE_GL(TexParameterIuivEXT, isCallValid, context, targetPacked, pname, params);
10083     }
10084     else
10085     {
10086         GenerateContextLostErrorOnCurrentGlobalContext();
10087     }
10088     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10089 }
10090 
10091 // GL_EXT_texture_buffer
GL_TexBufferEXT(GLenum target,GLenum internalformat,GLuint buffer)10092 void GL_APIENTRY GL_TexBufferEXT(GLenum target, GLenum internalformat, GLuint buffer)
10093 {
10094     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10095     Context *context = GetValidGlobalContext();
10096     EVENT(context, GLTexBufferEXT, "context = %d, target = %s, internalformat = %s, buffer = %u",
10097           CID(context), GLenumToString(GLESEnum::TextureTarget, target),
10098           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), buffer);
10099 
10100     if (context)
10101     {
10102         TextureType targetPacked = PackParam<TextureType>(target);
10103         BufferID bufferPacked    = PackParam<BufferID>(buffer);
10104         SCOPED_SHARE_CONTEXT_LOCK(context);
10105         bool isCallValid =
10106             (context->skipValidation() ||
10107              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10108                                                 context->getMutableErrorSetForValidation(),
10109                                                 angle::EntryPoint::GLTexBufferEXT) &&
10110               ValidateTexBufferEXT(context, angle::EntryPoint::GLTexBufferEXT, targetPacked,
10111                                    internalformat, bufferPacked)));
10112         if (isCallValid)
10113         {
10114             context->texBuffer(targetPacked, internalformat, bufferPacked);
10115         }
10116         ANGLE_CAPTURE_GL(TexBufferEXT, isCallValid, context, targetPacked, internalformat,
10117                          bufferPacked);
10118     }
10119     else
10120     {
10121         GenerateContextLostErrorOnCurrentGlobalContext();
10122     }
10123     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10124 }
10125 
GL_TexBufferRangeEXT(GLenum target,GLenum internalformat,GLuint buffer,GLintptr offset,GLsizeiptr size)10126 void GL_APIENTRY GL_TexBufferRangeEXT(GLenum target,
10127                                       GLenum internalformat,
10128                                       GLuint buffer,
10129                                       GLintptr offset,
10130                                       GLsizeiptr size)
10131 {
10132     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10133     Context *context = GetValidGlobalContext();
10134     EVENT(context, GLTexBufferRangeEXT,
10135           "context = %d, target = %s, internalformat = %s, buffer = %u, offset = %llu, size = %llu",
10136           CID(context), GLenumToString(GLESEnum::TextureTarget, target),
10137           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), buffer,
10138           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(size));
10139 
10140     if (context)
10141     {
10142         TextureType targetPacked = PackParam<TextureType>(target);
10143         BufferID bufferPacked    = PackParam<BufferID>(buffer);
10144         SCOPED_SHARE_CONTEXT_LOCK(context);
10145         bool isCallValid =
10146             (context->skipValidation() ||
10147              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10148                                                 context->getMutableErrorSetForValidation(),
10149                                                 angle::EntryPoint::GLTexBufferRangeEXT) &&
10150               ValidateTexBufferRangeEXT(context, angle::EntryPoint::GLTexBufferRangeEXT,
10151                                         targetPacked, internalformat, bufferPacked, offset, size)));
10152         if (isCallValid)
10153         {
10154             context->texBufferRange(targetPacked, internalformat, bufferPacked, offset, size);
10155         }
10156         ANGLE_CAPTURE_GL(TexBufferRangeEXT, isCallValid, context, targetPacked, internalformat,
10157                          bufferPacked, offset, size);
10158     }
10159     else
10160     {
10161         GenerateContextLostErrorOnCurrentGlobalContext();
10162     }
10163     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10164 }
10165 
10166 // GL_EXT_texture_compression_astc_decode_mode
10167 
10168 // GL_EXT_texture_compression_bptc
10169 
10170 // GL_EXT_texture_compression_dxt1
10171 
10172 // GL_EXT_texture_compression_rgtc
10173 
10174 // GL_EXT_texture_compression_s3tc
10175 
10176 // GL_EXT_texture_compression_s3tc_srgb
10177 
10178 // GL_EXT_texture_cube_map_array
10179 
10180 // GL_EXT_texture_filter_anisotropic
10181 
10182 // GL_EXT_texture_filter_minmax
10183 
10184 // GL_EXT_texture_format_BGRA8888
10185 
10186 // GL_EXT_texture_format_sRGB_override
10187 
10188 // GL_EXT_texture_mirror_clamp_to_edge
10189 
10190 // GL_EXT_texture_norm16
10191 
10192 // GL_EXT_texture_query_lod
10193 
10194 // GL_EXT_texture_rg
10195 
10196 // GL_EXT_texture_sRGB_R8
10197 
10198 // GL_EXT_texture_sRGB_RG8
10199 
10200 // GL_EXT_texture_sRGB_decode
10201 
10202 // GL_EXT_texture_shadow_lod
10203 
10204 // GL_EXT_texture_storage
GL_TexStorage1DEXT(GLenum target,GLsizei levels,GLenum internalformat,GLsizei width)10205 void GL_APIENTRY GL_TexStorage1DEXT(GLenum target,
10206                                     GLsizei levels,
10207                                     GLenum internalformat,
10208                                     GLsizei width)
10209 {
10210     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10211     Context *context = GetValidGlobalContext();
10212     EVENT(context, GLTexStorage1DEXT,
10213           "context = %d, target = %s, levels = %d, internalformat = %s, width = %d", CID(context),
10214           GLenumToString(GLESEnum::TextureTarget, target), levels,
10215           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), width);
10216 
10217     if (context)
10218     {
10219         SCOPED_SHARE_CONTEXT_LOCK(context);
10220         bool isCallValid =
10221             (context->skipValidation() ||
10222              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10223                                                 context->getMutableErrorSetForValidation(),
10224                                                 angle::EntryPoint::GLTexStorage1DEXT) &&
10225               ValidateTexStorage1DEXT(context, angle::EntryPoint::GLTexStorage1DEXT, target, levels,
10226                                       internalformat, width)));
10227         if (isCallValid)
10228         {
10229             context->texStorage1D(target, levels, internalformat, width);
10230         }
10231         ANGLE_CAPTURE_GL(TexStorage1DEXT, isCallValid, context, target, levels, internalformat,
10232                          width);
10233     }
10234     else
10235     {
10236         GenerateContextLostErrorOnCurrentGlobalContext();
10237     }
10238     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10239 }
10240 
GL_TexStorage2DEXT(GLenum target,GLsizei levels,GLenum internalformat,GLsizei width,GLsizei height)10241 void GL_APIENTRY GL_TexStorage2DEXT(GLenum target,
10242                                     GLsizei levels,
10243                                     GLenum internalformat,
10244                                     GLsizei width,
10245                                     GLsizei height)
10246 {
10247     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10248     Context *context = GetValidGlobalContext();
10249     EVENT(context, GLTexStorage2DEXT,
10250           "context = %d, target = %s, levels = %d, internalformat = %s, width = %d, height = %d",
10251           CID(context), GLenumToString(GLESEnum::TextureTarget, target), levels,
10252           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), width, height);
10253 
10254     if (context)
10255     {
10256         TextureType targetPacked = PackParam<TextureType>(target);
10257         SCOPED_SHARE_CONTEXT_LOCK(context);
10258         bool isCallValid =
10259             (context->skipValidation() ||
10260              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10261                                                 context->getMutableErrorSetForValidation(),
10262                                                 angle::EntryPoint::GLTexStorage2DEXT) &&
10263               ValidateTexStorage2DEXT(context, angle::EntryPoint::GLTexStorage2DEXT, targetPacked,
10264                                       levels, internalformat, width, height)));
10265         if (isCallValid)
10266         {
10267             context->texStorage2D(targetPacked, levels, internalformat, width, height);
10268         }
10269         ANGLE_CAPTURE_GL(TexStorage2DEXT, isCallValid, context, targetPacked, levels,
10270                          internalformat, width, height);
10271     }
10272     else
10273     {
10274         GenerateContextLostErrorOnCurrentGlobalContext();
10275     }
10276     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10277 }
10278 
GL_TexStorage3DEXT(GLenum target,GLsizei levels,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth)10279 void GL_APIENTRY GL_TexStorage3DEXT(GLenum target,
10280                                     GLsizei levels,
10281                                     GLenum internalformat,
10282                                     GLsizei width,
10283                                     GLsizei height,
10284                                     GLsizei depth)
10285 {
10286     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10287     Context *context = GetValidGlobalContext();
10288     EVENT(context, GLTexStorage3DEXT,
10289           "context = %d, target = %s, levels = %d, internalformat = %s, width = %d, height = %d, "
10290           "depth = %d",
10291           CID(context), GLenumToString(GLESEnum::TextureTarget, target), levels,
10292           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), width, height, depth);
10293 
10294     if (context)
10295     {
10296         TextureType targetPacked = PackParam<TextureType>(target);
10297         SCOPED_SHARE_CONTEXT_LOCK(context);
10298         bool isCallValid =
10299             (context->skipValidation() ||
10300              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10301                                                 context->getMutableErrorSetForValidation(),
10302                                                 angle::EntryPoint::GLTexStorage3DEXT) &&
10303               ValidateTexStorage3DEXT(context, angle::EntryPoint::GLTexStorage3DEXT, targetPacked,
10304                                       levels, internalformat, width, height, depth)));
10305         if (isCallValid)
10306         {
10307             context->texStorage3D(targetPacked, levels, internalformat, width, height, depth);
10308         }
10309         ANGLE_CAPTURE_GL(TexStorage3DEXT, isCallValid, context, targetPacked, levels,
10310                          internalformat, width, height, depth);
10311     }
10312     else
10313     {
10314         GenerateContextLostErrorOnCurrentGlobalContext();
10315     }
10316     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10317 }
10318 
10319 // GL_EXT_texture_storage_compression
GL_TexStorageAttribs2DEXT(GLenum target,GLsizei levels,GLenum internalformat,GLsizei width,GLsizei height,const GLint * attrib_list)10320 void GL_APIENTRY GL_TexStorageAttribs2DEXT(GLenum target,
10321                                            GLsizei levels,
10322                                            GLenum internalformat,
10323                                            GLsizei width,
10324                                            GLsizei height,
10325                                            const GLint *attrib_list)
10326 {
10327     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10328     Context *context = GetValidGlobalContext();
10329     EVENT(context, GLTexStorageAttribs2DEXT,
10330           "context = %d, target = %s, levels = %d, internalformat = %s, width = %d, height = %d, "
10331           "attrib_list = 0x%016" PRIxPTR "",
10332           CID(context), GLenumToString(GLESEnum::TextureTarget, target), levels,
10333           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), width, height,
10334           (uintptr_t)attrib_list);
10335 
10336     if (context)
10337     {
10338         SCOPED_SHARE_CONTEXT_LOCK(context);
10339         bool isCallValid =
10340             (context->skipValidation() ||
10341              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10342                                                 context->getMutableErrorSetForValidation(),
10343                                                 angle::EntryPoint::GLTexStorageAttribs2DEXT) &&
10344               ValidateTexStorageAttribs2DEXT(context, angle::EntryPoint::GLTexStorageAttribs2DEXT,
10345                                              target, levels, internalformat, width, height,
10346                                              attrib_list)));
10347         if (isCallValid)
10348         {
10349             context->texStorageAttribs2D(target, levels, internalformat, width, height,
10350                                          attrib_list);
10351         }
10352         ANGLE_CAPTURE_GL(TexStorageAttribs2DEXT, isCallValid, context, target, levels,
10353                          internalformat, width, height, attrib_list);
10354     }
10355     else
10356     {
10357         GenerateContextLostErrorOnCurrentGlobalContext();
10358     }
10359     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10360 }
10361 
GL_TexStorageAttribs3DEXT(GLenum target,GLsizei levels,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,const GLint * attrib_list)10362 void GL_APIENTRY GL_TexStorageAttribs3DEXT(GLenum target,
10363                                            GLsizei levels,
10364                                            GLenum internalformat,
10365                                            GLsizei width,
10366                                            GLsizei height,
10367                                            GLsizei depth,
10368                                            const GLint *attrib_list)
10369 {
10370     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10371     Context *context = GetValidGlobalContext();
10372     EVENT(context, GLTexStorageAttribs3DEXT,
10373           "context = %d, target = %s, levels = %d, internalformat = %s, width = %d, height = %d, "
10374           "depth = %d, attrib_list = 0x%016" PRIxPTR "",
10375           CID(context), GLenumToString(GLESEnum::TextureTarget, target), levels,
10376           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), width, height, depth,
10377           (uintptr_t)attrib_list);
10378 
10379     if (context)
10380     {
10381         SCOPED_SHARE_CONTEXT_LOCK(context);
10382         bool isCallValid =
10383             (context->skipValidation() ||
10384              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10385                                                 context->getMutableErrorSetForValidation(),
10386                                                 angle::EntryPoint::GLTexStorageAttribs3DEXT) &&
10387               ValidateTexStorageAttribs3DEXT(context, angle::EntryPoint::GLTexStorageAttribs3DEXT,
10388                                              target, levels, internalformat, width, height, depth,
10389                                              attrib_list)));
10390         if (isCallValid)
10391         {
10392             context->texStorageAttribs3D(target, levels, internalformat, width, height, depth,
10393                                          attrib_list);
10394         }
10395         ANGLE_CAPTURE_GL(TexStorageAttribs3DEXT, isCallValid, context, target, levels,
10396                          internalformat, width, height, depth, attrib_list);
10397     }
10398     else
10399     {
10400         GenerateContextLostErrorOnCurrentGlobalContext();
10401     }
10402     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10403 }
10404 
10405 // GL_EXT_texture_type_2_10_10_10_REV
10406 
10407 // GL_EXT_unpack_subimage
10408 
10409 // GL_IMG_texture_compression_pvrtc
10410 
10411 // GL_IMG_texture_compression_pvrtc2
10412 
10413 // GL_KHR_blend_equation_advanced
GL_BlendBarrierKHR()10414 void GL_APIENTRY GL_BlendBarrierKHR()
10415 {
10416     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10417     Context *context = GetValidGlobalContext();
10418     EVENT(context, GLBlendBarrierKHR, "context = %d", CID(context));
10419 
10420     if (context)
10421     {
10422         SCOPED_SHARE_CONTEXT_LOCK(context);
10423         bool isCallValid =
10424             (context->skipValidation() ||
10425              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10426                                                 context->getMutableErrorSetForValidation(),
10427                                                 angle::EntryPoint::GLBlendBarrierKHR) &&
10428               ValidateBlendBarrierKHR(context, angle::EntryPoint::GLBlendBarrierKHR)));
10429         if (isCallValid)
10430         {
10431             context->blendBarrier();
10432         }
10433         ANGLE_CAPTURE_GL(BlendBarrierKHR, isCallValid, context);
10434     }
10435     else
10436     {
10437         GenerateContextLostErrorOnCurrentGlobalContext();
10438     }
10439     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10440 }
10441 
10442 // GL_KHR_blend_equation_advanced_coherent
10443 
10444 // GL_KHR_debug
GL_DebugMessageCallbackKHR(GLDEBUGPROCKHR callback,const void * userParam)10445 void GL_APIENTRY GL_DebugMessageCallbackKHR(GLDEBUGPROCKHR callback, const void *userParam)
10446 {
10447     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10448     Context *context = GetValidGlobalContext();
10449     EVENT(context, GLDebugMessageCallbackKHR,
10450           "context = %d, callback = 0x%016" PRIxPTR ", userParam = 0x%016" PRIxPTR "", CID(context),
10451           (uintptr_t)callback, (uintptr_t)userParam);
10452 
10453     if (context)
10454     {
10455         SCOPED_SHARE_CONTEXT_LOCK(context);
10456         bool isCallValid =
10457             (context->skipValidation() ||
10458              ValidateDebugMessageCallbackKHR(context, angle::EntryPoint::GLDebugMessageCallbackKHR,
10459                                              callback, userParam));
10460         if (isCallValid)
10461         {
10462             context->debugMessageCallback(callback, userParam);
10463         }
10464         ANGLE_CAPTURE_GL(DebugMessageCallbackKHR, isCallValid, context, callback, userParam);
10465     }
10466     else
10467     {
10468         GenerateContextLostErrorOnCurrentGlobalContext();
10469     }
10470     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10471 }
10472 
GL_DebugMessageControlKHR(GLenum source,GLenum type,GLenum severity,GLsizei count,const GLuint * ids,GLboolean enabled)10473 void GL_APIENTRY GL_DebugMessageControlKHR(GLenum source,
10474                                            GLenum type,
10475                                            GLenum severity,
10476                                            GLsizei count,
10477                                            const GLuint *ids,
10478                                            GLboolean enabled)
10479 {
10480     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10481     Context *context = GetValidGlobalContext();
10482     EVENT(context, GLDebugMessageControlKHR,
10483           "context = %d, source = %s, type = %s, severity = %s, count = %d, ids = 0x%016" PRIxPTR
10484           ", enabled = %s",
10485           CID(context), GLenumToString(GLESEnum::DebugSource, source),
10486           GLenumToString(GLESEnum::DebugType, type),
10487           GLenumToString(GLESEnum::DebugSeverity, severity), count, (uintptr_t)ids,
10488           GLbooleanToString(enabled));
10489 
10490     if (context)
10491     {
10492         SCOPED_SHARE_CONTEXT_LOCK(context);
10493         bool isCallValid =
10494             (context->skipValidation() ||
10495              ValidateDebugMessageControlKHR(context, angle::EntryPoint::GLDebugMessageControlKHR,
10496                                             source, type, severity, count, ids, enabled));
10497         if (isCallValid)
10498         {
10499             context->debugMessageControl(source, type, severity, count, ids, enabled);
10500         }
10501         ANGLE_CAPTURE_GL(DebugMessageControlKHR, isCallValid, context, source, type, severity,
10502                          count, ids, enabled);
10503     }
10504     else
10505     {
10506         GenerateContextLostErrorOnCurrentGlobalContext();
10507     }
10508     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10509 }
10510 
GL_DebugMessageInsertKHR(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar * buf)10511 void GL_APIENTRY GL_DebugMessageInsertKHR(GLenum source,
10512                                           GLenum type,
10513                                           GLuint id,
10514                                           GLenum severity,
10515                                           GLsizei length,
10516                                           const GLchar *buf)
10517 {
10518     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10519     Context *context = GetValidGlobalContext();
10520     EVENT(context, GLDebugMessageInsertKHR,
10521           "context = %d, source = %s, type = %s, id = %u, severity = %s, length = %d, buf = "
10522           "0x%016" PRIxPTR "",
10523           CID(context), GLenumToString(GLESEnum::DebugSource, source),
10524           GLenumToString(GLESEnum::DebugType, type), id,
10525           GLenumToString(GLESEnum::DebugSeverity, severity), length, (uintptr_t)buf);
10526 
10527     if (context)
10528     {
10529         SCOPED_SHARE_CONTEXT_LOCK(context);
10530         bool isCallValid =
10531             (context->skipValidation() ||
10532              ValidateDebugMessageInsertKHR(context, angle::EntryPoint::GLDebugMessageInsertKHR,
10533                                            source, type, id, severity, length, buf));
10534         if (isCallValid)
10535         {
10536             context->debugMessageInsert(source, type, id, severity, length, buf);
10537         }
10538         ANGLE_CAPTURE_GL(DebugMessageInsertKHR, isCallValid, context, source, type, id, severity,
10539                          length, buf);
10540     }
10541     else
10542     {
10543         GenerateContextLostErrorOnCurrentGlobalContext();
10544     }
10545     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10546 }
10547 
GL_GetDebugMessageLogKHR(GLuint count,GLsizei bufSize,GLenum * sources,GLenum * types,GLuint * ids,GLenum * severities,GLsizei * lengths,GLchar * messageLog)10548 GLuint GL_APIENTRY GL_GetDebugMessageLogKHR(GLuint count,
10549                                             GLsizei bufSize,
10550                                             GLenum *sources,
10551                                             GLenum *types,
10552                                             GLuint *ids,
10553                                             GLenum *severities,
10554                                             GLsizei *lengths,
10555                                             GLchar *messageLog)
10556 {
10557     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10558     Context *context = GetValidGlobalContext();
10559     EVENT(context, GLGetDebugMessageLogKHR,
10560           "context = %d, count = %u, bufSize = %d, sources = 0x%016" PRIxPTR
10561           ", types = 0x%016" PRIxPTR ", ids = 0x%016" PRIxPTR ", severities = 0x%016" PRIxPTR
10562           ", lengths = 0x%016" PRIxPTR ", messageLog = 0x%016" PRIxPTR "",
10563           CID(context), count, bufSize, (uintptr_t)sources, (uintptr_t)types, (uintptr_t)ids,
10564           (uintptr_t)severities, (uintptr_t)lengths, (uintptr_t)messageLog);
10565 
10566     GLuint returnValue;
10567     if (context)
10568     {
10569         SCOPED_SHARE_CONTEXT_LOCK(context);
10570         bool isCallValid = (context->skipValidation() ||
10571                             ValidateGetDebugMessageLogKHR(
10572                                 context, angle::EntryPoint::GLGetDebugMessageLogKHR, count, bufSize,
10573                                 sources, types, ids, severities, lengths, messageLog));
10574         if (isCallValid)
10575         {
10576             returnValue = context->getDebugMessageLog(count, bufSize, sources, types, ids,
10577                                                       severities, lengths, messageLog);
10578         }
10579         else
10580         {
10581             returnValue =
10582                 GetDefaultReturnValue<angle::EntryPoint::GLGetDebugMessageLogKHR, GLuint>();
10583         }
10584         ANGLE_CAPTURE_GL(GetDebugMessageLogKHR, isCallValid, context, count, bufSize, sources,
10585                          types, ids, severities, lengths, messageLog, returnValue);
10586     }
10587     else
10588     {
10589         GenerateContextLostErrorOnCurrentGlobalContext();
10590         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetDebugMessageLogKHR, GLuint>();
10591     }
10592     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10593     return returnValue;
10594 }
10595 
GL_GetObjectLabelKHR(GLenum identifier,GLuint name,GLsizei bufSize,GLsizei * length,GLchar * label)10596 void GL_APIENTRY GL_GetObjectLabelKHR(GLenum identifier,
10597                                       GLuint name,
10598                                       GLsizei bufSize,
10599                                       GLsizei *length,
10600                                       GLchar *label)
10601 {
10602     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10603     Context *context = GetValidGlobalContext();
10604     EVENT(context, GLGetObjectLabelKHR,
10605           "context = %d, identifier = %s, name = %u, bufSize = %d, length = 0x%016" PRIxPTR
10606           ", label = 0x%016" PRIxPTR "",
10607           CID(context), GLenumToString(GLESEnum::AllEnums, identifier), name, bufSize,
10608           (uintptr_t)length, (uintptr_t)label);
10609 
10610     if (context)
10611     {
10612         SCOPED_SHARE_CONTEXT_LOCK(context);
10613         bool isCallValid =
10614             (context->skipValidation() ||
10615              ValidateGetObjectLabelKHR(context, angle::EntryPoint::GLGetObjectLabelKHR, identifier,
10616                                        name, bufSize, length, label));
10617         if (isCallValid)
10618         {
10619             context->getObjectLabel(identifier, name, bufSize, length, label);
10620         }
10621         ANGLE_CAPTURE_GL(GetObjectLabelKHR, isCallValid, context, identifier, name, bufSize, length,
10622                          label);
10623     }
10624     else
10625     {
10626         GenerateContextLostErrorOnCurrentGlobalContext();
10627     }
10628     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10629 }
10630 
GL_GetObjectPtrLabelKHR(const void * ptr,GLsizei bufSize,GLsizei * length,GLchar * label)10631 void GL_APIENTRY GL_GetObjectPtrLabelKHR(const void *ptr,
10632                                          GLsizei bufSize,
10633                                          GLsizei *length,
10634                                          GLchar *label)
10635 {
10636     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10637     Context *context = GetValidGlobalContext();
10638     EVENT(context, GLGetObjectPtrLabelKHR,
10639           "context = %d, ptr = 0x%016" PRIxPTR ", bufSize = %d, length = 0x%016" PRIxPTR
10640           ", label = 0x%016" PRIxPTR "",
10641           CID(context), (uintptr_t)ptr, bufSize, (uintptr_t)length, (uintptr_t)label);
10642 
10643     if (context)
10644     {
10645         SCOPED_SHARE_CONTEXT_LOCK(context);
10646         bool isCallValid =
10647             (context->skipValidation() ||
10648              ValidateGetObjectPtrLabelKHR(context, angle::EntryPoint::GLGetObjectPtrLabelKHR, ptr,
10649                                           bufSize, length, label));
10650         if (isCallValid)
10651         {
10652             context->getObjectPtrLabel(ptr, bufSize, length, label);
10653         }
10654         ANGLE_CAPTURE_GL(GetObjectPtrLabelKHR, isCallValid, context, ptr, bufSize, length, label);
10655     }
10656     else
10657     {
10658         GenerateContextLostErrorOnCurrentGlobalContext();
10659     }
10660     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10661 }
10662 
GL_GetPointervKHR(GLenum pname,void ** params)10663 void GL_APIENTRY GL_GetPointervKHR(GLenum pname, void **params)
10664 {
10665     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10666     Context *context = GetValidGlobalContext();
10667     EVENT(context, GLGetPointervKHR, "context = %d, pname = %s, params = 0x%016" PRIxPTR "",
10668           CID(context), GLenumToString(GLESEnum::AllEnums, pname), (uintptr_t)params);
10669 
10670     if (context)
10671     {
10672         SCOPED_SHARE_CONTEXT_LOCK(context);
10673         bool isCallValid =
10674             (context->skipValidation() ||
10675              ValidateGetPointervKHR(context, angle::EntryPoint::GLGetPointervKHR, pname, params));
10676         if (isCallValid)
10677         {
10678             context->getPointerv(pname, params);
10679         }
10680         ANGLE_CAPTURE_GL(GetPointervKHR, isCallValid, context, pname, params);
10681     }
10682     else
10683     {
10684         GenerateContextLostErrorOnCurrentGlobalContext();
10685     }
10686     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10687 }
10688 
GL_ObjectLabelKHR(GLenum identifier,GLuint name,GLsizei length,const GLchar * label)10689 void GL_APIENTRY GL_ObjectLabelKHR(GLenum identifier,
10690                                    GLuint name,
10691                                    GLsizei length,
10692                                    const GLchar *label)
10693 {
10694     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10695     Context *context = GetValidGlobalContext();
10696     EVENT(context, GLObjectLabelKHR,
10697           "context = %d, identifier = %s, name = %u, length = %d, label = 0x%016" PRIxPTR "",
10698           CID(context), GLenumToString(GLESEnum::ObjectIdentifier, identifier), name, length,
10699           (uintptr_t)label);
10700 
10701     if (context)
10702     {
10703         SCOPED_SHARE_CONTEXT_LOCK(context);
10704         bool isCallValid = (context->skipValidation() ||
10705                             ValidateObjectLabelKHR(context, angle::EntryPoint::GLObjectLabelKHR,
10706                                                    identifier, name, length, label));
10707         if (isCallValid)
10708         {
10709             context->objectLabel(identifier, name, length, label);
10710         }
10711         ANGLE_CAPTURE_GL(ObjectLabelKHR, isCallValid, context, identifier, name, length, label);
10712     }
10713     else
10714     {
10715         GenerateContextLostErrorOnCurrentGlobalContext();
10716     }
10717     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10718 }
10719 
GL_ObjectPtrLabelKHR(const void * ptr,GLsizei length,const GLchar * label)10720 void GL_APIENTRY GL_ObjectPtrLabelKHR(const void *ptr, GLsizei length, const GLchar *label)
10721 {
10722     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10723     Context *context = GetValidGlobalContext();
10724     EVENT(context, GLObjectPtrLabelKHR,
10725           "context = %d, ptr = 0x%016" PRIxPTR ", length = %d, label = 0x%016" PRIxPTR "",
10726           CID(context), (uintptr_t)ptr, length, (uintptr_t)label);
10727 
10728     if (context)
10729     {
10730         SCOPED_SHARE_CONTEXT_LOCK(context);
10731         bool isCallValid =
10732             (context->skipValidation() ||
10733              ValidateObjectPtrLabelKHR(context, angle::EntryPoint::GLObjectPtrLabelKHR, ptr, length,
10734                                        label));
10735         if (isCallValid)
10736         {
10737             context->objectPtrLabel(ptr, length, label);
10738         }
10739         ANGLE_CAPTURE_GL(ObjectPtrLabelKHR, isCallValid, context, ptr, length, label);
10740     }
10741     else
10742     {
10743         GenerateContextLostErrorOnCurrentGlobalContext();
10744     }
10745     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10746 }
10747 
GL_PopDebugGroupKHR()10748 void GL_APIENTRY GL_PopDebugGroupKHR()
10749 {
10750     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10751     Context *context = GetValidGlobalContext();
10752     EVENT(context, GLPopDebugGroupKHR, "context = %d", CID(context));
10753 
10754     if (context)
10755     {
10756         SCOPED_SHARE_CONTEXT_LOCK(context);
10757         bool isCallValid =
10758             (context->skipValidation() ||
10759              ValidatePopDebugGroupKHR(context, angle::EntryPoint::GLPopDebugGroupKHR));
10760         if (isCallValid)
10761         {
10762             context->popDebugGroup();
10763         }
10764         ANGLE_CAPTURE_GL(PopDebugGroupKHR, isCallValid, context);
10765     }
10766     else
10767     {
10768         GenerateContextLostErrorOnCurrentGlobalContext();
10769     }
10770     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10771 }
10772 
GL_PushDebugGroupKHR(GLenum source,GLuint id,GLsizei length,const GLchar * message)10773 void GL_APIENTRY GL_PushDebugGroupKHR(GLenum source,
10774                                       GLuint id,
10775                                       GLsizei length,
10776                                       const GLchar *message)
10777 {
10778     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10779     Context *context = GetValidGlobalContext();
10780     EVENT(context, GLPushDebugGroupKHR,
10781           "context = %d, source = %s, id = %u, length = %d, message = 0x%016" PRIxPTR "",
10782           CID(context), GLenumToString(GLESEnum::DebugSource, source), id, length,
10783           (uintptr_t)message);
10784 
10785     if (context)
10786     {
10787         SCOPED_SHARE_CONTEXT_LOCK(context);
10788         bool isCallValid =
10789             (context->skipValidation() ||
10790              ValidatePushDebugGroupKHR(context, angle::EntryPoint::GLPushDebugGroupKHR, source, id,
10791                                        length, message));
10792         if (isCallValid)
10793         {
10794             context->pushDebugGroup(source, id, length, message);
10795         }
10796         ANGLE_CAPTURE_GL(PushDebugGroupKHR, isCallValid, context, source, id, length, message);
10797     }
10798     else
10799     {
10800         GenerateContextLostErrorOnCurrentGlobalContext();
10801     }
10802     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10803 }
10804 
10805 // GL_KHR_no_error
10806 
10807 // GL_KHR_parallel_shader_compile
GL_MaxShaderCompilerThreadsKHR(GLuint count)10808 void GL_APIENTRY GL_MaxShaderCompilerThreadsKHR(GLuint count)
10809 {
10810     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10811     Context *context = GetValidGlobalContext();
10812     EVENT(context, GLMaxShaderCompilerThreadsKHR, "context = %d, count = %u", CID(context), count);
10813 
10814     if (context)
10815     {
10816         SCOPED_SHARE_CONTEXT_LOCK(context);
10817         bool isCallValid =
10818             (context->skipValidation() ||
10819              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10820                                                 context->getMutableErrorSetForValidation(),
10821                                                 angle::EntryPoint::GLMaxShaderCompilerThreadsKHR) &&
10822               ValidateMaxShaderCompilerThreadsKHR(
10823                   context, angle::EntryPoint::GLMaxShaderCompilerThreadsKHR, count)));
10824         if (isCallValid)
10825         {
10826             context->maxShaderCompilerThreads(count);
10827         }
10828         ANGLE_CAPTURE_GL(MaxShaderCompilerThreadsKHR, isCallValid, context, count);
10829     }
10830     else
10831     {
10832         GenerateContextLostErrorOnCurrentGlobalContext();
10833     }
10834     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10835 }
10836 
10837 // GL_KHR_robust_buffer_access_behavior
10838 
10839 // GL_KHR_robustness
GL_GetGraphicsResetStatusKHR()10840 GLenum GL_APIENTRY GL_GetGraphicsResetStatusKHR()
10841 {
10842     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10843     Context *context = GetGlobalContext();
10844     EVENT(context, GLGetGraphicsResetStatusKHR, "context = %d", CID(context));
10845 
10846     GLenum returnValue;
10847     if (context)
10848     {
10849         SCOPED_SHARE_CONTEXT_LOCK(context);
10850         bool isCallValid = (context->skipValidation() ||
10851                             ValidateGetGraphicsResetStatusKHR(
10852                                 context, angle::EntryPoint::GLGetGraphicsResetStatusKHR));
10853         if (isCallValid)
10854         {
10855             returnValue = context->getGraphicsResetStatus();
10856         }
10857         else
10858         {
10859             returnValue =
10860                 GetDefaultReturnValue<angle::EntryPoint::GLGetGraphicsResetStatusKHR, GLenum>();
10861         }
10862         ANGLE_CAPTURE_GL(GetGraphicsResetStatusKHR, isCallValid, context, returnValue);
10863     }
10864     else
10865     {
10866 
10867         returnValue =
10868             GetDefaultReturnValue<angle::EntryPoint::GLGetGraphicsResetStatusKHR, GLenum>();
10869     }
10870     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10871     return returnValue;
10872 }
10873 
GL_GetnUniformfvKHR(GLuint program,GLint location,GLsizei bufSize,GLfloat * params)10874 void GL_APIENTRY GL_GetnUniformfvKHR(GLuint program,
10875                                      GLint location,
10876                                      GLsizei bufSize,
10877                                      GLfloat *params)
10878 {
10879     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10880     Context *context = GetValidGlobalContext();
10881     EVENT(context, GLGetnUniformfvKHR,
10882           "context = %d, program = %u, location = %d, bufSize = %d, params = 0x%016" PRIxPTR "",
10883           CID(context), program, location, bufSize, (uintptr_t)params);
10884 
10885     if (context)
10886     {
10887         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
10888         UniformLocation locationPacked = PackParam<UniformLocation>(location);
10889         SCOPED_SHARE_CONTEXT_LOCK(context);
10890         bool isCallValid =
10891             (context->skipValidation() ||
10892              ValidateGetnUniformfvKHR(context, angle::EntryPoint::GLGetnUniformfvKHR, programPacked,
10893                                       locationPacked, bufSize, params));
10894         if (isCallValid)
10895         {
10896             context->getnUniformfv(programPacked, locationPacked, bufSize, params);
10897         }
10898         ANGLE_CAPTURE_GL(GetnUniformfvKHR, isCallValid, context, programPacked, locationPacked,
10899                          bufSize, params);
10900     }
10901     else
10902     {
10903         GenerateContextLostErrorOnCurrentGlobalContext();
10904     }
10905     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10906 }
10907 
GL_GetnUniformivKHR(GLuint program,GLint location,GLsizei bufSize,GLint * params)10908 void GL_APIENTRY GL_GetnUniformivKHR(GLuint program, GLint location, GLsizei bufSize, GLint *params)
10909 {
10910     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10911     Context *context = GetValidGlobalContext();
10912     EVENT(context, GLGetnUniformivKHR,
10913           "context = %d, program = %u, location = %d, bufSize = %d, params = 0x%016" PRIxPTR "",
10914           CID(context), program, location, bufSize, (uintptr_t)params);
10915 
10916     if (context)
10917     {
10918         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
10919         UniformLocation locationPacked = PackParam<UniformLocation>(location);
10920         SCOPED_SHARE_CONTEXT_LOCK(context);
10921         bool isCallValid =
10922             (context->skipValidation() ||
10923              ValidateGetnUniformivKHR(context, angle::EntryPoint::GLGetnUniformivKHR, programPacked,
10924                                       locationPacked, bufSize, params));
10925         if (isCallValid)
10926         {
10927             context->getnUniformiv(programPacked, locationPacked, bufSize, params);
10928         }
10929         ANGLE_CAPTURE_GL(GetnUniformivKHR, isCallValid, context, programPacked, locationPacked,
10930                          bufSize, params);
10931     }
10932     else
10933     {
10934         GenerateContextLostErrorOnCurrentGlobalContext();
10935     }
10936     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10937 }
10938 
GL_GetnUniformuivKHR(GLuint program,GLint location,GLsizei bufSize,GLuint * params)10939 void GL_APIENTRY GL_GetnUniformuivKHR(GLuint program,
10940                                       GLint location,
10941                                       GLsizei bufSize,
10942                                       GLuint *params)
10943 {
10944     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10945     Context *context = GetValidGlobalContext();
10946     EVENT(context, GLGetnUniformuivKHR,
10947           "context = %d, program = %u, location = %d, bufSize = %d, params = 0x%016" PRIxPTR "",
10948           CID(context), program, location, bufSize, (uintptr_t)params);
10949 
10950     if (context)
10951     {
10952         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
10953         UniformLocation locationPacked = PackParam<UniformLocation>(location);
10954         SCOPED_SHARE_CONTEXT_LOCK(context);
10955         bool isCallValid =
10956             (context->skipValidation() ||
10957              ValidateGetnUniformuivKHR(context, angle::EntryPoint::GLGetnUniformuivKHR,
10958                                        programPacked, locationPacked, bufSize, params));
10959         if (isCallValid)
10960         {
10961             context->getnUniformuiv(programPacked, locationPacked, bufSize, params);
10962         }
10963         ANGLE_CAPTURE_GL(GetnUniformuivKHR, isCallValid, context, programPacked, locationPacked,
10964                          bufSize, params);
10965     }
10966     else
10967     {
10968         GenerateContextLostErrorOnCurrentGlobalContext();
10969     }
10970     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10971 }
10972 
GL_ReadnPixelsKHR(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLsizei bufSize,void * data)10973 void GL_APIENTRY GL_ReadnPixelsKHR(GLint x,
10974                                    GLint y,
10975                                    GLsizei width,
10976                                    GLsizei height,
10977                                    GLenum format,
10978                                    GLenum type,
10979                                    GLsizei bufSize,
10980                                    void *data)
10981 {
10982     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
10983     Context *context = GetValidGlobalContext();
10984     EVENT(context, GLReadnPixelsKHR,
10985           "context = %d, x = %d, y = %d, width = %d, height = %d, format = %s, type = %s, bufSize "
10986           "= %d, data = 0x%016" PRIxPTR "",
10987           CID(context), x, y, width, height, GLenumToString(GLESEnum::PixelFormat, format),
10988           GLenumToString(GLESEnum::PixelType, type), bufSize, (uintptr_t)data);
10989 
10990     if (context)
10991     {
10992         SCOPED_SHARE_CONTEXT_LOCK(context);
10993         bool isCallValid =
10994             (context->skipValidation() ||
10995              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
10996                                                 context->getMutableErrorSetForValidation(),
10997                                                 angle::EntryPoint::GLReadnPixelsKHR) &&
10998               ValidateReadnPixelsKHR(context, angle::EntryPoint::GLReadnPixelsKHR, x, y, width,
10999                                      height, format, type, bufSize, data)));
11000         if (isCallValid)
11001         {
11002             context->readnPixels(x, y, width, height, format, type, bufSize, data);
11003         }
11004         ANGLE_CAPTURE_GL(ReadnPixelsKHR, isCallValid, context, x, y, width, height, format, type,
11005                          bufSize, data);
11006     }
11007     else
11008     {
11009         GenerateContextLostErrorOnCurrentGlobalContext();
11010     }
11011     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11012 }
11013 
11014 // GL_KHR_texture_compression_astc_hdr
11015 
11016 // GL_KHR_texture_compression_astc_ldr
11017 
11018 // GL_KHR_texture_compression_astc_sliced_3d
11019 
11020 // GL_MESA_framebuffer_flip_y
GL_FramebufferParameteriMESA(GLenum target,GLenum pname,GLint param)11021 void GL_APIENTRY GL_FramebufferParameteriMESA(GLenum target, GLenum pname, GLint param)
11022 {
11023     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11024     Context *context = GetValidGlobalContext();
11025     EVENT(context, GLFramebufferParameteriMESA, "context = %d, target = %s, pname = %s, param = %d",
11026           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target),
11027           GLenumToString(GLESEnum::FramebufferParameterName, pname), param);
11028 
11029     if (context)
11030     {
11031         SCOPED_SHARE_CONTEXT_LOCK(context);
11032         bool isCallValid =
11033             (context->skipValidation() ||
11034              ValidateFramebufferParameteriMESA(
11035                  context, angle::EntryPoint::GLFramebufferParameteriMESA, target, pname, param));
11036         if (isCallValid)
11037         {
11038             context->framebufferParameteriMESA(target, pname, param);
11039         }
11040         ANGLE_CAPTURE_GL(FramebufferParameteriMESA, isCallValid, context, target, pname, param);
11041     }
11042     else
11043     {
11044         GenerateContextLostErrorOnCurrentGlobalContext();
11045     }
11046     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11047 }
11048 
GL_GetFramebufferParameterivMESA(GLenum target,GLenum pname,GLint * params)11049 void GL_APIENTRY GL_GetFramebufferParameterivMESA(GLenum target, GLenum pname, GLint *params)
11050 {
11051     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11052     Context *context = GetValidGlobalContext();
11053     EVENT(context, GLGetFramebufferParameterivMESA,
11054           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
11055           GLenumToString(GLESEnum::FramebufferTarget, target),
11056           GLenumToString(GLESEnum::FramebufferAttachmentParameterName, pname), (uintptr_t)params);
11057 
11058     if (context)
11059     {
11060         SCOPED_SHARE_CONTEXT_LOCK(context);
11061         bool isCallValid = (context->skipValidation() ||
11062                             ValidateGetFramebufferParameterivMESA(
11063                                 context, angle::EntryPoint::GLGetFramebufferParameterivMESA, target,
11064                                 pname, params));
11065         if (isCallValid)
11066         {
11067             context->getFramebufferParameterivMESA(target, pname, params);
11068         }
11069         ANGLE_CAPTURE_GL(GetFramebufferParameterivMESA, isCallValid, context, target, pname,
11070                          params);
11071     }
11072     else
11073     {
11074         GenerateContextLostErrorOnCurrentGlobalContext();
11075     }
11076     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11077 }
11078 
11079 // GL_NV_fence
GL_DeleteFencesNV(GLsizei n,const GLuint * fences)11080 void GL_APIENTRY GL_DeleteFencesNV(GLsizei n, const GLuint *fences)
11081 {
11082     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11083     Context *context = GetValidGlobalContext();
11084     EVENT(context, GLDeleteFencesNV, "context = %d, n = %d, fences = 0x%016" PRIxPTR "",
11085           CID(context), n, (uintptr_t)fences);
11086 
11087     if (context)
11088     {
11089         const FenceNVID *fencesPacked = PackParam<const FenceNVID *>(fences);
11090         SCOPED_SHARE_CONTEXT_LOCK(context);
11091         bool isCallValid =
11092             (context->skipValidation() ||
11093              ValidateDeleteFencesNV(context, angle::EntryPoint::GLDeleteFencesNV, n, fencesPacked));
11094         if (isCallValid)
11095         {
11096             context->deleteFencesNV(n, fencesPacked);
11097         }
11098         ANGLE_CAPTURE_GL(DeleteFencesNV, isCallValid, context, n, fencesPacked);
11099     }
11100     else
11101     {
11102         GenerateContextLostErrorOnCurrentGlobalContext();
11103     }
11104     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11105 }
11106 
GL_FinishFenceNV(GLuint fence)11107 void GL_APIENTRY GL_FinishFenceNV(GLuint fence)
11108 {
11109     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11110     Context *context = GetValidGlobalContext();
11111     EVENT(context, GLFinishFenceNV, "context = %d, fence = %u", CID(context), fence);
11112 
11113     if (context)
11114     {
11115         FenceNVID fencePacked = PackParam<FenceNVID>(fence);
11116         SCOPED_SHARE_CONTEXT_LOCK(context);
11117         bool isCallValid =
11118             (context->skipValidation() ||
11119              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
11120                                                 context->getMutableErrorSetForValidation(),
11121                                                 angle::EntryPoint::GLFinishFenceNV) &&
11122               ValidateFinishFenceNV(context, angle::EntryPoint::GLFinishFenceNV, fencePacked)));
11123         if (isCallValid)
11124         {
11125             context->finishFenceNV(fencePacked);
11126         }
11127         ANGLE_CAPTURE_GL(FinishFenceNV, isCallValid, context, fencePacked);
11128     }
11129     else
11130     {
11131         GenerateContextLostErrorOnCurrentGlobalContext();
11132     }
11133     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
11134 }
11135 
GL_GenFencesNV(GLsizei n,GLuint * fences)11136 void GL_APIENTRY GL_GenFencesNV(GLsizei n, GLuint *fences)
11137 {
11138     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11139     Context *context = GetValidGlobalContext();
11140     EVENT(context, GLGenFencesNV, "context = %d, n = %d, fences = 0x%016" PRIxPTR "", CID(context),
11141           n, (uintptr_t)fences);
11142 
11143     if (context)
11144     {
11145         FenceNVID *fencesPacked = PackParam<FenceNVID *>(fences);
11146         SCOPED_SHARE_CONTEXT_LOCK(context);
11147         bool isCallValid =
11148             (context->skipValidation() ||
11149              ValidateGenFencesNV(context, angle::EntryPoint::GLGenFencesNV, n, fencesPacked));
11150         if (isCallValid)
11151         {
11152             context->genFencesNV(n, fencesPacked);
11153         }
11154         ANGLE_CAPTURE_GL(GenFencesNV, isCallValid, context, n, fencesPacked);
11155     }
11156     else
11157     {
11158         GenerateContextLostErrorOnCurrentGlobalContext();
11159     }
11160     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11161 }
11162 
GL_GetFenceivNV(GLuint fence,GLenum pname,GLint * params)11163 void GL_APIENTRY GL_GetFenceivNV(GLuint fence, GLenum pname, GLint *params)
11164 {
11165     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11166     Context *context = GetValidGlobalContext();
11167     EVENT(context, GLGetFenceivNV,
11168           "context = %d, fence = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), fence,
11169           GLenumToString(GLESEnum::AllEnums, pname), (uintptr_t)params);
11170 
11171     if (context)
11172     {
11173         FenceNVID fencePacked = PackParam<FenceNVID>(fence);
11174         SCOPED_SHARE_CONTEXT_LOCK(context);
11175         bool isCallValid = (context->skipValidation() ||
11176                             ValidateGetFenceivNV(context, angle::EntryPoint::GLGetFenceivNV,
11177                                                  fencePacked, pname, params));
11178         if (isCallValid)
11179         {
11180             context->getFenceivNV(fencePacked, pname, params);
11181         }
11182         ANGLE_CAPTURE_GL(GetFenceivNV, isCallValid, context, fencePacked, pname, params);
11183     }
11184     else
11185     {
11186         GenerateContextLostErrorOnCurrentGlobalContext();
11187     }
11188     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11189 }
11190 
GL_IsFenceNV(GLuint fence)11191 GLboolean GL_APIENTRY GL_IsFenceNV(GLuint fence)
11192 {
11193     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11194     Context *context = GetValidGlobalContext();
11195     EVENT(context, GLIsFenceNV, "context = %d, fence = %u", CID(context), fence);
11196 
11197     GLboolean returnValue;
11198     if (context)
11199     {
11200         FenceNVID fencePacked = PackParam<FenceNVID>(fence);
11201         SCOPED_SHARE_CONTEXT_LOCK(context);
11202         bool isCallValid =
11203             (context->skipValidation() ||
11204              ValidateIsFenceNV(context, angle::EntryPoint::GLIsFenceNV, fencePacked));
11205         if (isCallValid)
11206         {
11207             returnValue = context->isFenceNV(fencePacked);
11208         }
11209         else
11210         {
11211             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFenceNV, GLboolean>();
11212         }
11213         ANGLE_CAPTURE_GL(IsFenceNV, isCallValid, context, fencePacked, returnValue);
11214     }
11215     else
11216     {
11217         GenerateContextLostErrorOnCurrentGlobalContext();
11218         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFenceNV, GLboolean>();
11219     }
11220     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11221     return returnValue;
11222 }
11223 
GL_SetFenceNV(GLuint fence,GLenum condition)11224 void GL_APIENTRY GL_SetFenceNV(GLuint fence, GLenum condition)
11225 {
11226     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11227     Context *context = GetValidGlobalContext();
11228     EVENT(context, GLSetFenceNV, "context = %d, fence = %u, condition = %s", CID(context), fence,
11229           GLenumToString(GLESEnum::AllEnums, condition));
11230 
11231     if (context)
11232     {
11233         FenceNVID fencePacked = PackParam<FenceNVID>(fence);
11234         SCOPED_SHARE_CONTEXT_LOCK(context);
11235         bool isCallValid =
11236             (context->skipValidation() ||
11237              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
11238                                                 context->getMutableErrorSetForValidation(),
11239                                                 angle::EntryPoint::GLSetFenceNV) &&
11240               ValidateSetFenceNV(context, angle::EntryPoint::GLSetFenceNV, fencePacked,
11241                                  condition)));
11242         if (isCallValid)
11243         {
11244             context->setFenceNV(fencePacked, condition);
11245         }
11246         ANGLE_CAPTURE_GL(SetFenceNV, isCallValid, context, fencePacked, condition);
11247     }
11248     else
11249     {
11250         GenerateContextLostErrorOnCurrentGlobalContext();
11251     }
11252     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11253 }
11254 
GL_TestFenceNV(GLuint fence)11255 GLboolean GL_APIENTRY GL_TestFenceNV(GLuint fence)
11256 {
11257     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11258     Context *context = GetValidGlobalContext();
11259     EVENT(context, GLTestFenceNV, "context = %d, fence = %u", CID(context), fence);
11260 
11261     GLboolean returnValue;
11262     if (context)
11263     {
11264         FenceNVID fencePacked = PackParam<FenceNVID>(fence);
11265         SCOPED_SHARE_CONTEXT_LOCK(context);
11266         bool isCallValid =
11267             (context->skipValidation() ||
11268              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
11269                                                 context->getMutableErrorSetForValidation(),
11270                                                 angle::EntryPoint::GLTestFenceNV) &&
11271               ValidateTestFenceNV(context, angle::EntryPoint::GLTestFenceNV, fencePacked)));
11272         if (isCallValid)
11273         {
11274             returnValue = context->testFenceNV(fencePacked);
11275         }
11276         else
11277         {
11278             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLTestFenceNV, GLboolean>();
11279         }
11280         ANGLE_CAPTURE_GL(TestFenceNV, isCallValid, context, fencePacked, returnValue);
11281     }
11282     else
11283     {
11284         GenerateContextLostErrorOnCurrentGlobalContext();
11285         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLTestFenceNV, GLboolean>();
11286     }
11287     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11288     return returnValue;
11289 }
11290 
11291 // 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)11292 void GL_APIENTRY GL_BlitFramebufferNV(GLint srcX0,
11293                                       GLint srcY0,
11294                                       GLint srcX1,
11295                                       GLint srcY1,
11296                                       GLint dstX0,
11297                                       GLint dstY0,
11298                                       GLint dstX1,
11299                                       GLint dstY1,
11300                                       GLbitfield mask,
11301                                       GLenum filter)
11302 {
11303     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11304     Context *context = GetValidGlobalContext();
11305     EVENT(context, GLBlitFramebufferNV,
11306           "context = %d, srcX0 = %d, srcY0 = %d, srcX1 = %d, srcY1 = %d, dstX0 = %d, dstY0 = %d, "
11307           "dstX1 = %d, dstY1 = %d, mask = %s, filter = %s",
11308           CID(context), srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
11309           GLbitfieldToString(GLESEnum::ClearBufferMask, mask).c_str(),
11310           GLenumToString(GLESEnum::BlitFramebufferFilter, filter));
11311 
11312     if (context)
11313     {
11314         SCOPED_SHARE_CONTEXT_LOCK(context);
11315         bool isCallValid =
11316             (context->skipValidation() ||
11317              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
11318                                                 context->getMutableErrorSetForValidation(),
11319                                                 angle::EntryPoint::GLBlitFramebufferNV) &&
11320               ValidateBlitFramebufferNV(context, angle::EntryPoint::GLBlitFramebufferNV, srcX0,
11321                                         srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
11322                                         filter)));
11323         if (isCallValid)
11324         {
11325             context->blitFramebufferNV(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
11326                                        filter);
11327         }
11328         ANGLE_CAPTURE_GL(BlitFramebufferNV, isCallValid, context, srcX0, srcY0, srcX1, srcY1, dstX0,
11329                          dstY0, dstX1, dstY1, mask, filter);
11330     }
11331     else
11332     {
11333         GenerateContextLostErrorOnCurrentGlobalContext();
11334     }
11335     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11336 }
11337 
11338 // GL_NV_pixel_buffer_object
11339 
11340 // GL_NV_polygon_mode
GL_PolygonModeNV(GLenum face,GLenum mode)11341 void GL_APIENTRY GL_PolygonModeNV(GLenum face, GLenum mode)
11342 {
11343     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11344     Context *context = GetValidGlobalContext();
11345     EVENT(context, GLPolygonModeNV, "context = %d, face = %s, mode = %s", CID(context),
11346           GLenumToString(GLESEnum::TriangleFace, face),
11347           GLenumToString(GLESEnum::PolygonMode, mode));
11348 
11349     if (context)
11350     {
11351         PolygonMode modePacked = PackParam<PolygonMode>(mode);
11352         bool isCallValid =
11353             (context->skipValidation() ||
11354              ValidatePolygonModeNV(context->getPrivateState(),
11355                                    context->getMutableErrorSetForValidation(),
11356                                    angle::EntryPoint::GLPolygonModeNV, face, modePacked));
11357         if (isCallValid)
11358         {
11359             ContextPrivatePolygonModeNV(context->getMutablePrivateState(),
11360                                         context->getMutablePrivateStateCache(), face, modePacked);
11361         }
11362         ANGLE_CAPTURE_GL(PolygonModeNV, isCallValid, context, face, modePacked);
11363     }
11364     else
11365     {
11366         GenerateContextLostErrorOnCurrentGlobalContext();
11367     }
11368     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11369 }
11370 
11371 // GL_NV_read_depth
11372 
11373 // GL_NV_read_depth_stencil
11374 
11375 // GL_NV_read_stencil
11376 
11377 // GL_NV_robustness_video_memory_purge
11378 
11379 // GL_NV_shader_noperspective_interpolation
11380 
11381 // GL_OES_EGL_image
GL_EGLImageTargetRenderbufferStorageOES(GLenum target,GLeglImageOES image)11382 void GL_APIENTRY GL_EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
11383 {
11384     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11385     Context *context = GetValidGlobalContext();
11386     EVENT(context, GLEGLImageTargetRenderbufferStorageOES,
11387           "context = %d, target = %s, image = 0x%016" PRIxPTR "", CID(context),
11388           GLenumToString(GLESEnum::AllEnums, target), (uintptr_t)image);
11389 
11390     if (context)
11391     {
11392         egl::ImageID imagePacked = PackParam<egl::ImageID>(image);
11393         SCOPED_EGL_IMAGE_SHARE_CONTEXT_LOCK(context, imagePacked);
11394         bool isCallValid =
11395             (context->skipValidation() ||
11396              (ValidatePixelLocalStorageInactive(
11397                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
11398                   angle::EntryPoint::GLEGLImageTargetRenderbufferStorageOES) &&
11399               ValidateEGLImageTargetRenderbufferStorageOES(
11400                   context, angle::EntryPoint::GLEGLImageTargetRenderbufferStorageOES, target,
11401                   imagePacked)));
11402         if (isCallValid)
11403         {
11404             context->eGLImageTargetRenderbufferStorage(target, imagePacked);
11405         }
11406         ANGLE_CAPTURE_GL(EGLImageTargetRenderbufferStorageOES, isCallValid, context, target,
11407                          imagePacked);
11408     }
11409     else
11410     {
11411         GenerateContextLostErrorOnCurrentGlobalContext();
11412     }
11413     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11414 }
11415 
GL_EGLImageTargetTexture2DOES(GLenum target,GLeglImageOES image)11416 void GL_APIENTRY GL_EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
11417 {
11418     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11419     Context *context = GetValidGlobalContext();
11420     EVENT(context, GLEGLImageTargetTexture2DOES,
11421           "context = %d, target = %s, image = 0x%016" PRIxPTR "", CID(context),
11422           GLenumToString(GLESEnum::AllEnums, target), (uintptr_t)image);
11423 
11424     if (context)
11425     {
11426         TextureType targetPacked = PackParam<TextureType>(target);
11427         egl::ImageID imagePacked = PackParam<egl::ImageID>(image);
11428         SCOPED_EGL_IMAGE_SHARE_CONTEXT_LOCK(context, imagePacked);
11429         bool isCallValid =
11430             (context->skipValidation() ||
11431              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
11432                                                 context->getMutableErrorSetForValidation(),
11433                                                 angle::EntryPoint::GLEGLImageTargetTexture2DOES) &&
11434               ValidateEGLImageTargetTexture2DOES(context,
11435                                                  angle::EntryPoint::GLEGLImageTargetTexture2DOES,
11436                                                  targetPacked, imagePacked)));
11437         if (isCallValid)
11438         {
11439             context->eGLImageTargetTexture2D(targetPacked, imagePacked);
11440         }
11441         ANGLE_CAPTURE_GL(EGLImageTargetTexture2DOES, isCallValid, context, targetPacked,
11442                          imagePacked);
11443     }
11444     else
11445     {
11446         GenerateContextLostErrorOnCurrentGlobalContext();
11447     }
11448     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11449 }
11450 
11451 // GL_OES_EGL_image_external
11452 
11453 // GL_OES_EGL_image_external_essl3
11454 
11455 // GL_OES_blend_subtract
GL_BlendEquationOES(GLenum mode)11456 void GL_APIENTRY GL_BlendEquationOES(GLenum mode)
11457 {
11458     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11459     Context *context = GetValidGlobalContext();
11460     EVENT(context, GLBlendEquationOES, "context = %d, mode = %s", CID(context),
11461           GLenumToString(GLESEnum::BlendEquationModeEXT, mode));
11462 
11463     if (context)
11464     {
11465         bool isCallValid = (context->skipValidation() ||
11466                             ValidateBlendEquationOES(context->getPrivateState(),
11467                                                      context->getMutableErrorSetForValidation(),
11468                                                      angle::EntryPoint::GLBlendEquationOES, mode));
11469         if (isCallValid)
11470         {
11471             ContextPrivateBlendEquation(context->getMutablePrivateState(),
11472                                         context->getMutablePrivateStateCache(), mode);
11473         }
11474         ANGLE_CAPTURE_GL(BlendEquationOES, isCallValid, context, mode);
11475     }
11476     else
11477     {
11478         GenerateContextLostErrorOnCurrentGlobalContext();
11479     }
11480     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11481 }
11482 
11483 // GL_OES_compressed_ETC1_RGB8_texture
11484 
11485 // GL_OES_compressed_paletted_texture
11486 
11487 // 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)11488 void GL_APIENTRY GL_CopyImageSubDataOES(GLuint srcName,
11489                                         GLenum srcTarget,
11490                                         GLint srcLevel,
11491                                         GLint srcX,
11492                                         GLint srcY,
11493                                         GLint srcZ,
11494                                         GLuint dstName,
11495                                         GLenum dstTarget,
11496                                         GLint dstLevel,
11497                                         GLint dstX,
11498                                         GLint dstY,
11499                                         GLint dstZ,
11500                                         GLsizei srcWidth,
11501                                         GLsizei srcHeight,
11502                                         GLsizei srcDepth)
11503 {
11504     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11505     Context *context = GetValidGlobalContext();
11506     EVENT(context, GLCopyImageSubDataOES,
11507           "context = %d, srcName = %u, srcTarget = %s, srcLevel = %d, srcX = %d, srcY = %d, srcZ = "
11508           "%d, dstName = %u, dstTarget = %s, dstLevel = %d, dstX = %d, dstY = %d, dstZ = %d, "
11509           "srcWidth = %d, srcHeight = %d, srcDepth = %d",
11510           CID(context), srcName, GLenumToString(GLESEnum::CopyBufferSubDataTarget, srcTarget),
11511           srcLevel, srcX, srcY, srcZ, dstName,
11512           GLenumToString(GLESEnum::CopyBufferSubDataTarget, dstTarget), dstLevel, dstX, dstY, dstZ,
11513           srcWidth, srcHeight, srcDepth);
11514 
11515     if (context)
11516     {
11517         SCOPED_SHARE_CONTEXT_LOCK(context);
11518         bool isCallValid =
11519             (context->skipValidation() ||
11520              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
11521                                                 context->getMutableErrorSetForValidation(),
11522                                                 angle::EntryPoint::GLCopyImageSubDataOES) &&
11523               ValidateCopyImageSubDataOES(context, angle::EntryPoint::GLCopyImageSubDataOES,
11524                                           srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName,
11525                                           dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth,
11526                                           srcHeight, srcDepth)));
11527         if (isCallValid)
11528         {
11529             context->copyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName,
11530                                       dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight,
11531                                       srcDepth);
11532         }
11533         ANGLE_CAPTURE_GL(CopyImageSubDataOES, isCallValid, context, srcName, srcTarget, srcLevel,
11534                          srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth,
11535                          srcHeight, srcDepth);
11536     }
11537     else
11538     {
11539         GenerateContextLostErrorOnCurrentGlobalContext();
11540     }
11541     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11542 }
11543 
11544 // GL_OES_depth24
11545 
11546 // GL_OES_depth32
11547 
11548 // GL_OES_depth_texture
11549 
11550 // GL_OES_draw_buffers_indexed
GL_BlendEquationSeparateiOES(GLuint buf,GLenum modeRGB,GLenum modeAlpha)11551 void GL_APIENTRY GL_BlendEquationSeparateiOES(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
11552 {
11553     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11554     Context *context = GetValidGlobalContext();
11555     EVENT(context, GLBlendEquationSeparateiOES,
11556           "context = %d, buf = %u, modeRGB = %s, modeAlpha = %s", CID(context), buf,
11557           GLenumToString(GLESEnum::BlendEquationModeEXT, modeRGB),
11558           GLenumToString(GLESEnum::BlendEquationModeEXT, modeAlpha));
11559 
11560     if (context)
11561     {
11562         bool isCallValid =
11563             (context->skipValidation() ||
11564              ValidateBlendEquationSeparateiOES(
11565                  context->getPrivateState(), context->getMutableErrorSetForValidation(),
11566                  angle::EntryPoint::GLBlendEquationSeparateiOES, buf, modeRGB, modeAlpha));
11567         if (isCallValid)
11568         {
11569             ContextPrivateBlendEquationSeparatei(context->getMutablePrivateState(),
11570                                                  context->getMutablePrivateStateCache(), buf,
11571                                                  modeRGB, modeAlpha);
11572         }
11573         ANGLE_CAPTURE_GL(BlendEquationSeparateiOES, isCallValid, context, buf, modeRGB, modeAlpha);
11574     }
11575     else
11576     {
11577         GenerateContextLostErrorOnCurrentGlobalContext();
11578     }
11579     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11580 }
11581 
GL_BlendEquationiOES(GLuint buf,GLenum mode)11582 void GL_APIENTRY GL_BlendEquationiOES(GLuint buf, GLenum mode)
11583 {
11584     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11585     Context *context = GetValidGlobalContext();
11586     EVENT(context, GLBlendEquationiOES, "context = %d, buf = %u, mode = %s", CID(context), buf,
11587           GLenumToString(GLESEnum::BlendEquationModeEXT, mode));
11588 
11589     if (context)
11590     {
11591         bool isCallValid =
11592             (context->skipValidation() ||
11593              ValidateBlendEquationiOES(context->getPrivateState(),
11594                                        context->getMutableErrorSetForValidation(),
11595                                        angle::EntryPoint::GLBlendEquationiOES, buf, mode));
11596         if (isCallValid)
11597         {
11598             ContextPrivateBlendEquationi(context->getMutablePrivateState(),
11599                                          context->getMutablePrivateStateCache(), buf, mode);
11600         }
11601         ANGLE_CAPTURE_GL(BlendEquationiOES, isCallValid, context, buf, mode);
11602     }
11603     else
11604     {
11605         GenerateContextLostErrorOnCurrentGlobalContext();
11606     }
11607     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11608 }
11609 
11610 void GL_APIENTRY
GL_BlendFuncSeparateiOES(GLuint buf,GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)11611 GL_BlendFuncSeparateiOES(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
11612 {
11613     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11614     Context *context = GetValidGlobalContext();
11615     EVENT(context, GLBlendFuncSeparateiOES,
11616           "context = %d, buf = %u, srcRGB = %s, dstRGB = %s, srcAlpha = %s, dstAlpha = %s",
11617           CID(context), buf, GLenumToString(GLESEnum::BlendingFactor, srcRGB),
11618           GLenumToString(GLESEnum::BlendingFactor, dstRGB),
11619           GLenumToString(GLESEnum::BlendingFactor, srcAlpha),
11620           GLenumToString(GLESEnum::BlendingFactor, dstAlpha));
11621 
11622     if (context)
11623     {
11624         bool isCallValid =
11625             (context->skipValidation() ||
11626              ValidateBlendFuncSeparateiOES(context->getPrivateState(),
11627                                            context->getMutableErrorSetForValidation(),
11628                                            angle::EntryPoint::GLBlendFuncSeparateiOES, buf, srcRGB,
11629                                            dstRGB, srcAlpha, dstAlpha));
11630         if (isCallValid)
11631         {
11632             ContextPrivateBlendFuncSeparatei(context->getMutablePrivateState(),
11633                                              context->getMutablePrivateStateCache(), buf, srcRGB,
11634                                              dstRGB, srcAlpha, dstAlpha);
11635         }
11636         ANGLE_CAPTURE_GL(BlendFuncSeparateiOES, isCallValid, context, buf, srcRGB, dstRGB, srcAlpha,
11637                          dstAlpha);
11638     }
11639     else
11640     {
11641         GenerateContextLostErrorOnCurrentGlobalContext();
11642     }
11643     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11644 }
11645 
GL_BlendFunciOES(GLuint buf,GLenum src,GLenum dst)11646 void GL_APIENTRY GL_BlendFunciOES(GLuint buf, GLenum src, GLenum dst)
11647 {
11648     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11649     Context *context = GetValidGlobalContext();
11650     EVENT(context, GLBlendFunciOES, "context = %d, buf = %u, src = %s, dst = %s", CID(context), buf,
11651           GLenumToString(GLESEnum::BlendingFactor, src),
11652           GLenumToString(GLESEnum::BlendingFactor, dst));
11653 
11654     if (context)
11655     {
11656         bool isCallValid =
11657             (context->skipValidation() ||
11658              ValidateBlendFunciOES(context->getPrivateState(),
11659                                    context->getMutableErrorSetForValidation(),
11660                                    angle::EntryPoint::GLBlendFunciOES, buf, src, dst));
11661         if (isCallValid)
11662         {
11663             ContextPrivateBlendFunci(context->getMutablePrivateState(),
11664                                      context->getMutablePrivateStateCache(), buf, src, dst);
11665         }
11666         ANGLE_CAPTURE_GL(BlendFunciOES, isCallValid, context, buf, src, dst);
11667     }
11668     else
11669     {
11670         GenerateContextLostErrorOnCurrentGlobalContext();
11671     }
11672     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11673 }
11674 
GL_ColorMaskiOES(GLuint index,GLboolean r,GLboolean g,GLboolean b,GLboolean a)11675 void GL_APIENTRY GL_ColorMaskiOES(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
11676 {
11677     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11678     Context *context = GetValidGlobalContext();
11679     EVENT(context, GLColorMaskiOES, "context = %d, index = %u, r = %s, g = %s, b = %s, a = %s",
11680           CID(context), index, GLbooleanToString(r), GLbooleanToString(g), GLbooleanToString(b),
11681           GLbooleanToString(a));
11682 
11683     if (context)
11684     {
11685         bool isCallValid =
11686             (context->skipValidation() ||
11687              ValidateColorMaskiOES(context->getPrivateState(),
11688                                    context->getMutableErrorSetForValidation(),
11689                                    angle::EntryPoint::GLColorMaskiOES, index, r, g, b, a));
11690         if (isCallValid)
11691         {
11692             ContextPrivateColorMaski(context->getMutablePrivateState(),
11693                                      context->getMutablePrivateStateCache(), index, r, g, b, a);
11694         }
11695         ANGLE_CAPTURE_GL(ColorMaskiOES, isCallValid, context, index, r, g, b, a);
11696     }
11697     else
11698     {
11699         GenerateContextLostErrorOnCurrentGlobalContext();
11700     }
11701     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11702 }
11703 
GL_DisableiOES(GLenum target,GLuint index)11704 void GL_APIENTRY GL_DisableiOES(GLenum target, GLuint index)
11705 {
11706     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11707     Context *context = GetValidGlobalContext();
11708     EVENT(context, GLDisableiOES, "context = %d, target = %s, index = %u", CID(context),
11709           GLenumToString(GLESEnum::EnableCap, target), index);
11710 
11711     if (context)
11712     {
11713         bool isCallValid = (context->skipValidation() ||
11714                             ValidateDisableiOES(context->getPrivateState(),
11715                                                 context->getMutableErrorSetForValidation(),
11716                                                 angle::EntryPoint::GLDisableiOES, target, index));
11717         if (isCallValid)
11718         {
11719             ContextPrivateDisablei(context->getMutablePrivateState(),
11720                                    context->getMutablePrivateStateCache(), target, index);
11721         }
11722         ANGLE_CAPTURE_GL(DisableiOES, isCallValid, context, target, index);
11723     }
11724     else
11725     {
11726         GenerateContextLostErrorOnCurrentGlobalContext();
11727     }
11728     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11729 }
11730 
GL_EnableiOES(GLenum target,GLuint index)11731 void GL_APIENTRY GL_EnableiOES(GLenum target, GLuint index)
11732 {
11733     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11734     Context *context = GetValidGlobalContext();
11735     EVENT(context, GLEnableiOES, "context = %d, target = %s, index = %u", CID(context),
11736           GLenumToString(GLESEnum::EnableCap, target), index);
11737 
11738     if (context)
11739     {
11740         bool isCallValid = (context->skipValidation() ||
11741                             ValidateEnableiOES(context->getPrivateState(),
11742                                                context->getMutableErrorSetForValidation(),
11743                                                angle::EntryPoint::GLEnableiOES, target, index));
11744         if (isCallValid)
11745         {
11746             ContextPrivateEnablei(context->getMutablePrivateState(),
11747                                   context->getMutablePrivateStateCache(), target, index);
11748         }
11749         ANGLE_CAPTURE_GL(EnableiOES, isCallValid, context, target, index);
11750     }
11751     else
11752     {
11753         GenerateContextLostErrorOnCurrentGlobalContext();
11754     }
11755     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11756 }
11757 
GL_IsEnablediOES(GLenum target,GLuint index)11758 GLboolean GL_APIENTRY GL_IsEnablediOES(GLenum target, GLuint index)
11759 {
11760     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11761     Context *context = GetValidGlobalContext();
11762     EVENT(context, GLIsEnablediOES, "context = %d, target = %s, index = %u", CID(context),
11763           GLenumToString(GLESEnum::EnableCap, target), index);
11764 
11765     GLboolean returnValue;
11766     if (context)
11767     {
11768         bool isCallValid =
11769             (context->skipValidation() ||
11770              ValidateIsEnablediOES(context->getPrivateState(),
11771                                    context->getMutableErrorSetForValidation(),
11772                                    angle::EntryPoint::GLIsEnablediOES, target, index));
11773         if (isCallValid)
11774         {
11775             returnValue =
11776                 ContextPrivateIsEnabledi(context->getMutablePrivateState(),
11777                                          context->getMutablePrivateStateCache(), target, index);
11778         }
11779         else
11780         {
11781             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnablediOES, GLboolean>();
11782         }
11783         ANGLE_CAPTURE_GL(IsEnablediOES, isCallValid, context, target, index, returnValue);
11784     }
11785     else
11786     {
11787         GenerateContextLostErrorOnCurrentGlobalContext();
11788         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnablediOES, GLboolean>();
11789     }
11790     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11791     return returnValue;
11792 }
11793 
11794 // GL_OES_draw_elements_base_vertex
GL_DrawElementsBaseVertexOES(GLenum mode,GLsizei count,GLenum type,const void * indices,GLint basevertex)11795 void GL_APIENTRY GL_DrawElementsBaseVertexOES(GLenum mode,
11796                                               GLsizei count,
11797                                               GLenum type,
11798                                               const void *indices,
11799                                               GLint basevertex)
11800 {
11801     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11802     Context *context = GetValidGlobalContext();
11803     EVENT(context, GLDrawElementsBaseVertexOES,
11804           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
11805           ", basevertex = %d",
11806           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), count,
11807           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, basevertex);
11808 
11809     if (context)
11810     {
11811         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
11812         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
11813         SCOPED_SHARE_CONTEXT_LOCK(context);
11814         bool isCallValid = (context->skipValidation() ||
11815                             ValidateDrawElementsBaseVertexOES(
11816                                 context, angle::EntryPoint::GLDrawElementsBaseVertexOES, modePacked,
11817                                 count, typePacked, indices, basevertex));
11818         if (isCallValid)
11819         {
11820             context->drawElementsBaseVertex(modePacked, count, typePacked, indices, basevertex);
11821         }
11822         ANGLE_CAPTURE_GL(DrawElementsBaseVertexOES, isCallValid, context, modePacked, count,
11823                          typePacked, indices, basevertex);
11824     }
11825     else
11826     {
11827         GenerateContextLostErrorOnCurrentGlobalContext();
11828     }
11829     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11830 }
11831 
GL_DrawElementsInstancedBaseVertexOES(GLenum mode,GLsizei count,GLenum type,const void * indices,GLsizei instancecount,GLint basevertex)11832 void GL_APIENTRY GL_DrawElementsInstancedBaseVertexOES(GLenum mode,
11833                                                        GLsizei count,
11834                                                        GLenum type,
11835                                                        const void *indices,
11836                                                        GLsizei instancecount,
11837                                                        GLint basevertex)
11838 {
11839     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11840     Context *context = GetValidGlobalContext();
11841     EVENT(context, GLDrawElementsInstancedBaseVertexOES,
11842           "context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR
11843           ", instancecount = %d, basevertex = %d",
11844           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), count,
11845           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, instancecount,
11846           basevertex);
11847 
11848     if (context)
11849     {
11850         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
11851         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
11852         SCOPED_SHARE_CONTEXT_LOCK(context);
11853         bool isCallValid = (context->skipValidation() ||
11854                             ValidateDrawElementsInstancedBaseVertexOES(
11855                                 context, angle::EntryPoint::GLDrawElementsInstancedBaseVertexOES,
11856                                 modePacked, count, typePacked, indices, instancecount, basevertex));
11857         if (isCallValid)
11858         {
11859             context->drawElementsInstancedBaseVertex(modePacked, count, typePacked, indices,
11860                                                      instancecount, basevertex);
11861         }
11862         ANGLE_CAPTURE_GL(DrawElementsInstancedBaseVertexOES, isCallValid, context, modePacked,
11863                          count, typePacked, indices, instancecount, basevertex);
11864     }
11865     else
11866     {
11867         GenerateContextLostErrorOnCurrentGlobalContext();
11868     }
11869     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11870 }
11871 
GL_DrawRangeElementsBaseVertexOES(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const void * indices,GLint basevertex)11872 void GL_APIENTRY GL_DrawRangeElementsBaseVertexOES(GLenum mode,
11873                                                    GLuint start,
11874                                                    GLuint end,
11875                                                    GLsizei count,
11876                                                    GLenum type,
11877                                                    const void *indices,
11878                                                    GLint basevertex)
11879 {
11880     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11881     Context *context = GetValidGlobalContext();
11882     EVENT(context, GLDrawRangeElementsBaseVertexOES,
11883           "context = %d, mode = %s, start = %u, end = %u, count = %d, type = %s, indices = "
11884           "0x%016" PRIxPTR ", basevertex = %d",
11885           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), start, end, count,
11886           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indices, basevertex);
11887 
11888     if (context)
11889     {
11890         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
11891         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
11892         SCOPED_SHARE_CONTEXT_LOCK(context);
11893         bool isCallValid = (context->skipValidation() ||
11894                             ValidateDrawRangeElementsBaseVertexOES(
11895                                 context, angle::EntryPoint::GLDrawRangeElementsBaseVertexOES,
11896                                 modePacked, start, end, count, typePacked, indices, basevertex));
11897         if (isCallValid)
11898         {
11899             context->drawRangeElementsBaseVertex(modePacked, start, end, count, typePacked, indices,
11900                                                  basevertex);
11901         }
11902         ANGLE_CAPTURE_GL(DrawRangeElementsBaseVertexOES, isCallValid, context, modePacked, start,
11903                          end, count, typePacked, indices, basevertex);
11904     }
11905     else
11906     {
11907         GenerateContextLostErrorOnCurrentGlobalContext();
11908     }
11909     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11910 }
11911 
11912 // MultiDrawElementsBaseVertexEXT is already defined.
11913 
11914 // GL_OES_draw_texture
GL_DrawTexfOES(GLfloat x,GLfloat y,GLfloat z,GLfloat width,GLfloat height)11915 void GL_APIENTRY GL_DrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
11916 {
11917     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11918     Context *context = GetValidGlobalContext();
11919     EVENT(context, GLDrawTexfOES, "context = %d, x = %f, y = %f, z = %f, width = %f, height = %f",
11920           CID(context), x, y, z, width, height);
11921 
11922     if (context)
11923     {
11924         SCOPED_SHARE_CONTEXT_LOCK(context);
11925         bool isCallValid = (context->skipValidation() ||
11926                             ValidateDrawTexfOES(context, angle::EntryPoint::GLDrawTexfOES, x, y, z,
11927                                                 width, height));
11928         if (isCallValid)
11929         {
11930             context->drawTexf(x, y, z, width, height);
11931         }
11932         ANGLE_CAPTURE_GL(DrawTexfOES, isCallValid, context, x, y, z, width, height);
11933     }
11934     else
11935     {
11936         GenerateContextLostErrorOnCurrentGlobalContext();
11937     }
11938     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11939 }
11940 
GL_DrawTexfvOES(const GLfloat * coords)11941 void GL_APIENTRY GL_DrawTexfvOES(const GLfloat *coords)
11942 {
11943     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11944     Context *context = GetValidGlobalContext();
11945     EVENT(context, GLDrawTexfvOES, "context = %d, coords = 0x%016" PRIxPTR "", CID(context),
11946           (uintptr_t)coords);
11947 
11948     if (context)
11949     {
11950         SCOPED_SHARE_CONTEXT_LOCK(context);
11951         bool isCallValid =
11952             (context->skipValidation() ||
11953              ValidateDrawTexfvOES(context, angle::EntryPoint::GLDrawTexfvOES, coords));
11954         if (isCallValid)
11955         {
11956             context->drawTexfv(coords);
11957         }
11958         ANGLE_CAPTURE_GL(DrawTexfvOES, isCallValid, context, coords);
11959     }
11960     else
11961     {
11962         GenerateContextLostErrorOnCurrentGlobalContext();
11963     }
11964     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11965 }
11966 
GL_DrawTexiOES(GLint x,GLint y,GLint z,GLint width,GLint height)11967 void GL_APIENTRY GL_DrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height)
11968 {
11969     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11970     Context *context = GetValidGlobalContext();
11971     EVENT(context, GLDrawTexiOES, "context = %d, x = %d, y = %d, z = %d, width = %d, height = %d",
11972           CID(context), x, y, z, width, height);
11973 
11974     if (context)
11975     {
11976         SCOPED_SHARE_CONTEXT_LOCK(context);
11977         bool isCallValid = (context->skipValidation() ||
11978                             ValidateDrawTexiOES(context, angle::EntryPoint::GLDrawTexiOES, x, y, z,
11979                                                 width, height));
11980         if (isCallValid)
11981         {
11982             context->drawTexi(x, y, z, width, height);
11983         }
11984         ANGLE_CAPTURE_GL(DrawTexiOES, isCallValid, context, x, y, z, width, height);
11985     }
11986     else
11987     {
11988         GenerateContextLostErrorOnCurrentGlobalContext();
11989     }
11990     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11991 }
11992 
GL_DrawTexivOES(const GLint * coords)11993 void GL_APIENTRY GL_DrawTexivOES(const GLint *coords)
11994 {
11995     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
11996     Context *context = GetValidGlobalContext();
11997     EVENT(context, GLDrawTexivOES, "context = %d, coords = 0x%016" PRIxPTR "", CID(context),
11998           (uintptr_t)coords);
11999 
12000     if (context)
12001     {
12002         SCOPED_SHARE_CONTEXT_LOCK(context);
12003         bool isCallValid =
12004             (context->skipValidation() ||
12005              ValidateDrawTexivOES(context, angle::EntryPoint::GLDrawTexivOES, coords));
12006         if (isCallValid)
12007         {
12008             context->drawTexiv(coords);
12009         }
12010         ANGLE_CAPTURE_GL(DrawTexivOES, isCallValid, context, coords);
12011     }
12012     else
12013     {
12014         GenerateContextLostErrorOnCurrentGlobalContext();
12015     }
12016     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12017 }
12018 
GL_DrawTexsOES(GLshort x,GLshort y,GLshort z,GLshort width,GLshort height)12019 void GL_APIENTRY GL_DrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
12020 {
12021     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12022     Context *context = GetValidGlobalContext();
12023     EVENT(context, GLDrawTexsOES, "context = %d, x = %d, y = %d, z = %d, width = %d, height = %d",
12024           CID(context), x, y, z, width, height);
12025 
12026     if (context)
12027     {
12028         SCOPED_SHARE_CONTEXT_LOCK(context);
12029         bool isCallValid = (context->skipValidation() ||
12030                             ValidateDrawTexsOES(context, angle::EntryPoint::GLDrawTexsOES, x, y, z,
12031                                                 width, height));
12032         if (isCallValid)
12033         {
12034             context->drawTexs(x, y, z, width, height);
12035         }
12036         ANGLE_CAPTURE_GL(DrawTexsOES, isCallValid, context, x, y, z, width, height);
12037     }
12038     else
12039     {
12040         GenerateContextLostErrorOnCurrentGlobalContext();
12041     }
12042     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12043 }
12044 
GL_DrawTexsvOES(const GLshort * coords)12045 void GL_APIENTRY GL_DrawTexsvOES(const GLshort *coords)
12046 {
12047     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12048     Context *context = GetValidGlobalContext();
12049     EVENT(context, GLDrawTexsvOES, "context = %d, coords = 0x%016" PRIxPTR "", CID(context),
12050           (uintptr_t)coords);
12051 
12052     if (context)
12053     {
12054         SCOPED_SHARE_CONTEXT_LOCK(context);
12055         bool isCallValid =
12056             (context->skipValidation() ||
12057              ValidateDrawTexsvOES(context, angle::EntryPoint::GLDrawTexsvOES, coords));
12058         if (isCallValid)
12059         {
12060             context->drawTexsv(coords);
12061         }
12062         ANGLE_CAPTURE_GL(DrawTexsvOES, isCallValid, context, coords);
12063     }
12064     else
12065     {
12066         GenerateContextLostErrorOnCurrentGlobalContext();
12067     }
12068     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12069 }
12070 
GL_DrawTexxOES(GLfixed x,GLfixed y,GLfixed z,GLfixed width,GLfixed height)12071 void GL_APIENTRY GL_DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
12072 {
12073     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12074     Context *context = GetValidGlobalContext();
12075     EVENT(context, GLDrawTexxOES,
12076           "context = %d, x = 0x%X, y = 0x%X, z = 0x%X, width = 0x%X, height = 0x%X", CID(context),
12077           x, y, z, width, height);
12078 
12079     if (context)
12080     {
12081         SCOPED_SHARE_CONTEXT_LOCK(context);
12082         bool isCallValid = (context->skipValidation() ||
12083                             ValidateDrawTexxOES(context, angle::EntryPoint::GLDrawTexxOES, x, y, z,
12084                                                 width, height));
12085         if (isCallValid)
12086         {
12087             context->drawTexx(x, y, z, width, height);
12088         }
12089         ANGLE_CAPTURE_GL(DrawTexxOES, isCallValid, context, x, y, z, width, height);
12090     }
12091     else
12092     {
12093         GenerateContextLostErrorOnCurrentGlobalContext();
12094     }
12095     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12096 }
12097 
GL_DrawTexxvOES(const GLfixed * coords)12098 void GL_APIENTRY GL_DrawTexxvOES(const GLfixed *coords)
12099 {
12100     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12101     Context *context = GetValidGlobalContext();
12102     EVENT(context, GLDrawTexxvOES, "context = %d, coords = 0x%016" PRIxPTR "", CID(context),
12103           (uintptr_t)coords);
12104 
12105     if (context)
12106     {
12107         SCOPED_SHARE_CONTEXT_LOCK(context);
12108         bool isCallValid =
12109             (context->skipValidation() ||
12110              ValidateDrawTexxvOES(context, angle::EntryPoint::GLDrawTexxvOES, coords));
12111         if (isCallValid)
12112         {
12113             context->drawTexxv(coords);
12114         }
12115         ANGLE_CAPTURE_GL(DrawTexxvOES, isCallValid, context, coords);
12116     }
12117     else
12118     {
12119         GenerateContextLostErrorOnCurrentGlobalContext();
12120     }
12121     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12122 }
12123 
12124 // GL_OES_element_index_uint
12125 
12126 // GL_OES_fbo_render_mipmap
12127 
12128 // GL_OES_framebuffer_object
GL_BindFramebufferOES(GLenum target,GLuint framebuffer)12129 void GL_APIENTRY GL_BindFramebufferOES(GLenum target, GLuint framebuffer)
12130 {
12131     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12132     Context *context = GetValidGlobalContext();
12133     EVENT(context, GLBindFramebufferOES, "context = %d, target = %s, framebuffer = %u",
12134           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target), framebuffer);
12135 
12136     if (context)
12137     {
12138         FramebufferID framebufferPacked = PackParam<FramebufferID>(framebuffer);
12139         SCOPED_SHARE_CONTEXT_LOCK(context);
12140         bool isCallValid =
12141             (context->skipValidation() ||
12142              ValidateBindFramebufferOES(context, angle::EntryPoint::GLBindFramebufferOES, target,
12143                                         framebufferPacked));
12144         if (isCallValid)
12145         {
12146             context->bindFramebuffer(target, framebufferPacked);
12147         }
12148         ANGLE_CAPTURE_GL(BindFramebufferOES, isCallValid, context, target, framebufferPacked);
12149     }
12150     else
12151     {
12152         GenerateContextLostErrorOnCurrentGlobalContext();
12153     }
12154     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12155 }
12156 
GL_BindRenderbufferOES(GLenum target,GLuint renderbuffer)12157 void GL_APIENTRY GL_BindRenderbufferOES(GLenum target, GLuint renderbuffer)
12158 {
12159     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12160     Context *context = GetValidGlobalContext();
12161     EVENT(context, GLBindRenderbufferOES, "context = %d, target = %s, renderbuffer = %u",
12162           CID(context), GLenumToString(GLESEnum::RenderbufferTarget, target), renderbuffer);
12163 
12164     if (context)
12165     {
12166         RenderbufferID renderbufferPacked = PackParam<RenderbufferID>(renderbuffer);
12167         SCOPED_SHARE_CONTEXT_LOCK(context);
12168         bool isCallValid =
12169             (context->skipValidation() ||
12170              ValidateBindRenderbufferOES(context, angle::EntryPoint::GLBindRenderbufferOES, target,
12171                                          renderbufferPacked));
12172         if (isCallValid)
12173         {
12174             context->bindRenderbuffer(target, renderbufferPacked);
12175         }
12176         ANGLE_CAPTURE_GL(BindRenderbufferOES, isCallValid, context, target, renderbufferPacked);
12177     }
12178     else
12179     {
12180         GenerateContextLostErrorOnCurrentGlobalContext();
12181     }
12182     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12183 }
12184 
GL_CheckFramebufferStatusOES(GLenum target)12185 GLenum GL_APIENTRY GL_CheckFramebufferStatusOES(GLenum target)
12186 {
12187     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12188     Context *context = GetValidGlobalContext();
12189     EVENT(context, GLCheckFramebufferStatusOES, "context = %d, target = %s", CID(context),
12190           GLenumToString(GLESEnum::FramebufferTarget, target));
12191 
12192     GLenum returnValue;
12193     if (context)
12194     {
12195         SCOPED_SHARE_CONTEXT_LOCK(context);
12196         bool isCallValid = (context->skipValidation() ||
12197                             ValidateCheckFramebufferStatusOES(
12198                                 context, angle::EntryPoint::GLCheckFramebufferStatusOES, target));
12199         if (isCallValid)
12200         {
12201             returnValue = context->checkFramebufferStatus(target);
12202         }
12203         else
12204         {
12205             returnValue =
12206                 GetDefaultReturnValue<angle::EntryPoint::GLCheckFramebufferStatusOES, GLenum>();
12207         }
12208         ANGLE_CAPTURE_GL(CheckFramebufferStatusOES, isCallValid, context, target, returnValue);
12209     }
12210     else
12211     {
12212         GenerateContextLostErrorOnCurrentGlobalContext();
12213         returnValue =
12214             GetDefaultReturnValue<angle::EntryPoint::GLCheckFramebufferStatusOES, GLenum>();
12215     }
12216     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12217     return returnValue;
12218 }
12219 
GL_DeleteFramebuffersOES(GLsizei n,const GLuint * framebuffers)12220 void GL_APIENTRY GL_DeleteFramebuffersOES(GLsizei n, const GLuint *framebuffers)
12221 {
12222     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12223     Context *context = GetValidGlobalContext();
12224     EVENT(context, GLDeleteFramebuffersOES,
12225           "context = %d, n = %d, framebuffers = 0x%016" PRIxPTR "", CID(context), n,
12226           (uintptr_t)framebuffers);
12227 
12228     if (context)
12229     {
12230         const FramebufferID *framebuffersPacked = PackParam<const FramebufferID *>(framebuffers);
12231         SCOPED_SHARE_CONTEXT_LOCK(context);
12232         bool isCallValid =
12233             (context->skipValidation() ||
12234              ValidateDeleteFramebuffersOES(context, angle::EntryPoint::GLDeleteFramebuffersOES, n,
12235                                            framebuffersPacked));
12236         if (isCallValid)
12237         {
12238             context->deleteFramebuffers(n, framebuffersPacked);
12239         }
12240         ANGLE_CAPTURE_GL(DeleteFramebuffersOES, isCallValid, context, n, framebuffersPacked);
12241     }
12242     else
12243     {
12244         GenerateContextLostErrorOnCurrentGlobalContext();
12245     }
12246     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12247 }
12248 
GL_DeleteRenderbuffersOES(GLsizei n,const GLuint * renderbuffers)12249 void GL_APIENTRY GL_DeleteRenderbuffersOES(GLsizei n, const GLuint *renderbuffers)
12250 {
12251     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12252     Context *context = GetValidGlobalContext();
12253     EVENT(context, GLDeleteRenderbuffersOES,
12254           "context = %d, n = %d, renderbuffers = 0x%016" PRIxPTR "", CID(context), n,
12255           (uintptr_t)renderbuffers);
12256 
12257     if (context)
12258     {
12259         const RenderbufferID *renderbuffersPacked =
12260             PackParam<const RenderbufferID *>(renderbuffers);
12261         SCOPED_SHARE_CONTEXT_LOCK(context);
12262         bool isCallValid =
12263             (context->skipValidation() ||
12264              ValidateDeleteRenderbuffersOES(context, angle::EntryPoint::GLDeleteRenderbuffersOES, n,
12265                                             renderbuffersPacked));
12266         if (isCallValid)
12267         {
12268             context->deleteRenderbuffers(n, renderbuffersPacked);
12269         }
12270         ANGLE_CAPTURE_GL(DeleteRenderbuffersOES, isCallValid, context, n, renderbuffersPacked);
12271     }
12272     else
12273     {
12274         GenerateContextLostErrorOnCurrentGlobalContext();
12275     }
12276     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12277 }
12278 
GL_FramebufferRenderbufferOES(GLenum target,GLenum attachment,GLenum renderbuffertarget,GLuint renderbuffer)12279 void GL_APIENTRY GL_FramebufferRenderbufferOES(GLenum target,
12280                                                GLenum attachment,
12281                                                GLenum renderbuffertarget,
12282                                                GLuint renderbuffer)
12283 {
12284     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12285     Context *context = GetValidGlobalContext();
12286     EVENT(context, GLFramebufferRenderbufferOES,
12287           "context = %d, target = %s, attachment = %s, renderbuffertarget = %s, renderbuffer = %u",
12288           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target),
12289           GLenumToString(GLESEnum::FramebufferAttachment, attachment),
12290           GLenumToString(GLESEnum::RenderbufferTarget, renderbuffertarget), renderbuffer);
12291 
12292     if (context)
12293     {
12294         RenderbufferID renderbufferPacked = PackParam<RenderbufferID>(renderbuffer);
12295         SCOPED_SHARE_CONTEXT_LOCK(context);
12296         bool isCallValid = (context->skipValidation() ||
12297                             ValidateFramebufferRenderbufferOES(
12298                                 context, angle::EntryPoint::GLFramebufferRenderbufferOES, target,
12299                                 attachment, renderbuffertarget, renderbufferPacked));
12300         if (isCallValid)
12301         {
12302             context->framebufferRenderbuffer(target, attachment, renderbuffertarget,
12303                                              renderbufferPacked);
12304         }
12305         ANGLE_CAPTURE_GL(FramebufferRenderbufferOES, isCallValid, context, target, attachment,
12306                          renderbuffertarget, renderbufferPacked);
12307     }
12308     else
12309     {
12310         GenerateContextLostErrorOnCurrentGlobalContext();
12311     }
12312     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12313 }
12314 
GL_FramebufferTexture2DOES(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level)12315 void GL_APIENTRY GL_FramebufferTexture2DOES(GLenum target,
12316                                             GLenum attachment,
12317                                             GLenum textarget,
12318                                             GLuint texture,
12319                                             GLint level)
12320 {
12321     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12322     Context *context = GetValidGlobalContext();
12323     EVENT(context, GLFramebufferTexture2DOES,
12324           "context = %d, target = %s, attachment = %s, textarget = %s, texture = %u, level = %d",
12325           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target),
12326           GLenumToString(GLESEnum::FramebufferAttachment, attachment),
12327           GLenumToString(GLESEnum::TextureTarget, textarget), texture, level);
12328 
12329     if (context)
12330     {
12331         TextureTarget textargetPacked = PackParam<TextureTarget>(textarget);
12332         TextureID texturePacked       = PackParam<TextureID>(texture);
12333         SCOPED_SHARE_CONTEXT_LOCK(context);
12334         bool isCallValid = (context->skipValidation() ||
12335                             ValidateFramebufferTexture2DOES(
12336                                 context, angle::EntryPoint::GLFramebufferTexture2DOES, target,
12337                                 attachment, textargetPacked, texturePacked, level));
12338         if (isCallValid)
12339         {
12340             context->framebufferTexture2D(target, attachment, textargetPacked, texturePacked,
12341                                           level);
12342         }
12343         ANGLE_CAPTURE_GL(FramebufferTexture2DOES, isCallValid, context, target, attachment,
12344                          textargetPacked, texturePacked, level);
12345     }
12346     else
12347     {
12348         GenerateContextLostErrorOnCurrentGlobalContext();
12349     }
12350     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12351 }
12352 
GL_GenFramebuffersOES(GLsizei n,GLuint * framebuffers)12353 void GL_APIENTRY GL_GenFramebuffersOES(GLsizei n, GLuint *framebuffers)
12354 {
12355     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12356     Context *context = GetValidGlobalContext();
12357     EVENT(context, GLGenFramebuffersOES, "context = %d, n = %d, framebuffers = 0x%016" PRIxPTR "",
12358           CID(context), n, (uintptr_t)framebuffers);
12359 
12360     if (context)
12361     {
12362         FramebufferID *framebuffersPacked = PackParam<FramebufferID *>(framebuffers);
12363         SCOPED_SHARE_CONTEXT_LOCK(context);
12364         bool isCallValid =
12365             (context->skipValidation() ||
12366              ValidateGenFramebuffersOES(context, angle::EntryPoint::GLGenFramebuffersOES, n,
12367                                         framebuffersPacked));
12368         if (isCallValid)
12369         {
12370             context->genFramebuffers(n, framebuffersPacked);
12371         }
12372         ANGLE_CAPTURE_GL(GenFramebuffersOES, isCallValid, context, n, framebuffersPacked);
12373     }
12374     else
12375     {
12376         GenerateContextLostErrorOnCurrentGlobalContext();
12377     }
12378     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12379 }
12380 
GL_GenRenderbuffersOES(GLsizei n,GLuint * renderbuffers)12381 void GL_APIENTRY GL_GenRenderbuffersOES(GLsizei n, GLuint *renderbuffers)
12382 {
12383     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12384     Context *context = GetValidGlobalContext();
12385     EVENT(context, GLGenRenderbuffersOES, "context = %d, n = %d, renderbuffers = 0x%016" PRIxPTR "",
12386           CID(context), n, (uintptr_t)renderbuffers);
12387 
12388     if (context)
12389     {
12390         RenderbufferID *renderbuffersPacked = PackParam<RenderbufferID *>(renderbuffers);
12391         SCOPED_SHARE_CONTEXT_LOCK(context);
12392         bool isCallValid =
12393             (context->skipValidation() ||
12394              ValidateGenRenderbuffersOES(context, angle::EntryPoint::GLGenRenderbuffersOES, n,
12395                                          renderbuffersPacked));
12396         if (isCallValid)
12397         {
12398             context->genRenderbuffers(n, renderbuffersPacked);
12399         }
12400         ANGLE_CAPTURE_GL(GenRenderbuffersOES, isCallValid, context, n, renderbuffersPacked);
12401     }
12402     else
12403     {
12404         GenerateContextLostErrorOnCurrentGlobalContext();
12405     }
12406     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12407 }
12408 
GL_GenerateMipmapOES(GLenum target)12409 void GL_APIENTRY GL_GenerateMipmapOES(GLenum target)
12410 {
12411     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12412     Context *context = GetValidGlobalContext();
12413     EVENT(context, GLGenerateMipmapOES, "context = %d, target = %s", CID(context),
12414           GLenumToString(GLESEnum::TextureTarget, target));
12415 
12416     if (context)
12417     {
12418         TextureType targetPacked = PackParam<TextureType>(target);
12419         SCOPED_SHARE_CONTEXT_LOCK(context);
12420         bool isCallValid = (context->skipValidation() ||
12421                             ValidateGenerateMipmapOES(
12422                                 context, angle::EntryPoint::GLGenerateMipmapOES, targetPacked));
12423         if (isCallValid)
12424         {
12425             context->generateMipmap(targetPacked);
12426         }
12427         ANGLE_CAPTURE_GL(GenerateMipmapOES, isCallValid, context, targetPacked);
12428     }
12429     else
12430     {
12431         GenerateContextLostErrorOnCurrentGlobalContext();
12432     }
12433     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12434 }
12435 
GL_GetFramebufferAttachmentParameterivOES(GLenum target,GLenum attachment,GLenum pname,GLint * params)12436 void GL_APIENTRY GL_GetFramebufferAttachmentParameterivOES(GLenum target,
12437                                                            GLenum attachment,
12438                                                            GLenum pname,
12439                                                            GLint *params)
12440 {
12441     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12442     Context *context = GetValidGlobalContext();
12443     EVENT(context, GLGetFramebufferAttachmentParameterivOES,
12444           "context = %d, target = %s, attachment = %s, pname = %s, params = 0x%016" PRIxPTR "",
12445           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target),
12446           GLenumToString(GLESEnum::FramebufferAttachment, attachment),
12447           GLenumToString(GLESEnum::FramebufferAttachmentParameterName, pname), (uintptr_t)params);
12448 
12449     if (context)
12450     {
12451         SCOPED_SHARE_CONTEXT_LOCK(context);
12452         bool isCallValid =
12453             (context->skipValidation() ||
12454              ValidateGetFramebufferAttachmentParameterivOES(
12455                  context, angle::EntryPoint::GLGetFramebufferAttachmentParameterivOES, target,
12456                  attachment, pname, params));
12457         if (isCallValid)
12458         {
12459             context->getFramebufferAttachmentParameteriv(target, attachment, pname, params);
12460         }
12461         ANGLE_CAPTURE_GL(GetFramebufferAttachmentParameterivOES, isCallValid, context, target,
12462                          attachment, pname, params);
12463     }
12464     else
12465     {
12466         GenerateContextLostErrorOnCurrentGlobalContext();
12467     }
12468     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12469 }
12470 
GL_GetRenderbufferParameterivOES(GLenum target,GLenum pname,GLint * params)12471 void GL_APIENTRY GL_GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint *params)
12472 {
12473     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12474     Context *context = GetValidGlobalContext();
12475     EVENT(context, GLGetRenderbufferParameterivOES,
12476           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
12477           GLenumToString(GLESEnum::RenderbufferTarget, target),
12478           GLenumToString(GLESEnum::RenderbufferParameterName, pname), (uintptr_t)params);
12479 
12480     if (context)
12481     {
12482         SCOPED_SHARE_CONTEXT_LOCK(context);
12483         bool isCallValid = (context->skipValidation() ||
12484                             ValidateGetRenderbufferParameterivOES(
12485                                 context, angle::EntryPoint::GLGetRenderbufferParameterivOES, target,
12486                                 pname, params));
12487         if (isCallValid)
12488         {
12489             context->getRenderbufferParameteriv(target, pname, params);
12490         }
12491         ANGLE_CAPTURE_GL(GetRenderbufferParameterivOES, isCallValid, context, target, pname,
12492                          params);
12493     }
12494     else
12495     {
12496         GenerateContextLostErrorOnCurrentGlobalContext();
12497     }
12498     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12499 }
12500 
GL_IsFramebufferOES(GLuint framebuffer)12501 GLboolean GL_APIENTRY GL_IsFramebufferOES(GLuint framebuffer)
12502 {
12503     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12504     Context *context = GetValidGlobalContext();
12505     EVENT(context, GLIsFramebufferOES, "context = %d, framebuffer = %u", CID(context), framebuffer);
12506 
12507     GLboolean returnValue;
12508     if (context)
12509     {
12510         FramebufferID framebufferPacked = PackParam<FramebufferID>(framebuffer);
12511         SCOPED_SHARE_CONTEXT_LOCK(context);
12512         bool isCallValid = (context->skipValidation() ||
12513                             ValidateIsFramebufferOES(context, angle::EntryPoint::GLIsFramebufferOES,
12514                                                      framebufferPacked));
12515         if (isCallValid)
12516         {
12517             returnValue = context->isFramebuffer(framebufferPacked);
12518         }
12519         else
12520         {
12521             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFramebufferOES, GLboolean>();
12522         }
12523         ANGLE_CAPTURE_GL(IsFramebufferOES, isCallValid, context, framebufferPacked, returnValue);
12524     }
12525     else
12526     {
12527         GenerateContextLostErrorOnCurrentGlobalContext();
12528         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFramebufferOES, GLboolean>();
12529     }
12530     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12531     return returnValue;
12532 }
12533 
GL_IsRenderbufferOES(GLuint renderbuffer)12534 GLboolean GL_APIENTRY GL_IsRenderbufferOES(GLuint renderbuffer)
12535 {
12536     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12537     Context *context = GetValidGlobalContext();
12538     EVENT(context, GLIsRenderbufferOES, "context = %d, renderbuffer = %u", CID(context),
12539           renderbuffer);
12540 
12541     GLboolean returnValue;
12542     if (context)
12543     {
12544         RenderbufferID renderbufferPacked = PackParam<RenderbufferID>(renderbuffer);
12545         SCOPED_SHARE_CONTEXT_LOCK(context);
12546         bool isCallValid =
12547             (context->skipValidation() ||
12548              ValidateIsRenderbufferOES(context, angle::EntryPoint::GLIsRenderbufferOES,
12549                                        renderbufferPacked));
12550         if (isCallValid)
12551         {
12552             returnValue = context->isRenderbuffer(renderbufferPacked);
12553         }
12554         else
12555         {
12556             returnValue =
12557                 GetDefaultReturnValue<angle::EntryPoint::GLIsRenderbufferOES, GLboolean>();
12558         }
12559         ANGLE_CAPTURE_GL(IsRenderbufferOES, isCallValid, context, renderbufferPacked, returnValue);
12560     }
12561     else
12562     {
12563         GenerateContextLostErrorOnCurrentGlobalContext();
12564         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsRenderbufferOES, GLboolean>();
12565     }
12566     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12567     return returnValue;
12568 }
12569 
GL_RenderbufferStorageOES(GLenum target,GLenum internalformat,GLsizei width,GLsizei height)12570 void GL_APIENTRY GL_RenderbufferStorageOES(GLenum target,
12571                                            GLenum internalformat,
12572                                            GLsizei width,
12573                                            GLsizei height)
12574 {
12575     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12576     Context *context = GetValidGlobalContext();
12577     EVENT(context, GLRenderbufferStorageOES,
12578           "context = %d, target = %s, internalformat = %s, width = %d, height = %d", CID(context),
12579           GLenumToString(GLESEnum::RenderbufferTarget, target),
12580           GLenumToString(GLESEnum::InternalFormat, internalformat), width, height);
12581 
12582     if (context)
12583     {
12584         SCOPED_SHARE_CONTEXT_LOCK(context);
12585         bool isCallValid =
12586             (context->skipValidation() ||
12587              ValidateRenderbufferStorageOES(context, angle::EntryPoint::GLRenderbufferStorageOES,
12588                                             target, internalformat, width, height));
12589         if (isCallValid)
12590         {
12591             context->renderbufferStorage(target, internalformat, width, height);
12592         }
12593         ANGLE_CAPTURE_GL(RenderbufferStorageOES, isCallValid, context, target, internalformat,
12594                          width, height);
12595     }
12596     else
12597     {
12598         GenerateContextLostErrorOnCurrentGlobalContext();
12599     }
12600     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12601 }
12602 
12603 // GL_OES_geometry_shader
GL_FramebufferTextureOES(GLenum target,GLenum attachment,GLuint texture,GLint level)12604 void GL_APIENTRY GL_FramebufferTextureOES(GLenum target,
12605                                           GLenum attachment,
12606                                           GLuint texture,
12607                                           GLint level)
12608 {
12609     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12610     Context *context = GetValidGlobalContext();
12611     EVENT(context, GLFramebufferTextureOES,
12612           "context = %d, target = %s, attachment = %s, texture = %u, level = %d", CID(context),
12613           GLenumToString(GLESEnum::FramebufferTarget, target),
12614           GLenumToString(GLESEnum::FramebufferAttachment, attachment), texture, level);
12615 
12616     if (context)
12617     {
12618         TextureID texturePacked = PackParam<TextureID>(texture);
12619         SCOPED_SHARE_CONTEXT_LOCK(context);
12620         bool isCallValid =
12621             (context->skipValidation() ||
12622              ValidateFramebufferTextureOES(context, angle::EntryPoint::GLFramebufferTextureOES,
12623                                            target, attachment, texturePacked, level));
12624         if (isCallValid)
12625         {
12626             context->framebufferTexture(target, attachment, texturePacked, level);
12627         }
12628         ANGLE_CAPTURE_GL(FramebufferTextureOES, isCallValid, context, target, attachment,
12629                          texturePacked, level);
12630     }
12631     else
12632     {
12633         GenerateContextLostErrorOnCurrentGlobalContext();
12634     }
12635     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12636 }
12637 
12638 // GL_OES_get_program_binary
GL_GetProgramBinaryOES(GLuint program,GLsizei bufSize,GLsizei * length,GLenum * binaryFormat,void * binary)12639 void GL_APIENTRY GL_GetProgramBinaryOES(GLuint program,
12640                                         GLsizei bufSize,
12641                                         GLsizei *length,
12642                                         GLenum *binaryFormat,
12643                                         void *binary)
12644 {
12645     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12646     Context *context = GetValidGlobalContext();
12647     EVENT(context, GLGetProgramBinaryOES,
12648           "context = %d, program = %u, bufSize = %d, length = 0x%016" PRIxPTR
12649           ", binaryFormat = 0x%016" PRIxPTR ", binary = 0x%016" PRIxPTR "",
12650           CID(context), program, bufSize, (uintptr_t)length, (uintptr_t)binaryFormat,
12651           (uintptr_t)binary);
12652 
12653     if (context)
12654     {
12655         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
12656         SCOPED_SHARE_CONTEXT_LOCK(context);
12657         bool isCallValid =
12658             (context->skipValidation() ||
12659              ValidateGetProgramBinaryOES(context, angle::EntryPoint::GLGetProgramBinaryOES,
12660                                          programPacked, bufSize, length, binaryFormat, binary));
12661         if (isCallValid)
12662         {
12663             context->getProgramBinary(programPacked, bufSize, length, binaryFormat, binary);
12664         }
12665         ANGLE_CAPTURE_GL(GetProgramBinaryOES, isCallValid, context, programPacked, bufSize, length,
12666                          binaryFormat, binary);
12667     }
12668     else
12669     {
12670         GenerateContextLostErrorOnCurrentGlobalContext();
12671     }
12672     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12673 }
12674 
GL_ProgramBinaryOES(GLuint program,GLenum binaryFormat,const void * binary,GLint length)12675 void GL_APIENTRY GL_ProgramBinaryOES(GLuint program,
12676                                      GLenum binaryFormat,
12677                                      const void *binary,
12678                                      GLint length)
12679 {
12680     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12681     Context *context = GetValidGlobalContext();
12682     EVENT(context, GLProgramBinaryOES,
12683           "context = %d, program = %u, binaryFormat = %s, binary = 0x%016" PRIxPTR ", length = %d",
12684           CID(context), program, GLenumToString(GLESEnum::AllEnums, binaryFormat),
12685           (uintptr_t)binary, length);
12686 
12687     if (context)
12688     {
12689         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
12690         SCOPED_SHARE_CONTEXT_LOCK(context);
12691         bool isCallValid =
12692             (context->skipValidation() ||
12693              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
12694                                                 context->getMutableErrorSetForValidation(),
12695                                                 angle::EntryPoint::GLProgramBinaryOES) &&
12696               ValidateProgramBinaryOES(context, angle::EntryPoint::GLProgramBinaryOES,
12697                                        programPacked, binaryFormat, binary, length)));
12698         if (isCallValid)
12699         {
12700             context->programBinary(programPacked, binaryFormat, binary, length);
12701         }
12702         ANGLE_CAPTURE_GL(ProgramBinaryOES, isCallValid, context, programPacked, binaryFormat,
12703                          binary, length);
12704     }
12705     else
12706     {
12707         GenerateContextLostErrorOnCurrentGlobalContext();
12708     }
12709     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12710 }
12711 
12712 // GL_OES_gpu_shader5
12713 
12714 // GL_OES_mapbuffer
GL_GetBufferPointervOES(GLenum target,GLenum pname,void ** params)12715 void GL_APIENTRY GL_GetBufferPointervOES(GLenum target, GLenum pname, void **params)
12716 {
12717     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12718     Context *context = GetValidGlobalContext();
12719     EVENT(context, GLGetBufferPointervOES,
12720           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
12721           GLenumToString(GLESEnum::BufferTargetARB, target),
12722           GLenumToString(GLESEnum::AllEnums, pname), (uintptr_t)params);
12723 
12724     if (context)
12725     {
12726         BufferBinding targetPacked = PackParam<BufferBinding>(target);
12727         SCOPED_SHARE_CONTEXT_LOCK(context);
12728         bool isCallValid =
12729             (context->skipValidation() ||
12730              ValidateGetBufferPointervOES(context, angle::EntryPoint::GLGetBufferPointervOES,
12731                                           targetPacked, pname, params));
12732         if (isCallValid)
12733         {
12734             context->getBufferPointerv(targetPacked, pname, params);
12735         }
12736         ANGLE_CAPTURE_GL(GetBufferPointervOES, isCallValid, context, targetPacked, pname, params);
12737     }
12738     else
12739     {
12740         GenerateContextLostErrorOnCurrentGlobalContext();
12741     }
12742     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12743 }
12744 
GL_MapBufferOES(GLenum target,GLenum access)12745 void *GL_APIENTRY GL_MapBufferOES(GLenum target, GLenum access)
12746 {
12747     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12748     Context *context = GetValidGlobalContext();
12749     EVENT(context, GLMapBufferOES, "context = %d, target = %s, access = %s", CID(context),
12750           GLenumToString(GLESEnum::BufferTargetARB, target),
12751           GLenumToString(GLESEnum::BufferAccessARB, access));
12752 
12753     void *returnValue;
12754     if (context)
12755     {
12756         BufferBinding targetPacked = PackParam<BufferBinding>(target);
12757         SCOPED_SHARE_CONTEXT_LOCK(context);
12758         bool isCallValid =
12759             (context->skipValidation() ||
12760              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
12761                                                 context->getMutableErrorSetForValidation(),
12762                                                 angle::EntryPoint::GLMapBufferOES) &&
12763               ValidateMapBufferOES(context, angle::EntryPoint::GLMapBufferOES, targetPacked,
12764                                    access)));
12765         if (isCallValid)
12766         {
12767             returnValue = context->mapBuffer(targetPacked, access);
12768         }
12769         else
12770         {
12771             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferOES, void *>();
12772         }
12773         ANGLE_CAPTURE_GL(MapBufferOES, isCallValid, context, targetPacked, access, returnValue);
12774     }
12775     else
12776     {
12777         GenerateContextLostErrorOnCurrentGlobalContext();
12778         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferOES, void *>();
12779     }
12780     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12781     return returnValue;
12782 }
12783 
GL_UnmapBufferOES(GLenum target)12784 GLboolean GL_APIENTRY GL_UnmapBufferOES(GLenum target)
12785 {
12786     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12787     Context *context = GetValidGlobalContext();
12788     EVENT(context, GLUnmapBufferOES, "context = %d, target = %s", CID(context),
12789           GLenumToString(GLESEnum::AllEnums, target));
12790 
12791     GLboolean returnValue;
12792     if (context)
12793     {
12794         BufferBinding targetPacked = PackParam<BufferBinding>(target);
12795         SCOPED_SHARE_CONTEXT_LOCK(context);
12796         bool isCallValid =
12797             (context->skipValidation() ||
12798              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
12799                                                 context->getMutableErrorSetForValidation(),
12800                                                 angle::EntryPoint::GLUnmapBufferOES) &&
12801               ValidateUnmapBufferOES(context, angle::EntryPoint::GLUnmapBufferOES, targetPacked)));
12802         if (isCallValid)
12803         {
12804             returnValue = context->unmapBuffer(targetPacked);
12805         }
12806         else
12807         {
12808             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLUnmapBufferOES, GLboolean>();
12809         }
12810         ANGLE_CAPTURE_GL(UnmapBufferOES, isCallValid, context, targetPacked, returnValue);
12811     }
12812     else
12813     {
12814         GenerateContextLostErrorOnCurrentGlobalContext();
12815         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLUnmapBufferOES, GLboolean>();
12816     }
12817     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12818     return returnValue;
12819 }
12820 
12821 // GL_OES_matrix_palette
GL_CurrentPaletteMatrixOES(GLuint matrixpaletteindex)12822 void GL_APIENTRY GL_CurrentPaletteMatrixOES(GLuint matrixpaletteindex)
12823 {
12824     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12825     Context *context = GetValidGlobalContext();
12826     EVENT(context, GLCurrentPaletteMatrixOES, "context = %d, matrixpaletteindex = %u", CID(context),
12827           matrixpaletteindex);
12828 
12829     if (context)
12830     {
12831         SCOPED_SHARE_CONTEXT_LOCK(context);
12832         bool isCallValid =
12833             (context->skipValidation() ||
12834              ValidateCurrentPaletteMatrixOES(context, angle::EntryPoint::GLCurrentPaletteMatrixOES,
12835                                              matrixpaletteindex));
12836         if (isCallValid)
12837         {
12838             context->currentPaletteMatrix(matrixpaletteindex);
12839         }
12840         ANGLE_CAPTURE_GL(CurrentPaletteMatrixOES, isCallValid, context, matrixpaletteindex);
12841     }
12842     else
12843     {
12844         GenerateContextLostErrorOnCurrentGlobalContext();
12845     }
12846     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12847 }
12848 
GL_LoadPaletteFromModelViewMatrixOES()12849 void GL_APIENTRY GL_LoadPaletteFromModelViewMatrixOES()
12850 {
12851     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12852     Context *context = GetValidGlobalContext();
12853     EVENT(context, GLLoadPaletteFromModelViewMatrixOES, "context = %d", CID(context));
12854 
12855     if (context)
12856     {
12857         SCOPED_SHARE_CONTEXT_LOCK(context);
12858         bool isCallValid = (context->skipValidation() ||
12859                             ValidateLoadPaletteFromModelViewMatrixOES(
12860                                 context, angle::EntryPoint::GLLoadPaletteFromModelViewMatrixOES));
12861         if (isCallValid)
12862         {
12863             context->loadPaletteFromModelViewMatrix();
12864         }
12865         ANGLE_CAPTURE_GL(LoadPaletteFromModelViewMatrixOES, isCallValid, context);
12866     }
12867     else
12868     {
12869         GenerateContextLostErrorOnCurrentGlobalContext();
12870     }
12871     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12872 }
12873 
GL_MatrixIndexPointerOES(GLint size,GLenum type,GLsizei stride,const void * pointer)12874 void GL_APIENTRY GL_MatrixIndexPointerOES(GLint size,
12875                                           GLenum type,
12876                                           GLsizei stride,
12877                                           const void *pointer)
12878 {
12879     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12880     Context *context = GetValidGlobalContext();
12881     EVENT(context, GLMatrixIndexPointerOES,
12882           "context = %d, size = %d, type = %s, stride = %d, pointer = 0x%016" PRIxPTR "",
12883           CID(context), size, GLenumToString(GLESEnum::AllEnums, type), stride, (uintptr_t)pointer);
12884 
12885     if (context)
12886     {
12887         SCOPED_SHARE_CONTEXT_LOCK(context);
12888         bool isCallValid =
12889             (context->skipValidation() ||
12890              ValidateMatrixIndexPointerOES(context, angle::EntryPoint::GLMatrixIndexPointerOES,
12891                                            size, type, stride, pointer));
12892         if (isCallValid)
12893         {
12894             context->matrixIndexPointer(size, type, stride, pointer);
12895         }
12896         ANGLE_CAPTURE_GL(MatrixIndexPointerOES, isCallValid, context, size, type, stride, pointer);
12897     }
12898     else
12899     {
12900         GenerateContextLostErrorOnCurrentGlobalContext();
12901     }
12902     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12903 }
12904 
GL_WeightPointerOES(GLint size,GLenum type,GLsizei stride,const void * pointer)12905 void GL_APIENTRY GL_WeightPointerOES(GLint size, GLenum type, GLsizei stride, const void *pointer)
12906 {
12907     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12908     Context *context = GetValidGlobalContext();
12909     EVENT(context, GLWeightPointerOES,
12910           "context = %d, size = %d, type = %s, stride = %d, pointer = 0x%016" PRIxPTR "",
12911           CID(context), size, GLenumToString(GLESEnum::AllEnums, type), stride, (uintptr_t)pointer);
12912 
12913     if (context)
12914     {
12915         SCOPED_SHARE_CONTEXT_LOCK(context);
12916         bool isCallValid = (context->skipValidation() ||
12917                             ValidateWeightPointerOES(context, angle::EntryPoint::GLWeightPointerOES,
12918                                                      size, type, stride, pointer));
12919         if (isCallValid)
12920         {
12921             context->weightPointer(size, type, stride, pointer);
12922         }
12923         ANGLE_CAPTURE_GL(WeightPointerOES, isCallValid, context, size, type, stride, pointer);
12924     }
12925     else
12926     {
12927         GenerateContextLostErrorOnCurrentGlobalContext();
12928     }
12929     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12930 }
12931 
12932 // GL_OES_packed_depth_stencil
12933 
12934 // GL_OES_point_size_array
GL_PointSizePointerOES(GLenum type,GLsizei stride,const void * pointer)12935 void GL_APIENTRY GL_PointSizePointerOES(GLenum type, GLsizei stride, const void *pointer)
12936 {
12937     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12938     Context *context = GetValidGlobalContext();
12939     EVENT(context, GLPointSizePointerOES,
12940           "context = %d, type = %s, stride = %d, pointer = 0x%016" PRIxPTR "", CID(context),
12941           GLenumToString(GLESEnum::AllEnums, type), stride, (uintptr_t)pointer);
12942 
12943     if (context)
12944     {
12945         VertexAttribType typePacked = PackParam<VertexAttribType>(type);
12946         SCOPED_SHARE_CONTEXT_LOCK(context);
12947         bool isCallValid =
12948             (context->skipValidation() ||
12949              ValidatePointSizePointerOES(context, angle::EntryPoint::GLPointSizePointerOES,
12950                                          typePacked, stride, pointer));
12951         if (isCallValid)
12952         {
12953             context->pointSizePointer(typePacked, stride, pointer);
12954         }
12955         ANGLE_CAPTURE_GL(PointSizePointerOES, isCallValid, context, typePacked, stride, pointer);
12956     }
12957     else
12958     {
12959         GenerateContextLostErrorOnCurrentGlobalContext();
12960     }
12961     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12962 }
12963 
12964 // GL_OES_point_sprite
12965 
12966 // GL_OES_primitive_bounding_box
GL_PrimitiveBoundingBoxOES(GLfloat minX,GLfloat minY,GLfloat minZ,GLfloat minW,GLfloat maxX,GLfloat maxY,GLfloat maxZ,GLfloat maxW)12967 void GL_APIENTRY GL_PrimitiveBoundingBoxOES(GLfloat minX,
12968                                             GLfloat minY,
12969                                             GLfloat minZ,
12970                                             GLfloat minW,
12971                                             GLfloat maxX,
12972                                             GLfloat maxY,
12973                                             GLfloat maxZ,
12974                                             GLfloat maxW)
12975 {
12976     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
12977     Context *context = GetValidGlobalContext();
12978     EVENT(context, GLPrimitiveBoundingBoxOES,
12979           "context = %d, minX = %f, minY = %f, minZ = %f, minW = %f, maxX = %f, maxY = %f, maxZ = "
12980           "%f, maxW = %f",
12981           CID(context), minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
12982 
12983     if (context)
12984     {
12985         bool isCallValid =
12986             (context->skipValidation() ||
12987              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
12988                                                 context->getMutableErrorSetForValidation(),
12989                                                 angle::EntryPoint::GLPrimitiveBoundingBoxOES) &&
12990               ValidatePrimitiveBoundingBoxOES(context->getPrivateState(),
12991                                               context->getMutableErrorSetForValidation(),
12992                                               angle::EntryPoint::GLPrimitiveBoundingBoxOES, minX,
12993                                               minY, minZ, minW, maxX, maxY, maxZ, maxW)));
12994         if (isCallValid)
12995         {
12996             ContextPrivatePrimitiveBoundingBox(context->getMutablePrivateState(),
12997                                                context->getMutablePrivateStateCache(), minX, minY,
12998                                                minZ, minW, maxX, maxY, maxZ, maxW);
12999         }
13000         ANGLE_CAPTURE_GL(PrimitiveBoundingBoxOES, isCallValid, context, minX, minY, minZ, minW,
13001                          maxX, maxY, maxZ, maxW);
13002     }
13003     else
13004     {
13005         GenerateContextLostErrorOnCurrentGlobalContext();
13006     }
13007     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13008 }
13009 
13010 // GL_OES_query_matrix
GL_QueryMatrixxOES(GLfixed * mantissa,GLint * exponent)13011 GLbitfield GL_APIENTRY GL_QueryMatrixxOES(GLfixed *mantissa, GLint *exponent)
13012 {
13013     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13014     Context *context = GetValidGlobalContext();
13015     EVENT(context, GLQueryMatrixxOES,
13016           "context = %d, mantissa = 0x%016" PRIxPTR ", exponent = 0x%016" PRIxPTR "", CID(context),
13017           (uintptr_t)mantissa, (uintptr_t)exponent);
13018 
13019     GLbitfield returnValue;
13020     if (context)
13021     {
13022         SCOPED_SHARE_CONTEXT_LOCK(context);
13023         bool isCallValid = (context->skipValidation() ||
13024                             ValidateQueryMatrixxOES(context, angle::EntryPoint::GLQueryMatrixxOES,
13025                                                     mantissa, exponent));
13026         if (isCallValid)
13027         {
13028             returnValue = context->queryMatrixx(mantissa, exponent);
13029         }
13030         else
13031         {
13032             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLQueryMatrixxOES, GLbitfield>();
13033         }
13034         ANGLE_CAPTURE_GL(QueryMatrixxOES, isCallValid, context, mantissa, exponent, returnValue);
13035     }
13036     else
13037     {
13038         GenerateContextLostErrorOnCurrentGlobalContext();
13039         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLQueryMatrixxOES, GLbitfield>();
13040     }
13041     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13042     return returnValue;
13043 }
13044 
13045 // GL_OES_required_internalformat
13046 
13047 // GL_OES_rgb8_rgba8
13048 
13049 // GL_OES_sample_shading
GL_MinSampleShadingOES(GLfloat value)13050 void GL_APIENTRY GL_MinSampleShadingOES(GLfloat value)
13051 {
13052     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13053     Context *context = GetValidGlobalContext();
13054     EVENT(context, GLMinSampleShadingOES, "context = %d, value = %f", CID(context), value);
13055 
13056     if (context)
13057     {
13058         bool isCallValid =
13059             (context->skipValidation() ||
13060              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
13061                                                 context->getMutableErrorSetForValidation(),
13062                                                 angle::EntryPoint::GLMinSampleShadingOES) &&
13063               ValidateMinSampleShadingOES(context->getPrivateState(),
13064                                           context->getMutableErrorSetForValidation(),
13065                                           angle::EntryPoint::GLMinSampleShadingOES, value)));
13066         if (isCallValid)
13067         {
13068             ContextPrivateMinSampleShading(context->getMutablePrivateState(),
13069                                            context->getMutablePrivateStateCache(), value);
13070         }
13071         ANGLE_CAPTURE_GL(MinSampleShadingOES, isCallValid, context, value);
13072     }
13073     else
13074     {
13075         GenerateContextLostErrorOnCurrentGlobalContext();
13076     }
13077     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13078 }
13079 
13080 // GL_OES_sample_variables
13081 
13082 // GL_OES_shader_image_atomic
13083 
13084 // GL_OES_shader_io_blocks
13085 
13086 // GL_OES_shader_multisample_interpolation
13087 
13088 // GL_OES_standard_derivatives
13089 
13090 // GL_OES_surfaceless_context
13091 
13092 // GL_OES_tessellation_shader
GL_PatchParameteriOES(GLenum pname,GLint value)13093 void GL_APIENTRY GL_PatchParameteriOES(GLenum pname, GLint value)
13094 {
13095     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13096     Context *context = GetValidGlobalContext();
13097     EVENT(context, GLPatchParameteriOES, "context = %d, pname = %s, value = %d", CID(context),
13098           GLenumToString(GLESEnum::PatchParameterName, pname), value);
13099 
13100     if (context)
13101     {
13102         bool isCallValid =
13103             (context->skipValidation() ||
13104              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
13105                                                 context->getMutableErrorSetForValidation(),
13106                                                 angle::EntryPoint::GLPatchParameteriOES) &&
13107               ValidatePatchParameteriOES(context->getPrivateState(),
13108                                          context->getMutableErrorSetForValidation(),
13109                                          angle::EntryPoint::GLPatchParameteriOES, pname, value)));
13110         if (isCallValid)
13111         {
13112             ContextPrivatePatchParameteri(context->getMutablePrivateState(),
13113                                           context->getMutablePrivateStateCache(), pname, value);
13114         }
13115         ANGLE_CAPTURE_GL(PatchParameteriOES, isCallValid, context, pname, value);
13116     }
13117     else
13118     {
13119         GenerateContextLostErrorOnCurrentGlobalContext();
13120     }
13121     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13122 }
13123 
13124 // 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)13125 void GL_APIENTRY GL_CompressedTexImage3DOES(GLenum target,
13126                                             GLint level,
13127                                             GLenum internalformat,
13128                                             GLsizei width,
13129                                             GLsizei height,
13130                                             GLsizei depth,
13131                                             GLint border,
13132                                             GLsizei imageSize,
13133                                             const void *data)
13134 {
13135     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13136     Context *context = GetValidGlobalContext();
13137     EVENT(context, GLCompressedTexImage3DOES,
13138           "context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "
13139           "depth = %d, border = %d, imageSize = %d, data = 0x%016" PRIxPTR "",
13140           CID(context), GLenumToString(GLESEnum::TextureTarget, target), level,
13141           GLenumToString(GLESEnum::InternalFormat, internalformat), width, height, depth, border,
13142           imageSize, (uintptr_t)data);
13143 
13144     if (context)
13145     {
13146         TextureTarget targetPacked = PackParam<TextureTarget>(target);
13147         SCOPED_SHARE_CONTEXT_LOCK(context);
13148         bool isCallValid =
13149             (context->skipValidation() ||
13150              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
13151                                                 context->getMutableErrorSetForValidation(),
13152                                                 angle::EntryPoint::GLCompressedTexImage3DOES) &&
13153               ValidateCompressedTexImage3DOES(context, angle::EntryPoint::GLCompressedTexImage3DOES,
13154                                               targetPacked, level, internalformat, width, height,
13155                                               depth, border, imageSize, data)));
13156         if (isCallValid)
13157         {
13158             context->compressedTexImage3D(targetPacked, level, internalformat, width, height, depth,
13159                                           border, imageSize, data);
13160         }
13161         ANGLE_CAPTURE_GL(CompressedTexImage3DOES, isCallValid, context, targetPacked, level,
13162                          internalformat, width, height, depth, border, imageSize, data);
13163     }
13164     else
13165     {
13166         GenerateContextLostErrorOnCurrentGlobalContext();
13167     }
13168     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
13169 }
13170 
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)13171 void GL_APIENTRY GL_CompressedTexSubImage3DOES(GLenum target,
13172                                                GLint level,
13173                                                GLint xoffset,
13174                                                GLint yoffset,
13175                                                GLint zoffset,
13176                                                GLsizei width,
13177                                                GLsizei height,
13178                                                GLsizei depth,
13179                                                GLenum format,
13180                                                GLsizei imageSize,
13181                                                const void *data)
13182 {
13183     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13184     Context *context = GetValidGlobalContext();
13185     EVENT(context, GLCompressedTexSubImage3DOES,
13186           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width "
13187           "= %d, height = %d, depth = %d, format = %s, imageSize = %d, data = 0x%016" PRIxPTR "",
13188           CID(context), GLenumToString(GLESEnum::TextureTarget, target), level, xoffset, yoffset,
13189           zoffset, width, height, depth, GLenumToString(GLESEnum::InternalFormat, format),
13190           imageSize, (uintptr_t)data);
13191 
13192     if (context)
13193     {
13194         TextureTarget targetPacked = PackParam<TextureTarget>(target);
13195         SCOPED_SHARE_CONTEXT_LOCK(context);
13196         bool isCallValid =
13197             (context->skipValidation() ||
13198              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
13199                                                 context->getMutableErrorSetForValidation(),
13200                                                 angle::EntryPoint::GLCompressedTexSubImage3DOES) &&
13201               ValidateCompressedTexSubImage3DOES(
13202                   context, angle::EntryPoint::GLCompressedTexSubImage3DOES, targetPacked, level,
13203                   xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)));
13204         if (isCallValid)
13205         {
13206             context->compressedTexSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, width,
13207                                              height, depth, format, imageSize, data);
13208         }
13209         ANGLE_CAPTURE_GL(CompressedTexSubImage3DOES, isCallValid, context, targetPacked, level,
13210                          xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
13211     }
13212     else
13213     {
13214         GenerateContextLostErrorOnCurrentGlobalContext();
13215     }
13216     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
13217 }
13218 
GL_CopyTexSubImage3DOES(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)13219 void GL_APIENTRY GL_CopyTexSubImage3DOES(GLenum target,
13220                                          GLint level,
13221                                          GLint xoffset,
13222                                          GLint yoffset,
13223                                          GLint zoffset,
13224                                          GLint x,
13225                                          GLint y,
13226                                          GLsizei width,
13227                                          GLsizei height)
13228 {
13229     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13230     Context *context = GetValidGlobalContext();
13231     EVENT(context, GLCopyTexSubImage3DOES,
13232           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, x = "
13233           "%d, y = %d, width = %d, height = %d",
13234           CID(context), GLenumToString(GLESEnum::AllEnums, target), level, xoffset, yoffset,
13235           zoffset, x, y, width, height);
13236 
13237     if (context)
13238     {
13239         TextureTarget targetPacked = PackParam<TextureTarget>(target);
13240         SCOPED_SHARE_CONTEXT_LOCK(context);
13241         bool isCallValid =
13242             (context->skipValidation() ||
13243              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
13244                                                 context->getMutableErrorSetForValidation(),
13245                                                 angle::EntryPoint::GLCopyTexSubImage3DOES) &&
13246               ValidateCopyTexSubImage3DOES(context, angle::EntryPoint::GLCopyTexSubImage3DOES,
13247                                            targetPacked, level, xoffset, yoffset, zoffset, x, y,
13248                                            width, height)));
13249         if (isCallValid)
13250         {
13251             context->copyTexSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, x, y, width,
13252                                        height);
13253         }
13254         ANGLE_CAPTURE_GL(CopyTexSubImage3DOES, isCallValid, context, targetPacked, level, xoffset,
13255                          yoffset, zoffset, x, y, width, height);
13256     }
13257     else
13258     {
13259         GenerateContextLostErrorOnCurrentGlobalContext();
13260     }
13261     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13262 }
13263 
GL_FramebufferTexture3DOES(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level,GLint zoffset)13264 void GL_APIENTRY GL_FramebufferTexture3DOES(GLenum target,
13265                                             GLenum attachment,
13266                                             GLenum textarget,
13267                                             GLuint texture,
13268                                             GLint level,
13269                                             GLint zoffset)
13270 {
13271     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13272     Context *context = GetValidGlobalContext();
13273     EVENT(context, GLFramebufferTexture3DOES,
13274           "context = %d, target = %s, attachment = %s, textarget = %s, texture = %u, level = %d, "
13275           "zoffset = %d",
13276           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target),
13277           GLenumToString(GLESEnum::FramebufferAttachment, attachment),
13278           GLenumToString(GLESEnum::TextureTarget, textarget), texture, level, zoffset);
13279 
13280     if (context)
13281     {
13282         TextureTarget textargetPacked = PackParam<TextureTarget>(textarget);
13283         TextureID texturePacked       = PackParam<TextureID>(texture);
13284         SCOPED_SHARE_CONTEXT_LOCK(context);
13285         bool isCallValid = (context->skipValidation() ||
13286                             ValidateFramebufferTexture3DOES(
13287                                 context, angle::EntryPoint::GLFramebufferTexture3DOES, target,
13288                                 attachment, textargetPacked, texturePacked, level, zoffset));
13289         if (isCallValid)
13290         {
13291             context->framebufferTexture3D(target, attachment, textargetPacked, texturePacked, level,
13292                                           zoffset);
13293         }
13294         ANGLE_CAPTURE_GL(FramebufferTexture3DOES, isCallValid, context, target, attachment,
13295                          textargetPacked, texturePacked, level, zoffset);
13296     }
13297     else
13298     {
13299         GenerateContextLostErrorOnCurrentGlobalContext();
13300     }
13301     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13302 }
13303 
GL_TexImage3DOES(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const void * pixels)13304 void GL_APIENTRY GL_TexImage3DOES(GLenum target,
13305                                   GLint level,
13306                                   GLenum internalformat,
13307                                   GLsizei width,
13308                                   GLsizei height,
13309                                   GLsizei depth,
13310                                   GLint border,
13311                                   GLenum format,
13312                                   GLenum type,
13313                                   const void *pixels)
13314 {
13315     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13316     Context *context = GetValidGlobalContext();
13317     EVENT(context, GLTexImage3DOES,
13318           "context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "
13319           "depth = %d, border = %d, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",
13320           CID(context), GLenumToString(GLESEnum::TextureTarget, target), level,
13321           GLenumToString(GLESEnum::InternalFormat, internalformat), width, height, depth, border,
13322           GLenumToString(GLESEnum::PixelFormat, format), GLenumToString(GLESEnum::PixelType, type),
13323           (uintptr_t)pixels);
13324 
13325     if (context)
13326     {
13327         TextureTarget targetPacked = PackParam<TextureTarget>(target);
13328         SCOPED_SHARE_CONTEXT_LOCK(context);
13329         bool isCallValid =
13330             (context->skipValidation() ||
13331              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
13332                                                 context->getMutableErrorSetForValidation(),
13333                                                 angle::EntryPoint::GLTexImage3DOES) &&
13334               ValidateTexImage3DOES(context, angle::EntryPoint::GLTexImage3DOES, targetPacked,
13335                                     level, internalformat, width, height, depth, border, format,
13336                                     type, pixels)));
13337         if (isCallValid)
13338         {
13339             context->texImage3D(targetPacked, level, internalformat, width, height, depth, border,
13340                                 format, type, pixels);
13341         }
13342         ANGLE_CAPTURE_GL(TexImage3DOES, isCallValid, context, targetPacked, level, internalformat,
13343                          width, height, depth, border, format, type, pixels);
13344     }
13345     else
13346     {
13347         GenerateContextLostErrorOnCurrentGlobalContext();
13348     }
13349     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
13350 }
13351 
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)13352 void GL_APIENTRY GL_TexSubImage3DOES(GLenum target,
13353                                      GLint level,
13354                                      GLint xoffset,
13355                                      GLint yoffset,
13356                                      GLint zoffset,
13357                                      GLsizei width,
13358                                      GLsizei height,
13359                                      GLsizei depth,
13360                                      GLenum format,
13361                                      GLenum type,
13362                                      const void *pixels)
13363 {
13364     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13365     Context *context = GetValidGlobalContext();
13366     EVENT(context, GLTexSubImage3DOES,
13367           "context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width "
13368           "= %d, height = %d, depth = %d, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",
13369           CID(context), GLenumToString(GLESEnum::TextureTarget, target), level, xoffset, yoffset,
13370           zoffset, width, height, depth, GLenumToString(GLESEnum::PixelFormat, format),
13371           GLenumToString(GLESEnum::PixelType, type), (uintptr_t)pixels);
13372 
13373     if (context)
13374     {
13375         TextureTarget targetPacked = PackParam<TextureTarget>(target);
13376         SCOPED_SHARE_CONTEXT_LOCK(context);
13377         bool isCallValid =
13378             (context->skipValidation() ||
13379              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
13380                                                 context->getMutableErrorSetForValidation(),
13381                                                 angle::EntryPoint::GLTexSubImage3DOES) &&
13382               ValidateTexSubImage3DOES(context, angle::EntryPoint::GLTexSubImage3DOES, targetPacked,
13383                                        level, xoffset, yoffset, zoffset, width, height, depth,
13384                                        format, type, pixels)));
13385         if (isCallValid)
13386         {
13387             context->texSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, width, height,
13388                                    depth, format, type, pixels);
13389         }
13390         ANGLE_CAPTURE_GL(TexSubImage3DOES, isCallValid, context, targetPacked, level, xoffset,
13391                          yoffset, zoffset, width, height, depth, format, type, pixels);
13392     }
13393     else
13394     {
13395         GenerateContextLostErrorOnCurrentGlobalContext();
13396     }
13397     egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);
13398 }
13399 
13400 // GL_OES_texture_border_clamp
GL_GetSamplerParameterIivOES(GLuint sampler,GLenum pname,GLint * params)13401 void GL_APIENTRY GL_GetSamplerParameterIivOES(GLuint sampler, GLenum pname, GLint *params)
13402 {
13403     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13404     Context *context = GetValidGlobalContext();
13405     EVENT(context, GLGetSamplerParameterIivOES,
13406           "context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13407           sampler, GLenumToString(GLESEnum::SamplerParameterI, pname), (uintptr_t)params);
13408 
13409     if (context)
13410     {
13411         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
13412         SCOPED_SHARE_CONTEXT_LOCK(context);
13413         bool isCallValid = (context->skipValidation() ||
13414                             ValidateGetSamplerParameterIivOES(
13415                                 context, angle::EntryPoint::GLGetSamplerParameterIivOES,
13416                                 samplerPacked, pname, params));
13417         if (isCallValid)
13418         {
13419             context->getSamplerParameterIiv(samplerPacked, pname, params);
13420         }
13421         ANGLE_CAPTURE_GL(GetSamplerParameterIivOES, isCallValid, context, samplerPacked, pname,
13422                          params);
13423     }
13424     else
13425     {
13426         GenerateContextLostErrorOnCurrentGlobalContext();
13427     }
13428     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13429 }
13430 
GL_GetSamplerParameterIuivOES(GLuint sampler,GLenum pname,GLuint * params)13431 void GL_APIENTRY GL_GetSamplerParameterIuivOES(GLuint sampler, GLenum pname, GLuint *params)
13432 {
13433     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13434     Context *context = GetValidGlobalContext();
13435     EVENT(context, GLGetSamplerParameterIuivOES,
13436           "context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13437           sampler, GLenumToString(GLESEnum::SamplerParameterI, pname), (uintptr_t)params);
13438 
13439     if (context)
13440     {
13441         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
13442         SCOPED_SHARE_CONTEXT_LOCK(context);
13443         bool isCallValid = (context->skipValidation() ||
13444                             ValidateGetSamplerParameterIuivOES(
13445                                 context, angle::EntryPoint::GLGetSamplerParameterIuivOES,
13446                                 samplerPacked, pname, params));
13447         if (isCallValid)
13448         {
13449             context->getSamplerParameterIuiv(samplerPacked, pname, params);
13450         }
13451         ANGLE_CAPTURE_GL(GetSamplerParameterIuivOES, isCallValid, context, samplerPacked, pname,
13452                          params);
13453     }
13454     else
13455     {
13456         GenerateContextLostErrorOnCurrentGlobalContext();
13457     }
13458     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13459 }
13460 
GL_GetTexParameterIivOES(GLenum target,GLenum pname,GLint * params)13461 void GL_APIENTRY GL_GetTexParameterIivOES(GLenum target, GLenum pname, GLint *params)
13462 {
13463     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13464     Context *context = GetValidGlobalContext();
13465     EVENT(context, GLGetTexParameterIivOES,
13466           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13467           GLenumToString(GLESEnum::TextureTarget, target),
13468           GLenumToString(GLESEnum::GetTextureParameter, pname), (uintptr_t)params);
13469 
13470     if (context)
13471     {
13472         TextureType targetPacked = PackParam<TextureType>(target);
13473         SCOPED_SHARE_CONTEXT_LOCK(context);
13474         bool isCallValid =
13475             (context->skipValidation() ||
13476              ValidateGetTexParameterIivOES(context, angle::EntryPoint::GLGetTexParameterIivOES,
13477                                            targetPacked, pname, params));
13478         if (isCallValid)
13479         {
13480             context->getTexParameterIiv(targetPacked, pname, params);
13481         }
13482         ANGLE_CAPTURE_GL(GetTexParameterIivOES, isCallValid, context, targetPacked, pname, params);
13483     }
13484     else
13485     {
13486         GenerateContextLostErrorOnCurrentGlobalContext();
13487     }
13488     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13489 }
13490 
GL_GetTexParameterIuivOES(GLenum target,GLenum pname,GLuint * params)13491 void GL_APIENTRY GL_GetTexParameterIuivOES(GLenum target, GLenum pname, GLuint *params)
13492 {
13493     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13494     Context *context = GetValidGlobalContext();
13495     EVENT(context, GLGetTexParameterIuivOES,
13496           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13497           GLenumToString(GLESEnum::TextureTarget, target),
13498           GLenumToString(GLESEnum::GetTextureParameter, pname), (uintptr_t)params);
13499 
13500     if (context)
13501     {
13502         TextureType targetPacked = PackParam<TextureType>(target);
13503         SCOPED_SHARE_CONTEXT_LOCK(context);
13504         bool isCallValid =
13505             (context->skipValidation() ||
13506              ValidateGetTexParameterIuivOES(context, angle::EntryPoint::GLGetTexParameterIuivOES,
13507                                             targetPacked, pname, params));
13508         if (isCallValid)
13509         {
13510             context->getTexParameterIuiv(targetPacked, pname, params);
13511         }
13512         ANGLE_CAPTURE_GL(GetTexParameterIuivOES, isCallValid, context, targetPacked, pname, params);
13513     }
13514     else
13515     {
13516         GenerateContextLostErrorOnCurrentGlobalContext();
13517     }
13518     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13519 }
13520 
GL_SamplerParameterIivOES(GLuint sampler,GLenum pname,const GLint * param)13521 void GL_APIENTRY GL_SamplerParameterIivOES(GLuint sampler, GLenum pname, const GLint *param)
13522 {
13523     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13524     Context *context = GetValidGlobalContext();
13525     EVENT(context, GLSamplerParameterIivOES,
13526           "context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),
13527           sampler, GLenumToString(GLESEnum::SamplerParameterI, pname), (uintptr_t)param);
13528 
13529     if (context)
13530     {
13531         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
13532         SCOPED_SHARE_CONTEXT_LOCK(context);
13533         bool isCallValid =
13534             (context->skipValidation() ||
13535              ValidateSamplerParameterIivOES(context, angle::EntryPoint::GLSamplerParameterIivOES,
13536                                             samplerPacked, pname, param));
13537         if (isCallValid)
13538         {
13539             context->samplerParameterIiv(samplerPacked, pname, param);
13540         }
13541         ANGLE_CAPTURE_GL(SamplerParameterIivOES, isCallValid, context, samplerPacked, pname, param);
13542     }
13543     else
13544     {
13545         GenerateContextLostErrorOnCurrentGlobalContext();
13546     }
13547     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13548 }
13549 
GL_SamplerParameterIuivOES(GLuint sampler,GLenum pname,const GLuint * param)13550 void GL_APIENTRY GL_SamplerParameterIuivOES(GLuint sampler, GLenum pname, const GLuint *param)
13551 {
13552     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13553     Context *context = GetValidGlobalContext();
13554     EVENT(context, GLSamplerParameterIuivOES,
13555           "context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),
13556           sampler, GLenumToString(GLESEnum::SamplerParameterI, pname), (uintptr_t)param);
13557 
13558     if (context)
13559     {
13560         SamplerID samplerPacked = PackParam<SamplerID>(sampler);
13561         SCOPED_SHARE_CONTEXT_LOCK(context);
13562         bool isCallValid =
13563             (context->skipValidation() ||
13564              ValidateSamplerParameterIuivOES(context, angle::EntryPoint::GLSamplerParameterIuivOES,
13565                                              samplerPacked, pname, param));
13566         if (isCallValid)
13567         {
13568             context->samplerParameterIuiv(samplerPacked, pname, param);
13569         }
13570         ANGLE_CAPTURE_GL(SamplerParameterIuivOES, isCallValid, context, samplerPacked, pname,
13571                          param);
13572     }
13573     else
13574     {
13575         GenerateContextLostErrorOnCurrentGlobalContext();
13576     }
13577     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13578 }
13579 
GL_TexParameterIivOES(GLenum target,GLenum pname,const GLint * params)13580 void GL_APIENTRY GL_TexParameterIivOES(GLenum target, GLenum pname, const GLint *params)
13581 {
13582     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13583     Context *context = GetValidGlobalContext();
13584     EVENT(context, GLTexParameterIivOES,
13585           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13586           GLenumToString(GLESEnum::TextureTarget, target),
13587           GLenumToString(GLESEnum::TextureParameterName, pname), (uintptr_t)params);
13588 
13589     if (context)
13590     {
13591         TextureType targetPacked = PackParam<TextureType>(target);
13592         SCOPED_SHARE_CONTEXT_LOCK(context);
13593         bool isCallValid =
13594             (context->skipValidation() ||
13595              ValidateTexParameterIivOES(context, angle::EntryPoint::GLTexParameterIivOES,
13596                                         targetPacked, pname, params));
13597         if (isCallValid)
13598         {
13599             context->texParameterIiv(targetPacked, pname, params);
13600         }
13601         ANGLE_CAPTURE_GL(TexParameterIivOES, isCallValid, context, targetPacked, pname, params);
13602     }
13603     else
13604     {
13605         GenerateContextLostErrorOnCurrentGlobalContext();
13606     }
13607     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13608 }
13609 
GL_TexParameterIuivOES(GLenum target,GLenum pname,const GLuint * params)13610 void GL_APIENTRY GL_TexParameterIuivOES(GLenum target, GLenum pname, const GLuint *params)
13611 {
13612     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13613     Context *context = GetValidGlobalContext();
13614     EVENT(context, GLTexParameterIuivOES,
13615           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13616           GLenumToString(GLESEnum::TextureTarget, target),
13617           GLenumToString(GLESEnum::TextureParameterName, pname), (uintptr_t)params);
13618 
13619     if (context)
13620     {
13621         TextureType targetPacked = PackParam<TextureType>(target);
13622         SCOPED_SHARE_CONTEXT_LOCK(context);
13623         bool isCallValid =
13624             (context->skipValidation() ||
13625              ValidateTexParameterIuivOES(context, angle::EntryPoint::GLTexParameterIuivOES,
13626                                          targetPacked, pname, params));
13627         if (isCallValid)
13628         {
13629             context->texParameterIuiv(targetPacked, pname, params);
13630         }
13631         ANGLE_CAPTURE_GL(TexParameterIuivOES, isCallValid, context, targetPacked, pname, params);
13632     }
13633     else
13634     {
13635         GenerateContextLostErrorOnCurrentGlobalContext();
13636     }
13637     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13638 }
13639 
13640 // GL_OES_texture_buffer
GL_TexBufferOES(GLenum target,GLenum internalformat,GLuint buffer)13641 void GL_APIENTRY GL_TexBufferOES(GLenum target, GLenum internalformat, GLuint buffer)
13642 {
13643     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13644     Context *context = GetValidGlobalContext();
13645     EVENT(context, GLTexBufferOES, "context = %d, target = %s, internalformat = %s, buffer = %u",
13646           CID(context), GLenumToString(GLESEnum::TextureTarget, target),
13647           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), buffer);
13648 
13649     if (context)
13650     {
13651         TextureType targetPacked = PackParam<TextureType>(target);
13652         BufferID bufferPacked    = PackParam<BufferID>(buffer);
13653         SCOPED_SHARE_CONTEXT_LOCK(context);
13654         bool isCallValid =
13655             (context->skipValidation() ||
13656              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
13657                                                 context->getMutableErrorSetForValidation(),
13658                                                 angle::EntryPoint::GLTexBufferOES) &&
13659               ValidateTexBufferOES(context, angle::EntryPoint::GLTexBufferOES, targetPacked,
13660                                    internalformat, bufferPacked)));
13661         if (isCallValid)
13662         {
13663             context->texBuffer(targetPacked, internalformat, bufferPacked);
13664         }
13665         ANGLE_CAPTURE_GL(TexBufferOES, isCallValid, context, targetPacked, internalformat,
13666                          bufferPacked);
13667     }
13668     else
13669     {
13670         GenerateContextLostErrorOnCurrentGlobalContext();
13671     }
13672     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13673 }
13674 
GL_TexBufferRangeOES(GLenum target,GLenum internalformat,GLuint buffer,GLintptr offset,GLsizeiptr size)13675 void GL_APIENTRY GL_TexBufferRangeOES(GLenum target,
13676                                       GLenum internalformat,
13677                                       GLuint buffer,
13678                                       GLintptr offset,
13679                                       GLsizeiptr size)
13680 {
13681     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13682     Context *context = GetValidGlobalContext();
13683     EVENT(context, GLTexBufferRangeOES,
13684           "context = %d, target = %s, internalformat = %s, buffer = %u, offset = %llu, size = %llu",
13685           CID(context), GLenumToString(GLESEnum::TextureTarget, target),
13686           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), buffer,
13687           static_cast<unsigned long long>(offset), static_cast<unsigned long long>(size));
13688 
13689     if (context)
13690     {
13691         TextureType targetPacked = PackParam<TextureType>(target);
13692         BufferID bufferPacked    = PackParam<BufferID>(buffer);
13693         SCOPED_SHARE_CONTEXT_LOCK(context);
13694         bool isCallValid =
13695             (context->skipValidation() ||
13696              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
13697                                                 context->getMutableErrorSetForValidation(),
13698                                                 angle::EntryPoint::GLTexBufferRangeOES) &&
13699               ValidateTexBufferRangeOES(context, angle::EntryPoint::GLTexBufferRangeOES,
13700                                         targetPacked, internalformat, bufferPacked, offset, size)));
13701         if (isCallValid)
13702         {
13703             context->texBufferRange(targetPacked, internalformat, bufferPacked, offset, size);
13704         }
13705         ANGLE_CAPTURE_GL(TexBufferRangeOES, isCallValid, context, targetPacked, internalformat,
13706                          bufferPacked, offset, size);
13707     }
13708     else
13709     {
13710         GenerateContextLostErrorOnCurrentGlobalContext();
13711     }
13712     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13713 }
13714 
13715 // GL_OES_texture_compression_astc
13716 
13717 // GL_OES_texture_cube_map
GL_GetTexGenfvOES(GLenum coord,GLenum pname,GLfloat * params)13718 void GL_APIENTRY GL_GetTexGenfvOES(GLenum coord, GLenum pname, GLfloat *params)
13719 {
13720     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13721     Context *context = GetValidGlobalContext();
13722     EVENT(context, GLGetTexGenfvOES,
13723           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13724           GLenumToString(GLESEnum::TextureCoordName, coord),
13725           GLenumToString(GLESEnum::TextureGenParameter, pname), (uintptr_t)params);
13726 
13727     if (context)
13728     {
13729         SCOPED_SHARE_CONTEXT_LOCK(context);
13730         bool isCallValid = (context->skipValidation() ||
13731                             ValidateGetTexGenfvOES(context, angle::EntryPoint::GLGetTexGenfvOES,
13732                                                    coord, pname, params));
13733         if (isCallValid)
13734         {
13735             context->getTexGenfv(coord, pname, params);
13736         }
13737         ANGLE_CAPTURE_GL(GetTexGenfvOES, isCallValid, context, coord, pname, params);
13738     }
13739     else
13740     {
13741         GenerateContextLostErrorOnCurrentGlobalContext();
13742     }
13743     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13744 }
13745 
GL_GetTexGenivOES(GLenum coord,GLenum pname,GLint * params)13746 void GL_APIENTRY GL_GetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
13747 {
13748     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13749     Context *context = GetValidGlobalContext();
13750     EVENT(context, GLGetTexGenivOES,
13751           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13752           GLenumToString(GLESEnum::TextureCoordName, coord),
13753           GLenumToString(GLESEnum::TextureGenParameter, pname), (uintptr_t)params);
13754 
13755     if (context)
13756     {
13757         SCOPED_SHARE_CONTEXT_LOCK(context);
13758         bool isCallValid = (context->skipValidation() ||
13759                             ValidateGetTexGenivOES(context, angle::EntryPoint::GLGetTexGenivOES,
13760                                                    coord, pname, params));
13761         if (isCallValid)
13762         {
13763             context->getTexGeniv(coord, pname, params);
13764         }
13765         ANGLE_CAPTURE_GL(GetTexGenivOES, isCallValid, context, coord, pname, params);
13766     }
13767     else
13768     {
13769         GenerateContextLostErrorOnCurrentGlobalContext();
13770     }
13771     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13772 }
13773 
GL_GetTexGenxvOES(GLenum coord,GLenum pname,GLfixed * params)13774 void GL_APIENTRY GL_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
13775 {
13776     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13777     Context *context = GetValidGlobalContext();
13778     EVENT(context, GLGetTexGenxvOES,
13779           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13780           GLenumToString(GLESEnum::TextureCoordName, coord),
13781           GLenumToString(GLESEnum::TextureGenParameter, pname), (uintptr_t)params);
13782 
13783     if (context)
13784     {
13785         SCOPED_SHARE_CONTEXT_LOCK(context);
13786         bool isCallValid = (context->skipValidation() ||
13787                             ValidateGetTexGenxvOES(context, angle::EntryPoint::GLGetTexGenxvOES,
13788                                                    coord, pname, params));
13789         if (isCallValid)
13790         {
13791             context->getTexGenxv(coord, pname, params);
13792         }
13793         ANGLE_CAPTURE_GL(GetTexGenxvOES, isCallValid, context, coord, pname, params);
13794     }
13795     else
13796     {
13797         GenerateContextLostErrorOnCurrentGlobalContext();
13798     }
13799     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13800 }
13801 
GL_TexGenfOES(GLenum coord,GLenum pname,GLfloat param)13802 void GL_APIENTRY GL_TexGenfOES(GLenum coord, GLenum pname, GLfloat param)
13803 {
13804     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13805     Context *context = GetValidGlobalContext();
13806     EVENT(context, GLTexGenfOES, "context = %d, coord = %s, pname = %s, param = %f", CID(context),
13807           GLenumToString(GLESEnum::TextureCoordName, coord),
13808           GLenumToString(GLESEnum::TextureGenParameter, pname), param);
13809 
13810     if (context)
13811     {
13812         SCOPED_SHARE_CONTEXT_LOCK(context);
13813         bool isCallValid =
13814             (context->skipValidation() ||
13815              ValidateTexGenfOES(context, angle::EntryPoint::GLTexGenfOES, coord, pname, param));
13816         if (isCallValid)
13817         {
13818             context->texGenf(coord, pname, param);
13819         }
13820         ANGLE_CAPTURE_GL(TexGenfOES, isCallValid, context, coord, pname, param);
13821     }
13822     else
13823     {
13824         GenerateContextLostErrorOnCurrentGlobalContext();
13825     }
13826     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13827 }
13828 
GL_TexGenfvOES(GLenum coord,GLenum pname,const GLfloat * params)13829 void GL_APIENTRY GL_TexGenfvOES(GLenum coord, GLenum pname, const GLfloat *params)
13830 {
13831     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13832     Context *context = GetValidGlobalContext();
13833     EVENT(context, GLTexGenfvOES,
13834           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13835           GLenumToString(GLESEnum::TextureCoordName, coord),
13836           GLenumToString(GLESEnum::TextureGenParameter, pname), (uintptr_t)params);
13837 
13838     if (context)
13839     {
13840         SCOPED_SHARE_CONTEXT_LOCK(context);
13841         bool isCallValid =
13842             (context->skipValidation() ||
13843              ValidateTexGenfvOES(context, angle::EntryPoint::GLTexGenfvOES, coord, pname, params));
13844         if (isCallValid)
13845         {
13846             context->texGenfv(coord, pname, params);
13847         }
13848         ANGLE_CAPTURE_GL(TexGenfvOES, isCallValid, context, coord, pname, params);
13849     }
13850     else
13851     {
13852         GenerateContextLostErrorOnCurrentGlobalContext();
13853     }
13854     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13855 }
13856 
GL_TexGeniOES(GLenum coord,GLenum pname,GLint param)13857 void GL_APIENTRY GL_TexGeniOES(GLenum coord, GLenum pname, GLint param)
13858 {
13859     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13860     Context *context = GetValidGlobalContext();
13861     EVENT(context, GLTexGeniOES, "context = %d, coord = %s, pname = %s, param = %d", CID(context),
13862           GLenumToString(GLESEnum::TextureCoordName, coord),
13863           GLenumToString(GLESEnum::TextureGenParameter, pname), param);
13864 
13865     if (context)
13866     {
13867         SCOPED_SHARE_CONTEXT_LOCK(context);
13868         bool isCallValid =
13869             (context->skipValidation() ||
13870              ValidateTexGeniOES(context, angle::EntryPoint::GLTexGeniOES, coord, pname, param));
13871         if (isCallValid)
13872         {
13873             context->texGeni(coord, pname, param);
13874         }
13875         ANGLE_CAPTURE_GL(TexGeniOES, isCallValid, context, coord, pname, param);
13876     }
13877     else
13878     {
13879         GenerateContextLostErrorOnCurrentGlobalContext();
13880     }
13881     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13882 }
13883 
GL_TexGenivOES(GLenum coord,GLenum pname,const GLint * params)13884 void GL_APIENTRY GL_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)
13885 {
13886     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13887     Context *context = GetValidGlobalContext();
13888     EVENT(context, GLTexGenivOES,
13889           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13890           GLenumToString(GLESEnum::TextureCoordName, coord),
13891           GLenumToString(GLESEnum::TextureGenParameter, pname), (uintptr_t)params);
13892 
13893     if (context)
13894     {
13895         SCOPED_SHARE_CONTEXT_LOCK(context);
13896         bool isCallValid =
13897             (context->skipValidation() ||
13898              ValidateTexGenivOES(context, angle::EntryPoint::GLTexGenivOES, coord, pname, params));
13899         if (isCallValid)
13900         {
13901             context->texGeniv(coord, pname, params);
13902         }
13903         ANGLE_CAPTURE_GL(TexGenivOES, isCallValid, context, coord, pname, params);
13904     }
13905     else
13906     {
13907         GenerateContextLostErrorOnCurrentGlobalContext();
13908     }
13909     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13910 }
13911 
GL_TexGenxOES(GLenum coord,GLenum pname,GLfixed param)13912 void GL_APIENTRY GL_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)
13913 {
13914     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13915     Context *context = GetValidGlobalContext();
13916     EVENT(context, GLTexGenxOES, "context = %d, coord = %s, pname = %s, param = 0x%X", CID(context),
13917           GLenumToString(GLESEnum::TextureCoordName, coord),
13918           GLenumToString(GLESEnum::TextureGenParameter, pname), param);
13919 
13920     if (context)
13921     {
13922         SCOPED_SHARE_CONTEXT_LOCK(context);
13923         bool isCallValid =
13924             (context->skipValidation() ||
13925              ValidateTexGenxOES(context, angle::EntryPoint::GLTexGenxOES, coord, pname, param));
13926         if (isCallValid)
13927         {
13928             context->texGenx(coord, pname, param);
13929         }
13930         ANGLE_CAPTURE_GL(TexGenxOES, isCallValid, context, coord, pname, param);
13931     }
13932     else
13933     {
13934         GenerateContextLostErrorOnCurrentGlobalContext();
13935     }
13936     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13937 }
13938 
GL_TexGenxvOES(GLenum coord,GLenum pname,const GLfixed * params)13939 void GL_APIENTRY GL_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
13940 {
13941     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13942     Context *context = GetValidGlobalContext();
13943     EVENT(context, GLTexGenxvOES,
13944           "context = %d, coord = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
13945           GLenumToString(GLESEnum::TextureCoordName, coord),
13946           GLenumToString(GLESEnum::TextureGenParameter, pname), (uintptr_t)params);
13947 
13948     if (context)
13949     {
13950         SCOPED_SHARE_CONTEXT_LOCK(context);
13951         bool isCallValid =
13952             (context->skipValidation() ||
13953              ValidateTexGenxvOES(context, angle::EntryPoint::GLTexGenxvOES, coord, pname, params));
13954         if (isCallValid)
13955         {
13956             context->texGenxv(coord, pname, params);
13957         }
13958         ANGLE_CAPTURE_GL(TexGenxvOES, isCallValid, context, coord, pname, params);
13959     }
13960     else
13961     {
13962         GenerateContextLostErrorOnCurrentGlobalContext();
13963     }
13964     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13965 }
13966 
13967 // GL_OES_texture_cube_map_array
13968 
13969 // GL_OES_texture_float
13970 
13971 // GL_OES_texture_float_linear
13972 
13973 // GL_OES_texture_half_float
13974 
13975 // GL_OES_texture_half_float_linear
13976 
13977 // GL_OES_texture_mirrored_repeat
13978 
13979 // GL_OES_texture_npot
13980 
13981 // GL_OES_texture_stencil8
13982 
13983 // GL_OES_texture_storage_multisample_2d_array
GL_TexStorage3DMultisampleOES(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLboolean fixedsamplelocations)13984 void GL_APIENTRY GL_TexStorage3DMultisampleOES(GLenum target,
13985                                                GLsizei samples,
13986                                                GLenum internalformat,
13987                                                GLsizei width,
13988                                                GLsizei height,
13989                                                GLsizei depth,
13990                                                GLboolean fixedsamplelocations)
13991 {
13992     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
13993     Context *context = GetValidGlobalContext();
13994     EVENT(context, GLTexStorage3DMultisampleOES,
13995           "context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d, "
13996           "depth = %d, fixedsamplelocations = %s",
13997           CID(context), GLenumToString(GLESEnum::TextureTarget, target), samples,
13998           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), width, height, depth,
13999           GLbooleanToString(fixedsamplelocations));
14000 
14001     if (context)
14002     {
14003         TextureType targetPacked = PackParam<TextureType>(target);
14004         SCOPED_SHARE_CONTEXT_LOCK(context);
14005         bool isCallValid =
14006             (context->skipValidation() ||
14007              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
14008                                                 context->getMutableErrorSetForValidation(),
14009                                                 angle::EntryPoint::GLTexStorage3DMultisampleOES) &&
14010               ValidateTexStorage3DMultisampleOES(
14011                   context, angle::EntryPoint::GLTexStorage3DMultisampleOES, targetPacked, samples,
14012                   internalformat, width, height, depth, fixedsamplelocations)));
14013         if (isCallValid)
14014         {
14015             context->texStorage3DMultisample(targetPacked, samples, internalformat, width, height,
14016                                              depth, fixedsamplelocations);
14017         }
14018         ANGLE_CAPTURE_GL(TexStorage3DMultisampleOES, isCallValid, context, targetPacked, samples,
14019                          internalformat, width, height, depth, fixedsamplelocations);
14020     }
14021     else
14022     {
14023         GenerateContextLostErrorOnCurrentGlobalContext();
14024     }
14025     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14026 }
14027 
14028 // GL_OES_vertex_array_object
GL_BindVertexArrayOES(GLuint array)14029 void GL_APIENTRY GL_BindVertexArrayOES(GLuint array)
14030 {
14031     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14032     Context *context = GetValidGlobalContext();
14033     EVENT(context, GLBindVertexArrayOES, "context = %d, array = %u", CID(context), array);
14034 
14035     if (context)
14036     {
14037         VertexArrayID arrayPacked = PackParam<VertexArrayID>(array);
14038         SCOPED_SHARE_CONTEXT_LOCK(context);
14039         bool isCallValid =
14040             (context->skipValidation() ||
14041              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
14042                                                 context->getMutableErrorSetForValidation(),
14043                                                 angle::EntryPoint::GLBindVertexArrayOES) &&
14044               ValidateBindVertexArrayOES(context, angle::EntryPoint::GLBindVertexArrayOES,
14045                                          arrayPacked)));
14046         if (isCallValid)
14047         {
14048             context->bindVertexArray(arrayPacked);
14049         }
14050         ANGLE_CAPTURE_GL(BindVertexArrayOES, isCallValid, context, arrayPacked);
14051     }
14052     else
14053     {
14054         GenerateContextLostErrorOnCurrentGlobalContext();
14055     }
14056     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14057 }
14058 
GL_DeleteVertexArraysOES(GLsizei n,const GLuint * arrays)14059 void GL_APIENTRY GL_DeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
14060 {
14061     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14062     Context *context = GetValidGlobalContext();
14063     EVENT(context, GLDeleteVertexArraysOES, "context = %d, n = %d, arrays = 0x%016" PRIxPTR "",
14064           CID(context), n, (uintptr_t)arrays);
14065 
14066     if (context)
14067     {
14068         const VertexArrayID *arraysPacked = PackParam<const VertexArrayID *>(arrays);
14069         SCOPED_SHARE_CONTEXT_LOCK(context);
14070         bool isCallValid =
14071             (context->skipValidation() ||
14072              ValidateDeleteVertexArraysOES(context, angle::EntryPoint::GLDeleteVertexArraysOES, n,
14073                                            arraysPacked));
14074         if (isCallValid)
14075         {
14076             context->deleteVertexArrays(n, arraysPacked);
14077         }
14078         ANGLE_CAPTURE_GL(DeleteVertexArraysOES, isCallValid, context, n, arraysPacked);
14079     }
14080     else
14081     {
14082         GenerateContextLostErrorOnCurrentGlobalContext();
14083     }
14084     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14085 }
14086 
GL_GenVertexArraysOES(GLsizei n,GLuint * arrays)14087 void GL_APIENTRY GL_GenVertexArraysOES(GLsizei n, GLuint *arrays)
14088 {
14089     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14090     Context *context = GetValidGlobalContext();
14091     EVENT(context, GLGenVertexArraysOES, "context = %d, n = %d, arrays = 0x%016" PRIxPTR "",
14092           CID(context), n, (uintptr_t)arrays);
14093 
14094     if (context)
14095     {
14096         VertexArrayID *arraysPacked = PackParam<VertexArrayID *>(arrays);
14097         SCOPED_SHARE_CONTEXT_LOCK(context);
14098         bool isCallValid = (context->skipValidation() ||
14099                             ValidateGenVertexArraysOES(
14100                                 context, angle::EntryPoint::GLGenVertexArraysOES, n, arraysPacked));
14101         if (isCallValid)
14102         {
14103             context->genVertexArrays(n, arraysPacked);
14104         }
14105         ANGLE_CAPTURE_GL(GenVertexArraysOES, isCallValid, context, n, arraysPacked);
14106     }
14107     else
14108     {
14109         GenerateContextLostErrorOnCurrentGlobalContext();
14110     }
14111     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14112 }
14113 
GL_IsVertexArrayOES(GLuint array)14114 GLboolean GL_APIENTRY GL_IsVertexArrayOES(GLuint array)
14115 {
14116     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14117     Context *context = GetValidGlobalContext();
14118     EVENT(context, GLIsVertexArrayOES, "context = %d, array = %u", CID(context), array);
14119 
14120     GLboolean returnValue;
14121     if (context)
14122     {
14123         VertexArrayID arrayPacked = PackParam<VertexArrayID>(array);
14124         SCOPED_SHARE_CONTEXT_LOCK(context);
14125         bool isCallValid =
14126             (context->skipValidation() ||
14127              ValidateIsVertexArrayOES(context, angle::EntryPoint::GLIsVertexArrayOES, arrayPacked));
14128         if (isCallValid)
14129         {
14130             returnValue = context->isVertexArray(arrayPacked);
14131         }
14132         else
14133         {
14134             returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsVertexArrayOES, GLboolean>();
14135         }
14136         ANGLE_CAPTURE_GL(IsVertexArrayOES, isCallValid, context, arrayPacked, returnValue);
14137     }
14138     else
14139     {
14140         GenerateContextLostErrorOnCurrentGlobalContext();
14141         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsVertexArrayOES, GLboolean>();
14142     }
14143     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14144     return returnValue;
14145 }
14146 
14147 // GL_OES_vertex_half_float
14148 
14149 // GL_OES_vertex_type_10_10_10_2
14150 
14151 // GL_OVR_multiview
GL_FramebufferTextureMultiviewOVR(GLenum target,GLenum attachment,GLuint texture,GLint level,GLint baseViewIndex,GLsizei numViews)14152 void GL_APIENTRY GL_FramebufferTextureMultiviewOVR(GLenum target,
14153                                                    GLenum attachment,
14154                                                    GLuint texture,
14155                                                    GLint level,
14156                                                    GLint baseViewIndex,
14157                                                    GLsizei numViews)
14158 {
14159     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14160     Context *context = GetValidGlobalContext();
14161     EVENT(context, GLFramebufferTextureMultiviewOVR,
14162           "context = %d, target = %s, attachment = %s, texture = %u, level = %d, baseViewIndex = "
14163           "%d, numViews = %d",
14164           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target),
14165           GLenumToString(GLESEnum::FramebufferAttachment, attachment), texture, level,
14166           baseViewIndex, numViews);
14167 
14168     if (context)
14169     {
14170         TextureID texturePacked = PackParam<TextureID>(texture);
14171         SCOPED_SHARE_CONTEXT_LOCK(context);
14172         bool isCallValid = (context->skipValidation() ||
14173                             ValidateFramebufferTextureMultiviewOVR(
14174                                 context, angle::EntryPoint::GLFramebufferTextureMultiviewOVR,
14175                                 target, attachment, texturePacked, level, baseViewIndex, numViews));
14176         if (isCallValid)
14177         {
14178             context->framebufferTextureMultiview(target, attachment, texturePacked, level,
14179                                                  baseViewIndex, numViews);
14180         }
14181         ANGLE_CAPTURE_GL(FramebufferTextureMultiviewOVR, isCallValid, context, target, attachment,
14182                          texturePacked, level, baseViewIndex, numViews);
14183     }
14184     else
14185     {
14186         GenerateContextLostErrorOnCurrentGlobalContext();
14187     }
14188     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14189 }
14190 
14191 // GL_OVR_multiview2
14192 
14193 // GL_QCOM_framebuffer_foveated
GL_FramebufferFoveationConfigQCOM(GLuint framebuffer,GLuint numLayers,GLuint focalPointsPerLayer,GLuint requestedFeatures,GLuint * providedFeatures)14194 void GL_APIENTRY GL_FramebufferFoveationConfigQCOM(GLuint framebuffer,
14195                                                    GLuint numLayers,
14196                                                    GLuint focalPointsPerLayer,
14197                                                    GLuint requestedFeatures,
14198                                                    GLuint *providedFeatures)
14199 {
14200     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14201     Context *context = GetValidGlobalContext();
14202     EVENT(context, GLFramebufferFoveationConfigQCOM,
14203           "context = %d, framebuffer = %u, numLayers = %u, focalPointsPerLayer = %u, "
14204           "requestedFeatures = %u, providedFeatures = 0x%016" PRIxPTR "",
14205           CID(context), framebuffer, numLayers, focalPointsPerLayer, requestedFeatures,
14206           (uintptr_t)providedFeatures);
14207 
14208     if (context)
14209     {
14210         FramebufferID framebufferPacked = PackParam<FramebufferID>(framebuffer);
14211         SCOPED_SHARE_CONTEXT_LOCK(context);
14212         bool isCallValid =
14213             (context->skipValidation() ||
14214              (ValidatePixelLocalStorageInactive(
14215                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
14216                   angle::EntryPoint::GLFramebufferFoveationConfigQCOM) &&
14217               ValidateFramebufferFoveationConfigQCOM(
14218                   context, angle::EntryPoint::GLFramebufferFoveationConfigQCOM, framebufferPacked,
14219                   numLayers, focalPointsPerLayer, requestedFeatures, providedFeatures)));
14220         if (isCallValid)
14221         {
14222             context->framebufferFoveationConfig(framebufferPacked, numLayers, focalPointsPerLayer,
14223                                                 requestedFeatures, providedFeatures);
14224         }
14225         ANGLE_CAPTURE_GL(FramebufferFoveationConfigQCOM, isCallValid, context, framebufferPacked,
14226                          numLayers, focalPointsPerLayer, requestedFeatures, providedFeatures);
14227     }
14228     else
14229     {
14230         GenerateContextLostErrorOnCurrentGlobalContext();
14231     }
14232     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14233 }
14234 
GL_FramebufferFoveationParametersQCOM(GLuint framebuffer,GLuint layer,GLuint focalPoint,GLfloat focalX,GLfloat focalY,GLfloat gainX,GLfloat gainY,GLfloat foveaArea)14235 void GL_APIENTRY GL_FramebufferFoveationParametersQCOM(GLuint framebuffer,
14236                                                        GLuint layer,
14237                                                        GLuint focalPoint,
14238                                                        GLfloat focalX,
14239                                                        GLfloat focalY,
14240                                                        GLfloat gainX,
14241                                                        GLfloat gainY,
14242                                                        GLfloat foveaArea)
14243 {
14244     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14245     Context *context = GetValidGlobalContext();
14246     EVENT(context, GLFramebufferFoveationParametersQCOM,
14247           "context = %d, framebuffer = %u, layer = %u, focalPoint = %u, focalX = %f, focalY = %f, "
14248           "gainX = %f, gainY = %f, foveaArea = %f",
14249           CID(context), framebuffer, layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea);
14250 
14251     if (context)
14252     {
14253         FramebufferID framebufferPacked = PackParam<FramebufferID>(framebuffer);
14254         SCOPED_SHARE_CONTEXT_LOCK(context);
14255         bool isCallValid =
14256             (context->skipValidation() ||
14257              (ValidatePixelLocalStorageInactive(
14258                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
14259                   angle::EntryPoint::GLFramebufferFoveationParametersQCOM) &&
14260               ValidateFramebufferFoveationParametersQCOM(
14261                   context, angle::EntryPoint::GLFramebufferFoveationParametersQCOM,
14262                   framebufferPacked, layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea)));
14263         if (isCallValid)
14264         {
14265             context->framebufferFoveationParameters(framebufferPacked, layer, focalPoint, focalX,
14266                                                     focalY, gainX, gainY, foveaArea);
14267         }
14268         ANGLE_CAPTURE_GL(FramebufferFoveationParametersQCOM, isCallValid, context,
14269                          framebufferPacked, layer, focalPoint, focalX, focalY, gainX, gainY,
14270                          foveaArea);
14271     }
14272     else
14273     {
14274         GenerateContextLostErrorOnCurrentGlobalContext();
14275     }
14276     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14277 }
14278 
14279 // GL_QCOM_render_shared_exponent
14280 
14281 // GL_QCOM_shading_rate
GL_ShadingRateQCOM(GLenum rate)14282 void GL_APIENTRY GL_ShadingRateQCOM(GLenum rate)
14283 {
14284     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14285     Context *context = GetValidGlobalContext();
14286     EVENT(context, GLShadingRateQCOM, "context = %d, rate = %s", CID(context),
14287           GLenumToString(GLESEnum::ShadingRateQCOM, rate));
14288 
14289     if (context)
14290     {
14291         bool isCallValid =
14292             (context->skipValidation() ||
14293              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
14294                                                 context->getMutableErrorSetForValidation(),
14295                                                 angle::EntryPoint::GLShadingRateQCOM) &&
14296               ValidateShadingRateQCOM(context->getPrivateState(),
14297                                       context->getMutableErrorSetForValidation(),
14298                                       angle::EntryPoint::GLShadingRateQCOM, rate)));
14299         if (isCallValid)
14300         {
14301             ContextPrivateShadingRate(context->getMutablePrivateState(),
14302                                       context->getMutablePrivateStateCache(), rate);
14303         }
14304         ANGLE_CAPTURE_GL(ShadingRateQCOM, isCallValid, context, rate);
14305     }
14306     else
14307     {
14308         GenerateContextLostErrorOnCurrentGlobalContext();
14309     }
14310     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14311 }
14312 
14313 // GL_QCOM_texture_foveated
GL_TextureFoveationParametersQCOM(GLuint texture,GLuint layer,GLuint focalPoint,GLfloat focalX,GLfloat focalY,GLfloat gainX,GLfloat gainY,GLfloat foveaArea)14314 void GL_APIENTRY GL_TextureFoveationParametersQCOM(GLuint texture,
14315                                                    GLuint layer,
14316                                                    GLuint focalPoint,
14317                                                    GLfloat focalX,
14318                                                    GLfloat focalY,
14319                                                    GLfloat gainX,
14320                                                    GLfloat gainY,
14321                                                    GLfloat foveaArea)
14322 {
14323     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14324     Context *context = GetValidGlobalContext();
14325     EVENT(context, GLTextureFoveationParametersQCOM,
14326           "context = %d, texture = %u, layer = %u, focalPoint = %u, focalX = %f, focalY = %f, "
14327           "gainX = %f, gainY = %f, foveaArea = %f",
14328           CID(context), texture, layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea);
14329 
14330     if (context)
14331     {
14332         TextureID texturePacked = PackParam<TextureID>(texture);
14333         SCOPED_SHARE_CONTEXT_LOCK(context);
14334         bool isCallValid =
14335             (context->skipValidation() ||
14336              (ValidatePixelLocalStorageInactive(
14337                   context->getPrivateState(), context->getMutableErrorSetForValidation(),
14338                   angle::EntryPoint::GLTextureFoveationParametersQCOM) &&
14339               ValidateTextureFoveationParametersQCOM(
14340                   context, angle::EntryPoint::GLTextureFoveationParametersQCOM, texturePacked,
14341                   layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea)));
14342         if (isCallValid)
14343         {
14344             context->textureFoveationParameters(texturePacked, layer, focalPoint, focalX, focalY,
14345                                                 gainX, gainY, foveaArea);
14346         }
14347         ANGLE_CAPTURE_GL(TextureFoveationParametersQCOM, isCallValid, context, texturePacked, layer,
14348                          focalPoint, focalX, focalY, gainX, gainY, foveaArea);
14349     }
14350     else
14351     {
14352         GenerateContextLostErrorOnCurrentGlobalContext();
14353     }
14354     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14355 }
14356 
14357 // GL_QCOM_tiled_rendering
GL_EndTilingQCOM(GLbitfield preserveMask)14358 void GL_APIENTRY GL_EndTilingQCOM(GLbitfield preserveMask)
14359 {
14360     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14361     Context *context = GetValidGlobalContext();
14362     EVENT(context, GLEndTilingQCOM, "context = %d, preserveMask = %s", CID(context),
14363           GLbitfieldToString(GLESEnum::BufferBitQCOM, preserveMask).c_str());
14364 
14365     if (context)
14366     {
14367         SCOPED_SHARE_CONTEXT_LOCK(context);
14368         bool isCallValid =
14369             (context->skipValidation() ||
14370              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
14371                                                 context->getMutableErrorSetForValidation(),
14372                                                 angle::EntryPoint::GLEndTilingQCOM) &&
14373               ValidateEndTilingQCOM(context, angle::EntryPoint::GLEndTilingQCOM, preserveMask)));
14374         if (isCallValid)
14375         {
14376             context->endTiling(preserveMask);
14377         }
14378         ANGLE_CAPTURE_GL(EndTilingQCOM, isCallValid, context, preserveMask);
14379     }
14380     else
14381     {
14382         GenerateContextLostErrorOnCurrentGlobalContext();
14383     }
14384     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14385 }
14386 
14387 void GL_APIENTRY
GL_StartTilingQCOM(GLuint x,GLuint y,GLuint width,GLuint height,GLbitfield preserveMask)14388 GL_StartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)
14389 {
14390     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14391     Context *context = GetValidGlobalContext();
14392     EVENT(context, GLStartTilingQCOM,
14393           "context = %d, x = %u, y = %u, width = %u, height = %u, preserveMask = %s", CID(context),
14394           x, y, width, height, GLbitfieldToString(GLESEnum::BufferBitQCOM, preserveMask).c_str());
14395 
14396     if (context)
14397     {
14398         SCOPED_SHARE_CONTEXT_LOCK(context);
14399         bool isCallValid =
14400             (context->skipValidation() ||
14401              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
14402                                                 context->getMutableErrorSetForValidation(),
14403                                                 angle::EntryPoint::GLStartTilingQCOM) &&
14404               ValidateStartTilingQCOM(context, angle::EntryPoint::GLStartTilingQCOM, x, y, width,
14405                                       height, preserveMask)));
14406         if (isCallValid)
14407         {
14408             context->startTiling(x, y, width, height, preserveMask);
14409         }
14410         ANGLE_CAPTURE_GL(StartTilingQCOM, isCallValid, context, x, y, width, height, preserveMask);
14411     }
14412     else
14413     {
14414         GenerateContextLostErrorOnCurrentGlobalContext();
14415     }
14416     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
14417 }
14418 
14419 }  // extern "C"
14420