xref: /aosp_15_r20/external/angle/src/libGLESv2/entry_points_gles_3_1_autogen.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by generate_entry_points.py using data from gl.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_3_1_autogen.cpp:
9 //   Defines the GLES 3.1 entry points.
10 
11 #include "libGLESv2/entry_points_gles_3_1_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_3_1_autogen.h"
18 #include "libANGLE/context_private_call_autogen.h"
19 #include "libANGLE/entry_points_utils.h"
20 #include "libANGLE/validationES31.h"
21 #include "libGLESv2/global_state.h"
22 
23 using namespace gl;
24 
25 extern "C" {
GL_ActiveShaderProgram(GLuint pipeline,GLuint program)26 void GL_APIENTRY GL_ActiveShaderProgram(GLuint pipeline, GLuint program)
27 {
28     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
29     Context *context = GetValidGlobalContext();
30     EVENT(context, GLActiveShaderProgram, "context = %d, pipeline = %u, program = %u", CID(context),
31           pipeline, program);
32 
33     if (context)
34     {
35         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
36         ShaderProgramID programPacked    = PackParam<ShaderProgramID>(program);
37         SCOPED_SHARE_CONTEXT_LOCK(context);
38         bool isCallValid =
39             (context->skipValidation() ||
40              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
41                                                 context->getMutableErrorSetForValidation(),
42                                                 angle::EntryPoint::GLActiveShaderProgram) &&
43               ValidateActiveShaderProgram(context, angle::EntryPoint::GLActiveShaderProgram,
44                                           pipelinePacked, programPacked)));
45         if (isCallValid)
46         {
47             context->activeShaderProgram(pipelinePacked, programPacked);
48         }
49         ANGLE_CAPTURE_GL(ActiveShaderProgram, isCallValid, context, pipelinePacked, programPacked);
50     }
51     else
52     {
53         GenerateContextLostErrorOnCurrentGlobalContext();
54     }
55     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
56 }
57 
GL_BindImageTexture(GLuint unit,GLuint texture,GLint level,GLboolean layered,GLint layer,GLenum access,GLenum format)58 void GL_APIENTRY GL_BindImageTexture(GLuint unit,
59                                      GLuint texture,
60                                      GLint level,
61                                      GLboolean layered,
62                                      GLint layer,
63                                      GLenum access,
64                                      GLenum format)
65 {
66     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
67     Context *context = GetValidGlobalContext();
68     EVENT(context, GLBindImageTexture,
69           "context = %d, unit = %u, texture = %u, level = %d, layered = %s, layer = %d, access = "
70           "%s, format = %s",
71           CID(context), unit, texture, level, GLbooleanToString(layered), layer,
72           GLenumToString(GLESEnum::BufferAccessARB, access),
73           GLenumToString(GLESEnum::InternalFormat, format));
74 
75     if (context)
76     {
77         TextureID texturePacked = PackParam<TextureID>(texture);
78         SCOPED_SHARE_CONTEXT_LOCK(context);
79         bool isCallValid =
80             (context->skipValidation() ||
81              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
82                                                 context->getMutableErrorSetForValidation(),
83                                                 angle::EntryPoint::GLBindImageTexture) &&
84               ValidateBindImageTexture(context, angle::EntryPoint::GLBindImageTexture, unit,
85                                        texturePacked, level, layered, layer, access, format)));
86         if (isCallValid)
87         {
88             context->bindImageTexture(unit, texturePacked, level, layered, layer, access, format);
89         }
90         ANGLE_CAPTURE_GL(BindImageTexture, isCallValid, context, unit, texturePacked, level,
91                          layered, layer, access, format);
92     }
93     else
94     {
95         GenerateContextLostErrorOnCurrentGlobalContext();
96     }
97     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
98 }
99 
GL_BindProgramPipeline(GLuint pipeline)100 void GL_APIENTRY GL_BindProgramPipeline(GLuint pipeline)
101 {
102     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
103     Context *context = GetValidGlobalContext();
104     EVENT(context, GLBindProgramPipeline, "context = %d, pipeline = %u", CID(context), pipeline);
105 
106     if (context)
107     {
108         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
109         SCOPED_SHARE_CONTEXT_LOCK(context);
110         bool isCallValid =
111             (context->skipValidation() ||
112              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
113                                                 context->getMutableErrorSetForValidation(),
114                                                 angle::EntryPoint::GLBindProgramPipeline) &&
115               ValidateBindProgramPipeline(context, angle::EntryPoint::GLBindProgramPipeline,
116                                           pipelinePacked)));
117         if (isCallValid)
118         {
119             context->bindProgramPipeline(pipelinePacked);
120         }
121         ANGLE_CAPTURE_GL(BindProgramPipeline, isCallValid, context, pipelinePacked);
122     }
123     else
124     {
125         GenerateContextLostErrorOnCurrentGlobalContext();
126     }
127     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
128 }
129 
GL_BindVertexBuffer(GLuint bindingindex,GLuint buffer,GLintptr offset,GLsizei stride)130 void GL_APIENTRY GL_BindVertexBuffer(GLuint bindingindex,
131                                      GLuint buffer,
132                                      GLintptr offset,
133                                      GLsizei stride)
134 {
135     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
136     Context *context = GetValidGlobalContext();
137     EVENT(context, GLBindVertexBuffer,
138           "context = %d, bindingindex = %u, buffer = %u, offset = %llu, stride = %d", CID(context),
139           bindingindex, buffer, static_cast<unsigned long long>(offset), stride);
140 
141     if (context)
142     {
143         BufferID bufferPacked = PackParam<BufferID>(buffer);
144         SCOPED_SHARE_CONTEXT_LOCK(context);
145         bool isCallValid =
146             (context->skipValidation() ||
147              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
148                                                 context->getMutableErrorSetForValidation(),
149                                                 angle::EntryPoint::GLBindVertexBuffer) &&
150               ValidateBindVertexBuffer(context, angle::EntryPoint::GLBindVertexBuffer, bindingindex,
151                                        bufferPacked, offset, stride)));
152         if (isCallValid)
153         {
154             context->bindVertexBuffer(bindingindex, bufferPacked, offset, stride);
155         }
156         ANGLE_CAPTURE_GL(BindVertexBuffer, isCallValid, context, bindingindex, bufferPacked, offset,
157                          stride);
158     }
159     else
160     {
161         GenerateContextLostErrorOnCurrentGlobalContext();
162     }
163     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
164 }
165 
GL_CreateShaderProgramv(GLenum type,GLsizei count,const GLchar * const * strings)166 GLuint GL_APIENTRY GL_CreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const *strings)
167 {
168     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
169     Context *context = GetValidGlobalContext();
170     EVENT(context, GLCreateShaderProgramv,
171           "context = %d, type = %s, count = %d, strings = 0x%016" PRIxPTR "", CID(context),
172           GLenumToString(GLESEnum::ShaderType, type), count, (uintptr_t)strings);
173 
174     GLuint returnValue;
175     if (context)
176     {
177         ShaderType typePacked = PackParam<ShaderType>(type);
178         SCOPED_SHARE_CONTEXT_LOCK(context);
179         bool isCallValid =
180             (context->skipValidation() ||
181              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
182                                                 context->getMutableErrorSetForValidation(),
183                                                 angle::EntryPoint::GLCreateShaderProgramv) &&
184               ValidateCreateShaderProgramv(context, angle::EntryPoint::GLCreateShaderProgramv,
185                                            typePacked, count, strings)));
186         if (isCallValid)
187         {
188             returnValue = context->createShaderProgramv(typePacked, count, strings);
189         }
190         else
191         {
192             returnValue =
193                 GetDefaultReturnValue<angle::EntryPoint::GLCreateShaderProgramv, GLuint>();
194         }
195         ANGLE_CAPTURE_GL(CreateShaderProgramv, isCallValid, context, typePacked, count, strings,
196                          returnValue);
197     }
198     else
199     {
200         GenerateContextLostErrorOnCurrentGlobalContext();
201         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLCreateShaderProgramv, GLuint>();
202     }
203     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
204     return returnValue;
205 }
206 
GL_DeleteProgramPipelines(GLsizei n,const GLuint * pipelines)207 void GL_APIENTRY GL_DeleteProgramPipelines(GLsizei n, const GLuint *pipelines)
208 {
209     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
210     Context *context = GetValidGlobalContext();
211     EVENT(context, GLDeleteProgramPipelines, "context = %d, n = %d, pipelines = 0x%016" PRIxPTR "",
212           CID(context), n, (uintptr_t)pipelines);
213 
214     if (context)
215     {
216         const ProgramPipelineID *pipelinesPacked = PackParam<const ProgramPipelineID *>(pipelines);
217         SCOPED_SHARE_CONTEXT_LOCK(context);
218         bool isCallValid =
219             (context->skipValidation() ||
220              ValidateDeleteProgramPipelines(context, angle::EntryPoint::GLDeleteProgramPipelines, n,
221                                             pipelinesPacked));
222         if (isCallValid)
223         {
224             context->deleteProgramPipelines(n, pipelinesPacked);
225         }
226         ANGLE_CAPTURE_GL(DeleteProgramPipelines, isCallValid, context, n, pipelinesPacked);
227     }
228     else
229     {
230         GenerateContextLostErrorOnCurrentGlobalContext();
231     }
232     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
233 }
234 
GL_DispatchCompute(GLuint num_groups_x,GLuint num_groups_y,GLuint num_groups_z)235 void GL_APIENTRY GL_DispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
236 {
237     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
238     Context *context = GetValidGlobalContext();
239     EVENT(context, GLDispatchCompute,
240           "context = %d, num_groups_x = %u, num_groups_y = %u, num_groups_z = %u", CID(context),
241           num_groups_x, num_groups_y, num_groups_z);
242 
243     if (context)
244     {
245         SCOPED_SHARE_CONTEXT_LOCK(context);
246         bool isCallValid =
247             (context->skipValidation() ||
248              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
249                                                 context->getMutableErrorSetForValidation(),
250                                                 angle::EntryPoint::GLDispatchCompute) &&
251               ValidateDispatchCompute(context, angle::EntryPoint::GLDispatchCompute, num_groups_x,
252                                       num_groups_y, num_groups_z)));
253         if (isCallValid)
254         {
255             context->dispatchCompute(num_groups_x, num_groups_y, num_groups_z);
256         }
257         ANGLE_CAPTURE_GL(DispatchCompute, isCallValid, context, num_groups_x, num_groups_y,
258                          num_groups_z);
259     }
260     else
261     {
262         GenerateContextLostErrorOnCurrentGlobalContext();
263     }
264     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
265 }
266 
GL_DispatchComputeIndirect(GLintptr indirect)267 void GL_APIENTRY GL_DispatchComputeIndirect(GLintptr indirect)
268 {
269     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
270     Context *context = GetValidGlobalContext();
271     EVENT(context, GLDispatchComputeIndirect, "context = %d, indirect = %llu", CID(context),
272           static_cast<unsigned long long>(indirect));
273 
274     if (context)
275     {
276         SCOPED_SHARE_CONTEXT_LOCK(context);
277         bool isCallValid = (context->skipValidation() ||
278                             ValidateDispatchComputeIndirect(
279                                 context, angle::EntryPoint::GLDispatchComputeIndirect, indirect));
280         if (isCallValid)
281         {
282             context->dispatchComputeIndirect(indirect);
283         }
284         ANGLE_CAPTURE_GL(DispatchComputeIndirect, isCallValid, context, indirect);
285     }
286     else
287     {
288         GenerateContextLostErrorOnCurrentGlobalContext();
289     }
290     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
291 }
292 
GL_DrawArraysIndirect(GLenum mode,const void * indirect)293 void GL_APIENTRY GL_DrawArraysIndirect(GLenum mode, const void *indirect)
294 {
295     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
296     Context *context = GetValidGlobalContext();
297     EVENT(context, GLDrawArraysIndirect, "context = %d, mode = %s, indirect = 0x%016" PRIxPTR "",
298           CID(context), GLenumToString(GLESEnum::PrimitiveType, mode), (uintptr_t)indirect);
299 
300     if (context)
301     {
302         PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);
303         SCOPED_SHARE_CONTEXT_LOCK(context);
304         bool isCallValid =
305             (context->skipValidation() ||
306              ValidateDrawArraysIndirect(context, angle::EntryPoint::GLDrawArraysIndirect,
307                                         modePacked, indirect));
308         if (isCallValid)
309         {
310             context->drawArraysIndirect(modePacked, indirect);
311         }
312         ANGLE_CAPTURE_GL(DrawArraysIndirect, isCallValid, context, modePacked, indirect);
313     }
314     else
315     {
316         GenerateContextLostErrorOnCurrentGlobalContext();
317     }
318     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
319 }
320 
GL_DrawElementsIndirect(GLenum mode,GLenum type,const void * indirect)321 void GL_APIENTRY GL_DrawElementsIndirect(GLenum mode, GLenum type, const void *indirect)
322 {
323     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
324     Context *context = GetValidGlobalContext();
325     EVENT(context, GLDrawElementsIndirect,
326           "context = %d, mode = %s, type = %s, indirect = 0x%016" PRIxPTR "", CID(context),
327           GLenumToString(GLESEnum::PrimitiveType, mode),
328           GLenumToString(GLESEnum::DrawElementsType, type), (uintptr_t)indirect);
329 
330     if (context)
331     {
332         PrimitiveMode modePacked    = PackParam<PrimitiveMode>(mode);
333         DrawElementsType typePacked = PackParam<DrawElementsType>(type);
334         SCOPED_SHARE_CONTEXT_LOCK(context);
335         bool isCallValid =
336             (context->skipValidation() ||
337              ValidateDrawElementsIndirect(context, angle::EntryPoint::GLDrawElementsIndirect,
338                                           modePacked, typePacked, indirect));
339         if (isCallValid)
340         {
341             context->drawElementsIndirect(modePacked, typePacked, indirect);
342         }
343         ANGLE_CAPTURE_GL(DrawElementsIndirect, isCallValid, context, modePacked, typePacked,
344                          indirect);
345     }
346     else
347     {
348         GenerateContextLostErrorOnCurrentGlobalContext();
349     }
350     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
351 }
352 
GL_FramebufferParameteri(GLenum target,GLenum pname,GLint param)353 void GL_APIENTRY GL_FramebufferParameteri(GLenum target, GLenum pname, GLint param)
354 {
355     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
356     Context *context = GetValidGlobalContext();
357     EVENT(context, GLFramebufferParameteri, "context = %d, target = %s, pname = %s, param = %d",
358           CID(context), GLenumToString(GLESEnum::FramebufferTarget, target),
359           GLenumToString(GLESEnum::FramebufferParameterName, pname), param);
360 
361     if (context)
362     {
363         SCOPED_SHARE_CONTEXT_LOCK(context);
364         bool isCallValid =
365             (context->skipValidation() ||
366              ValidateFramebufferParameteri(context, angle::EntryPoint::GLFramebufferParameteri,
367                                            target, pname, param));
368         if (isCallValid)
369         {
370             context->framebufferParameteri(target, pname, param);
371         }
372         ANGLE_CAPTURE_GL(FramebufferParameteri, isCallValid, context, target, pname, param);
373     }
374     else
375     {
376         GenerateContextLostErrorOnCurrentGlobalContext();
377     }
378     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
379 }
380 
GL_GenProgramPipelines(GLsizei n,GLuint * pipelines)381 void GL_APIENTRY GL_GenProgramPipelines(GLsizei n, GLuint *pipelines)
382 {
383     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
384     Context *context = GetValidGlobalContext();
385     EVENT(context, GLGenProgramPipelines, "context = %d, n = %d, pipelines = 0x%016" PRIxPTR "",
386           CID(context), n, (uintptr_t)pipelines);
387 
388     if (context)
389     {
390         ProgramPipelineID *pipelinesPacked = PackParam<ProgramPipelineID *>(pipelines);
391         SCOPED_SHARE_CONTEXT_LOCK(context);
392         bool isCallValid =
393             (context->skipValidation() ||
394              ValidateGenProgramPipelines(context, angle::EntryPoint::GLGenProgramPipelines, n,
395                                          pipelinesPacked));
396         if (isCallValid)
397         {
398             context->genProgramPipelines(n, pipelinesPacked);
399         }
400         ANGLE_CAPTURE_GL(GenProgramPipelines, isCallValid, context, n, pipelinesPacked);
401     }
402     else
403     {
404         GenerateContextLostErrorOnCurrentGlobalContext();
405     }
406     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
407 }
408 
GL_GetBooleani_v(GLenum target,GLuint index,GLboolean * data)409 void GL_APIENTRY GL_GetBooleani_v(GLenum target, GLuint index, GLboolean *data)
410 {
411     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
412     Context *context = GetValidGlobalContext();
413     EVENT(context, GLGetBooleani_v,
414           "context = %d, target = %s, index = %u, data = 0x%016" PRIxPTR "", CID(context),
415           GLenumToString(GLESEnum::BufferTargetARB, target), index, (uintptr_t)data);
416 
417     if (context)
418     {
419         SCOPED_SHARE_CONTEXT_LOCK(context);
420         bool isCallValid = (context->skipValidation() ||
421                             ValidateGetBooleani_v(context, angle::EntryPoint::GLGetBooleani_v,
422                                                   target, index, data));
423         if (isCallValid)
424         {
425             context->getBooleani_v(target, index, data);
426         }
427         ANGLE_CAPTURE_GL(GetBooleani_v, isCallValid, context, target, index, data);
428     }
429     else
430     {
431         GenerateContextLostErrorOnCurrentGlobalContext();
432     }
433     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
434 }
435 
GL_GetFramebufferParameteriv(GLenum target,GLenum pname,GLint * params)436 void GL_APIENTRY GL_GetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params)
437 {
438     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
439     Context *context = GetValidGlobalContext();
440     EVENT(context, GLGetFramebufferParameteriv,
441           "context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
442           GLenumToString(GLESEnum::FramebufferTarget, target),
443           GLenumToString(GLESEnum::FramebufferAttachmentParameterName, pname), (uintptr_t)params);
444 
445     if (context)
446     {
447         SCOPED_SHARE_CONTEXT_LOCK(context);
448         bool isCallValid =
449             (context->skipValidation() ||
450              ValidateGetFramebufferParameteriv(
451                  context, angle::EntryPoint::GLGetFramebufferParameteriv, target, pname, params));
452         if (isCallValid)
453         {
454             context->getFramebufferParameteriv(target, pname, params);
455         }
456         ANGLE_CAPTURE_GL(GetFramebufferParameteriv, isCallValid, context, target, pname, params);
457     }
458     else
459     {
460         GenerateContextLostErrorOnCurrentGlobalContext();
461     }
462     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
463 }
464 
GL_GetMultisamplefv(GLenum pname,GLuint index,GLfloat * val)465 void GL_APIENTRY GL_GetMultisamplefv(GLenum pname, GLuint index, GLfloat *val)
466 {
467     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
468     Context *context = GetValidGlobalContext();
469     EVENT(context, GLGetMultisamplefv,
470           "context = %d, pname = %s, index = %u, val = 0x%016" PRIxPTR "", CID(context),
471           GLenumToString(GLESEnum::AllEnums, pname), index, (uintptr_t)val);
472 
473     if (context)
474     {
475         SCOPED_SHARE_CONTEXT_LOCK(context);
476         bool isCallValid = (context->skipValidation() ||
477                             ValidateGetMultisamplefv(context, angle::EntryPoint::GLGetMultisamplefv,
478                                                      pname, index, val));
479         if (isCallValid)
480         {
481             context->getMultisamplefv(pname, index, val);
482         }
483         ANGLE_CAPTURE_GL(GetMultisamplefv, isCallValid, context, pname, index, val);
484     }
485     else
486     {
487         GenerateContextLostErrorOnCurrentGlobalContext();
488     }
489     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
490 }
491 
GL_GetProgramInterfaceiv(GLuint program,GLenum programInterface,GLenum pname,GLint * params)492 void GL_APIENTRY GL_GetProgramInterfaceiv(GLuint program,
493                                           GLenum programInterface,
494                                           GLenum pname,
495                                           GLint *params)
496 {
497     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
498     Context *context = GetValidGlobalContext();
499     EVENT(context, GLGetProgramInterfaceiv,
500           "context = %d, program = %u, programInterface = %s, pname = %s, params = 0x%016" PRIxPTR
501           "",
502           CID(context), program, GLenumToString(GLESEnum::ProgramInterface, programInterface),
503           GLenumToString(GLESEnum::ProgramInterfacePName, pname), (uintptr_t)params);
504 
505     if (context)
506     {
507         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
508         SCOPED_SHARE_CONTEXT_LOCK(context);
509         bool isCallValid =
510             (context->skipValidation() ||
511              ValidateGetProgramInterfaceiv(context, angle::EntryPoint::GLGetProgramInterfaceiv,
512                                            programPacked, programInterface, pname, params));
513         if (isCallValid)
514         {
515             context->getProgramInterfaceiv(programPacked, programInterface, pname, params);
516         }
517         ANGLE_CAPTURE_GL(GetProgramInterfaceiv, isCallValid, context, programPacked,
518                          programInterface, pname, params);
519     }
520     else
521     {
522         GenerateContextLostErrorOnCurrentGlobalContext();
523     }
524     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
525 }
526 
GL_GetProgramPipelineInfoLog(GLuint pipeline,GLsizei bufSize,GLsizei * length,GLchar * infoLog)527 void GL_APIENTRY GL_GetProgramPipelineInfoLog(GLuint pipeline,
528                                               GLsizei bufSize,
529                                               GLsizei *length,
530                                               GLchar *infoLog)
531 {
532     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
533     Context *context = GetValidGlobalContext();
534     EVENT(context, GLGetProgramPipelineInfoLog,
535           "context = %d, pipeline = %u, bufSize = %d, length = 0x%016" PRIxPTR
536           ", infoLog = 0x%016" PRIxPTR "",
537           CID(context), pipeline, bufSize, (uintptr_t)length, (uintptr_t)infoLog);
538 
539     if (context)
540     {
541         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
542         SCOPED_SHARE_CONTEXT_LOCK(context);
543         bool isCallValid = (context->skipValidation() ||
544                             ValidateGetProgramPipelineInfoLog(
545                                 context, angle::EntryPoint::GLGetProgramPipelineInfoLog,
546                                 pipelinePacked, bufSize, length, infoLog));
547         if (isCallValid)
548         {
549             context->getProgramPipelineInfoLog(pipelinePacked, bufSize, length, infoLog);
550         }
551         ANGLE_CAPTURE_GL(GetProgramPipelineInfoLog, isCallValid, context, pipelinePacked, bufSize,
552                          length, infoLog);
553     }
554     else
555     {
556         GenerateContextLostErrorOnCurrentGlobalContext();
557     }
558     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
559 }
560 
GL_GetProgramPipelineiv(GLuint pipeline,GLenum pname,GLint * params)561 void GL_APIENTRY GL_GetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params)
562 {
563     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
564     Context *context = GetValidGlobalContext();
565     EVENT(context, GLGetProgramPipelineiv,
566           "context = %d, pipeline = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),
567           pipeline, GLenumToString(GLESEnum::PipelineParameterName, pname), (uintptr_t)params);
568 
569     if (context)
570     {
571         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
572         SCOPED_SHARE_CONTEXT_LOCK(context);
573         bool isCallValid =
574             (context->skipValidation() ||
575              ValidateGetProgramPipelineiv(context, angle::EntryPoint::GLGetProgramPipelineiv,
576                                           pipelinePacked, pname, params));
577         if (isCallValid)
578         {
579             context->getProgramPipelineiv(pipelinePacked, pname, params);
580         }
581         ANGLE_CAPTURE_GL(GetProgramPipelineiv, isCallValid, context, pipelinePacked, pname, params);
582     }
583     else
584     {
585         GenerateContextLostErrorOnCurrentGlobalContext();
586     }
587     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
588 }
589 
GL_GetProgramResourceIndex(GLuint program,GLenum programInterface,const GLchar * name)590 GLuint GL_APIENTRY GL_GetProgramResourceIndex(GLuint program,
591                                               GLenum programInterface,
592                                               const GLchar *name)
593 {
594     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
595     Context *context = GetValidGlobalContext();
596     EVENT(context, GLGetProgramResourceIndex,
597           "context = %d, program = %u, programInterface = %s, name = 0x%016" PRIxPTR "",
598           CID(context), program, GLenumToString(GLESEnum::ProgramInterface, programInterface),
599           (uintptr_t)name);
600 
601     GLuint returnValue;
602     if (context)
603     {
604         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
605         SCOPED_SHARE_CONTEXT_LOCK(context);
606         bool isCallValid =
607             (context->skipValidation() ||
608              ValidateGetProgramResourceIndex(context, angle::EntryPoint::GLGetProgramResourceIndex,
609                                              programPacked, programInterface, name));
610         if (isCallValid)
611         {
612             returnValue = context->getProgramResourceIndex(programPacked, programInterface, name);
613         }
614         else
615         {
616             returnValue =
617                 GetDefaultReturnValue<angle::EntryPoint::GLGetProgramResourceIndex, GLuint>();
618         }
619         ANGLE_CAPTURE_GL(GetProgramResourceIndex, isCallValid, context, programPacked,
620                          programInterface, name, returnValue);
621     }
622     else
623     {
624         GenerateContextLostErrorOnCurrentGlobalContext();
625         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetProgramResourceIndex, GLuint>();
626     }
627     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
628     return returnValue;
629 }
630 
GL_GetProgramResourceLocation(GLuint program,GLenum programInterface,const GLchar * name)631 GLint GL_APIENTRY GL_GetProgramResourceLocation(GLuint program,
632                                                 GLenum programInterface,
633                                                 const GLchar *name)
634 {
635     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
636     Context *context = GetValidGlobalContext();
637     EVENT(context, GLGetProgramResourceLocation,
638           "context = %d, program = %u, programInterface = %s, name = 0x%016" PRIxPTR "",
639           CID(context), program, GLenumToString(GLESEnum::ProgramInterface, programInterface),
640           (uintptr_t)name);
641 
642     GLint returnValue;
643     if (context)
644     {
645         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
646         SCOPED_SHARE_CONTEXT_LOCK(context);
647         bool isCallValid = (context->skipValidation() ||
648                             ValidateGetProgramResourceLocation(
649                                 context, angle::EntryPoint::GLGetProgramResourceLocation,
650                                 programPacked, programInterface, name));
651         if (isCallValid)
652         {
653             returnValue =
654                 context->getProgramResourceLocation(programPacked, programInterface, name);
655         }
656         else
657         {
658             returnValue =
659                 GetDefaultReturnValue<angle::EntryPoint::GLGetProgramResourceLocation, GLint>();
660         }
661         ANGLE_CAPTURE_GL(GetProgramResourceLocation, isCallValid, context, programPacked,
662                          programInterface, name, returnValue);
663     }
664     else
665     {
666         GenerateContextLostErrorOnCurrentGlobalContext();
667         returnValue =
668             GetDefaultReturnValue<angle::EntryPoint::GLGetProgramResourceLocation, GLint>();
669     }
670     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
671     return returnValue;
672 }
673 
GL_GetProgramResourceName(GLuint program,GLenum programInterface,GLuint index,GLsizei bufSize,GLsizei * length,GLchar * name)674 void GL_APIENTRY GL_GetProgramResourceName(GLuint program,
675                                            GLenum programInterface,
676                                            GLuint index,
677                                            GLsizei bufSize,
678                                            GLsizei *length,
679                                            GLchar *name)
680 {
681     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
682     Context *context = GetValidGlobalContext();
683     EVENT(context, GLGetProgramResourceName,
684           "context = %d, program = %u, programInterface = %s, index = %u, bufSize = %d, length = "
685           "0x%016" PRIxPTR ", name = 0x%016" PRIxPTR "",
686           CID(context), program, GLenumToString(GLESEnum::ProgramInterface, programInterface),
687           index, bufSize, (uintptr_t)length, (uintptr_t)name);
688 
689     if (context)
690     {
691         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
692         SCOPED_SHARE_CONTEXT_LOCK(context);
693         bool isCallValid = (context->skipValidation() ||
694                             ValidateGetProgramResourceName(
695                                 context, angle::EntryPoint::GLGetProgramResourceName, programPacked,
696                                 programInterface, index, bufSize, length, name));
697         if (isCallValid)
698         {
699             context->getProgramResourceName(programPacked, programInterface, index, bufSize, length,
700                                             name);
701         }
702         ANGLE_CAPTURE_GL(GetProgramResourceName, isCallValid, context, programPacked,
703                          programInterface, index, bufSize, length, name);
704     }
705     else
706     {
707         GenerateContextLostErrorOnCurrentGlobalContext();
708     }
709     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
710 }
711 
GL_GetProgramResourceiv(GLuint program,GLenum programInterface,GLuint index,GLsizei propCount,const GLenum * props,GLsizei count,GLsizei * length,GLint * params)712 void GL_APIENTRY GL_GetProgramResourceiv(GLuint program,
713                                          GLenum programInterface,
714                                          GLuint index,
715                                          GLsizei propCount,
716                                          const GLenum *props,
717                                          GLsizei count,
718                                          GLsizei *length,
719                                          GLint *params)
720 {
721     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
722     Context *context = GetValidGlobalContext();
723     EVENT(context, GLGetProgramResourceiv,
724           "context = %d, program = %u, programInterface = %s, index = %u, propCount = %d, props = "
725           "0x%016" PRIxPTR ", count = %d, length = 0x%016" PRIxPTR ", params = 0x%016" PRIxPTR "",
726           CID(context), program, GLenumToString(GLESEnum::ProgramInterface, programInterface),
727           index, propCount, (uintptr_t)props, count, (uintptr_t)length, (uintptr_t)params);
728 
729     if (context)
730     {
731         ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);
732         SCOPED_SHARE_CONTEXT_LOCK(context);
733         bool isCallValid = (context->skipValidation() ||
734                             ValidateGetProgramResourceiv(
735                                 context, angle::EntryPoint::GLGetProgramResourceiv, programPacked,
736                                 programInterface, index, propCount, props, count, length, params));
737         if (isCallValid)
738         {
739             context->getProgramResourceiv(programPacked, programInterface, index, propCount, props,
740                                           count, length, params);
741         }
742         ANGLE_CAPTURE_GL(GetProgramResourceiv, isCallValid, context, programPacked,
743                          programInterface, index, propCount, props, count, length, params);
744     }
745     else
746     {
747         GenerateContextLostErrorOnCurrentGlobalContext();
748     }
749     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
750 }
751 
GL_GetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)752 void GL_APIENTRY GL_GetTexLevelParameterfv(GLenum target,
753                                            GLint level,
754                                            GLenum pname,
755                                            GLfloat *params)
756 {
757     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
758     Context *context = GetValidGlobalContext();
759     EVENT(context, GLGetTexLevelParameterfv,
760           "context = %d, target = %s, level = %d, pname = %s, params = 0x%016" PRIxPTR "",
761           CID(context), GLenumToString(GLESEnum::TextureTarget, target), level,
762           GLenumToString(GLESEnum::GetTextureParameter, pname), (uintptr_t)params);
763 
764     if (context)
765     {
766         TextureTarget targetPacked = PackParam<TextureTarget>(target);
767         SCOPED_SHARE_CONTEXT_LOCK(context);
768         bool isCallValid =
769             (context->skipValidation() ||
770              ValidateGetTexLevelParameterfv(context, angle::EntryPoint::GLGetTexLevelParameterfv,
771                                             targetPacked, level, pname, params));
772         if (isCallValid)
773         {
774             context->getTexLevelParameterfv(targetPacked, level, pname, params);
775         }
776         ANGLE_CAPTURE_GL(GetTexLevelParameterfv, isCallValid, context, targetPacked, level, pname,
777                          params);
778     }
779     else
780     {
781         GenerateContextLostErrorOnCurrentGlobalContext();
782     }
783     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
784 }
785 
GL_GetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)786 void GL_APIENTRY GL_GetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
787 {
788     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
789     Context *context = GetValidGlobalContext();
790     EVENT(context, GLGetTexLevelParameteriv,
791           "context = %d, target = %s, level = %d, pname = %s, params = 0x%016" PRIxPTR "",
792           CID(context), GLenumToString(GLESEnum::TextureTarget, target), level,
793           GLenumToString(GLESEnum::GetTextureParameter, pname), (uintptr_t)params);
794 
795     if (context)
796     {
797         TextureTarget targetPacked = PackParam<TextureTarget>(target);
798         SCOPED_SHARE_CONTEXT_LOCK(context);
799         bool isCallValid =
800             (context->skipValidation() ||
801              ValidateGetTexLevelParameteriv(context, angle::EntryPoint::GLGetTexLevelParameteriv,
802                                             targetPacked, level, pname, params));
803         if (isCallValid)
804         {
805             context->getTexLevelParameteriv(targetPacked, level, pname, params);
806         }
807         ANGLE_CAPTURE_GL(GetTexLevelParameteriv, isCallValid, context, targetPacked, level, pname,
808                          params);
809     }
810     else
811     {
812         GenerateContextLostErrorOnCurrentGlobalContext();
813     }
814     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
815 }
816 
GL_IsProgramPipeline(GLuint pipeline)817 GLboolean GL_APIENTRY GL_IsProgramPipeline(GLuint pipeline)
818 {
819     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
820     Context *context = GetValidGlobalContext();
821     EVENT(context, GLIsProgramPipeline, "context = %d, pipeline = %u", CID(context), pipeline);
822 
823     GLboolean returnValue;
824     if (context)
825     {
826         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
827         SCOPED_SHARE_CONTEXT_LOCK(context);
828         bool isCallValid = (context->skipValidation() ||
829                             ValidateIsProgramPipeline(
830                                 context, angle::EntryPoint::GLIsProgramPipeline, pipelinePacked));
831         if (isCallValid)
832         {
833             returnValue = context->isProgramPipeline(pipelinePacked);
834         }
835         else
836         {
837             returnValue =
838                 GetDefaultReturnValue<angle::EntryPoint::GLIsProgramPipeline, GLboolean>();
839         }
840         ANGLE_CAPTURE_GL(IsProgramPipeline, isCallValid, context, pipelinePacked, returnValue);
841     }
842     else
843     {
844         GenerateContextLostErrorOnCurrentGlobalContext();
845         returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsProgramPipeline, GLboolean>();
846     }
847     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
848     return returnValue;
849 }
850 
GL_MemoryBarrier(GLbitfield barriers)851 void GL_APIENTRY GL_MemoryBarrier(GLbitfield barriers)
852 {
853     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
854     Context *context = GetValidGlobalContext();
855     EVENT(context, GLMemoryBarrier, "context = %d, barriers = %s", CID(context),
856           GLbitfieldToString(GLESEnum::MemoryBarrierMask, barriers).c_str());
857 
858     if (context)
859     {
860         SCOPED_SHARE_CONTEXT_LOCK(context);
861         bool isCallValid =
862             (context->skipValidation() ||
863              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
864                                                 context->getMutableErrorSetForValidation(),
865                                                 angle::EntryPoint::GLMemoryBarrier) &&
866               ValidateMemoryBarrier(context, angle::EntryPoint::GLMemoryBarrier, barriers)));
867         if (isCallValid)
868         {
869             context->memoryBarrier(barriers);
870         }
871         ANGLE_CAPTURE_GL(MemoryBarrier, isCallValid, context, barriers);
872     }
873     else
874     {
875         GenerateContextLostErrorOnCurrentGlobalContext();
876     }
877     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
878 }
879 
GL_MemoryBarrierByRegion(GLbitfield barriers)880 void GL_APIENTRY GL_MemoryBarrierByRegion(GLbitfield barriers)
881 {
882     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
883     Context *context = GetValidGlobalContext();
884     EVENT(context, GLMemoryBarrierByRegion, "context = %d, barriers = %s", CID(context),
885           GLbitfieldToString(GLESEnum::MemoryBarrierMask, barriers).c_str());
886 
887     if (context)
888     {
889         SCOPED_SHARE_CONTEXT_LOCK(context);
890         bool isCallValid =
891             (context->skipValidation() ||
892              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
893                                                 context->getMutableErrorSetForValidation(),
894                                                 angle::EntryPoint::GLMemoryBarrierByRegion) &&
895               ValidateMemoryBarrierByRegion(context, angle::EntryPoint::GLMemoryBarrierByRegion,
896                                             barriers)));
897         if (isCallValid)
898         {
899             context->memoryBarrierByRegion(barriers);
900         }
901         ANGLE_CAPTURE_GL(MemoryBarrierByRegion, isCallValid, context, barriers);
902     }
903     else
904     {
905         GenerateContextLostErrorOnCurrentGlobalContext();
906     }
907     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
908 }
909 
GL_ProgramUniform1f(GLuint program,GLint location,GLfloat v0)910 void GL_APIENTRY GL_ProgramUniform1f(GLuint program, GLint location, GLfloat v0)
911 {
912     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
913     Context *context = GetValidGlobalContext();
914     EVENT(context, GLProgramUniform1f, "context = %d, program = %u, location = %d, v0 = %f",
915           CID(context), program, location, v0);
916 
917     if (context)
918     {
919         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
920         UniformLocation locationPacked = PackParam<UniformLocation>(location);
921         SCOPED_SHARE_CONTEXT_LOCK(context);
922         bool isCallValid =
923             (context->skipValidation() ||
924              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
925                                                 context->getMutableErrorSetForValidation(),
926                                                 angle::EntryPoint::GLProgramUniform1f) &&
927               ValidateProgramUniform1f(context, angle::EntryPoint::GLProgramUniform1f,
928                                        programPacked, locationPacked, v0)));
929         if (isCallValid)
930         {
931             context->programUniform1f(programPacked, locationPacked, v0);
932         }
933         ANGLE_CAPTURE_GL(ProgramUniform1f, isCallValid, context, programPacked, locationPacked, v0);
934     }
935     else
936     {
937         GenerateContextLostErrorOnCurrentGlobalContext();
938     }
939     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
940 }
941 
GL_ProgramUniform1fv(GLuint program,GLint location,GLsizei count,const GLfloat * value)942 void GL_APIENTRY GL_ProgramUniform1fv(GLuint program,
943                                       GLint location,
944                                       GLsizei count,
945                                       const GLfloat *value)
946 {
947     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
948     Context *context = GetValidGlobalContext();
949     EVENT(context, GLProgramUniform1fv,
950           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
951           CID(context), program, location, count, (uintptr_t)value);
952 
953     if (context)
954     {
955         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
956         UniformLocation locationPacked = PackParam<UniformLocation>(location);
957         SCOPED_SHARE_CONTEXT_LOCK(context);
958         bool isCallValid =
959             (context->skipValidation() ||
960              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
961                                                 context->getMutableErrorSetForValidation(),
962                                                 angle::EntryPoint::GLProgramUniform1fv) &&
963               ValidateProgramUniform1fv(context, angle::EntryPoint::GLProgramUniform1fv,
964                                         programPacked, locationPacked, count, value)));
965         if (isCallValid)
966         {
967             context->programUniform1fv(programPacked, locationPacked, count, value);
968         }
969         ANGLE_CAPTURE_GL(ProgramUniform1fv, isCallValid, context, programPacked, locationPacked,
970                          count, value);
971     }
972     else
973     {
974         GenerateContextLostErrorOnCurrentGlobalContext();
975     }
976     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
977 }
978 
GL_ProgramUniform1i(GLuint program,GLint location,GLint v0)979 void GL_APIENTRY GL_ProgramUniform1i(GLuint program, GLint location, GLint v0)
980 {
981     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
982     Context *context = GetValidGlobalContext();
983     EVENT(context, GLProgramUniform1i, "context = %d, program = %u, location = %d, v0 = %d",
984           CID(context), program, location, v0);
985 
986     if (context)
987     {
988         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
989         UniformLocation locationPacked = PackParam<UniformLocation>(location);
990         SCOPED_SHARE_CONTEXT_LOCK(context);
991         bool isCallValid =
992             (context->skipValidation() ||
993              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
994                                                 context->getMutableErrorSetForValidation(),
995                                                 angle::EntryPoint::GLProgramUniform1i) &&
996               ValidateProgramUniform1i(context, angle::EntryPoint::GLProgramUniform1i,
997                                        programPacked, locationPacked, v0)));
998         if (isCallValid)
999         {
1000             context->programUniform1i(programPacked, locationPacked, v0);
1001         }
1002         ANGLE_CAPTURE_GL(ProgramUniform1i, isCallValid, context, programPacked, locationPacked, v0);
1003     }
1004     else
1005     {
1006         GenerateContextLostErrorOnCurrentGlobalContext();
1007     }
1008     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1009 }
1010 
GL_ProgramUniform1iv(GLuint program,GLint location,GLsizei count,const GLint * value)1011 void GL_APIENTRY GL_ProgramUniform1iv(GLuint program,
1012                                       GLint location,
1013                                       GLsizei count,
1014                                       const GLint *value)
1015 {
1016     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1017     Context *context = GetValidGlobalContext();
1018     EVENT(context, GLProgramUniform1iv,
1019           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1020           CID(context), program, location, count, (uintptr_t)value);
1021 
1022     if (context)
1023     {
1024         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1025         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1026         SCOPED_SHARE_CONTEXT_LOCK(context);
1027         bool isCallValid =
1028             (context->skipValidation() ||
1029              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1030                                                 context->getMutableErrorSetForValidation(),
1031                                                 angle::EntryPoint::GLProgramUniform1iv) &&
1032               ValidateProgramUniform1iv(context, angle::EntryPoint::GLProgramUniform1iv,
1033                                         programPacked, locationPacked, count, value)));
1034         if (isCallValid)
1035         {
1036             context->programUniform1iv(programPacked, locationPacked, count, value);
1037         }
1038         ANGLE_CAPTURE_GL(ProgramUniform1iv, isCallValid, context, programPacked, locationPacked,
1039                          count, value);
1040     }
1041     else
1042     {
1043         GenerateContextLostErrorOnCurrentGlobalContext();
1044     }
1045     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1046 }
1047 
GL_ProgramUniform1ui(GLuint program,GLint location,GLuint v0)1048 void GL_APIENTRY GL_ProgramUniform1ui(GLuint program, GLint location, GLuint v0)
1049 {
1050     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1051     Context *context = GetValidGlobalContext();
1052     EVENT(context, GLProgramUniform1ui, "context = %d, program = %u, location = %d, v0 = %u",
1053           CID(context), program, location, v0);
1054 
1055     if (context)
1056     {
1057         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1058         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1059         SCOPED_SHARE_CONTEXT_LOCK(context);
1060         bool isCallValid =
1061             (context->skipValidation() ||
1062              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1063                                                 context->getMutableErrorSetForValidation(),
1064                                                 angle::EntryPoint::GLProgramUniform1ui) &&
1065               ValidateProgramUniform1ui(context, angle::EntryPoint::GLProgramUniform1ui,
1066                                         programPacked, locationPacked, v0)));
1067         if (isCallValid)
1068         {
1069             context->programUniform1ui(programPacked, locationPacked, v0);
1070         }
1071         ANGLE_CAPTURE_GL(ProgramUniform1ui, isCallValid, context, programPacked, locationPacked,
1072                          v0);
1073     }
1074     else
1075     {
1076         GenerateContextLostErrorOnCurrentGlobalContext();
1077     }
1078     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1079 }
1080 
GL_ProgramUniform1uiv(GLuint program,GLint location,GLsizei count,const GLuint * value)1081 void GL_APIENTRY GL_ProgramUniform1uiv(GLuint program,
1082                                        GLint location,
1083                                        GLsizei count,
1084                                        const GLuint *value)
1085 {
1086     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1087     Context *context = GetValidGlobalContext();
1088     EVENT(context, GLProgramUniform1uiv,
1089           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1090           CID(context), program, location, count, (uintptr_t)value);
1091 
1092     if (context)
1093     {
1094         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1095         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1096         SCOPED_SHARE_CONTEXT_LOCK(context);
1097         bool isCallValid =
1098             (context->skipValidation() ||
1099              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1100                                                 context->getMutableErrorSetForValidation(),
1101                                                 angle::EntryPoint::GLProgramUniform1uiv) &&
1102               ValidateProgramUniform1uiv(context, angle::EntryPoint::GLProgramUniform1uiv,
1103                                          programPacked, locationPacked, count, value)));
1104         if (isCallValid)
1105         {
1106             context->programUniform1uiv(programPacked, locationPacked, count, value);
1107         }
1108         ANGLE_CAPTURE_GL(ProgramUniform1uiv, isCallValid, context, programPacked, locationPacked,
1109                          count, value);
1110     }
1111     else
1112     {
1113         GenerateContextLostErrorOnCurrentGlobalContext();
1114     }
1115     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1116 }
1117 
GL_ProgramUniform2f(GLuint program,GLint location,GLfloat v0,GLfloat v1)1118 void GL_APIENTRY GL_ProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)
1119 {
1120     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1121     Context *context = GetValidGlobalContext();
1122     EVENT(context, GLProgramUniform2f,
1123           "context = %d, program = %u, location = %d, v0 = %f, v1 = %f", CID(context), program,
1124           location, v0, v1);
1125 
1126     if (context)
1127     {
1128         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1129         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1130         SCOPED_SHARE_CONTEXT_LOCK(context);
1131         bool isCallValid =
1132             (context->skipValidation() ||
1133              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1134                                                 context->getMutableErrorSetForValidation(),
1135                                                 angle::EntryPoint::GLProgramUniform2f) &&
1136               ValidateProgramUniform2f(context, angle::EntryPoint::GLProgramUniform2f,
1137                                        programPacked, locationPacked, v0, v1)));
1138         if (isCallValid)
1139         {
1140             context->programUniform2f(programPacked, locationPacked, v0, v1);
1141         }
1142         ANGLE_CAPTURE_GL(ProgramUniform2f, isCallValid, context, programPacked, locationPacked, v0,
1143                          v1);
1144     }
1145     else
1146     {
1147         GenerateContextLostErrorOnCurrentGlobalContext();
1148     }
1149     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1150 }
1151 
GL_ProgramUniform2fv(GLuint program,GLint location,GLsizei count,const GLfloat * value)1152 void GL_APIENTRY GL_ProgramUniform2fv(GLuint program,
1153                                       GLint location,
1154                                       GLsizei count,
1155                                       const GLfloat *value)
1156 {
1157     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1158     Context *context = GetValidGlobalContext();
1159     EVENT(context, GLProgramUniform2fv,
1160           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1161           CID(context), program, location, count, (uintptr_t)value);
1162 
1163     if (context)
1164     {
1165         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1166         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1167         SCOPED_SHARE_CONTEXT_LOCK(context);
1168         bool isCallValid =
1169             (context->skipValidation() ||
1170              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1171                                                 context->getMutableErrorSetForValidation(),
1172                                                 angle::EntryPoint::GLProgramUniform2fv) &&
1173               ValidateProgramUniform2fv(context, angle::EntryPoint::GLProgramUniform2fv,
1174                                         programPacked, locationPacked, count, value)));
1175         if (isCallValid)
1176         {
1177             context->programUniform2fv(programPacked, locationPacked, count, value);
1178         }
1179         ANGLE_CAPTURE_GL(ProgramUniform2fv, isCallValid, context, programPacked, locationPacked,
1180                          count, value);
1181     }
1182     else
1183     {
1184         GenerateContextLostErrorOnCurrentGlobalContext();
1185     }
1186     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1187 }
1188 
GL_ProgramUniform2i(GLuint program,GLint location,GLint v0,GLint v1)1189 void GL_APIENTRY GL_ProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)
1190 {
1191     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1192     Context *context = GetValidGlobalContext();
1193     EVENT(context, GLProgramUniform2i,
1194           "context = %d, program = %u, location = %d, v0 = %d, v1 = %d", CID(context), program,
1195           location, v0, v1);
1196 
1197     if (context)
1198     {
1199         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1200         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1201         SCOPED_SHARE_CONTEXT_LOCK(context);
1202         bool isCallValid =
1203             (context->skipValidation() ||
1204              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1205                                                 context->getMutableErrorSetForValidation(),
1206                                                 angle::EntryPoint::GLProgramUniform2i) &&
1207               ValidateProgramUniform2i(context, angle::EntryPoint::GLProgramUniform2i,
1208                                        programPacked, locationPacked, v0, v1)));
1209         if (isCallValid)
1210         {
1211             context->programUniform2i(programPacked, locationPacked, v0, v1);
1212         }
1213         ANGLE_CAPTURE_GL(ProgramUniform2i, isCallValid, context, programPacked, locationPacked, v0,
1214                          v1);
1215     }
1216     else
1217     {
1218         GenerateContextLostErrorOnCurrentGlobalContext();
1219     }
1220     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1221 }
1222 
GL_ProgramUniform2iv(GLuint program,GLint location,GLsizei count,const GLint * value)1223 void GL_APIENTRY GL_ProgramUniform2iv(GLuint program,
1224                                       GLint location,
1225                                       GLsizei count,
1226                                       const GLint *value)
1227 {
1228     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1229     Context *context = GetValidGlobalContext();
1230     EVENT(context, GLProgramUniform2iv,
1231           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1232           CID(context), program, location, count, (uintptr_t)value);
1233 
1234     if (context)
1235     {
1236         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1237         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1238         SCOPED_SHARE_CONTEXT_LOCK(context);
1239         bool isCallValid =
1240             (context->skipValidation() ||
1241              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1242                                                 context->getMutableErrorSetForValidation(),
1243                                                 angle::EntryPoint::GLProgramUniform2iv) &&
1244               ValidateProgramUniform2iv(context, angle::EntryPoint::GLProgramUniform2iv,
1245                                         programPacked, locationPacked, count, value)));
1246         if (isCallValid)
1247         {
1248             context->programUniform2iv(programPacked, locationPacked, count, value);
1249         }
1250         ANGLE_CAPTURE_GL(ProgramUniform2iv, isCallValid, context, programPacked, locationPacked,
1251                          count, value);
1252     }
1253     else
1254     {
1255         GenerateContextLostErrorOnCurrentGlobalContext();
1256     }
1257     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1258 }
1259 
GL_ProgramUniform2ui(GLuint program,GLint location,GLuint v0,GLuint v1)1260 void GL_APIENTRY GL_ProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1)
1261 {
1262     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1263     Context *context = GetValidGlobalContext();
1264     EVENT(context, GLProgramUniform2ui,
1265           "context = %d, program = %u, location = %d, v0 = %u, v1 = %u", CID(context), program,
1266           location, v0, v1);
1267 
1268     if (context)
1269     {
1270         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1271         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1272         SCOPED_SHARE_CONTEXT_LOCK(context);
1273         bool isCallValid =
1274             (context->skipValidation() ||
1275              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1276                                                 context->getMutableErrorSetForValidation(),
1277                                                 angle::EntryPoint::GLProgramUniform2ui) &&
1278               ValidateProgramUniform2ui(context, angle::EntryPoint::GLProgramUniform2ui,
1279                                         programPacked, locationPacked, v0, v1)));
1280         if (isCallValid)
1281         {
1282             context->programUniform2ui(programPacked, locationPacked, v0, v1);
1283         }
1284         ANGLE_CAPTURE_GL(ProgramUniform2ui, isCallValid, context, programPacked, locationPacked, v0,
1285                          v1);
1286     }
1287     else
1288     {
1289         GenerateContextLostErrorOnCurrentGlobalContext();
1290     }
1291     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1292 }
1293 
GL_ProgramUniform2uiv(GLuint program,GLint location,GLsizei count,const GLuint * value)1294 void GL_APIENTRY GL_ProgramUniform2uiv(GLuint program,
1295                                        GLint location,
1296                                        GLsizei count,
1297                                        const GLuint *value)
1298 {
1299     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1300     Context *context = GetValidGlobalContext();
1301     EVENT(context, GLProgramUniform2uiv,
1302           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1303           CID(context), program, location, count, (uintptr_t)value);
1304 
1305     if (context)
1306     {
1307         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1308         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1309         SCOPED_SHARE_CONTEXT_LOCK(context);
1310         bool isCallValid =
1311             (context->skipValidation() ||
1312              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1313                                                 context->getMutableErrorSetForValidation(),
1314                                                 angle::EntryPoint::GLProgramUniform2uiv) &&
1315               ValidateProgramUniform2uiv(context, angle::EntryPoint::GLProgramUniform2uiv,
1316                                          programPacked, locationPacked, count, value)));
1317         if (isCallValid)
1318         {
1319             context->programUniform2uiv(programPacked, locationPacked, count, value);
1320         }
1321         ANGLE_CAPTURE_GL(ProgramUniform2uiv, isCallValid, context, programPacked, locationPacked,
1322                          count, value);
1323     }
1324     else
1325     {
1326         GenerateContextLostErrorOnCurrentGlobalContext();
1327     }
1328     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1329 }
1330 
1331 void GL_APIENTRY
GL_ProgramUniform3f(GLuint program,GLint location,GLfloat v0,GLfloat v1,GLfloat v2)1332 GL_ProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
1333 {
1334     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1335     Context *context = GetValidGlobalContext();
1336     EVENT(context, GLProgramUniform3f,
1337           "context = %d, program = %u, location = %d, v0 = %f, v1 = %f, v2 = %f", CID(context),
1338           program, location, v0, v1, v2);
1339 
1340     if (context)
1341     {
1342         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1343         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1344         SCOPED_SHARE_CONTEXT_LOCK(context);
1345         bool isCallValid =
1346             (context->skipValidation() ||
1347              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1348                                                 context->getMutableErrorSetForValidation(),
1349                                                 angle::EntryPoint::GLProgramUniform3f) &&
1350               ValidateProgramUniform3f(context, angle::EntryPoint::GLProgramUniform3f,
1351                                        programPacked, locationPacked, v0, v1, v2)));
1352         if (isCallValid)
1353         {
1354             context->programUniform3f(programPacked, locationPacked, v0, v1, v2);
1355         }
1356         ANGLE_CAPTURE_GL(ProgramUniform3f, isCallValid, context, programPacked, locationPacked, v0,
1357                          v1, v2);
1358     }
1359     else
1360     {
1361         GenerateContextLostErrorOnCurrentGlobalContext();
1362     }
1363     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1364 }
1365 
GL_ProgramUniform3fv(GLuint program,GLint location,GLsizei count,const GLfloat * value)1366 void GL_APIENTRY GL_ProgramUniform3fv(GLuint program,
1367                                       GLint location,
1368                                       GLsizei count,
1369                                       const GLfloat *value)
1370 {
1371     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1372     Context *context = GetValidGlobalContext();
1373     EVENT(context, GLProgramUniform3fv,
1374           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1375           CID(context), program, location, count, (uintptr_t)value);
1376 
1377     if (context)
1378     {
1379         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1380         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1381         SCOPED_SHARE_CONTEXT_LOCK(context);
1382         bool isCallValid =
1383             (context->skipValidation() ||
1384              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1385                                                 context->getMutableErrorSetForValidation(),
1386                                                 angle::EntryPoint::GLProgramUniform3fv) &&
1387               ValidateProgramUniform3fv(context, angle::EntryPoint::GLProgramUniform3fv,
1388                                         programPacked, locationPacked, count, value)));
1389         if (isCallValid)
1390         {
1391             context->programUniform3fv(programPacked, locationPacked, count, value);
1392         }
1393         ANGLE_CAPTURE_GL(ProgramUniform3fv, isCallValid, context, programPacked, locationPacked,
1394                          count, value);
1395     }
1396     else
1397     {
1398         GenerateContextLostErrorOnCurrentGlobalContext();
1399     }
1400     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1401 }
1402 
GL_ProgramUniform3i(GLuint program,GLint location,GLint v0,GLint v1,GLint v2)1403 void GL_APIENTRY GL_ProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
1404 {
1405     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1406     Context *context = GetValidGlobalContext();
1407     EVENT(context, GLProgramUniform3i,
1408           "context = %d, program = %u, location = %d, v0 = %d, v1 = %d, v2 = %d", CID(context),
1409           program, location, v0, v1, v2);
1410 
1411     if (context)
1412     {
1413         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1414         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1415         SCOPED_SHARE_CONTEXT_LOCK(context);
1416         bool isCallValid =
1417             (context->skipValidation() ||
1418              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1419                                                 context->getMutableErrorSetForValidation(),
1420                                                 angle::EntryPoint::GLProgramUniform3i) &&
1421               ValidateProgramUniform3i(context, angle::EntryPoint::GLProgramUniform3i,
1422                                        programPacked, locationPacked, v0, v1, v2)));
1423         if (isCallValid)
1424         {
1425             context->programUniform3i(programPacked, locationPacked, v0, v1, v2);
1426         }
1427         ANGLE_CAPTURE_GL(ProgramUniform3i, isCallValid, context, programPacked, locationPacked, v0,
1428                          v1, v2);
1429     }
1430     else
1431     {
1432         GenerateContextLostErrorOnCurrentGlobalContext();
1433     }
1434     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1435 }
1436 
GL_ProgramUniform3iv(GLuint program,GLint location,GLsizei count,const GLint * value)1437 void GL_APIENTRY GL_ProgramUniform3iv(GLuint program,
1438                                       GLint location,
1439                                       GLsizei count,
1440                                       const GLint *value)
1441 {
1442     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1443     Context *context = GetValidGlobalContext();
1444     EVENT(context, GLProgramUniform3iv,
1445           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1446           CID(context), program, location, count, (uintptr_t)value);
1447 
1448     if (context)
1449     {
1450         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1451         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1452         SCOPED_SHARE_CONTEXT_LOCK(context);
1453         bool isCallValid =
1454             (context->skipValidation() ||
1455              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1456                                                 context->getMutableErrorSetForValidation(),
1457                                                 angle::EntryPoint::GLProgramUniform3iv) &&
1458               ValidateProgramUniform3iv(context, angle::EntryPoint::GLProgramUniform3iv,
1459                                         programPacked, locationPacked, count, value)));
1460         if (isCallValid)
1461         {
1462             context->programUniform3iv(programPacked, locationPacked, count, value);
1463         }
1464         ANGLE_CAPTURE_GL(ProgramUniform3iv, isCallValid, context, programPacked, locationPacked,
1465                          count, value);
1466     }
1467     else
1468     {
1469         GenerateContextLostErrorOnCurrentGlobalContext();
1470     }
1471     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1472 }
1473 
1474 void GL_APIENTRY
GL_ProgramUniform3ui(GLuint program,GLint location,GLuint v0,GLuint v1,GLuint v2)1475 GL_ProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
1476 {
1477     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1478     Context *context = GetValidGlobalContext();
1479     EVENT(context, GLProgramUniform3ui,
1480           "context = %d, program = %u, location = %d, v0 = %u, v1 = %u, v2 = %u", CID(context),
1481           program, location, v0, v1, v2);
1482 
1483     if (context)
1484     {
1485         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1486         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1487         SCOPED_SHARE_CONTEXT_LOCK(context);
1488         bool isCallValid =
1489             (context->skipValidation() ||
1490              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1491                                                 context->getMutableErrorSetForValidation(),
1492                                                 angle::EntryPoint::GLProgramUniform3ui) &&
1493               ValidateProgramUniform3ui(context, angle::EntryPoint::GLProgramUniform3ui,
1494                                         programPacked, locationPacked, v0, v1, v2)));
1495         if (isCallValid)
1496         {
1497             context->programUniform3ui(programPacked, locationPacked, v0, v1, v2);
1498         }
1499         ANGLE_CAPTURE_GL(ProgramUniform3ui, isCallValid, context, programPacked, locationPacked, v0,
1500                          v1, v2);
1501     }
1502     else
1503     {
1504         GenerateContextLostErrorOnCurrentGlobalContext();
1505     }
1506     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1507 }
1508 
GL_ProgramUniform3uiv(GLuint program,GLint location,GLsizei count,const GLuint * value)1509 void GL_APIENTRY GL_ProgramUniform3uiv(GLuint program,
1510                                        GLint location,
1511                                        GLsizei count,
1512                                        const GLuint *value)
1513 {
1514     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1515     Context *context = GetValidGlobalContext();
1516     EVENT(context, GLProgramUniform3uiv,
1517           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1518           CID(context), program, location, count, (uintptr_t)value);
1519 
1520     if (context)
1521     {
1522         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1523         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1524         SCOPED_SHARE_CONTEXT_LOCK(context);
1525         bool isCallValid =
1526             (context->skipValidation() ||
1527              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1528                                                 context->getMutableErrorSetForValidation(),
1529                                                 angle::EntryPoint::GLProgramUniform3uiv) &&
1530               ValidateProgramUniform3uiv(context, angle::EntryPoint::GLProgramUniform3uiv,
1531                                          programPacked, locationPacked, count, value)));
1532         if (isCallValid)
1533         {
1534             context->programUniform3uiv(programPacked, locationPacked, count, value);
1535         }
1536         ANGLE_CAPTURE_GL(ProgramUniform3uiv, isCallValid, context, programPacked, locationPacked,
1537                          count, value);
1538     }
1539     else
1540     {
1541         GenerateContextLostErrorOnCurrentGlobalContext();
1542     }
1543     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1544 }
1545 
1546 void GL_APIENTRY
GL_ProgramUniform4f(GLuint program,GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)1547 GL_ProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
1548 {
1549     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1550     Context *context = GetValidGlobalContext();
1551     EVENT(context, GLProgramUniform4f,
1552           "context = %d, program = %u, location = %d, v0 = %f, v1 = %f, v2 = %f, v3 = %f",
1553           CID(context), program, location, v0, v1, v2, v3);
1554 
1555     if (context)
1556     {
1557         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1558         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1559         SCOPED_SHARE_CONTEXT_LOCK(context);
1560         bool isCallValid =
1561             (context->skipValidation() ||
1562              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1563                                                 context->getMutableErrorSetForValidation(),
1564                                                 angle::EntryPoint::GLProgramUniform4f) &&
1565               ValidateProgramUniform4f(context, angle::EntryPoint::GLProgramUniform4f,
1566                                        programPacked, locationPacked, v0, v1, v2, v3)));
1567         if (isCallValid)
1568         {
1569             context->programUniform4f(programPacked, locationPacked, v0, v1, v2, v3);
1570         }
1571         ANGLE_CAPTURE_GL(ProgramUniform4f, isCallValid, context, programPacked, locationPacked, v0,
1572                          v1, v2, v3);
1573     }
1574     else
1575     {
1576         GenerateContextLostErrorOnCurrentGlobalContext();
1577     }
1578     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1579 }
1580 
GL_ProgramUniform4fv(GLuint program,GLint location,GLsizei count,const GLfloat * value)1581 void GL_APIENTRY GL_ProgramUniform4fv(GLuint program,
1582                                       GLint location,
1583                                       GLsizei count,
1584                                       const GLfloat *value)
1585 {
1586     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1587     Context *context = GetValidGlobalContext();
1588     EVENT(context, GLProgramUniform4fv,
1589           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1590           CID(context), program, location, count, (uintptr_t)value);
1591 
1592     if (context)
1593     {
1594         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1595         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1596         SCOPED_SHARE_CONTEXT_LOCK(context);
1597         bool isCallValid =
1598             (context->skipValidation() ||
1599              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1600                                                 context->getMutableErrorSetForValidation(),
1601                                                 angle::EntryPoint::GLProgramUniform4fv) &&
1602               ValidateProgramUniform4fv(context, angle::EntryPoint::GLProgramUniform4fv,
1603                                         programPacked, locationPacked, count, value)));
1604         if (isCallValid)
1605         {
1606             context->programUniform4fv(programPacked, locationPacked, count, value);
1607         }
1608         ANGLE_CAPTURE_GL(ProgramUniform4fv, isCallValid, context, programPacked, locationPacked,
1609                          count, value);
1610     }
1611     else
1612     {
1613         GenerateContextLostErrorOnCurrentGlobalContext();
1614     }
1615     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1616 }
1617 
1618 void GL_APIENTRY
GL_ProgramUniform4i(GLuint program,GLint location,GLint v0,GLint v1,GLint v2,GLint v3)1619 GL_ProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
1620 {
1621     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1622     Context *context = GetValidGlobalContext();
1623     EVENT(context, GLProgramUniform4i,
1624           "context = %d, program = %u, location = %d, v0 = %d, v1 = %d, v2 = %d, v3 = %d",
1625           CID(context), program, location, v0, v1, v2, v3);
1626 
1627     if (context)
1628     {
1629         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1630         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1631         SCOPED_SHARE_CONTEXT_LOCK(context);
1632         bool isCallValid =
1633             (context->skipValidation() ||
1634              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1635                                                 context->getMutableErrorSetForValidation(),
1636                                                 angle::EntryPoint::GLProgramUniform4i) &&
1637               ValidateProgramUniform4i(context, angle::EntryPoint::GLProgramUniform4i,
1638                                        programPacked, locationPacked, v0, v1, v2, v3)));
1639         if (isCallValid)
1640         {
1641             context->programUniform4i(programPacked, locationPacked, v0, v1, v2, v3);
1642         }
1643         ANGLE_CAPTURE_GL(ProgramUniform4i, isCallValid, context, programPacked, locationPacked, v0,
1644                          v1, v2, v3);
1645     }
1646     else
1647     {
1648         GenerateContextLostErrorOnCurrentGlobalContext();
1649     }
1650     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1651 }
1652 
GL_ProgramUniform4iv(GLuint program,GLint location,GLsizei count,const GLint * value)1653 void GL_APIENTRY GL_ProgramUniform4iv(GLuint program,
1654                                       GLint location,
1655                                       GLsizei count,
1656                                       const GLint *value)
1657 {
1658     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1659     Context *context = GetValidGlobalContext();
1660     EVENT(context, GLProgramUniform4iv,
1661           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1662           CID(context), program, location, count, (uintptr_t)value);
1663 
1664     if (context)
1665     {
1666         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1667         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1668         SCOPED_SHARE_CONTEXT_LOCK(context);
1669         bool isCallValid =
1670             (context->skipValidation() ||
1671              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1672                                                 context->getMutableErrorSetForValidation(),
1673                                                 angle::EntryPoint::GLProgramUniform4iv) &&
1674               ValidateProgramUniform4iv(context, angle::EntryPoint::GLProgramUniform4iv,
1675                                         programPacked, locationPacked, count, value)));
1676         if (isCallValid)
1677         {
1678             context->programUniform4iv(programPacked, locationPacked, count, value);
1679         }
1680         ANGLE_CAPTURE_GL(ProgramUniform4iv, isCallValid, context, programPacked, locationPacked,
1681                          count, value);
1682     }
1683     else
1684     {
1685         GenerateContextLostErrorOnCurrentGlobalContext();
1686     }
1687     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1688 }
1689 
1690 void GL_APIENTRY
GL_ProgramUniform4ui(GLuint program,GLint location,GLuint v0,GLuint v1,GLuint v2,GLuint v3)1691 GL_ProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1692 {
1693     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1694     Context *context = GetValidGlobalContext();
1695     EVENT(context, GLProgramUniform4ui,
1696           "context = %d, program = %u, location = %d, v0 = %u, v1 = %u, v2 = %u, v3 = %u",
1697           CID(context), program, location, v0, v1, v2, v3);
1698 
1699     if (context)
1700     {
1701         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1702         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1703         SCOPED_SHARE_CONTEXT_LOCK(context);
1704         bool isCallValid =
1705             (context->skipValidation() ||
1706              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1707                                                 context->getMutableErrorSetForValidation(),
1708                                                 angle::EntryPoint::GLProgramUniform4ui) &&
1709               ValidateProgramUniform4ui(context, angle::EntryPoint::GLProgramUniform4ui,
1710                                         programPacked, locationPacked, v0, v1, v2, v3)));
1711         if (isCallValid)
1712         {
1713             context->programUniform4ui(programPacked, locationPacked, v0, v1, v2, v3);
1714         }
1715         ANGLE_CAPTURE_GL(ProgramUniform4ui, isCallValid, context, programPacked, locationPacked, v0,
1716                          v1, v2, v3);
1717     }
1718     else
1719     {
1720         GenerateContextLostErrorOnCurrentGlobalContext();
1721     }
1722     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1723 }
1724 
GL_ProgramUniform4uiv(GLuint program,GLint location,GLsizei count,const GLuint * value)1725 void GL_APIENTRY GL_ProgramUniform4uiv(GLuint program,
1726                                        GLint location,
1727                                        GLsizei count,
1728                                        const GLuint *value)
1729 {
1730     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1731     Context *context = GetValidGlobalContext();
1732     EVENT(context, GLProgramUniform4uiv,
1733           "context = %d, program = %u, location = %d, count = %d, value = 0x%016" PRIxPTR "",
1734           CID(context), program, location, count, (uintptr_t)value);
1735 
1736     if (context)
1737     {
1738         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1739         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1740         SCOPED_SHARE_CONTEXT_LOCK(context);
1741         bool isCallValid =
1742             (context->skipValidation() ||
1743              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1744                                                 context->getMutableErrorSetForValidation(),
1745                                                 angle::EntryPoint::GLProgramUniform4uiv) &&
1746               ValidateProgramUniform4uiv(context, angle::EntryPoint::GLProgramUniform4uiv,
1747                                          programPacked, locationPacked, count, value)));
1748         if (isCallValid)
1749         {
1750             context->programUniform4uiv(programPacked, locationPacked, count, value);
1751         }
1752         ANGLE_CAPTURE_GL(ProgramUniform4uiv, isCallValid, context, programPacked, locationPacked,
1753                          count, value);
1754     }
1755     else
1756     {
1757         GenerateContextLostErrorOnCurrentGlobalContext();
1758     }
1759     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1760 }
1761 
GL_ProgramUniformMatrix2fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)1762 void GL_APIENTRY GL_ProgramUniformMatrix2fv(GLuint program,
1763                                             GLint location,
1764                                             GLsizei count,
1765                                             GLboolean transpose,
1766                                             const GLfloat *value)
1767 {
1768     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1769     Context *context = GetValidGlobalContext();
1770     EVENT(context, GLProgramUniformMatrix2fv,
1771           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
1772           "0x%016" PRIxPTR "",
1773           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
1774 
1775     if (context)
1776     {
1777         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1778         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1779         SCOPED_SHARE_CONTEXT_LOCK(context);
1780         bool isCallValid =
1781             (context->skipValidation() ||
1782              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1783                                                 context->getMutableErrorSetForValidation(),
1784                                                 angle::EntryPoint::GLProgramUniformMatrix2fv) &&
1785               ValidateProgramUniformMatrix2fv(context, angle::EntryPoint::GLProgramUniformMatrix2fv,
1786                                               programPacked, locationPacked, count, transpose,
1787                                               value)));
1788         if (isCallValid)
1789         {
1790             context->programUniformMatrix2fv(programPacked, locationPacked, count, transpose,
1791                                              value);
1792         }
1793         ANGLE_CAPTURE_GL(ProgramUniformMatrix2fv, isCallValid, context, programPacked,
1794                          locationPacked, count, transpose, value);
1795     }
1796     else
1797     {
1798         GenerateContextLostErrorOnCurrentGlobalContext();
1799     }
1800     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1801 }
1802 
GL_ProgramUniformMatrix2x3fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)1803 void GL_APIENTRY GL_ProgramUniformMatrix2x3fv(GLuint program,
1804                                               GLint location,
1805                                               GLsizei count,
1806                                               GLboolean transpose,
1807                                               const GLfloat *value)
1808 {
1809     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1810     Context *context = GetValidGlobalContext();
1811     EVENT(context, GLProgramUniformMatrix2x3fv,
1812           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
1813           "0x%016" PRIxPTR "",
1814           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
1815 
1816     if (context)
1817     {
1818         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1819         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1820         SCOPED_SHARE_CONTEXT_LOCK(context);
1821         bool isCallValid =
1822             (context->skipValidation() ||
1823              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1824                                                 context->getMutableErrorSetForValidation(),
1825                                                 angle::EntryPoint::GLProgramUniformMatrix2x3fv) &&
1826               ValidateProgramUniformMatrix2x3fv(
1827                   context, angle::EntryPoint::GLProgramUniformMatrix2x3fv, programPacked,
1828                   locationPacked, count, transpose, value)));
1829         if (isCallValid)
1830         {
1831             context->programUniformMatrix2x3fv(programPacked, locationPacked, count, transpose,
1832                                                value);
1833         }
1834         ANGLE_CAPTURE_GL(ProgramUniformMatrix2x3fv, isCallValid, context, programPacked,
1835                          locationPacked, count, transpose, value);
1836     }
1837     else
1838     {
1839         GenerateContextLostErrorOnCurrentGlobalContext();
1840     }
1841     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1842 }
1843 
GL_ProgramUniformMatrix2x4fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)1844 void GL_APIENTRY GL_ProgramUniformMatrix2x4fv(GLuint program,
1845                                               GLint location,
1846                                               GLsizei count,
1847                                               GLboolean transpose,
1848                                               const GLfloat *value)
1849 {
1850     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1851     Context *context = GetValidGlobalContext();
1852     EVENT(context, GLProgramUniformMatrix2x4fv,
1853           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
1854           "0x%016" PRIxPTR "",
1855           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
1856 
1857     if (context)
1858     {
1859         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1860         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1861         SCOPED_SHARE_CONTEXT_LOCK(context);
1862         bool isCallValid =
1863             (context->skipValidation() ||
1864              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1865                                                 context->getMutableErrorSetForValidation(),
1866                                                 angle::EntryPoint::GLProgramUniformMatrix2x4fv) &&
1867               ValidateProgramUniformMatrix2x4fv(
1868                   context, angle::EntryPoint::GLProgramUniformMatrix2x4fv, programPacked,
1869                   locationPacked, count, transpose, value)));
1870         if (isCallValid)
1871         {
1872             context->programUniformMatrix2x4fv(programPacked, locationPacked, count, transpose,
1873                                                value);
1874         }
1875         ANGLE_CAPTURE_GL(ProgramUniformMatrix2x4fv, isCallValid, context, programPacked,
1876                          locationPacked, count, transpose, value);
1877     }
1878     else
1879     {
1880         GenerateContextLostErrorOnCurrentGlobalContext();
1881     }
1882     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1883 }
1884 
GL_ProgramUniformMatrix3fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)1885 void GL_APIENTRY GL_ProgramUniformMatrix3fv(GLuint program,
1886                                             GLint location,
1887                                             GLsizei count,
1888                                             GLboolean transpose,
1889                                             const GLfloat *value)
1890 {
1891     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1892     Context *context = GetValidGlobalContext();
1893     EVENT(context, GLProgramUniformMatrix3fv,
1894           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
1895           "0x%016" PRIxPTR "",
1896           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
1897 
1898     if (context)
1899     {
1900         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1901         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1902         SCOPED_SHARE_CONTEXT_LOCK(context);
1903         bool isCallValid =
1904             (context->skipValidation() ||
1905              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1906                                                 context->getMutableErrorSetForValidation(),
1907                                                 angle::EntryPoint::GLProgramUniformMatrix3fv) &&
1908               ValidateProgramUniformMatrix3fv(context, angle::EntryPoint::GLProgramUniformMatrix3fv,
1909                                               programPacked, locationPacked, count, transpose,
1910                                               value)));
1911         if (isCallValid)
1912         {
1913             context->programUniformMatrix3fv(programPacked, locationPacked, count, transpose,
1914                                              value);
1915         }
1916         ANGLE_CAPTURE_GL(ProgramUniformMatrix3fv, isCallValid, context, programPacked,
1917                          locationPacked, count, transpose, value);
1918     }
1919     else
1920     {
1921         GenerateContextLostErrorOnCurrentGlobalContext();
1922     }
1923     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1924 }
1925 
GL_ProgramUniformMatrix3x2fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)1926 void GL_APIENTRY GL_ProgramUniformMatrix3x2fv(GLuint program,
1927                                               GLint location,
1928                                               GLsizei count,
1929                                               GLboolean transpose,
1930                                               const GLfloat *value)
1931 {
1932     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1933     Context *context = GetValidGlobalContext();
1934     EVENT(context, GLProgramUniformMatrix3x2fv,
1935           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
1936           "0x%016" PRIxPTR "",
1937           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
1938 
1939     if (context)
1940     {
1941         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1942         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1943         SCOPED_SHARE_CONTEXT_LOCK(context);
1944         bool isCallValid =
1945             (context->skipValidation() ||
1946              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1947                                                 context->getMutableErrorSetForValidation(),
1948                                                 angle::EntryPoint::GLProgramUniformMatrix3x2fv) &&
1949               ValidateProgramUniformMatrix3x2fv(
1950                   context, angle::EntryPoint::GLProgramUniformMatrix3x2fv, programPacked,
1951                   locationPacked, count, transpose, value)));
1952         if (isCallValid)
1953         {
1954             context->programUniformMatrix3x2fv(programPacked, locationPacked, count, transpose,
1955                                                value);
1956         }
1957         ANGLE_CAPTURE_GL(ProgramUniformMatrix3x2fv, isCallValid, context, programPacked,
1958                          locationPacked, count, transpose, value);
1959     }
1960     else
1961     {
1962         GenerateContextLostErrorOnCurrentGlobalContext();
1963     }
1964     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1965 }
1966 
GL_ProgramUniformMatrix3x4fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)1967 void GL_APIENTRY GL_ProgramUniformMatrix3x4fv(GLuint program,
1968                                               GLint location,
1969                                               GLsizei count,
1970                                               GLboolean transpose,
1971                                               const GLfloat *value)
1972 {
1973     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
1974     Context *context = GetValidGlobalContext();
1975     EVENT(context, GLProgramUniformMatrix3x4fv,
1976           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
1977           "0x%016" PRIxPTR "",
1978           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
1979 
1980     if (context)
1981     {
1982         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
1983         UniformLocation locationPacked = PackParam<UniformLocation>(location);
1984         SCOPED_SHARE_CONTEXT_LOCK(context);
1985         bool isCallValid =
1986             (context->skipValidation() ||
1987              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
1988                                                 context->getMutableErrorSetForValidation(),
1989                                                 angle::EntryPoint::GLProgramUniformMatrix3x4fv) &&
1990               ValidateProgramUniformMatrix3x4fv(
1991                   context, angle::EntryPoint::GLProgramUniformMatrix3x4fv, programPacked,
1992                   locationPacked, count, transpose, value)));
1993         if (isCallValid)
1994         {
1995             context->programUniformMatrix3x4fv(programPacked, locationPacked, count, transpose,
1996                                                value);
1997         }
1998         ANGLE_CAPTURE_GL(ProgramUniformMatrix3x4fv, isCallValid, context, programPacked,
1999                          locationPacked, count, transpose, value);
2000     }
2001     else
2002     {
2003         GenerateContextLostErrorOnCurrentGlobalContext();
2004     }
2005     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2006 }
2007 
GL_ProgramUniformMatrix4fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)2008 void GL_APIENTRY GL_ProgramUniformMatrix4fv(GLuint program,
2009                                             GLint location,
2010                                             GLsizei count,
2011                                             GLboolean transpose,
2012                                             const GLfloat *value)
2013 {
2014     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2015     Context *context = GetValidGlobalContext();
2016     EVENT(context, GLProgramUniformMatrix4fv,
2017           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
2018           "0x%016" PRIxPTR "",
2019           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
2020 
2021     if (context)
2022     {
2023         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
2024         UniformLocation locationPacked = PackParam<UniformLocation>(location);
2025         SCOPED_SHARE_CONTEXT_LOCK(context);
2026         bool isCallValid =
2027             (context->skipValidation() ||
2028              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2029                                                 context->getMutableErrorSetForValidation(),
2030                                                 angle::EntryPoint::GLProgramUniformMatrix4fv) &&
2031               ValidateProgramUniformMatrix4fv(context, angle::EntryPoint::GLProgramUniformMatrix4fv,
2032                                               programPacked, locationPacked, count, transpose,
2033                                               value)));
2034         if (isCallValid)
2035         {
2036             context->programUniformMatrix4fv(programPacked, locationPacked, count, transpose,
2037                                              value);
2038         }
2039         ANGLE_CAPTURE_GL(ProgramUniformMatrix4fv, isCallValid, context, programPacked,
2040                          locationPacked, count, transpose, value);
2041     }
2042     else
2043     {
2044         GenerateContextLostErrorOnCurrentGlobalContext();
2045     }
2046     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2047 }
2048 
GL_ProgramUniformMatrix4x2fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)2049 void GL_APIENTRY GL_ProgramUniformMatrix4x2fv(GLuint program,
2050                                               GLint location,
2051                                               GLsizei count,
2052                                               GLboolean transpose,
2053                                               const GLfloat *value)
2054 {
2055     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2056     Context *context = GetValidGlobalContext();
2057     EVENT(context, GLProgramUniformMatrix4x2fv,
2058           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
2059           "0x%016" PRIxPTR "",
2060           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
2061 
2062     if (context)
2063     {
2064         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
2065         UniformLocation locationPacked = PackParam<UniformLocation>(location);
2066         SCOPED_SHARE_CONTEXT_LOCK(context);
2067         bool isCallValid =
2068             (context->skipValidation() ||
2069              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2070                                                 context->getMutableErrorSetForValidation(),
2071                                                 angle::EntryPoint::GLProgramUniformMatrix4x2fv) &&
2072               ValidateProgramUniformMatrix4x2fv(
2073                   context, angle::EntryPoint::GLProgramUniformMatrix4x2fv, programPacked,
2074                   locationPacked, count, transpose, value)));
2075         if (isCallValid)
2076         {
2077             context->programUniformMatrix4x2fv(programPacked, locationPacked, count, transpose,
2078                                                value);
2079         }
2080         ANGLE_CAPTURE_GL(ProgramUniformMatrix4x2fv, isCallValid, context, programPacked,
2081                          locationPacked, count, transpose, value);
2082     }
2083     else
2084     {
2085         GenerateContextLostErrorOnCurrentGlobalContext();
2086     }
2087     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2088 }
2089 
GL_ProgramUniformMatrix4x3fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)2090 void GL_APIENTRY GL_ProgramUniformMatrix4x3fv(GLuint program,
2091                                               GLint location,
2092                                               GLsizei count,
2093                                               GLboolean transpose,
2094                                               const GLfloat *value)
2095 {
2096     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2097     Context *context = GetValidGlobalContext();
2098     EVENT(context, GLProgramUniformMatrix4x3fv,
2099           "context = %d, program = %u, location = %d, count = %d, transpose = %s, value = "
2100           "0x%016" PRIxPTR "",
2101           CID(context), program, location, count, GLbooleanToString(transpose), (uintptr_t)value);
2102 
2103     if (context)
2104     {
2105         ShaderProgramID programPacked  = PackParam<ShaderProgramID>(program);
2106         UniformLocation locationPacked = PackParam<UniformLocation>(location);
2107         SCOPED_SHARE_CONTEXT_LOCK(context);
2108         bool isCallValid =
2109             (context->skipValidation() ||
2110              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2111                                                 context->getMutableErrorSetForValidation(),
2112                                                 angle::EntryPoint::GLProgramUniformMatrix4x3fv) &&
2113               ValidateProgramUniformMatrix4x3fv(
2114                   context, angle::EntryPoint::GLProgramUniformMatrix4x3fv, programPacked,
2115                   locationPacked, count, transpose, value)));
2116         if (isCallValid)
2117         {
2118             context->programUniformMatrix4x3fv(programPacked, locationPacked, count, transpose,
2119                                                value);
2120         }
2121         ANGLE_CAPTURE_GL(ProgramUniformMatrix4x3fv, isCallValid, context, programPacked,
2122                          locationPacked, count, transpose, value);
2123     }
2124     else
2125     {
2126         GenerateContextLostErrorOnCurrentGlobalContext();
2127     }
2128     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2129 }
2130 
GL_SampleMaski(GLuint maskNumber,GLbitfield mask)2131 void GL_APIENTRY GL_SampleMaski(GLuint maskNumber, GLbitfield mask)
2132 {
2133     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2134     Context *context = GetValidGlobalContext();
2135     EVENT(context, GLSampleMaski, "context = %d, maskNumber = %u, mask = %s", CID(context),
2136           maskNumber, GLbitfieldToString(GLESEnum::AllEnums, mask).c_str());
2137 
2138     if (context)
2139     {
2140         bool isCallValid =
2141             (context->skipValidation() ||
2142              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2143                                                 context->getMutableErrorSetForValidation(),
2144                                                 angle::EntryPoint::GLSampleMaski) &&
2145               ValidateSampleMaski(context->getPrivateState(),
2146                                   context->getMutableErrorSetForValidation(),
2147                                   angle::EntryPoint::GLSampleMaski, maskNumber, mask)));
2148         if (isCallValid)
2149         {
2150             ContextPrivateSampleMaski(context->getMutablePrivateState(),
2151                                       context->getMutablePrivateStateCache(), maskNumber, mask);
2152         }
2153         ANGLE_CAPTURE_GL(SampleMaski, isCallValid, context, maskNumber, mask);
2154     }
2155     else
2156     {
2157         GenerateContextLostErrorOnCurrentGlobalContext();
2158     }
2159     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2160 }
2161 
GL_TexStorage2DMultisample(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height,GLboolean fixedsamplelocations)2162 void GL_APIENTRY GL_TexStorage2DMultisample(GLenum target,
2163                                             GLsizei samples,
2164                                             GLenum internalformat,
2165                                             GLsizei width,
2166                                             GLsizei height,
2167                                             GLboolean fixedsamplelocations)
2168 {
2169     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2170     Context *context = GetValidGlobalContext();
2171     EVENT(context, GLTexStorage2DMultisample,
2172           "context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d, "
2173           "fixedsamplelocations = %s",
2174           CID(context), GLenumToString(GLESEnum::TextureTarget, target), samples,
2175           GLenumToString(GLESEnum::SizedInternalFormat, internalformat), width, height,
2176           GLbooleanToString(fixedsamplelocations));
2177 
2178     if (context)
2179     {
2180         TextureType targetPacked = PackParam<TextureType>(target);
2181         SCOPED_SHARE_CONTEXT_LOCK(context);
2182         bool isCallValid =
2183             (context->skipValidation() ||
2184              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2185                                                 context->getMutableErrorSetForValidation(),
2186                                                 angle::EntryPoint::GLTexStorage2DMultisample) &&
2187               ValidateTexStorage2DMultisample(context, angle::EntryPoint::GLTexStorage2DMultisample,
2188                                               targetPacked, samples, internalformat, width, height,
2189                                               fixedsamplelocations)));
2190         if (isCallValid)
2191         {
2192             context->texStorage2DMultisample(targetPacked, samples, internalformat, width, height,
2193                                              fixedsamplelocations);
2194         }
2195         ANGLE_CAPTURE_GL(TexStorage2DMultisample, isCallValid, context, targetPacked, samples,
2196                          internalformat, width, height, fixedsamplelocations);
2197     }
2198     else
2199     {
2200         GenerateContextLostErrorOnCurrentGlobalContext();
2201     }
2202     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2203 }
2204 
GL_UseProgramStages(GLuint pipeline,GLbitfield stages,GLuint program)2205 void GL_APIENTRY GL_UseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)
2206 {
2207     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2208     Context *context = GetValidGlobalContext();
2209     EVENT(context, GLUseProgramStages, "context = %d, pipeline = %u, stages = %s, program = %u",
2210           CID(context), pipeline, GLbitfieldToString(GLESEnum::UseProgramStageMask, stages).c_str(),
2211           program);
2212 
2213     if (context)
2214     {
2215         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
2216         ShaderProgramID programPacked    = PackParam<ShaderProgramID>(program);
2217         SCOPED_SHARE_CONTEXT_LOCK(context);
2218         bool isCallValid =
2219             (context->skipValidation() ||
2220              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2221                                                 context->getMutableErrorSetForValidation(),
2222                                                 angle::EntryPoint::GLUseProgramStages) &&
2223               ValidateUseProgramStages(context, angle::EntryPoint::GLUseProgramStages,
2224                                        pipelinePacked, stages, programPacked)));
2225         if (isCallValid)
2226         {
2227             context->useProgramStages(pipelinePacked, stages, programPacked);
2228         }
2229         ANGLE_CAPTURE_GL(UseProgramStages, isCallValid, context, pipelinePacked, stages,
2230                          programPacked);
2231     }
2232     else
2233     {
2234         GenerateContextLostErrorOnCurrentGlobalContext();
2235     }
2236     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2237 }
2238 
GL_ValidateProgramPipeline(GLuint pipeline)2239 void GL_APIENTRY GL_ValidateProgramPipeline(GLuint pipeline)
2240 {
2241     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2242     Context *context = GetValidGlobalContext();
2243     EVENT(context, GLValidateProgramPipeline, "context = %d, pipeline = %u", CID(context),
2244           pipeline);
2245 
2246     if (context)
2247     {
2248         ProgramPipelineID pipelinePacked = PackParam<ProgramPipelineID>(pipeline);
2249         SCOPED_SHARE_CONTEXT_LOCK(context);
2250         bool isCallValid =
2251             (context->skipValidation() ||
2252              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2253                                                 context->getMutableErrorSetForValidation(),
2254                                                 angle::EntryPoint::GLValidateProgramPipeline) &&
2255               ValidateValidateProgramPipeline(context, angle::EntryPoint::GLValidateProgramPipeline,
2256                                               pipelinePacked)));
2257         if (isCallValid)
2258         {
2259             context->validateProgramPipeline(pipelinePacked);
2260         }
2261         ANGLE_CAPTURE_GL(ValidateProgramPipeline, isCallValid, context, pipelinePacked);
2262     }
2263     else
2264     {
2265         GenerateContextLostErrorOnCurrentGlobalContext();
2266     }
2267     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2268 }
2269 
GL_VertexAttribBinding(GLuint attribindex,GLuint bindingindex)2270 void GL_APIENTRY GL_VertexAttribBinding(GLuint attribindex, GLuint bindingindex)
2271 {
2272     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2273     Context *context = GetValidGlobalContext();
2274     EVENT(context, GLVertexAttribBinding, "context = %d, attribindex = %u, bindingindex = %u",
2275           CID(context), attribindex, bindingindex);
2276 
2277     if (context)
2278     {
2279         SCOPED_SHARE_CONTEXT_LOCK(context);
2280         bool isCallValid =
2281             (context->skipValidation() ||
2282              ValidateVertexAttribBinding(context, angle::EntryPoint::GLVertexAttribBinding,
2283                                          attribindex, bindingindex));
2284         if (isCallValid)
2285         {
2286             context->vertexAttribBinding(attribindex, bindingindex);
2287         }
2288         ANGLE_CAPTURE_GL(VertexAttribBinding, isCallValid, context, attribindex, bindingindex);
2289     }
2290     else
2291     {
2292         GenerateContextLostErrorOnCurrentGlobalContext();
2293     }
2294     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2295 }
2296 
GL_VertexAttribFormat(GLuint attribindex,GLint size,GLenum type,GLboolean normalized,GLuint relativeoffset)2297 void GL_APIENTRY GL_VertexAttribFormat(GLuint attribindex,
2298                                        GLint size,
2299                                        GLenum type,
2300                                        GLboolean normalized,
2301                                        GLuint relativeoffset)
2302 {
2303     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2304     Context *context = GetValidGlobalContext();
2305     EVENT(context, GLVertexAttribFormat,
2306           "context = %d, attribindex = %u, size = %d, type = %s, normalized = %s, relativeoffset = "
2307           "%u",
2308           CID(context), attribindex, size, GLenumToString(GLESEnum::VertexAttribType, type),
2309           GLbooleanToString(normalized), relativeoffset);
2310 
2311     if (context)
2312     {
2313         VertexAttribType typePacked = PackParam<VertexAttribType>(type);
2314         SCOPED_SHARE_CONTEXT_LOCK(context);
2315         bool isCallValid =
2316             (context->skipValidation() ||
2317              ValidateVertexAttribFormat(context, angle::EntryPoint::GLVertexAttribFormat,
2318                                         attribindex, size, typePacked, normalized, relativeoffset));
2319         if (isCallValid)
2320         {
2321             context->vertexAttribFormat(attribindex, size, typePacked, normalized, relativeoffset);
2322         }
2323         ANGLE_CAPTURE_GL(VertexAttribFormat, isCallValid, context, attribindex, size, typePacked,
2324                          normalized, relativeoffset);
2325     }
2326     else
2327     {
2328         GenerateContextLostErrorOnCurrentGlobalContext();
2329     }
2330     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2331 }
2332 
GL_VertexAttribIFormat(GLuint attribindex,GLint size,GLenum type,GLuint relativeoffset)2333 void GL_APIENTRY GL_VertexAttribIFormat(GLuint attribindex,
2334                                         GLint size,
2335                                         GLenum type,
2336                                         GLuint relativeoffset)
2337 {
2338     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2339     Context *context = GetValidGlobalContext();
2340     EVENT(context, GLVertexAttribIFormat,
2341           "context = %d, attribindex = %u, size = %d, type = %s, relativeoffset = %u", CID(context),
2342           attribindex, size, GLenumToString(GLESEnum::VertexAttribIType, type), relativeoffset);
2343 
2344     if (context)
2345     {
2346         VertexAttribType typePacked = PackParam<VertexAttribType>(type);
2347         SCOPED_SHARE_CONTEXT_LOCK(context);
2348         bool isCallValid =
2349             (context->skipValidation() ||
2350              ValidateVertexAttribIFormat(context, angle::EntryPoint::GLVertexAttribIFormat,
2351                                          attribindex, size, typePacked, relativeoffset));
2352         if (isCallValid)
2353         {
2354             context->vertexAttribIFormat(attribindex, size, typePacked, relativeoffset);
2355         }
2356         ANGLE_CAPTURE_GL(VertexAttribIFormat, isCallValid, context, attribindex, size, typePacked,
2357                          relativeoffset);
2358     }
2359     else
2360     {
2361         GenerateContextLostErrorOnCurrentGlobalContext();
2362     }
2363     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2364 }
2365 
GL_VertexBindingDivisor(GLuint bindingindex,GLuint divisor)2366 void GL_APIENTRY GL_VertexBindingDivisor(GLuint bindingindex, GLuint divisor)
2367 {
2368     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2369     Context *context = GetValidGlobalContext();
2370     EVENT(context, GLVertexBindingDivisor, "context = %d, bindingindex = %u, divisor = %u",
2371           CID(context), bindingindex, divisor);
2372 
2373     if (context)
2374     {
2375         SCOPED_SHARE_CONTEXT_LOCK(context);
2376         bool isCallValid =
2377             (context->skipValidation() ||
2378              (ValidatePixelLocalStorageInactive(context->getPrivateState(),
2379                                                 context->getMutableErrorSetForValidation(),
2380                                                 angle::EntryPoint::GLVertexBindingDivisor) &&
2381               ValidateVertexBindingDivisor(context, angle::EntryPoint::GLVertexBindingDivisor,
2382                                            bindingindex, divisor)));
2383         if (isCallValid)
2384         {
2385             context->vertexBindingDivisor(bindingindex, divisor);
2386         }
2387         ANGLE_CAPTURE_GL(VertexBindingDivisor, isCallValid, context, bindingindex, divisor);
2388     }
2389     else
2390     {
2391         GenerateContextLostErrorOnCurrentGlobalContext();
2392     }
2393     ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any());
2394 }
2395 
2396 }  // extern "C"
2397