Path: blob/main_old/src/libGLESv2/entry_points_gles_2_0_autogen.cpp
1693 views
// GENERATED FILE - DO NOT EDIT.1// Generated by generate_entry_points.py using data from gl.xml.2//3// Copyright 2020 The ANGLE Project Authors. All rights reserved.4// Use of this source code is governed by a BSD-style license that can be5// found in the LICENSE file.6//7// entry_points_gles_2_0_autogen.cpp:8// Defines the GLES 2.0 entry points.910#include "libGLESv2/entry_points_gles_2_0_autogen.h"1112#include "common/entry_points_enum_autogen.h"13#include "libANGLE/Context.h"14#include "libANGLE/Context.inl.h"15#include "libANGLE/capture/capture_gles_2_0_autogen.h"16#include "libANGLE/capture/gl_enum_utils.h"17#include "libANGLE/entry_points_utils.h"18#include "libANGLE/validationES2.h"19#include "libGLESv2/global_state.h"2021using namespace gl;2223extern "C" {24void GL_APIENTRY GL_ActiveTexture(GLenum texture)25{26Context *context = GetValidGlobalContext();27EVENT(context, GLActiveTexture, "context = %d, texture = %s", CID(context),28GLenumToString(GLenumGroup::TextureUnit, texture));2930if (context)31{32std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);33bool isCallValid = (context->skipValidation() || ValidateActiveTexture(context, texture));34if (isCallValid)35{36context->activeTexture(texture);37}38ANGLE_CAPTURE(ActiveTexture, isCallValid, context, texture);39}40else41{42GenerateContextLostErrorOnCurrentGlobalContext();43}44}4546void GL_APIENTRY GL_AttachShader(GLuint program, GLuint shader)47{48Context *context = GetValidGlobalContext();49EVENT(context, GLAttachShader, "context = %d, program = %u, shader = %u", CID(context), program,50shader);5152if (context)53{54ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);55ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);56std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);57bool isCallValid = (context->skipValidation() ||58ValidateAttachShader(context, programPacked, shaderPacked));59if (isCallValid)60{61context->attachShader(programPacked, shaderPacked);62}63ANGLE_CAPTURE(AttachShader, isCallValid, context, programPacked, shaderPacked);64}65else66{67GenerateContextLostErrorOnCurrentGlobalContext();68}69}7071void GL_APIENTRY GL_BindAttribLocation(GLuint program, GLuint index, const GLchar *name)72{73Context *context = GetValidGlobalContext();74EVENT(context, GLBindAttribLocation,75"context = %d, program = %u, index = %u, name = 0x%016" PRIxPTR "", CID(context), program,76index, (uintptr_t)name);7778if (context)79{80ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);81std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);82bool isCallValid = (context->skipValidation() ||83ValidateBindAttribLocation(context, programPacked, index, name));84if (isCallValid)85{86context->bindAttribLocation(programPacked, index, name);87}88ANGLE_CAPTURE(BindAttribLocation, isCallValid, context, programPacked, index, name);89}90else91{92GenerateContextLostErrorOnCurrentGlobalContext();93}94}9596void GL_APIENTRY GL_BindBuffer(GLenum target, GLuint buffer)97{98Context *context = GetValidGlobalContext();99EVENT(context, GLBindBuffer, "context = %d, target = %s, buffer = %u", CID(context),100GLenumToString(GLenumGroup::BufferTargetARB, target), buffer);101102if (context)103{104BufferBinding targetPacked = PackParam<BufferBinding>(target);105BufferID bufferPacked = PackParam<BufferID>(buffer);106std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);107bool isCallValid =108(context->skipValidation() || ValidateBindBuffer(context, targetPacked, bufferPacked));109if (isCallValid)110{111context->bindBuffer(targetPacked, bufferPacked);112}113ANGLE_CAPTURE(BindBuffer, isCallValid, context, targetPacked, bufferPacked);114}115else116{117GenerateContextLostErrorOnCurrentGlobalContext();118}119}120121void GL_APIENTRY GL_BindFramebuffer(GLenum target, GLuint framebuffer)122{123Context *context = GetValidGlobalContext();124EVENT(context, GLBindFramebuffer, "context = %d, target = %s, framebuffer = %u", CID(context),125GLenumToString(GLenumGroup::FramebufferTarget, target), framebuffer);126127if (context)128{129FramebufferID framebufferPacked = PackParam<FramebufferID>(framebuffer);130std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);131bool isCallValid = (context->skipValidation() ||132ValidateBindFramebuffer(context, target, framebufferPacked));133if (isCallValid)134{135context->bindFramebuffer(target, framebufferPacked);136}137ANGLE_CAPTURE(BindFramebuffer, isCallValid, context, target, framebufferPacked);138}139else140{141GenerateContextLostErrorOnCurrentGlobalContext();142}143}144145void GL_APIENTRY GL_BindRenderbuffer(GLenum target, GLuint renderbuffer)146{147Context *context = GetValidGlobalContext();148EVENT(context, GLBindRenderbuffer, "context = %d, target = %s, renderbuffer = %u", CID(context),149GLenumToString(GLenumGroup::RenderbufferTarget, target), renderbuffer);150151if (context)152{153RenderbufferID renderbufferPacked = PackParam<RenderbufferID>(renderbuffer);154std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);155bool isCallValid = (context->skipValidation() ||156ValidateBindRenderbuffer(context, target, renderbufferPacked));157if (isCallValid)158{159context->bindRenderbuffer(target, renderbufferPacked);160}161ANGLE_CAPTURE(BindRenderbuffer, isCallValid, context, target, renderbufferPacked);162}163else164{165GenerateContextLostErrorOnCurrentGlobalContext();166}167}168169void GL_APIENTRY GL_BindTexture(GLenum target, GLuint texture)170{171Context *context = GetValidGlobalContext();172EVENT(context, GLBindTexture, "context = %d, target = %s, texture = %u", CID(context),173GLenumToString(GLenumGroup::TextureTarget, target), texture);174175if (context)176{177TextureType targetPacked = PackParam<TextureType>(target);178TextureID texturePacked = PackParam<TextureID>(texture);179std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);180bool isCallValid = (context->skipValidation() ||181ValidateBindTexture(context, targetPacked, texturePacked));182if (isCallValid)183{184context->bindTexture(targetPacked, texturePacked);185}186ANGLE_CAPTURE(BindTexture, isCallValid, context, targetPacked, texturePacked);187}188else189{190GenerateContextLostErrorOnCurrentGlobalContext();191}192}193194void GL_APIENTRY GL_BlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)195{196Context *context = GetValidGlobalContext();197EVENT(context, GLBlendColor, "context = %d, red = %f, green = %f, blue = %f, alpha = %f",198CID(context), red, green, blue, alpha);199200if (context)201{202std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);203bool isCallValid =204(context->skipValidation() || ValidateBlendColor(context, red, green, blue, alpha));205if (isCallValid)206{207context->blendColor(red, green, blue, alpha);208}209ANGLE_CAPTURE(BlendColor, isCallValid, context, red, green, blue, alpha);210}211else212{213GenerateContextLostErrorOnCurrentGlobalContext();214}215}216217void GL_APIENTRY GL_BlendEquation(GLenum mode)218{219Context *context = GetValidGlobalContext();220EVENT(context, GLBlendEquation, "context = %d, mode = %s", CID(context),221GLenumToString(GLenumGroup::BlendEquationModeEXT, mode));222223if (context)224{225std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);226bool isCallValid = (context->skipValidation() || ValidateBlendEquation(context, mode));227if (isCallValid)228{229context->blendEquation(mode);230}231ANGLE_CAPTURE(BlendEquation, isCallValid, context, mode);232}233else234{235GenerateContextLostErrorOnCurrentGlobalContext();236}237}238239void GL_APIENTRY GL_BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)240{241Context *context = GetValidGlobalContext();242EVENT(context, GLBlendEquationSeparate, "context = %d, modeRGB = %s, modeAlpha = %s",243CID(context), GLenumToString(GLenumGroup::BlendEquationModeEXT, modeRGB),244GLenumToString(GLenumGroup::BlendEquationModeEXT, modeAlpha));245246if (context)247{248std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);249bool isCallValid = (context->skipValidation() ||250ValidateBlendEquationSeparate(context, modeRGB, modeAlpha));251if (isCallValid)252{253context->blendEquationSeparate(modeRGB, modeAlpha);254}255ANGLE_CAPTURE(BlendEquationSeparate, isCallValid, context, modeRGB, modeAlpha);256}257else258{259GenerateContextLostErrorOnCurrentGlobalContext();260}261}262263void GL_APIENTRY GL_BlendFunc(GLenum sfactor, GLenum dfactor)264{265Context *context = GetValidGlobalContext();266EVENT(context, GLBlendFunc, "context = %d, sfactor = %s, dfactor = %s", CID(context),267GLenumToString(GLenumGroup::BlendingFactor, sfactor),268GLenumToString(GLenumGroup::BlendingFactor, dfactor));269270if (context)271{272std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);273bool isCallValid =274(context->skipValidation() || ValidateBlendFunc(context, sfactor, dfactor));275if (isCallValid)276{277context->blendFunc(sfactor, dfactor);278}279ANGLE_CAPTURE(BlendFunc, isCallValid, context, sfactor, dfactor);280}281else282{283GenerateContextLostErrorOnCurrentGlobalContext();284}285}286287void GL_APIENTRY GL_BlendFuncSeparate(GLenum sfactorRGB,288GLenum dfactorRGB,289GLenum sfactorAlpha,290GLenum dfactorAlpha)291{292Context *context = GetValidGlobalContext();293EVENT(context, GLBlendFuncSeparate,294"context = %d, sfactorRGB = %s, dfactorRGB = %s, sfactorAlpha = %s, dfactorAlpha = %s",295CID(context), GLenumToString(GLenumGroup::BlendingFactor, sfactorRGB),296GLenumToString(GLenumGroup::BlendingFactor, dfactorRGB),297GLenumToString(GLenumGroup::BlendingFactor, sfactorAlpha),298GLenumToString(GLenumGroup::BlendingFactor, dfactorAlpha));299300if (context)301{302std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);303bool isCallValid =304(context->skipValidation() || ValidateBlendFuncSeparate(context, sfactorRGB, dfactorRGB,305sfactorAlpha, dfactorAlpha));306if (isCallValid)307{308context->blendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);309}310ANGLE_CAPTURE(BlendFuncSeparate, isCallValid, context, sfactorRGB, dfactorRGB, sfactorAlpha,311dfactorAlpha);312}313else314{315GenerateContextLostErrorOnCurrentGlobalContext();316}317}318319void GL_APIENTRY GL_BufferData(GLenum target, GLsizeiptr size, const void *data, GLenum usage)320{321Context *context = GetValidGlobalContext();322EVENT(context, GLBufferData,323"context = %d, target = %s, size = %llu, data = 0x%016" PRIxPTR ", usage = %s",324CID(context), GLenumToString(GLenumGroup::BufferTargetARB, target),325static_cast<unsigned long long>(size), (uintptr_t)data,326GLenumToString(GLenumGroup::BufferUsageARB, usage));327328if (context)329{330BufferBinding targetPacked = PackParam<BufferBinding>(target);331BufferUsage usagePacked = PackParam<BufferUsage>(usage);332std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);333bool isCallValid = (context->skipValidation() ||334ValidateBufferData(context, targetPacked, size, data, usagePacked));335if (isCallValid)336{337context->bufferData(targetPacked, size, data, usagePacked);338}339ANGLE_CAPTURE(BufferData, isCallValid, context, targetPacked, size, data, usagePacked);340}341else342{343GenerateContextLostErrorOnCurrentGlobalContext();344}345}346347void GL_APIENTRY GL_BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void *data)348{349Context *context = GetValidGlobalContext();350EVENT(context, GLBufferSubData,351"context = %d, target = %s, offset = %llu, size = %llu, data = 0x%016" PRIxPTR "",352CID(context), GLenumToString(GLenumGroup::BufferTargetARB, target),353static_cast<unsigned long long>(offset), static_cast<unsigned long long>(size),354(uintptr_t)data);355356if (context)357{358BufferBinding targetPacked = PackParam<BufferBinding>(target);359std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);360bool isCallValid = (context->skipValidation() ||361ValidateBufferSubData(context, targetPacked, offset, size, data));362if (isCallValid)363{364context->bufferSubData(targetPacked, offset, size, data);365}366ANGLE_CAPTURE(BufferSubData, isCallValid, context, targetPacked, offset, size, data);367}368else369{370GenerateContextLostErrorOnCurrentGlobalContext();371}372}373374GLenum GL_APIENTRY GL_CheckFramebufferStatus(GLenum target)375{376Context *context = GetValidGlobalContext();377EVENT(context, GLCheckFramebufferStatus, "context = %d, target = %s", CID(context),378GLenumToString(GLenumGroup::FramebufferTarget, target));379380GLenum returnValue;381if (context)382{383std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);384bool isCallValid =385(context->skipValidation() || ValidateCheckFramebufferStatus(context, target));386if (isCallValid)387{388returnValue = context->checkFramebufferStatus(target);389}390else391{392returnValue =393GetDefaultReturnValue<angle::EntryPoint::GLCheckFramebufferStatus, GLenum>();394}395ANGLE_CAPTURE(CheckFramebufferStatus, isCallValid, context, target, returnValue);396}397else398{399GenerateContextLostErrorOnCurrentGlobalContext();400returnValue = GetDefaultReturnValue<angle::EntryPoint::GLCheckFramebufferStatus, GLenum>();401}402return returnValue;403}404405void GL_APIENTRY GL_Clear(GLbitfield mask)406{407Context *context = GetValidGlobalContext();408EVENT(context, GLClear, "context = %d, mask = %s", CID(context),409GLbitfieldToString(GLenumGroup::ClearBufferMask, mask).c_str());410411if (context)412{413std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);414bool isCallValid = (context->skipValidation() || ValidateClear(context, mask));415if (isCallValid)416{417context->clear(mask);418}419ANGLE_CAPTURE(Clear, isCallValid, context, mask);420}421else422{423GenerateContextLostErrorOnCurrentGlobalContext();424}425}426427void GL_APIENTRY GL_ClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)428{429Context *context = GetValidGlobalContext();430EVENT(context, GLClearColor, "context = %d, red = %f, green = %f, blue = %f, alpha = %f",431CID(context), red, green, blue, alpha);432433if (context)434{435std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);436bool isCallValid =437(context->skipValidation() || ValidateClearColor(context, red, green, blue, alpha));438if (isCallValid)439{440context->clearColor(red, green, blue, alpha);441}442ANGLE_CAPTURE(ClearColor, isCallValid, context, red, green, blue, alpha);443}444else445{446GenerateContextLostErrorOnCurrentGlobalContext();447}448}449450void GL_APIENTRY GL_ClearDepthf(GLfloat d)451{452Context *context = GetValidGlobalContext();453EVENT(context, GLClearDepthf, "context = %d, d = %f", CID(context), d);454455if (context)456{457std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);458bool isCallValid = (context->skipValidation() || ValidateClearDepthf(context, d));459if (isCallValid)460{461context->clearDepthf(d);462}463ANGLE_CAPTURE(ClearDepthf, isCallValid, context, d);464}465else466{467GenerateContextLostErrorOnCurrentGlobalContext();468}469}470471void GL_APIENTRY GL_ClearStencil(GLint s)472{473Context *context = GetValidGlobalContext();474EVENT(context, GLClearStencil, "context = %d, s = %d", CID(context), s);475476if (context)477{478std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);479bool isCallValid = (context->skipValidation() || ValidateClearStencil(context, s));480if (isCallValid)481{482context->clearStencil(s);483}484ANGLE_CAPTURE(ClearStencil, isCallValid, context, s);485}486else487{488GenerateContextLostErrorOnCurrentGlobalContext();489}490}491492void GL_APIENTRY GL_ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)493{494Context *context = GetValidGlobalContext();495EVENT(context, GLColorMask, "context = %d, red = %s, green = %s, blue = %s, alpha = %s",496CID(context), GLbooleanToString(red), GLbooleanToString(green), GLbooleanToString(blue),497GLbooleanToString(alpha));498499if (context)500{501std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);502bool isCallValid =503(context->skipValidation() || ValidateColorMask(context, red, green, blue, alpha));504if (isCallValid)505{506context->colorMask(red, green, blue, alpha);507}508ANGLE_CAPTURE(ColorMask, isCallValid, context, red, green, blue, alpha);509}510else511{512GenerateContextLostErrorOnCurrentGlobalContext();513}514}515516void GL_APIENTRY GL_CompileShader(GLuint shader)517{518Context *context = GetValidGlobalContext();519EVENT(context, GLCompileShader, "context = %d, shader = %u", CID(context), shader);520521if (context)522{523ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);524std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);525bool isCallValid =526(context->skipValidation() || ValidateCompileShader(context, shaderPacked));527if (isCallValid)528{529context->compileShader(shaderPacked);530}531ANGLE_CAPTURE(CompileShader, isCallValid, context, shaderPacked);532}533else534{535GenerateContextLostErrorOnCurrentGlobalContext();536}537}538539void GL_APIENTRY GL_CompressedTexImage2D(GLenum target,540GLint level,541GLenum internalformat,542GLsizei width,543GLsizei height,544GLint border,545GLsizei imageSize,546const void *data)547{548Context *context = GetValidGlobalContext();549EVENT(context, GLCompressedTexImage2D,550"context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "551"border = %d, imageSize = %d, data = 0x%016" PRIxPTR "",552CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level,553GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height, border,554imageSize, (uintptr_t)data);555556if (context)557{558TextureTarget targetPacked = PackParam<TextureTarget>(target);559std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);560bool isCallValid =561(context->skipValidation() ||562ValidateCompressedTexImage2D(context, targetPacked, level, internalformat, width,563height, border, imageSize, data));564if (isCallValid)565{566context->compressedTexImage2D(targetPacked, level, internalformat, width, height,567border, imageSize, data);568}569ANGLE_CAPTURE(CompressedTexImage2D, isCallValid, context, targetPacked, level,570internalformat, width, height, border, imageSize, data);571}572else573{574GenerateContextLostErrorOnCurrentGlobalContext();575}576}577578void GL_APIENTRY GL_CompressedTexSubImage2D(GLenum target,579GLint level,580GLint xoffset,581GLint yoffset,582GLsizei width,583GLsizei height,584GLenum format,585GLsizei imageSize,586const void *data)587{588Context *context = GetValidGlobalContext();589EVENT(context, GLCompressedTexSubImage2D,590"context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, width = %d, height = "591"%d, format = %s, imageSize = %d, data = 0x%016" PRIxPTR "",592CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, xoffset, yoffset,593width, height, GLenumToString(GLenumGroup::PixelFormat, format), imageSize,594(uintptr_t)data);595596if (context)597{598TextureTarget targetPacked = PackParam<TextureTarget>(target);599std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);600bool isCallValid =601(context->skipValidation() ||602ValidateCompressedTexSubImage2D(context, targetPacked, level, xoffset, yoffset, width,603height, format, imageSize, data));604if (isCallValid)605{606context->compressedTexSubImage2D(targetPacked, level, xoffset, yoffset, width, height,607format, imageSize, data);608}609ANGLE_CAPTURE(CompressedTexSubImage2D, isCallValid, context, targetPacked, level, xoffset,610yoffset, width, height, format, imageSize, data);611}612else613{614GenerateContextLostErrorOnCurrentGlobalContext();615}616}617618void GL_APIENTRY GL_CopyTexImage2D(GLenum target,619GLint level,620GLenum internalformat,621GLint x,622GLint y,623GLsizei width,624GLsizei height,625GLint border)626{627Context *context = GetValidGlobalContext();628EVENT(context, GLCopyTexImage2D,629"context = %d, target = %s, level = %d, internalformat = %s, x = %d, y = %d, width = %d, "630"height = %d, border = %d",631CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level,632GLenumToString(GLenumGroup::InternalFormat, internalformat), x, y, width, height, border);633634if (context)635{636TextureTarget targetPacked = PackParam<TextureTarget>(target);637std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);638bool isCallValid = (context->skipValidation() ||639ValidateCopyTexImage2D(context, targetPacked, level, internalformat, x,640y, width, height, border));641if (isCallValid)642{643context->copyTexImage2D(targetPacked, level, internalformat, x, y, width, height,644border);645}646ANGLE_CAPTURE(CopyTexImage2D, isCallValid, context, targetPacked, level, internalformat, x,647y, width, height, border);648}649else650{651GenerateContextLostErrorOnCurrentGlobalContext();652}653}654655void GL_APIENTRY GL_CopyTexSubImage2D(GLenum target,656GLint level,657GLint xoffset,658GLint yoffset,659GLint x,660GLint y,661GLsizei width,662GLsizei height)663{664Context *context = GetValidGlobalContext();665EVENT(context, GLCopyTexSubImage2D,666"context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, x = %d, y = %d, "667"width = %d, height = %d",668CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, xoffset, yoffset,669x, y, width, height);670671if (context)672{673TextureTarget targetPacked = PackParam<TextureTarget>(target);674std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);675bool isCallValid = (context->skipValidation() ||676ValidateCopyTexSubImage2D(context, targetPacked, level, xoffset,677yoffset, x, y, width, height));678if (isCallValid)679{680context->copyTexSubImage2D(targetPacked, level, xoffset, yoffset, x, y, width, height);681}682ANGLE_CAPTURE(CopyTexSubImage2D, isCallValid, context, targetPacked, level, xoffset,683yoffset, x, y, width, height);684}685else686{687GenerateContextLostErrorOnCurrentGlobalContext();688}689}690691GLuint GL_APIENTRY GL_CreateProgram()692{693Context *context = GetValidGlobalContext();694EVENT(context, GLCreateProgram, "context = %d", CID(context));695696GLuint returnValue;697if (context)698{699std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);700bool isCallValid = (context->skipValidation() || ValidateCreateProgram(context));701if (isCallValid)702{703returnValue = context->createProgram();704}705else706{707returnValue = GetDefaultReturnValue<angle::EntryPoint::GLCreateProgram, GLuint>();708}709ANGLE_CAPTURE(CreateProgram, isCallValid, context, returnValue);710}711else712{713GenerateContextLostErrorOnCurrentGlobalContext();714returnValue = GetDefaultReturnValue<angle::EntryPoint::GLCreateProgram, GLuint>();715}716return returnValue;717}718719GLuint GL_APIENTRY GL_CreateShader(GLenum type)720{721Context *context = GetValidGlobalContext();722EVENT(context, GLCreateShader, "context = %d, type = %s", CID(context),723GLenumToString(GLenumGroup::ShaderType, type));724725GLuint returnValue;726if (context)727{728ShaderType typePacked = PackParam<ShaderType>(type);729std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);730bool isCallValid = (context->skipValidation() || ValidateCreateShader(context, typePacked));731if (isCallValid)732{733returnValue = context->createShader(typePacked);734}735else736{737returnValue = GetDefaultReturnValue<angle::EntryPoint::GLCreateShader, GLuint>();738}739ANGLE_CAPTURE(CreateShader, isCallValid, context, typePacked, returnValue);740}741else742{743GenerateContextLostErrorOnCurrentGlobalContext();744returnValue = GetDefaultReturnValue<angle::EntryPoint::GLCreateShader, GLuint>();745}746return returnValue;747}748749void GL_APIENTRY GL_CullFace(GLenum mode)750{751Context *context = GetValidGlobalContext();752EVENT(context, GLCullFace, "context = %d, mode = %s", CID(context),753GLenumToString(GLenumGroup::CullFaceMode, mode));754755if (context)756{757CullFaceMode modePacked = PackParam<CullFaceMode>(mode);758std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);759bool isCallValid = (context->skipValidation() || ValidateCullFace(context, modePacked));760if (isCallValid)761{762context->cullFace(modePacked);763}764ANGLE_CAPTURE(CullFace, isCallValid, context, modePacked);765}766else767{768GenerateContextLostErrorOnCurrentGlobalContext();769}770}771772void GL_APIENTRY GL_DeleteBuffers(GLsizei n, const GLuint *buffers)773{774Context *context = GetValidGlobalContext();775EVENT(context, GLDeleteBuffers, "context = %d, n = %d, buffers = 0x%016" PRIxPTR "",776CID(context), n, (uintptr_t)buffers);777778if (context)779{780const BufferID *buffersPacked = PackParam<const BufferID *>(buffers);781std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);782bool isCallValid =783(context->skipValidation() || ValidateDeleteBuffers(context, n, buffersPacked));784if (isCallValid)785{786context->deleteBuffers(n, buffersPacked);787}788ANGLE_CAPTURE(DeleteBuffers, isCallValid, context, n, buffersPacked);789}790else791{792GenerateContextLostErrorOnCurrentGlobalContext();793}794}795796void GL_APIENTRY GL_DeleteFramebuffers(GLsizei n, const GLuint *framebuffers)797{798Context *context = GetValidGlobalContext();799EVENT(context, GLDeleteFramebuffers, "context = %d, n = %d, framebuffers = 0x%016" PRIxPTR "",800CID(context), n, (uintptr_t)framebuffers);801802if (context)803{804const FramebufferID *framebuffersPacked = PackParam<const FramebufferID *>(framebuffers);805std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);806bool isCallValid = (context->skipValidation() ||807ValidateDeleteFramebuffers(context, n, framebuffersPacked));808if (isCallValid)809{810context->deleteFramebuffers(n, framebuffersPacked);811}812ANGLE_CAPTURE(DeleteFramebuffers, isCallValid, context, n, framebuffersPacked);813}814else815{816GenerateContextLostErrorOnCurrentGlobalContext();817}818}819820void GL_APIENTRY GL_DeleteProgram(GLuint program)821{822Context *context = GetValidGlobalContext();823EVENT(context, GLDeleteProgram, "context = %d, program = %u", CID(context), program);824825if (context)826{827ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);828std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);829bool isCallValid =830(context->skipValidation() || ValidateDeleteProgram(context, programPacked));831if (isCallValid)832{833context->deleteProgram(programPacked);834}835ANGLE_CAPTURE(DeleteProgram, isCallValid, context, programPacked);836}837else838{839GenerateContextLostErrorOnCurrentGlobalContext();840}841}842843void GL_APIENTRY GL_DeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)844{845Context *context = GetValidGlobalContext();846EVENT(context, GLDeleteRenderbuffers, "context = %d, n = %d, renderbuffers = 0x%016" PRIxPTR "",847CID(context), n, (uintptr_t)renderbuffers);848849if (context)850{851const RenderbufferID *renderbuffersPacked =852PackParam<const RenderbufferID *>(renderbuffers);853std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);854bool isCallValid = (context->skipValidation() ||855ValidateDeleteRenderbuffers(context, n, renderbuffersPacked));856if (isCallValid)857{858context->deleteRenderbuffers(n, renderbuffersPacked);859}860ANGLE_CAPTURE(DeleteRenderbuffers, isCallValid, context, n, renderbuffersPacked);861}862else863{864GenerateContextLostErrorOnCurrentGlobalContext();865}866}867868void GL_APIENTRY GL_DeleteShader(GLuint shader)869{870Context *context = GetValidGlobalContext();871EVENT(context, GLDeleteShader, "context = %d, shader = %u", CID(context), shader);872873if (context)874{875ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);876std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);877bool isCallValid =878(context->skipValidation() || ValidateDeleteShader(context, shaderPacked));879if (isCallValid)880{881context->deleteShader(shaderPacked);882}883ANGLE_CAPTURE(DeleteShader, isCallValid, context, shaderPacked);884}885else886{887GenerateContextLostErrorOnCurrentGlobalContext();888}889}890891void GL_APIENTRY GL_DeleteTextures(GLsizei n, const GLuint *textures)892{893Context *context = GetValidGlobalContext();894EVENT(context, GLDeleteTextures, "context = %d, n = %d, textures = 0x%016" PRIxPTR "",895CID(context), n, (uintptr_t)textures);896897if (context)898{899const TextureID *texturesPacked = PackParam<const TextureID *>(textures);900std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);901bool isCallValid =902(context->skipValidation() || ValidateDeleteTextures(context, n, texturesPacked));903if (isCallValid)904{905context->deleteTextures(n, texturesPacked);906}907ANGLE_CAPTURE(DeleteTextures, isCallValid, context, n, texturesPacked);908}909else910{911GenerateContextLostErrorOnCurrentGlobalContext();912}913}914915void GL_APIENTRY GL_DepthFunc(GLenum func)916{917Context *context = GetValidGlobalContext();918EVENT(context, GLDepthFunc, "context = %d, func = %s", CID(context),919GLenumToString(GLenumGroup::DepthFunction, func));920921if (context)922{923std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);924bool isCallValid = (context->skipValidation() || ValidateDepthFunc(context, func));925if (isCallValid)926{927context->depthFunc(func);928}929ANGLE_CAPTURE(DepthFunc, isCallValid, context, func);930}931else932{933GenerateContextLostErrorOnCurrentGlobalContext();934}935}936937void GL_APIENTRY GL_DepthMask(GLboolean flag)938{939Context *context = GetValidGlobalContext();940EVENT(context, GLDepthMask, "context = %d, flag = %s", CID(context), GLbooleanToString(flag));941942if (context)943{944std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);945bool isCallValid = (context->skipValidation() || ValidateDepthMask(context, flag));946if (isCallValid)947{948context->depthMask(flag);949}950ANGLE_CAPTURE(DepthMask, isCallValid, context, flag);951}952else953{954GenerateContextLostErrorOnCurrentGlobalContext();955}956}957958void GL_APIENTRY GL_DepthRangef(GLfloat n, GLfloat f)959{960Context *context = GetValidGlobalContext();961EVENT(context, GLDepthRangef, "context = %d, n = %f, f = %f", CID(context), n, f);962963if (context)964{965std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);966bool isCallValid = (context->skipValidation() || ValidateDepthRangef(context, n, f));967if (isCallValid)968{969context->depthRangef(n, f);970}971ANGLE_CAPTURE(DepthRangef, isCallValid, context, n, f);972}973else974{975GenerateContextLostErrorOnCurrentGlobalContext();976}977}978979void GL_APIENTRY GL_DetachShader(GLuint program, GLuint shader)980{981Context *context = GetValidGlobalContext();982EVENT(context, GLDetachShader, "context = %d, program = %u, shader = %u", CID(context), program,983shader);984985if (context)986{987ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);988ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);989std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);990bool isCallValid = (context->skipValidation() ||991ValidateDetachShader(context, programPacked, shaderPacked));992if (isCallValid)993{994context->detachShader(programPacked, shaderPacked);995}996ANGLE_CAPTURE(DetachShader, isCallValid, context, programPacked, shaderPacked);997}998else999{1000GenerateContextLostErrorOnCurrentGlobalContext();1001}1002}10031004void GL_APIENTRY GL_Disable(GLenum cap)1005{1006Context *context = GetValidGlobalContext();1007EVENT(context, GLDisable, "context = %d, cap = %s", CID(context),1008GLenumToString(GLenumGroup::EnableCap, cap));10091010if (context)1011{1012std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1013bool isCallValid = (context->skipValidation() || ValidateDisable(context, cap));1014if (isCallValid)1015{1016context->disable(cap);1017}1018ANGLE_CAPTURE(Disable, isCallValid, context, cap);1019}1020else1021{1022GenerateContextLostErrorOnCurrentGlobalContext();1023}1024}10251026void GL_APIENTRY GL_DisableVertexAttribArray(GLuint index)1027{1028Context *context = GetValidGlobalContext();1029EVENT(context, GLDisableVertexAttribArray, "context = %d, index = %u", CID(context), index);10301031if (context)1032{1033std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1034bool isCallValid =1035(context->skipValidation() || ValidateDisableVertexAttribArray(context, index));1036if (isCallValid)1037{1038context->disableVertexAttribArray(index);1039}1040ANGLE_CAPTURE(DisableVertexAttribArray, isCallValid, context, index);1041}1042else1043{1044GenerateContextLostErrorOnCurrentGlobalContext();1045}1046}10471048void GL_APIENTRY GL_DrawArrays(GLenum mode, GLint first, GLsizei count)1049{1050Context *context = GetValidGlobalContext();1051EVENT(context, GLDrawArrays, "context = %d, mode = %s, first = %d, count = %d", CID(context),1052GLenumToString(GLenumGroup::PrimitiveType, mode), first, count);10531054if (context)1055{1056PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);1057std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1058bool isCallValid =1059(context->skipValidation() || ValidateDrawArrays(context, modePacked, first, count));1060if (isCallValid)1061{1062context->drawArrays(modePacked, first, count);1063}1064ANGLE_CAPTURE(DrawArrays, isCallValid, context, modePacked, first, count);1065}1066else1067{1068GenerateContextLostErrorOnCurrentGlobalContext();1069}1070}10711072void GL_APIENTRY GL_DrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)1073{1074Context *context = GetValidGlobalContext();1075EVENT(context, GLDrawElements,1076"context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR "",1077CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), count,1078GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices);10791080if (context)1081{1082PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);1083DrawElementsType typePacked = PackParam<DrawElementsType>(type);1084std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1085bool isCallValid = (context->skipValidation() ||1086ValidateDrawElements(context, modePacked, count, typePacked, indices));1087if (isCallValid)1088{1089context->drawElements(modePacked, count, typePacked, indices);1090}1091ANGLE_CAPTURE(DrawElements, isCallValid, context, modePacked, count, typePacked, indices);1092}1093else1094{1095GenerateContextLostErrorOnCurrentGlobalContext();1096}1097}10981099void GL_APIENTRY GL_Enable(GLenum cap)1100{1101Context *context = GetValidGlobalContext();1102EVENT(context, GLEnable, "context = %d, cap = %s", CID(context),1103GLenumToString(GLenumGroup::EnableCap, cap));11041105if (context)1106{1107std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1108bool isCallValid = (context->skipValidation() || ValidateEnable(context, cap));1109if (isCallValid)1110{1111context->enable(cap);1112}1113ANGLE_CAPTURE(Enable, isCallValid, context, cap);1114}1115else1116{1117GenerateContextLostErrorOnCurrentGlobalContext();1118}1119}11201121void GL_APIENTRY GL_EnableVertexAttribArray(GLuint index)1122{1123Context *context = GetValidGlobalContext();1124EVENT(context, GLEnableVertexAttribArray, "context = %d, index = %u", CID(context), index);11251126if (context)1127{1128std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1129bool isCallValid =1130(context->skipValidation() || ValidateEnableVertexAttribArray(context, index));1131if (isCallValid)1132{1133context->enableVertexAttribArray(index);1134}1135ANGLE_CAPTURE(EnableVertexAttribArray, isCallValid, context, index);1136}1137else1138{1139GenerateContextLostErrorOnCurrentGlobalContext();1140}1141}11421143void GL_APIENTRY GL_Finish()1144{1145Context *context = GetValidGlobalContext();1146EVENT(context, GLFinish, "context = %d", CID(context));11471148if (context)1149{1150std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1151bool isCallValid = (context->skipValidation() || ValidateFinish(context));1152if (isCallValid)1153{1154context->finish();1155}1156ANGLE_CAPTURE(Finish, isCallValid, context);1157}1158else1159{1160GenerateContextLostErrorOnCurrentGlobalContext();1161}1162}11631164void GL_APIENTRY GL_Flush()1165{1166Context *context = GetValidGlobalContext();1167EVENT(context, GLFlush, "context = %d", CID(context));11681169if (context)1170{1171std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1172bool isCallValid = (context->skipValidation() || ValidateFlush(context));1173if (isCallValid)1174{1175context->flush();1176}1177ANGLE_CAPTURE(Flush, isCallValid, context);1178}1179else1180{1181GenerateContextLostErrorOnCurrentGlobalContext();1182}1183}11841185void GL_APIENTRY GL_FramebufferRenderbuffer(GLenum target,1186GLenum attachment,1187GLenum renderbuffertarget,1188GLuint renderbuffer)1189{1190Context *context = GetValidGlobalContext();1191EVENT(context, GLFramebufferRenderbuffer,1192"context = %d, target = %s, attachment = %s, renderbuffertarget = %s, renderbuffer = %u",1193CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),1194GLenumToString(GLenumGroup::FramebufferAttachment, attachment),1195GLenumToString(GLenumGroup::RenderbufferTarget, renderbuffertarget), renderbuffer);11961197if (context)1198{1199RenderbufferID renderbufferPacked = PackParam<RenderbufferID>(renderbuffer);1200std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1201bool isCallValid =1202(context->skipValidation() ||1203ValidateFramebufferRenderbuffer(context, target, attachment, renderbuffertarget,1204renderbufferPacked));1205if (isCallValid)1206{1207context->framebufferRenderbuffer(target, attachment, renderbuffertarget,1208renderbufferPacked);1209}1210ANGLE_CAPTURE(FramebufferRenderbuffer, isCallValid, context, target, attachment,1211renderbuffertarget, renderbufferPacked);1212}1213else1214{1215GenerateContextLostErrorOnCurrentGlobalContext();1216}1217}12181219void GL_APIENTRY GL_FramebufferTexture2D(GLenum target,1220GLenum attachment,1221GLenum textarget,1222GLuint texture,1223GLint level)1224{1225Context *context = GetValidGlobalContext();1226EVENT(context, GLFramebufferTexture2D,1227"context = %d, target = %s, attachment = %s, textarget = %s, texture = %u, level = %d",1228CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),1229GLenumToString(GLenumGroup::FramebufferAttachment, attachment),1230GLenumToString(GLenumGroup::TextureTarget, textarget), texture, level);12311232if (context)1233{1234TextureTarget textargetPacked = PackParam<TextureTarget>(textarget);1235TextureID texturePacked = PackParam<TextureID>(texture);1236std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1237bool isCallValid = (context->skipValidation() ||1238ValidateFramebufferTexture2D(context, target, attachment,1239textargetPacked, texturePacked, level));1240if (isCallValid)1241{1242context->framebufferTexture2D(target, attachment, textargetPacked, texturePacked,1243level);1244}1245ANGLE_CAPTURE(FramebufferTexture2D, isCallValid, context, target, attachment,1246textargetPacked, texturePacked, level);1247}1248else1249{1250GenerateContextLostErrorOnCurrentGlobalContext();1251}1252}12531254void GL_APIENTRY GL_FrontFace(GLenum mode)1255{1256Context *context = GetValidGlobalContext();1257EVENT(context, GLFrontFace, "context = %d, mode = %s", CID(context),1258GLenumToString(GLenumGroup::FrontFaceDirection, mode));12591260if (context)1261{1262std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1263bool isCallValid = (context->skipValidation() || ValidateFrontFace(context, mode));1264if (isCallValid)1265{1266context->frontFace(mode);1267}1268ANGLE_CAPTURE(FrontFace, isCallValid, context, mode);1269}1270else1271{1272GenerateContextLostErrorOnCurrentGlobalContext();1273}1274}12751276void GL_APIENTRY GL_GenBuffers(GLsizei n, GLuint *buffers)1277{1278Context *context = GetValidGlobalContext();1279EVENT(context, GLGenBuffers, "context = %d, n = %d, buffers = 0x%016" PRIxPTR "", CID(context),1280n, (uintptr_t)buffers);12811282if (context)1283{1284BufferID *buffersPacked = PackParam<BufferID *>(buffers);1285std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1286bool isCallValid =1287(context->skipValidation() || ValidateGenBuffers(context, n, buffersPacked));1288if (isCallValid)1289{1290context->genBuffers(n, buffersPacked);1291}1292ANGLE_CAPTURE(GenBuffers, isCallValid, context, n, buffersPacked);1293}1294else1295{1296GenerateContextLostErrorOnCurrentGlobalContext();1297}1298}12991300void GL_APIENTRY GL_GenFramebuffers(GLsizei n, GLuint *framebuffers)1301{1302Context *context = GetValidGlobalContext();1303EVENT(context, GLGenFramebuffers, "context = %d, n = %d, framebuffers = 0x%016" PRIxPTR "",1304CID(context), n, (uintptr_t)framebuffers);13051306if (context)1307{1308FramebufferID *framebuffersPacked = PackParam<FramebufferID *>(framebuffers);1309std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1310bool isCallValid =1311(context->skipValidation() || ValidateGenFramebuffers(context, n, framebuffersPacked));1312if (isCallValid)1313{1314context->genFramebuffers(n, framebuffersPacked);1315}1316ANGLE_CAPTURE(GenFramebuffers, isCallValid, context, n, framebuffersPacked);1317}1318else1319{1320GenerateContextLostErrorOnCurrentGlobalContext();1321}1322}13231324void GL_APIENTRY GL_GenRenderbuffers(GLsizei n, GLuint *renderbuffers)1325{1326Context *context = GetValidGlobalContext();1327EVENT(context, GLGenRenderbuffers, "context = %d, n = %d, renderbuffers = 0x%016" PRIxPTR "",1328CID(context), n, (uintptr_t)renderbuffers);13291330if (context)1331{1332RenderbufferID *renderbuffersPacked = PackParam<RenderbufferID *>(renderbuffers);1333std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1334bool isCallValid = (context->skipValidation() ||1335ValidateGenRenderbuffers(context, n, renderbuffersPacked));1336if (isCallValid)1337{1338context->genRenderbuffers(n, renderbuffersPacked);1339}1340ANGLE_CAPTURE(GenRenderbuffers, isCallValid, context, n, renderbuffersPacked);1341}1342else1343{1344GenerateContextLostErrorOnCurrentGlobalContext();1345}1346}13471348void GL_APIENTRY GL_GenTextures(GLsizei n, GLuint *textures)1349{1350Context *context = GetValidGlobalContext();1351EVENT(context, GLGenTextures, "context = %d, n = %d, textures = 0x%016" PRIxPTR "",1352CID(context), n, (uintptr_t)textures);13531354if (context)1355{1356TextureID *texturesPacked = PackParam<TextureID *>(textures);1357std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1358bool isCallValid =1359(context->skipValidation() || ValidateGenTextures(context, n, texturesPacked));1360if (isCallValid)1361{1362context->genTextures(n, texturesPacked);1363}1364ANGLE_CAPTURE(GenTextures, isCallValid, context, n, texturesPacked);1365}1366else1367{1368GenerateContextLostErrorOnCurrentGlobalContext();1369}1370}13711372void GL_APIENTRY GL_GenerateMipmap(GLenum target)1373{1374Context *context = GetValidGlobalContext();1375EVENT(context, GLGenerateMipmap, "context = %d, target = %s", CID(context),1376GLenumToString(GLenumGroup::TextureTarget, target));13771378if (context)1379{1380TextureType targetPacked = PackParam<TextureType>(target);1381std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1382bool isCallValid =1383(context->skipValidation() || ValidateGenerateMipmap(context, targetPacked));1384if (isCallValid)1385{1386context->generateMipmap(targetPacked);1387}1388ANGLE_CAPTURE(GenerateMipmap, isCallValid, context, targetPacked);1389}1390else1391{1392GenerateContextLostErrorOnCurrentGlobalContext();1393}1394}13951396void GL_APIENTRY GL_GetActiveAttrib(GLuint program,1397GLuint index,1398GLsizei bufSize,1399GLsizei *length,1400GLint *size,1401GLenum *type,1402GLchar *name)1403{1404Context *context = GetValidGlobalContext();1405EVENT(context, GLGetActiveAttrib,1406"context = %d, program = %u, index = %u, bufSize = %d, length = 0x%016" PRIxPTR1407", size = 0x%016" PRIxPTR ", type = 0x%016" PRIxPTR ", name = 0x%016" PRIxPTR "",1408CID(context), program, index, bufSize, (uintptr_t)length, (uintptr_t)size,1409(uintptr_t)type, (uintptr_t)name);14101411if (context)1412{1413ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1414std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1415bool isCallValid = (context->skipValidation() ||1416ValidateGetActiveAttrib(context, programPacked, index, bufSize, length,1417size, type, name));1418if (isCallValid)1419{1420context->getActiveAttrib(programPacked, index, bufSize, length, size, type, name);1421}1422ANGLE_CAPTURE(GetActiveAttrib, isCallValid, context, programPacked, index, bufSize, length,1423size, type, name);1424}1425else1426{1427GenerateContextLostErrorOnCurrentGlobalContext();1428}1429}14301431void GL_APIENTRY GL_GetActiveUniform(GLuint program,1432GLuint index,1433GLsizei bufSize,1434GLsizei *length,1435GLint *size,1436GLenum *type,1437GLchar *name)1438{1439Context *context = GetValidGlobalContext();1440EVENT(context, GLGetActiveUniform,1441"context = %d, program = %u, index = %u, bufSize = %d, length = 0x%016" PRIxPTR1442", size = 0x%016" PRIxPTR ", type = 0x%016" PRIxPTR ", name = 0x%016" PRIxPTR "",1443CID(context), program, index, bufSize, (uintptr_t)length, (uintptr_t)size,1444(uintptr_t)type, (uintptr_t)name);14451446if (context)1447{1448ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1449std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1450bool isCallValid = (context->skipValidation() ||1451ValidateGetActiveUniform(context, programPacked, index, bufSize, length,1452size, type, name));1453if (isCallValid)1454{1455context->getActiveUniform(programPacked, index, bufSize, length, size, type, name);1456}1457ANGLE_CAPTURE(GetActiveUniform, isCallValid, context, programPacked, index, bufSize, length,1458size, type, name);1459}1460else1461{1462GenerateContextLostErrorOnCurrentGlobalContext();1463}1464}14651466void GL_APIENTRY GL_GetAttachedShaders(GLuint program,1467GLsizei maxCount,1468GLsizei *count,1469GLuint *shaders)1470{1471Context *context = GetValidGlobalContext();1472EVENT(context, GLGetAttachedShaders,1473"context = %d, program = %u, maxCount = %d, count = 0x%016" PRIxPTR1474", shaders = 0x%016" PRIxPTR "",1475CID(context), program, maxCount, (uintptr_t)count, (uintptr_t)shaders);14761477if (context)1478{1479ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1480ShaderProgramID *shadersPacked = PackParam<ShaderProgramID *>(shaders);1481std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1482bool isCallValid =1483(context->skipValidation() ||1484ValidateGetAttachedShaders(context, programPacked, maxCount, count, shadersPacked));1485if (isCallValid)1486{1487context->getAttachedShaders(programPacked, maxCount, count, shadersPacked);1488}1489ANGLE_CAPTURE(GetAttachedShaders, isCallValid, context, programPacked, maxCount, count,1490shadersPacked);1491}1492else1493{1494GenerateContextLostErrorOnCurrentGlobalContext();1495}1496}14971498GLint GL_APIENTRY GL_GetAttribLocation(GLuint program, const GLchar *name)1499{1500Context *context = GetValidGlobalContext();1501EVENT(context, GLGetAttribLocation, "context = %d, program = %u, name = 0x%016" PRIxPTR "",1502CID(context), program, (uintptr_t)name);15031504GLint returnValue;1505if (context)1506{1507ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1508std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1509bool isCallValid =1510(context->skipValidation() || ValidateGetAttribLocation(context, programPacked, name));1511if (isCallValid)1512{1513returnValue = context->getAttribLocation(programPacked, name);1514}1515else1516{1517returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetAttribLocation, GLint>();1518}1519ANGLE_CAPTURE(GetAttribLocation, isCallValid, context, programPacked, name, returnValue);1520}1521else1522{1523GenerateContextLostErrorOnCurrentGlobalContext();1524returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetAttribLocation, GLint>();1525}1526return returnValue;1527}15281529void GL_APIENTRY GL_GetBooleanv(GLenum pname, GLboolean *data)1530{1531Context *context = GetValidGlobalContext();1532EVENT(context, GLGetBooleanv, "context = %d, pname = %s, data = 0x%016" PRIxPTR "",1533CID(context), GLenumToString(GLenumGroup::GetPName, pname), (uintptr_t)data);15341535if (context)1536{1537std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1538bool isCallValid = (context->skipValidation() || ValidateGetBooleanv(context, pname, data));1539if (isCallValid)1540{1541context->getBooleanv(pname, data);1542}1543ANGLE_CAPTURE(GetBooleanv, isCallValid, context, pname, data);1544}1545else1546{1547GenerateContextLostErrorOnCurrentGlobalContext();1548}1549}15501551void GL_APIENTRY GL_GetBufferParameteriv(GLenum target, GLenum pname, GLint *params)1552{1553Context *context = GetValidGlobalContext();1554EVENT(context, GLGetBufferParameteriv,1555"context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1556GLenumToString(GLenumGroup::BufferTargetARB, target),1557GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)params);15581559if (context)1560{1561BufferBinding targetPacked = PackParam<BufferBinding>(target);1562std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1563bool isCallValid = (context->skipValidation() ||1564ValidateGetBufferParameteriv(context, targetPacked, pname, params));1565if (isCallValid)1566{1567context->getBufferParameteriv(targetPacked, pname, params);1568}1569ANGLE_CAPTURE(GetBufferParameteriv, isCallValid, context, targetPacked, pname, params);1570}1571else1572{1573GenerateContextLostErrorOnCurrentGlobalContext();1574}1575}15761577GLenum GL_APIENTRY GL_GetError()1578{1579Context *context = GetGlobalContext();1580EVENT(context, GLGetError, "context = %d", CID(context));15811582GLenum returnValue;1583if (context)1584{1585std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1586bool isCallValid = (context->skipValidation() || ValidateGetError(context));1587if (isCallValid)1588{1589returnValue = context->getError();1590}1591else1592{1593returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetError, GLenum>();1594}1595ANGLE_CAPTURE(GetError, isCallValid, context, returnValue);1596}1597else1598{15991600returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetError, GLenum>();1601}1602return returnValue;1603}16041605void GL_APIENTRY GL_GetFloatv(GLenum pname, GLfloat *data)1606{1607Context *context = GetValidGlobalContext();1608EVENT(context, GLGetFloatv, "context = %d, pname = %s, data = 0x%016" PRIxPTR "", CID(context),1609GLenumToString(GLenumGroup::GetPName, pname), (uintptr_t)data);16101611if (context)1612{1613std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1614bool isCallValid = (context->skipValidation() || ValidateGetFloatv(context, pname, data));1615if (isCallValid)1616{1617context->getFloatv(pname, data);1618}1619ANGLE_CAPTURE(GetFloatv, isCallValid, context, pname, data);1620}1621else1622{1623GenerateContextLostErrorOnCurrentGlobalContext();1624}1625}16261627void GL_APIENTRY GL_GetFramebufferAttachmentParameteriv(GLenum target,1628GLenum attachment,1629GLenum pname,1630GLint *params)1631{1632Context *context = GetValidGlobalContext();1633EVENT(context, GLGetFramebufferAttachmentParameteriv,1634"context = %d, target = %s, attachment = %s, pname = %s, params = 0x%016" PRIxPTR "",1635CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),1636GLenumToString(GLenumGroup::FramebufferAttachment, attachment),1637GLenumToString(GLenumGroup::FramebufferAttachmentParameterName, pname),1638(uintptr_t)params);16391640if (context)1641{1642std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1643bool isCallValid =1644(context->skipValidation() || ValidateGetFramebufferAttachmentParameteriv(1645context, target, attachment, pname, params));1646if (isCallValid)1647{1648context->getFramebufferAttachmentParameteriv(target, attachment, pname, params);1649}1650ANGLE_CAPTURE(GetFramebufferAttachmentParameteriv, isCallValid, context, target, attachment,1651pname, params);1652}1653else1654{1655GenerateContextLostErrorOnCurrentGlobalContext();1656}1657}16581659void GL_APIENTRY GL_GetIntegerv(GLenum pname, GLint *data)1660{1661Context *context = GetValidGlobalContext();1662EVENT(context, GLGetIntegerv, "context = %d, pname = %s, data = 0x%016" PRIxPTR "",1663CID(context), GLenumToString(GLenumGroup::GetPName, pname), (uintptr_t)data);16641665if (context)1666{1667std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1668bool isCallValid = (context->skipValidation() || ValidateGetIntegerv(context, pname, data));1669if (isCallValid)1670{1671context->getIntegerv(pname, data);1672}1673ANGLE_CAPTURE(GetIntegerv, isCallValid, context, pname, data);1674}1675else1676{1677GenerateContextLostErrorOnCurrentGlobalContext();1678}1679}16801681void GL_APIENTRY GL_GetProgramInfoLog(GLuint program,1682GLsizei bufSize,1683GLsizei *length,1684GLchar *infoLog)1685{1686Context *context = GetValidGlobalContext();1687EVENT(context, GLGetProgramInfoLog,1688"context = %d, program = %u, bufSize = %d, length = 0x%016" PRIxPTR1689", infoLog = 0x%016" PRIxPTR "",1690CID(context), program, bufSize, (uintptr_t)length, (uintptr_t)infoLog);16911692if (context)1693{1694ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1695std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1696bool isCallValid =1697(context->skipValidation() ||1698ValidateGetProgramInfoLog(context, programPacked, bufSize, length, infoLog));1699if (isCallValid)1700{1701context->getProgramInfoLog(programPacked, bufSize, length, infoLog);1702}1703ANGLE_CAPTURE(GetProgramInfoLog, isCallValid, context, programPacked, bufSize, length,1704infoLog);1705}1706else1707{1708GenerateContextLostErrorOnCurrentGlobalContext();1709}1710}17111712void GL_APIENTRY GL_GetProgramiv(GLuint program, GLenum pname, GLint *params)1713{1714Context *context = GetGlobalContext();1715EVENT(context, GLGetProgramiv,1716"context = %d, program = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1717program, GLenumToString(GLenumGroup::ProgramPropertyARB, pname), (uintptr_t)params);17181719if (context)1720{1721ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1722std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1723bool isCallValid = (context->skipValidation() ||1724ValidateGetProgramiv(context, programPacked, pname, params));1725if (isCallValid)1726{1727context->getProgramiv(programPacked, pname, params);1728}1729ANGLE_CAPTURE(GetProgramiv, isCallValid, context, programPacked, pname, params);1730}1731else1732{}1733}17341735void GL_APIENTRY GL_GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)1736{1737Context *context = GetValidGlobalContext();1738EVENT(context, GLGetRenderbufferParameteriv,1739"context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1740GLenumToString(GLenumGroup::RenderbufferTarget, target),1741GLenumToString(GLenumGroup::RenderbufferParameterName, pname), (uintptr_t)params);17421743if (context)1744{1745std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1746bool isCallValid = (context->skipValidation() ||1747ValidateGetRenderbufferParameteriv(context, target, pname, params));1748if (isCallValid)1749{1750context->getRenderbufferParameteriv(target, pname, params);1751}1752ANGLE_CAPTURE(GetRenderbufferParameteriv, isCallValid, context, target, pname, params);1753}1754else1755{1756GenerateContextLostErrorOnCurrentGlobalContext();1757}1758}17591760void GL_APIENTRY GL_GetShaderInfoLog(GLuint shader,1761GLsizei bufSize,1762GLsizei *length,1763GLchar *infoLog)1764{1765Context *context = GetValidGlobalContext();1766EVENT(context, GLGetShaderInfoLog,1767"context = %d, shader = %u, bufSize = %d, length = 0x%016" PRIxPTR1768", infoLog = 0x%016" PRIxPTR "",1769CID(context), shader, bufSize, (uintptr_t)length, (uintptr_t)infoLog);17701771if (context)1772{1773ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);1774std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1775bool isCallValid =1776(context->skipValidation() ||1777ValidateGetShaderInfoLog(context, shaderPacked, bufSize, length, infoLog));1778if (isCallValid)1779{1780context->getShaderInfoLog(shaderPacked, bufSize, length, infoLog);1781}1782ANGLE_CAPTURE(GetShaderInfoLog, isCallValid, context, shaderPacked, bufSize, length,1783infoLog);1784}1785else1786{1787GenerateContextLostErrorOnCurrentGlobalContext();1788}1789}17901791void GL_APIENTRY GL_GetShaderPrecisionFormat(GLenum shadertype,1792GLenum precisiontype,1793GLint *range,1794GLint *precision)1795{1796Context *context = GetValidGlobalContext();1797EVENT(context, GLGetShaderPrecisionFormat,1798"context = %d, shadertype = %s, precisiontype = %s, range = 0x%016" PRIxPTR1799", precision = 0x%016" PRIxPTR "",1800CID(context), GLenumToString(GLenumGroup::ShaderType, shadertype),1801GLenumToString(GLenumGroup::PrecisionType, precisiontype), (uintptr_t)range,1802(uintptr_t)precision);18031804if (context)1805{1806std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1807bool isCallValid = (context->skipValidation() ||1808ValidateGetShaderPrecisionFormat(context, shadertype, precisiontype,1809range, precision));1810if (isCallValid)1811{1812context->getShaderPrecisionFormat(shadertype, precisiontype, range, precision);1813}1814ANGLE_CAPTURE(GetShaderPrecisionFormat, isCallValid, context, shadertype, precisiontype,1815range, precision);1816}1817else1818{1819GenerateContextLostErrorOnCurrentGlobalContext();1820}1821}18221823void GL_APIENTRY GL_GetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source)1824{1825Context *context = GetValidGlobalContext();1826EVENT(context, GLGetShaderSource,1827"context = %d, shader = %u, bufSize = %d, length = 0x%016" PRIxPTR1828", source = 0x%016" PRIxPTR "",1829CID(context), shader, bufSize, (uintptr_t)length, (uintptr_t)source);18301831if (context)1832{1833ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);1834std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1835bool isCallValid =1836(context->skipValidation() ||1837ValidateGetShaderSource(context, shaderPacked, bufSize, length, source));1838if (isCallValid)1839{1840context->getShaderSource(shaderPacked, bufSize, length, source);1841}1842ANGLE_CAPTURE(GetShaderSource, isCallValid, context, shaderPacked, bufSize, length, source);1843}1844else1845{1846GenerateContextLostErrorOnCurrentGlobalContext();1847}1848}18491850void GL_APIENTRY GL_GetShaderiv(GLuint shader, GLenum pname, GLint *params)1851{1852Context *context = GetGlobalContext();1853EVENT(context, GLGetShaderiv,1854"context = %d, shader = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), shader,1855GLenumToString(GLenumGroup::ShaderParameterName, pname), (uintptr_t)params);18561857if (context)1858{1859ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);1860std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1861bool isCallValid = (context->skipValidation() ||1862ValidateGetShaderiv(context, shaderPacked, pname, params));1863if (isCallValid)1864{1865context->getShaderiv(shaderPacked, pname, params);1866}1867ANGLE_CAPTURE(GetShaderiv, isCallValid, context, shaderPacked, pname, params);1868}1869else1870{}1871}18721873const GLubyte *GL_APIENTRY GL_GetString(GLenum name)1874{1875Context *context = GetValidGlobalContext();1876EVENT(context, GLGetString, "context = %d, name = %s", CID(context),1877GLenumToString(GLenumGroup::StringName, name));18781879const GLubyte *returnValue;1880if (context)1881{1882std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1883bool isCallValid = (context->skipValidation() || ValidateGetString(context, name));1884if (isCallValid)1885{1886returnValue = context->getString(name);1887}1888else1889{1890returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetString, const GLubyte *>();1891}1892ANGLE_CAPTURE(GetString, isCallValid, context, name, returnValue);1893}1894else1895{1896GenerateContextLostErrorOnCurrentGlobalContext();1897returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetString, const GLubyte *>();1898}1899return returnValue;1900}19011902void GL_APIENTRY GL_GetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)1903{1904Context *context = GetValidGlobalContext();1905EVENT(context, GLGetTexParameterfv,1906"context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1907GLenumToString(GLenumGroup::TextureTarget, target),1908GLenumToString(GLenumGroup::GetTextureParameter, pname), (uintptr_t)params);19091910if (context)1911{1912TextureType targetPacked = PackParam<TextureType>(target);1913std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1914bool isCallValid = (context->skipValidation() ||1915ValidateGetTexParameterfv(context, targetPacked, pname, params));1916if (isCallValid)1917{1918context->getTexParameterfv(targetPacked, pname, params);1919}1920ANGLE_CAPTURE(GetTexParameterfv, isCallValid, context, targetPacked, pname, params);1921}1922else1923{1924GenerateContextLostErrorOnCurrentGlobalContext();1925}1926}19271928void GL_APIENTRY GL_GetTexParameteriv(GLenum target, GLenum pname, GLint *params)1929{1930Context *context = GetValidGlobalContext();1931EVENT(context, GLGetTexParameteriv,1932"context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1933GLenumToString(GLenumGroup::TextureTarget, target),1934GLenumToString(GLenumGroup::GetTextureParameter, pname), (uintptr_t)params);19351936if (context)1937{1938TextureType targetPacked = PackParam<TextureType>(target);1939std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1940bool isCallValid = (context->skipValidation() ||1941ValidateGetTexParameteriv(context, targetPacked, pname, params));1942if (isCallValid)1943{1944context->getTexParameteriv(targetPacked, pname, params);1945}1946ANGLE_CAPTURE(GetTexParameteriv, isCallValid, context, targetPacked, pname, params);1947}1948else1949{1950GenerateContextLostErrorOnCurrentGlobalContext();1951}1952}19531954GLint GL_APIENTRY GL_GetUniformLocation(GLuint program, const GLchar *name)1955{1956Context *context = GetValidGlobalContext();1957EVENT(context, GLGetUniformLocation, "context = %d, program = %u, name = 0x%016" PRIxPTR "",1958CID(context), program, (uintptr_t)name);19591960GLint returnValue;1961if (context)1962{1963ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1964std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1965bool isCallValid =1966(context->skipValidation() || ValidateGetUniformLocation(context, programPacked, name));1967if (isCallValid)1968{1969returnValue = context->getUniformLocation(programPacked, name);1970}1971else1972{1973returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetUniformLocation, GLint>();1974}1975ANGLE_CAPTURE(GetUniformLocation, isCallValid, context, programPacked, name, returnValue);1976}1977else1978{1979GenerateContextLostErrorOnCurrentGlobalContext();1980returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetUniformLocation, GLint>();1981}1982return returnValue;1983}19841985void GL_APIENTRY GL_GetUniformfv(GLuint program, GLint location, GLfloat *params)1986{1987Context *context = GetValidGlobalContext();1988EVENT(context, GLGetUniformfv,1989"context = %d, program = %u, location = %d, params = 0x%016" PRIxPTR "", CID(context),1990program, location, (uintptr_t)params);19911992if (context)1993{1994ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1995UniformLocation locationPacked = PackParam<UniformLocation>(location);1996std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1997bool isCallValid = (context->skipValidation() ||1998ValidateGetUniformfv(context, programPacked, locationPacked, params));1999if (isCallValid)2000{2001context->getUniformfv(programPacked, locationPacked, params);2002}2003ANGLE_CAPTURE(GetUniformfv, isCallValid, context, programPacked, locationPacked, params);2004}2005else2006{2007GenerateContextLostErrorOnCurrentGlobalContext();2008}2009}20102011void GL_APIENTRY GL_GetUniformiv(GLuint program, GLint location, GLint *params)2012{2013Context *context = GetValidGlobalContext();2014EVENT(context, GLGetUniformiv,2015"context = %d, program = %u, location = %d, params = 0x%016" PRIxPTR "", CID(context),2016program, location, (uintptr_t)params);20172018if (context)2019{2020ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);2021UniformLocation locationPacked = PackParam<UniformLocation>(location);2022std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2023bool isCallValid = (context->skipValidation() ||2024ValidateGetUniformiv(context, programPacked, locationPacked, params));2025if (isCallValid)2026{2027context->getUniformiv(programPacked, locationPacked, params);2028}2029ANGLE_CAPTURE(GetUniformiv, isCallValid, context, programPacked, locationPacked, params);2030}2031else2032{2033GenerateContextLostErrorOnCurrentGlobalContext();2034}2035}20362037void GL_APIENTRY GL_GetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer)2038{2039Context *context = GetValidGlobalContext();2040EVENT(context, GLGetVertexAttribPointerv,2041"context = %d, index = %u, pname = %s, pointer = 0x%016" PRIxPTR "", CID(context), index,2042GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)pointer);20432044if (context)2045{2046std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2047bool isCallValid = (context->skipValidation() ||2048ValidateGetVertexAttribPointerv(context, index, pname, pointer));2049if (isCallValid)2050{2051context->getVertexAttribPointerv(index, pname, pointer);2052}2053ANGLE_CAPTURE(GetVertexAttribPointerv, isCallValid, context, index, pname, pointer);2054}2055else2056{2057GenerateContextLostErrorOnCurrentGlobalContext();2058}2059}20602061void GL_APIENTRY GL_GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)2062{2063Context *context = GetValidGlobalContext();2064EVENT(context, GLGetVertexAttribfv,2065"context = %d, index = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), index,2066GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)params);20672068if (context)2069{2070std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2071bool isCallValid =2072(context->skipValidation() || ValidateGetVertexAttribfv(context, index, pname, params));2073if (isCallValid)2074{2075context->getVertexAttribfv(index, pname, params);2076}2077ANGLE_CAPTURE(GetVertexAttribfv, isCallValid, context, index, pname, params);2078}2079else2080{2081GenerateContextLostErrorOnCurrentGlobalContext();2082}2083}20842085void GL_APIENTRY GL_GetVertexAttribiv(GLuint index, GLenum pname, GLint *params)2086{2087Context *context = GetValidGlobalContext();2088EVENT(context, GLGetVertexAttribiv,2089"context = %d, index = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), index,2090GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)params);20912092if (context)2093{2094std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2095bool isCallValid =2096(context->skipValidation() || ValidateGetVertexAttribiv(context, index, pname, params));2097if (isCallValid)2098{2099context->getVertexAttribiv(index, pname, params);2100}2101ANGLE_CAPTURE(GetVertexAttribiv, isCallValid, context, index, pname, params);2102}2103else2104{2105GenerateContextLostErrorOnCurrentGlobalContext();2106}2107}21082109void GL_APIENTRY GL_Hint(GLenum target, GLenum mode)2110{2111Context *context = GetValidGlobalContext();2112EVENT(context, GLHint, "context = %d, target = %s, mode = %s", CID(context),2113GLenumToString(GLenumGroup::HintTarget, target),2114GLenumToString(GLenumGroup::HintMode, mode));21152116if (context)2117{2118std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2119bool isCallValid = (context->skipValidation() || ValidateHint(context, target, mode));2120if (isCallValid)2121{2122context->hint(target, mode);2123}2124ANGLE_CAPTURE(Hint, isCallValid, context, target, mode);2125}2126else2127{2128GenerateContextLostErrorOnCurrentGlobalContext();2129}2130}21312132GLboolean GL_APIENTRY GL_IsBuffer(GLuint buffer)2133{2134Context *context = GetValidGlobalContext();2135EVENT(context, GLIsBuffer, "context = %d, buffer = %u", CID(context), buffer);21362137GLboolean returnValue;2138if (context)2139{2140BufferID bufferPacked = PackParam<BufferID>(buffer);2141std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2142bool isCallValid = (context->skipValidation() || ValidateIsBuffer(context, bufferPacked));2143if (isCallValid)2144{2145returnValue = context->isBuffer(bufferPacked);2146}2147else2148{2149returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsBuffer, GLboolean>();2150}2151ANGLE_CAPTURE(IsBuffer, isCallValid, context, bufferPacked, returnValue);2152}2153else2154{2155GenerateContextLostErrorOnCurrentGlobalContext();2156returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsBuffer, GLboolean>();2157}2158return returnValue;2159}21602161GLboolean GL_APIENTRY GL_IsEnabled(GLenum cap)2162{2163Context *context = GetValidGlobalContext();2164EVENT(context, GLIsEnabled, "context = %d, cap = %s", CID(context),2165GLenumToString(GLenumGroup::EnableCap, cap));21662167GLboolean returnValue;2168if (context)2169{2170std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2171bool isCallValid = (context->skipValidation() || ValidateIsEnabled(context, cap));2172if (isCallValid)2173{2174returnValue = context->isEnabled(cap);2175}2176else2177{2178returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnabled, GLboolean>();2179}2180ANGLE_CAPTURE(IsEnabled, isCallValid, context, cap, returnValue);2181}2182else2183{2184GenerateContextLostErrorOnCurrentGlobalContext();2185returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsEnabled, GLboolean>();2186}2187return returnValue;2188}21892190GLboolean GL_APIENTRY GL_IsFramebuffer(GLuint framebuffer)2191{2192Context *context = GetValidGlobalContext();2193EVENT(context, GLIsFramebuffer, "context = %d, framebuffer = %u", CID(context), framebuffer);21942195GLboolean returnValue;2196if (context)2197{2198FramebufferID framebufferPacked = PackParam<FramebufferID>(framebuffer);2199std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2200bool isCallValid =2201(context->skipValidation() || ValidateIsFramebuffer(context, framebufferPacked));2202if (isCallValid)2203{2204returnValue = context->isFramebuffer(framebufferPacked);2205}2206else2207{2208returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFramebuffer, GLboolean>();2209}2210ANGLE_CAPTURE(IsFramebuffer, isCallValid, context, framebufferPacked, returnValue);2211}2212else2213{2214GenerateContextLostErrorOnCurrentGlobalContext();2215returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsFramebuffer, GLboolean>();2216}2217return returnValue;2218}22192220GLboolean GL_APIENTRY GL_IsProgram(GLuint program)2221{2222Context *context = GetValidGlobalContext();2223EVENT(context, GLIsProgram, "context = %d, program = %u", CID(context), program);22242225GLboolean returnValue;2226if (context)2227{2228ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);2229std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2230bool isCallValid = (context->skipValidation() || ValidateIsProgram(context, programPacked));2231if (isCallValid)2232{2233returnValue = context->isProgram(programPacked);2234}2235else2236{2237returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsProgram, GLboolean>();2238}2239ANGLE_CAPTURE(IsProgram, isCallValid, context, programPacked, returnValue);2240}2241else2242{2243GenerateContextLostErrorOnCurrentGlobalContext();2244returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsProgram, GLboolean>();2245}2246return returnValue;2247}22482249GLboolean GL_APIENTRY GL_IsRenderbuffer(GLuint renderbuffer)2250{2251Context *context = GetValidGlobalContext();2252EVENT(context, GLIsRenderbuffer, "context = %d, renderbuffer = %u", CID(context), renderbuffer);22532254GLboolean returnValue;2255if (context)2256{2257RenderbufferID renderbufferPacked = PackParam<RenderbufferID>(renderbuffer);2258std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2259bool isCallValid =2260(context->skipValidation() || ValidateIsRenderbuffer(context, renderbufferPacked));2261if (isCallValid)2262{2263returnValue = context->isRenderbuffer(renderbufferPacked);2264}2265else2266{2267returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsRenderbuffer, GLboolean>();2268}2269ANGLE_CAPTURE(IsRenderbuffer, isCallValid, context, renderbufferPacked, returnValue);2270}2271else2272{2273GenerateContextLostErrorOnCurrentGlobalContext();2274returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsRenderbuffer, GLboolean>();2275}2276return returnValue;2277}22782279GLboolean GL_APIENTRY GL_IsShader(GLuint shader)2280{2281Context *context = GetValidGlobalContext();2282EVENT(context, GLIsShader, "context = %d, shader = %u", CID(context), shader);22832284GLboolean returnValue;2285if (context)2286{2287ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);2288std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2289bool isCallValid = (context->skipValidation() || ValidateIsShader(context, shaderPacked));2290if (isCallValid)2291{2292returnValue = context->isShader(shaderPacked);2293}2294else2295{2296returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsShader, GLboolean>();2297}2298ANGLE_CAPTURE(IsShader, isCallValid, context, shaderPacked, returnValue);2299}2300else2301{2302GenerateContextLostErrorOnCurrentGlobalContext();2303returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsShader, GLboolean>();2304}2305return returnValue;2306}23072308GLboolean GL_APIENTRY GL_IsTexture(GLuint texture)2309{2310Context *context = GetValidGlobalContext();2311EVENT(context, GLIsTexture, "context = %d, texture = %u", CID(context), texture);23122313GLboolean returnValue;2314if (context)2315{2316TextureID texturePacked = PackParam<TextureID>(texture);2317std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2318bool isCallValid = (context->skipValidation() || ValidateIsTexture(context, texturePacked));2319if (isCallValid)2320{2321returnValue = context->isTexture(texturePacked);2322}2323else2324{2325returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsTexture, GLboolean>();2326}2327ANGLE_CAPTURE(IsTexture, isCallValid, context, texturePacked, returnValue);2328}2329else2330{2331GenerateContextLostErrorOnCurrentGlobalContext();2332returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsTexture, GLboolean>();2333}2334return returnValue;2335}23362337void GL_APIENTRY GL_LineWidth(GLfloat width)2338{2339Context *context = GetValidGlobalContext();2340EVENT(context, GLLineWidth, "context = %d, width = %f", CID(context), width);23412342if (context)2343{2344std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2345bool isCallValid = (context->skipValidation() || ValidateLineWidth(context, width));2346if (isCallValid)2347{2348context->lineWidth(width);2349}2350ANGLE_CAPTURE(LineWidth, isCallValid, context, width);2351}2352else2353{2354GenerateContextLostErrorOnCurrentGlobalContext();2355}2356}23572358void GL_APIENTRY GL_LinkProgram(GLuint program)2359{2360Context *context = GetValidGlobalContext();2361EVENT(context, GLLinkProgram, "context = %d, program = %u", CID(context), program);23622363if (context)2364{2365ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);2366std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2367bool isCallValid =2368(context->skipValidation() || ValidateLinkProgram(context, programPacked));2369if (isCallValid)2370{2371context->linkProgram(programPacked);2372}2373ANGLE_CAPTURE(LinkProgram, isCallValid, context, programPacked);2374}2375else2376{2377GenerateContextLostErrorOnCurrentGlobalContext();2378}2379}23802381void GL_APIENTRY GL_PixelStorei(GLenum pname, GLint param)2382{2383Context *context = GetValidGlobalContext();2384EVENT(context, GLPixelStorei, "context = %d, pname = %s, param = %d", CID(context),2385GLenumToString(GLenumGroup::PixelStoreParameter, pname), param);23862387if (context)2388{2389std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2390bool isCallValid =2391(context->skipValidation() || ValidatePixelStorei(context, pname, param));2392if (isCallValid)2393{2394context->pixelStorei(pname, param);2395}2396ANGLE_CAPTURE(PixelStorei, isCallValid, context, pname, param);2397}2398else2399{2400GenerateContextLostErrorOnCurrentGlobalContext();2401}2402}24032404void GL_APIENTRY GL_PolygonOffset(GLfloat factor, GLfloat units)2405{2406Context *context = GetValidGlobalContext();2407EVENT(context, GLPolygonOffset, "context = %d, factor = %f, units = %f", CID(context), factor,2408units);24092410if (context)2411{2412std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2413bool isCallValid =2414(context->skipValidation() || ValidatePolygonOffset(context, factor, units));2415if (isCallValid)2416{2417context->polygonOffset(factor, units);2418}2419ANGLE_CAPTURE(PolygonOffset, isCallValid, context, factor, units);2420}2421else2422{2423GenerateContextLostErrorOnCurrentGlobalContext();2424}2425}24262427void GL_APIENTRY GL_ReadPixels(GLint x,2428GLint y,2429GLsizei width,2430GLsizei height,2431GLenum format,2432GLenum type,2433void *pixels)2434{2435Context *context = GetValidGlobalContext();2436EVENT(context, GLReadPixels,2437"context = %d, x = %d, y = %d, width = %d, height = %d, format = %s, type = %s, pixels = "2438"0x%016" PRIxPTR "",2439CID(context), x, y, width, height, GLenumToString(GLenumGroup::PixelFormat, format),2440GLenumToString(GLenumGroup::PixelType, type), (uintptr_t)pixels);24412442if (context)2443{2444std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2445bool isCallValid = (context->skipValidation() ||2446ValidateReadPixels(context, x, y, width, height, format, type, pixels));2447if (isCallValid)2448{2449context->readPixels(x, y, width, height, format, type, pixels);2450}2451ANGLE_CAPTURE(ReadPixels, isCallValid, context, x, y, width, height, format, type, pixels);2452}2453else2454{2455GenerateContextLostErrorOnCurrentGlobalContext();2456}2457}24582459void GL_APIENTRY GL_ReleaseShaderCompiler()2460{2461Context *context = GetValidGlobalContext();2462EVENT(context, GLReleaseShaderCompiler, "context = %d", CID(context));24632464if (context)2465{2466std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2467bool isCallValid = (context->skipValidation() || ValidateReleaseShaderCompiler(context));2468if (isCallValid)2469{2470context->releaseShaderCompiler();2471}2472ANGLE_CAPTURE(ReleaseShaderCompiler, isCallValid, context);2473}2474else2475{2476GenerateContextLostErrorOnCurrentGlobalContext();2477}2478}24792480void GL_APIENTRY GL_RenderbufferStorage(GLenum target,2481GLenum internalformat,2482GLsizei width,2483GLsizei height)2484{2485Context *context = GetValidGlobalContext();2486EVENT(context, GLRenderbufferStorage,2487"context = %d, target = %s, internalformat = %s, width = %d, height = %d", CID(context),2488GLenumToString(GLenumGroup::RenderbufferTarget, target),2489GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height);24902491if (context)2492{2493std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2494bool isCallValid =2495(context->skipValidation() ||2496ValidateRenderbufferStorage(context, target, internalformat, width, height));2497if (isCallValid)2498{2499context->renderbufferStorage(target, internalformat, width, height);2500}2501ANGLE_CAPTURE(RenderbufferStorage, isCallValid, context, target, internalformat, width,2502height);2503}2504else2505{2506GenerateContextLostErrorOnCurrentGlobalContext();2507}2508}25092510void GL_APIENTRY GL_SampleCoverage(GLfloat value, GLboolean invert)2511{2512Context *context = GetValidGlobalContext();2513EVENT(context, GLSampleCoverage, "context = %d, value = %f, invert = %s", CID(context), value,2514GLbooleanToString(invert));25152516if (context)2517{2518std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2519bool isCallValid =2520(context->skipValidation() || ValidateSampleCoverage(context, value, invert));2521if (isCallValid)2522{2523context->sampleCoverage(value, invert);2524}2525ANGLE_CAPTURE(SampleCoverage, isCallValid, context, value, invert);2526}2527else2528{2529GenerateContextLostErrorOnCurrentGlobalContext();2530}2531}25322533void GL_APIENTRY GL_Scissor(GLint x, GLint y, GLsizei width, GLsizei height)2534{2535Context *context = GetValidGlobalContext();2536EVENT(context, GLScissor, "context = %d, x = %d, y = %d, width = %d, height = %d", CID(context),2537x, y, width, height);25382539if (context)2540{2541std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2542bool isCallValid =2543(context->skipValidation() || ValidateScissor(context, x, y, width, height));2544if (isCallValid)2545{2546context->scissor(x, y, width, height);2547}2548ANGLE_CAPTURE(Scissor, isCallValid, context, x, y, width, height);2549}2550else2551{2552GenerateContextLostErrorOnCurrentGlobalContext();2553}2554}25552556void GL_APIENTRY GL_ShaderBinary(GLsizei count,2557const GLuint *shaders,2558GLenum binaryformat,2559const void *binary,2560GLsizei length)2561{2562Context *context = GetValidGlobalContext();2563EVENT(context, GLShaderBinary,2564"context = %d, count = %d, shaders = 0x%016" PRIxPTR2565", binaryformat = %s, binary = 0x%016" PRIxPTR ", length = %d",2566CID(context), count, (uintptr_t)shaders,2567GLenumToString(GLenumGroup::DefaultGroup, binaryformat), (uintptr_t)binary, length);25682569if (context)2570{2571const ShaderProgramID *shadersPacked = PackParam<const ShaderProgramID *>(shaders);2572std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2573bool isCallValid =2574(context->skipValidation() ||2575ValidateShaderBinary(context, count, shadersPacked, binaryformat, binary, length));2576if (isCallValid)2577{2578context->shaderBinary(count, shadersPacked, binaryformat, binary, length);2579}2580ANGLE_CAPTURE(ShaderBinary, isCallValid, context, count, shadersPacked, binaryformat,2581binary, length);2582}2583else2584{2585GenerateContextLostErrorOnCurrentGlobalContext();2586}2587}25882589void GL_APIENTRY GL_ShaderSource(GLuint shader,2590GLsizei count,2591const GLchar *const *string,2592const GLint *length)2593{2594Context *context = GetValidGlobalContext();2595EVENT(context, GLShaderSource,2596"context = %d, shader = %u, count = %d, string = 0x%016" PRIxPTR2597", length = 0x%016" PRIxPTR "",2598CID(context), shader, count, (uintptr_t)string, (uintptr_t)length);25992600if (context)2601{2602ShaderProgramID shaderPacked = PackParam<ShaderProgramID>(shader);2603std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2604bool isCallValid = (context->skipValidation() ||2605ValidateShaderSource(context, shaderPacked, count, string, length));2606if (isCallValid)2607{2608context->shaderSource(shaderPacked, count, string, length);2609}2610ANGLE_CAPTURE(ShaderSource, isCallValid, context, shaderPacked, count, string, length);2611}2612else2613{2614GenerateContextLostErrorOnCurrentGlobalContext();2615}2616}26172618void GL_APIENTRY GL_StencilFunc(GLenum func, GLint ref, GLuint mask)2619{2620Context *context = GetValidGlobalContext();2621EVENT(context, GLStencilFunc, "context = %d, func = %s, ref = %d, mask = %u", CID(context),2622GLenumToString(GLenumGroup::StencilFunction, func), ref, mask);26232624if (context)2625{2626std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2627bool isCallValid =2628(context->skipValidation() || ValidateStencilFunc(context, func, ref, mask));2629if (isCallValid)2630{2631context->stencilFunc(func, ref, mask);2632}2633ANGLE_CAPTURE(StencilFunc, isCallValid, context, func, ref, mask);2634}2635else2636{2637GenerateContextLostErrorOnCurrentGlobalContext();2638}2639}26402641void GL_APIENTRY GL_StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)2642{2643Context *context = GetValidGlobalContext();2644EVENT(context, GLStencilFuncSeparate, "context = %d, face = %s, func = %s, ref = %d, mask = %u",2645CID(context), GLenumToString(GLenumGroup::StencilFaceDirection, face),2646GLenumToString(GLenumGroup::StencilFunction, func), ref, mask);26472648if (context)2649{2650std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2651bool isCallValid = (context->skipValidation() ||2652ValidateStencilFuncSeparate(context, face, func, ref, mask));2653if (isCallValid)2654{2655context->stencilFuncSeparate(face, func, ref, mask);2656}2657ANGLE_CAPTURE(StencilFuncSeparate, isCallValid, context, face, func, ref, mask);2658}2659else2660{2661GenerateContextLostErrorOnCurrentGlobalContext();2662}2663}26642665void GL_APIENTRY GL_StencilMask(GLuint mask)2666{2667Context *context = GetValidGlobalContext();2668EVENT(context, GLStencilMask, "context = %d, mask = %u", CID(context), mask);26692670if (context)2671{2672std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2673bool isCallValid = (context->skipValidation() || ValidateStencilMask(context, mask));2674if (isCallValid)2675{2676context->stencilMask(mask);2677}2678ANGLE_CAPTURE(StencilMask, isCallValid, context, mask);2679}2680else2681{2682GenerateContextLostErrorOnCurrentGlobalContext();2683}2684}26852686void GL_APIENTRY GL_StencilMaskSeparate(GLenum face, GLuint mask)2687{2688Context *context = GetValidGlobalContext();2689EVENT(context, GLStencilMaskSeparate, "context = %d, face = %s, mask = %u", CID(context),2690GLenumToString(GLenumGroup::StencilFaceDirection, face), mask);26912692if (context)2693{2694std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2695bool isCallValid =2696(context->skipValidation() || ValidateStencilMaskSeparate(context, face, mask));2697if (isCallValid)2698{2699context->stencilMaskSeparate(face, mask);2700}2701ANGLE_CAPTURE(StencilMaskSeparate, isCallValid, context, face, mask);2702}2703else2704{2705GenerateContextLostErrorOnCurrentGlobalContext();2706}2707}27082709void GL_APIENTRY GL_StencilOp(GLenum fail, GLenum zfail, GLenum zpass)2710{2711Context *context = GetValidGlobalContext();2712EVENT(context, GLStencilOp, "context = %d, fail = %s, zfail = %s, zpass = %s", CID(context),2713GLenumToString(GLenumGroup::StencilOp, fail),2714GLenumToString(GLenumGroup::StencilOp, zfail),2715GLenumToString(GLenumGroup::StencilOp, zpass));27162717if (context)2718{2719std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2720bool isCallValid =2721(context->skipValidation() || ValidateStencilOp(context, fail, zfail, zpass));2722if (isCallValid)2723{2724context->stencilOp(fail, zfail, zpass);2725}2726ANGLE_CAPTURE(StencilOp, isCallValid, context, fail, zfail, zpass);2727}2728else2729{2730GenerateContextLostErrorOnCurrentGlobalContext();2731}2732}27332734void GL_APIENTRY GL_StencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)2735{2736Context *context = GetValidGlobalContext();2737EVENT(context, GLStencilOpSeparate,2738"context = %d, face = %s, sfail = %s, dpfail = %s, dppass = %s", CID(context),2739GLenumToString(GLenumGroup::StencilFaceDirection, face),2740GLenumToString(GLenumGroup::StencilOp, sfail),2741GLenumToString(GLenumGroup::StencilOp, dpfail),2742GLenumToString(GLenumGroup::StencilOp, dppass));27432744if (context)2745{2746std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2747bool isCallValid = (context->skipValidation() ||2748ValidateStencilOpSeparate(context, face, sfail, dpfail, dppass));2749if (isCallValid)2750{2751context->stencilOpSeparate(face, sfail, dpfail, dppass);2752}2753ANGLE_CAPTURE(StencilOpSeparate, isCallValid, context, face, sfail, dpfail, dppass);2754}2755else2756{2757GenerateContextLostErrorOnCurrentGlobalContext();2758}2759}27602761void GL_APIENTRY GL_TexImage2D(GLenum target,2762GLint level,2763GLint internalformat,2764GLsizei width,2765GLsizei height,2766GLint border,2767GLenum format,2768GLenum type,2769const void *pixels)2770{2771Context *context = GetValidGlobalContext();2772EVENT(context, GLTexImage2D,2773"context = %d, target = %s, level = %d, internalformat = %d, width = %d, height = %d, "2774"border = %d, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",2775CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, internalformat,2776width, height, border, GLenumToString(GLenumGroup::PixelFormat, format),2777GLenumToString(GLenumGroup::PixelType, type), (uintptr_t)pixels);27782779if (context)2780{2781TextureTarget targetPacked = PackParam<TextureTarget>(target);2782std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2783bool isCallValid = (context->skipValidation() ||2784ValidateTexImage2D(context, targetPacked, level, internalformat, width,2785height, border, format, type, pixels));2786if (isCallValid)2787{2788context->texImage2D(targetPacked, level, internalformat, width, height, border, format,2789type, pixels);2790}2791ANGLE_CAPTURE(TexImage2D, isCallValid, context, targetPacked, level, internalformat, width,2792height, border, format, type, pixels);2793}2794else2795{2796GenerateContextLostErrorOnCurrentGlobalContext();2797}2798}27992800void GL_APIENTRY GL_TexParameterf(GLenum target, GLenum pname, GLfloat param)2801{2802Context *context = GetValidGlobalContext();2803EVENT(context, GLTexParameterf, "context = %d, target = %s, pname = %s, param = %f",2804CID(context), GLenumToString(GLenumGroup::TextureTarget, target),2805GLenumToString(GLenumGroup::TextureParameterName, pname), param);28062807if (context)2808{2809TextureType targetPacked = PackParam<TextureType>(target);2810std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2811bool isCallValid = (context->skipValidation() ||2812ValidateTexParameterf(context, targetPacked, pname, param));2813if (isCallValid)2814{2815context->texParameterf(targetPacked, pname, param);2816}2817ANGLE_CAPTURE(TexParameterf, isCallValid, context, targetPacked, pname, param);2818}2819else2820{2821GenerateContextLostErrorOnCurrentGlobalContext();2822}2823}28242825void GL_APIENTRY GL_TexParameterfv(GLenum target, GLenum pname, const GLfloat *params)2826{2827Context *context = GetValidGlobalContext();2828EVENT(context, GLTexParameterfv,2829"context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),2830GLenumToString(GLenumGroup::TextureTarget, target),2831GLenumToString(GLenumGroup::TextureParameterName, pname), (uintptr_t)params);28322833if (context)2834{2835TextureType targetPacked = PackParam<TextureType>(target);2836std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2837bool isCallValid = (context->skipValidation() ||2838ValidateTexParameterfv(context, targetPacked, pname, params));2839if (isCallValid)2840{2841context->texParameterfv(targetPacked, pname, params);2842}2843ANGLE_CAPTURE(TexParameterfv, isCallValid, context, targetPacked, pname, params);2844}2845else2846{2847GenerateContextLostErrorOnCurrentGlobalContext();2848}2849}28502851void GL_APIENTRY GL_TexParameteri(GLenum target, GLenum pname, GLint param)2852{2853Context *context = GetValidGlobalContext();2854EVENT(context, GLTexParameteri, "context = %d, target = %s, pname = %s, param = %d",2855CID(context), GLenumToString(GLenumGroup::TextureTarget, target),2856GLenumToString(GLenumGroup::TextureParameterName, pname), param);28572858if (context)2859{2860TextureType targetPacked = PackParam<TextureType>(target);2861std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2862bool isCallValid = (context->skipValidation() ||2863ValidateTexParameteri(context, targetPacked, pname, param));2864if (isCallValid)2865{2866context->texParameteri(targetPacked, pname, param);2867}2868ANGLE_CAPTURE(TexParameteri, isCallValid, context, targetPacked, pname, param);2869}2870else2871{2872GenerateContextLostErrorOnCurrentGlobalContext();2873}2874}28752876void GL_APIENTRY GL_TexParameteriv(GLenum target, GLenum pname, const GLint *params)2877{2878Context *context = GetValidGlobalContext();2879EVENT(context, GLTexParameteriv,2880"context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),2881GLenumToString(GLenumGroup::TextureTarget, target),2882GLenumToString(GLenumGroup::TextureParameterName, pname), (uintptr_t)params);28832884if (context)2885{2886TextureType targetPacked = PackParam<TextureType>(target);2887std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2888bool isCallValid = (context->skipValidation() ||2889ValidateTexParameteriv(context, targetPacked, pname, params));2890if (isCallValid)2891{2892context->texParameteriv(targetPacked, pname, params);2893}2894ANGLE_CAPTURE(TexParameteriv, isCallValid, context, targetPacked, pname, params);2895}2896else2897{2898GenerateContextLostErrorOnCurrentGlobalContext();2899}2900}29012902void GL_APIENTRY GL_TexSubImage2D(GLenum target,2903GLint level,2904GLint xoffset,2905GLint yoffset,2906GLsizei width,2907GLsizei height,2908GLenum format,2909GLenum type,2910const void *pixels)2911{2912Context *context = GetValidGlobalContext();2913EVENT(context, GLTexSubImage2D,2914"context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, width = %d, height = "2915"%d, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",2916CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, xoffset, yoffset,2917width, height, GLenumToString(GLenumGroup::PixelFormat, format),2918GLenumToString(GLenumGroup::PixelType, type), (uintptr_t)pixels);29192920if (context)2921{2922TextureTarget targetPacked = PackParam<TextureTarget>(target);2923std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2924bool isCallValid = (context->skipValidation() ||2925ValidateTexSubImage2D(context, targetPacked, level, xoffset, yoffset,2926width, height, format, type, pixels));2927if (isCallValid)2928{2929context->texSubImage2D(targetPacked, level, xoffset, yoffset, width, height, format,2930type, pixels);2931}2932ANGLE_CAPTURE(TexSubImage2D, isCallValid, context, targetPacked, level, xoffset, yoffset,2933width, height, format, type, pixels);2934}2935else2936{2937GenerateContextLostErrorOnCurrentGlobalContext();2938}2939}29402941void GL_APIENTRY GL_Uniform1f(GLint location, GLfloat v0)2942{2943Context *context = GetValidGlobalContext();2944EVENT(context, GLUniform1f, "context = %d, location = %d, v0 = %f", CID(context), location, v0);29452946if (context)2947{2948UniformLocation locationPacked = PackParam<UniformLocation>(location);2949std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2950bool isCallValid =2951(context->skipValidation() || ValidateUniform1f(context, locationPacked, v0));2952if (isCallValid)2953{2954context->uniform1f(locationPacked, v0);2955}2956ANGLE_CAPTURE(Uniform1f, isCallValid, context, locationPacked, v0);2957}2958else2959{2960GenerateContextLostErrorOnCurrentGlobalContext();2961}2962}29632964void GL_APIENTRY GL_Uniform1fv(GLint location, GLsizei count, const GLfloat *value)2965{2966Context *context = GetValidGlobalContext();2967EVENT(context, GLUniform1fv,2968"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),2969location, count, (uintptr_t)value);29702971if (context)2972{2973UniformLocation locationPacked = PackParam<UniformLocation>(location);2974std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2975bool isCallValid = (context->skipValidation() ||2976ValidateUniform1fv(context, locationPacked, count, value));2977if (isCallValid)2978{2979context->uniform1fv(locationPacked, count, value);2980}2981ANGLE_CAPTURE(Uniform1fv, isCallValid, context, locationPacked, count, value);2982}2983else2984{2985GenerateContextLostErrorOnCurrentGlobalContext();2986}2987}29882989void GL_APIENTRY GL_Uniform1i(GLint location, GLint v0)2990{2991Context *context = GetValidGlobalContext();2992EVENT(context, GLUniform1i, "context = %d, location = %d, v0 = %d", CID(context), location, v0);29932994if (context)2995{2996UniformLocation locationPacked = PackParam<UniformLocation>(location);2997std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2998bool isCallValid =2999(context->skipValidation() || ValidateUniform1i(context, locationPacked, v0));3000if (isCallValid)3001{3002context->uniform1i(locationPacked, v0);3003}3004ANGLE_CAPTURE(Uniform1i, isCallValid, context, locationPacked, v0);3005}3006else3007{3008GenerateContextLostErrorOnCurrentGlobalContext();3009}3010}30113012void GL_APIENTRY GL_Uniform1iv(GLint location, GLsizei count, const GLint *value)3013{3014Context *context = GetValidGlobalContext();3015EVENT(context, GLUniform1iv,3016"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),3017location, count, (uintptr_t)value);30183019if (context)3020{3021UniformLocation locationPacked = PackParam<UniformLocation>(location);3022std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3023bool isCallValid = (context->skipValidation() ||3024ValidateUniform1iv(context, locationPacked, count, value));3025if (isCallValid)3026{3027context->uniform1iv(locationPacked, count, value);3028}3029ANGLE_CAPTURE(Uniform1iv, isCallValid, context, locationPacked, count, value);3030}3031else3032{3033GenerateContextLostErrorOnCurrentGlobalContext();3034}3035}30363037void GL_APIENTRY GL_Uniform2f(GLint location, GLfloat v0, GLfloat v1)3038{3039Context *context = GetValidGlobalContext();3040EVENT(context, GLUniform2f, "context = %d, location = %d, v0 = %f, v1 = %f", CID(context),3041location, v0, v1);30423043if (context)3044{3045UniformLocation locationPacked = PackParam<UniformLocation>(location);3046std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3047bool isCallValid =3048(context->skipValidation() || ValidateUniform2f(context, locationPacked, v0, v1));3049if (isCallValid)3050{3051context->uniform2f(locationPacked, v0, v1);3052}3053ANGLE_CAPTURE(Uniform2f, isCallValid, context, locationPacked, v0, v1);3054}3055else3056{3057GenerateContextLostErrorOnCurrentGlobalContext();3058}3059}30603061void GL_APIENTRY GL_Uniform2fv(GLint location, GLsizei count, const GLfloat *value)3062{3063Context *context = GetValidGlobalContext();3064EVENT(context, GLUniform2fv,3065"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),3066location, count, (uintptr_t)value);30673068if (context)3069{3070UniformLocation locationPacked = PackParam<UniformLocation>(location);3071std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3072bool isCallValid = (context->skipValidation() ||3073ValidateUniform2fv(context, locationPacked, count, value));3074if (isCallValid)3075{3076context->uniform2fv(locationPacked, count, value);3077}3078ANGLE_CAPTURE(Uniform2fv, isCallValid, context, locationPacked, count, value);3079}3080else3081{3082GenerateContextLostErrorOnCurrentGlobalContext();3083}3084}30853086void GL_APIENTRY GL_Uniform2i(GLint location, GLint v0, GLint v1)3087{3088Context *context = GetValidGlobalContext();3089EVENT(context, GLUniform2i, "context = %d, location = %d, v0 = %d, v1 = %d", CID(context),3090location, v0, v1);30913092if (context)3093{3094UniformLocation locationPacked = PackParam<UniformLocation>(location);3095std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3096bool isCallValid =3097(context->skipValidation() || ValidateUniform2i(context, locationPacked, v0, v1));3098if (isCallValid)3099{3100context->uniform2i(locationPacked, v0, v1);3101}3102ANGLE_CAPTURE(Uniform2i, isCallValid, context, locationPacked, v0, v1);3103}3104else3105{3106GenerateContextLostErrorOnCurrentGlobalContext();3107}3108}31093110void GL_APIENTRY GL_Uniform2iv(GLint location, GLsizei count, const GLint *value)3111{3112Context *context = GetValidGlobalContext();3113EVENT(context, GLUniform2iv,3114"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),3115location, count, (uintptr_t)value);31163117if (context)3118{3119UniformLocation locationPacked = PackParam<UniformLocation>(location);3120std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3121bool isCallValid = (context->skipValidation() ||3122ValidateUniform2iv(context, locationPacked, count, value));3123if (isCallValid)3124{3125context->uniform2iv(locationPacked, count, value);3126}3127ANGLE_CAPTURE(Uniform2iv, isCallValid, context, locationPacked, count, value);3128}3129else3130{3131GenerateContextLostErrorOnCurrentGlobalContext();3132}3133}31343135void GL_APIENTRY GL_Uniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)3136{3137Context *context = GetValidGlobalContext();3138EVENT(context, GLUniform3f, "context = %d, location = %d, v0 = %f, v1 = %f, v2 = %f",3139CID(context), location, v0, v1, v2);31403141if (context)3142{3143UniformLocation locationPacked = PackParam<UniformLocation>(location);3144std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3145bool isCallValid =3146(context->skipValidation() || ValidateUniform3f(context, locationPacked, v0, v1, v2));3147if (isCallValid)3148{3149context->uniform3f(locationPacked, v0, v1, v2);3150}3151ANGLE_CAPTURE(Uniform3f, isCallValid, context, locationPacked, v0, v1, v2);3152}3153else3154{3155GenerateContextLostErrorOnCurrentGlobalContext();3156}3157}31583159void GL_APIENTRY GL_Uniform3fv(GLint location, GLsizei count, const GLfloat *value)3160{3161Context *context = GetValidGlobalContext();3162EVENT(context, GLUniform3fv,3163"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),3164location, count, (uintptr_t)value);31653166if (context)3167{3168UniformLocation locationPacked = PackParam<UniformLocation>(location);3169std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3170bool isCallValid = (context->skipValidation() ||3171ValidateUniform3fv(context, locationPacked, count, value));3172if (isCallValid)3173{3174context->uniform3fv(locationPacked, count, value);3175}3176ANGLE_CAPTURE(Uniform3fv, isCallValid, context, locationPacked, count, value);3177}3178else3179{3180GenerateContextLostErrorOnCurrentGlobalContext();3181}3182}31833184void GL_APIENTRY GL_Uniform3i(GLint location, GLint v0, GLint v1, GLint v2)3185{3186Context *context = GetValidGlobalContext();3187EVENT(context, GLUniform3i, "context = %d, location = %d, v0 = %d, v1 = %d, v2 = %d",3188CID(context), location, v0, v1, v2);31893190if (context)3191{3192UniformLocation locationPacked = PackParam<UniformLocation>(location);3193std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3194bool isCallValid =3195(context->skipValidation() || ValidateUniform3i(context, locationPacked, v0, v1, v2));3196if (isCallValid)3197{3198context->uniform3i(locationPacked, v0, v1, v2);3199}3200ANGLE_CAPTURE(Uniform3i, isCallValid, context, locationPacked, v0, v1, v2);3201}3202else3203{3204GenerateContextLostErrorOnCurrentGlobalContext();3205}3206}32073208void GL_APIENTRY GL_Uniform3iv(GLint location, GLsizei count, const GLint *value)3209{3210Context *context = GetValidGlobalContext();3211EVENT(context, GLUniform3iv,3212"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),3213location, count, (uintptr_t)value);32143215if (context)3216{3217UniformLocation locationPacked = PackParam<UniformLocation>(location);3218std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3219bool isCallValid = (context->skipValidation() ||3220ValidateUniform3iv(context, locationPacked, count, value));3221if (isCallValid)3222{3223context->uniform3iv(locationPacked, count, value);3224}3225ANGLE_CAPTURE(Uniform3iv, isCallValid, context, locationPacked, count, value);3226}3227else3228{3229GenerateContextLostErrorOnCurrentGlobalContext();3230}3231}32323233void GL_APIENTRY GL_Uniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)3234{3235Context *context = GetValidGlobalContext();3236EVENT(context, GLUniform4f, "context = %d, location = %d, v0 = %f, v1 = %f, v2 = %f, v3 = %f",3237CID(context), location, v0, v1, v2, v3);32383239if (context)3240{3241UniformLocation locationPacked = PackParam<UniformLocation>(location);3242std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3243bool isCallValid = (context->skipValidation() ||3244ValidateUniform4f(context, locationPacked, v0, v1, v2, v3));3245if (isCallValid)3246{3247context->uniform4f(locationPacked, v0, v1, v2, v3);3248}3249ANGLE_CAPTURE(Uniform4f, isCallValid, context, locationPacked, v0, v1, v2, v3);3250}3251else3252{3253GenerateContextLostErrorOnCurrentGlobalContext();3254}3255}32563257void GL_APIENTRY GL_Uniform4fv(GLint location, GLsizei count, const GLfloat *value)3258{3259Context *context = GetValidGlobalContext();3260EVENT(context, GLUniform4fv,3261"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),3262location, count, (uintptr_t)value);32633264if (context)3265{3266UniformLocation locationPacked = PackParam<UniformLocation>(location);3267std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3268bool isCallValid = (context->skipValidation() ||3269ValidateUniform4fv(context, locationPacked, count, value));3270if (isCallValid)3271{3272context->uniform4fv(locationPacked, count, value);3273}3274ANGLE_CAPTURE(Uniform4fv, isCallValid, context, locationPacked, count, value);3275}3276else3277{3278GenerateContextLostErrorOnCurrentGlobalContext();3279}3280}32813282void GL_APIENTRY GL_Uniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)3283{3284Context *context = GetValidGlobalContext();3285EVENT(context, GLUniform4i, "context = %d, location = %d, v0 = %d, v1 = %d, v2 = %d, v3 = %d",3286CID(context), location, v0, v1, v2, v3);32873288if (context)3289{3290UniformLocation locationPacked = PackParam<UniformLocation>(location);3291std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3292bool isCallValid = (context->skipValidation() ||3293ValidateUniform4i(context, locationPacked, v0, v1, v2, v3));3294if (isCallValid)3295{3296context->uniform4i(locationPacked, v0, v1, v2, v3);3297}3298ANGLE_CAPTURE(Uniform4i, isCallValid, context, locationPacked, v0, v1, v2, v3);3299}3300else3301{3302GenerateContextLostErrorOnCurrentGlobalContext();3303}3304}33053306void GL_APIENTRY GL_Uniform4iv(GLint location, GLsizei count, const GLint *value)3307{3308Context *context = GetValidGlobalContext();3309EVENT(context, GLUniform4iv,3310"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),3311location, count, (uintptr_t)value);33123313if (context)3314{3315UniformLocation locationPacked = PackParam<UniformLocation>(location);3316std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3317bool isCallValid = (context->skipValidation() ||3318ValidateUniform4iv(context, locationPacked, count, value));3319if (isCallValid)3320{3321context->uniform4iv(locationPacked, count, value);3322}3323ANGLE_CAPTURE(Uniform4iv, isCallValid, context, locationPacked, count, value);3324}3325else3326{3327GenerateContextLostErrorOnCurrentGlobalContext();3328}3329}33303331void GL_APIENTRY GL_UniformMatrix2fv(GLint location,3332GLsizei count,3333GLboolean transpose,3334const GLfloat *value)3335{3336Context *context = GetValidGlobalContext();3337EVENT(context, GLUniformMatrix2fv,3338"context = %d, location = %d, count = %d, transpose = %s, value = 0x%016" PRIxPTR "",3339CID(context), location, count, GLbooleanToString(transpose), (uintptr_t)value);33403341if (context)3342{3343UniformLocation locationPacked = PackParam<UniformLocation>(location);3344std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3345bool isCallValid =3346(context->skipValidation() ||3347ValidateUniformMatrix2fv(context, locationPacked, count, transpose, value));3348if (isCallValid)3349{3350context->uniformMatrix2fv(locationPacked, count, transpose, value);3351}3352ANGLE_CAPTURE(UniformMatrix2fv, isCallValid, context, locationPacked, count, transpose,3353value);3354}3355else3356{3357GenerateContextLostErrorOnCurrentGlobalContext();3358}3359}33603361void GL_APIENTRY GL_UniformMatrix3fv(GLint location,3362GLsizei count,3363GLboolean transpose,3364const GLfloat *value)3365{3366Context *context = GetValidGlobalContext();3367EVENT(context, GLUniformMatrix3fv,3368"context = %d, location = %d, count = %d, transpose = %s, value = 0x%016" PRIxPTR "",3369CID(context), location, count, GLbooleanToString(transpose), (uintptr_t)value);33703371if (context)3372{3373UniformLocation locationPacked = PackParam<UniformLocation>(location);3374std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3375bool isCallValid =3376(context->skipValidation() ||3377ValidateUniformMatrix3fv(context, locationPacked, count, transpose, value));3378if (isCallValid)3379{3380context->uniformMatrix3fv(locationPacked, count, transpose, value);3381}3382ANGLE_CAPTURE(UniformMatrix3fv, isCallValid, context, locationPacked, count, transpose,3383value);3384}3385else3386{3387GenerateContextLostErrorOnCurrentGlobalContext();3388}3389}33903391void GL_APIENTRY GL_UniformMatrix4fv(GLint location,3392GLsizei count,3393GLboolean transpose,3394const GLfloat *value)3395{3396Context *context = GetValidGlobalContext();3397EVENT(context, GLUniformMatrix4fv,3398"context = %d, location = %d, count = %d, transpose = %s, value = 0x%016" PRIxPTR "",3399CID(context), location, count, GLbooleanToString(transpose), (uintptr_t)value);34003401if (context)3402{3403UniformLocation locationPacked = PackParam<UniformLocation>(location);3404std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3405bool isCallValid =3406(context->skipValidation() ||3407ValidateUniformMatrix4fv(context, locationPacked, count, transpose, value));3408if (isCallValid)3409{3410context->uniformMatrix4fv(locationPacked, count, transpose, value);3411}3412ANGLE_CAPTURE(UniformMatrix4fv, isCallValid, context, locationPacked, count, transpose,3413value);3414}3415else3416{3417GenerateContextLostErrorOnCurrentGlobalContext();3418}3419}34203421void GL_APIENTRY GL_UseProgram(GLuint program)3422{3423Context *context = GetValidGlobalContext();3424EVENT(context, GLUseProgram, "context = %d, program = %u", CID(context), program);34253426if (context)3427{3428ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);3429std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3430bool isCallValid =3431(context->skipValidation() || ValidateUseProgram(context, programPacked));3432if (isCallValid)3433{3434context->useProgram(programPacked);3435}3436ANGLE_CAPTURE(UseProgram, isCallValid, context, programPacked);3437}3438else3439{3440GenerateContextLostErrorOnCurrentGlobalContext();3441}3442}34433444void GL_APIENTRY GL_ValidateProgram(GLuint program)3445{3446Context *context = GetValidGlobalContext();3447EVENT(context, GLValidateProgram, "context = %d, program = %u", CID(context), program);34483449if (context)3450{3451ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);3452std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3453bool isCallValid =3454(context->skipValidation() || ValidateValidateProgram(context, programPacked));3455if (isCallValid)3456{3457context->validateProgram(programPacked);3458}3459ANGLE_CAPTURE(ValidateProgram, isCallValid, context, programPacked);3460}3461else3462{3463GenerateContextLostErrorOnCurrentGlobalContext();3464}3465}34663467void GL_APIENTRY GL_VertexAttrib1f(GLuint index, GLfloat x)3468{3469Context *context = GetValidGlobalContext();3470EVENT(context, GLVertexAttrib1f, "context = %d, index = %u, x = %f", CID(context), index, x);34713472if (context)3473{3474std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3475bool isCallValid = (context->skipValidation() || ValidateVertexAttrib1f(context, index, x));3476if (isCallValid)3477{3478context->vertexAttrib1f(index, x);3479}3480ANGLE_CAPTURE(VertexAttrib1f, isCallValid, context, index, x);3481}3482else3483{3484GenerateContextLostErrorOnCurrentGlobalContext();3485}3486}34873488void GL_APIENTRY GL_VertexAttrib1fv(GLuint index, const GLfloat *v)3489{3490Context *context = GetValidGlobalContext();3491EVENT(context, GLVertexAttrib1fv, "context = %d, index = %u, v = 0x%016" PRIxPTR "",3492CID(context), index, (uintptr_t)v);34933494if (context)3495{3496std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3497bool isCallValid =3498(context->skipValidation() || ValidateVertexAttrib1fv(context, index, v));3499if (isCallValid)3500{3501context->vertexAttrib1fv(index, v);3502}3503ANGLE_CAPTURE(VertexAttrib1fv, isCallValid, context, index, v);3504}3505else3506{3507GenerateContextLostErrorOnCurrentGlobalContext();3508}3509}35103511void GL_APIENTRY GL_VertexAttrib2f(GLuint index, GLfloat x, GLfloat y)3512{3513Context *context = GetValidGlobalContext();3514EVENT(context, GLVertexAttrib2f, "context = %d, index = %u, x = %f, y = %f", CID(context),3515index, x, y);35163517if (context)3518{3519std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3520bool isCallValid =3521(context->skipValidation() || ValidateVertexAttrib2f(context, index, x, y));3522if (isCallValid)3523{3524context->vertexAttrib2f(index, x, y);3525}3526ANGLE_CAPTURE(VertexAttrib2f, isCallValid, context, index, x, y);3527}3528else3529{3530GenerateContextLostErrorOnCurrentGlobalContext();3531}3532}35333534void GL_APIENTRY GL_VertexAttrib2fv(GLuint index, const GLfloat *v)3535{3536Context *context = GetValidGlobalContext();3537EVENT(context, GLVertexAttrib2fv, "context = %d, index = %u, v = 0x%016" PRIxPTR "",3538CID(context), index, (uintptr_t)v);35393540if (context)3541{3542std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3543bool isCallValid =3544(context->skipValidation() || ValidateVertexAttrib2fv(context, index, v));3545if (isCallValid)3546{3547context->vertexAttrib2fv(index, v);3548}3549ANGLE_CAPTURE(VertexAttrib2fv, isCallValid, context, index, v);3550}3551else3552{3553GenerateContextLostErrorOnCurrentGlobalContext();3554}3555}35563557void GL_APIENTRY GL_VertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)3558{3559Context *context = GetValidGlobalContext();3560EVENT(context, GLVertexAttrib3f, "context = %d, index = %u, x = %f, y = %f, z = %f",3561CID(context), index, x, y, z);35623563if (context)3564{3565std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3566bool isCallValid =3567(context->skipValidation() || ValidateVertexAttrib3f(context, index, x, y, z));3568if (isCallValid)3569{3570context->vertexAttrib3f(index, x, y, z);3571}3572ANGLE_CAPTURE(VertexAttrib3f, isCallValid, context, index, x, y, z);3573}3574else3575{3576GenerateContextLostErrorOnCurrentGlobalContext();3577}3578}35793580void GL_APIENTRY GL_VertexAttrib3fv(GLuint index, const GLfloat *v)3581{3582Context *context = GetValidGlobalContext();3583EVENT(context, GLVertexAttrib3fv, "context = %d, index = %u, v = 0x%016" PRIxPTR "",3584CID(context), index, (uintptr_t)v);35853586if (context)3587{3588std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3589bool isCallValid =3590(context->skipValidation() || ValidateVertexAttrib3fv(context, index, v));3591if (isCallValid)3592{3593context->vertexAttrib3fv(index, v);3594}3595ANGLE_CAPTURE(VertexAttrib3fv, isCallValid, context, index, v);3596}3597else3598{3599GenerateContextLostErrorOnCurrentGlobalContext();3600}3601}36023603void GL_APIENTRY GL_VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)3604{3605Context *context = GetValidGlobalContext();3606EVENT(context, GLVertexAttrib4f, "context = %d, index = %u, x = %f, y = %f, z = %f, w = %f",3607CID(context), index, x, y, z, w);36083609if (context)3610{3611std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3612bool isCallValid =3613(context->skipValidation() || ValidateVertexAttrib4f(context, index, x, y, z, w));3614if (isCallValid)3615{3616context->vertexAttrib4f(index, x, y, z, w);3617}3618ANGLE_CAPTURE(VertexAttrib4f, isCallValid, context, index, x, y, z, w);3619}3620else3621{3622GenerateContextLostErrorOnCurrentGlobalContext();3623}3624}36253626void GL_APIENTRY GL_VertexAttrib4fv(GLuint index, const GLfloat *v)3627{3628Context *context = GetValidGlobalContext();3629EVENT(context, GLVertexAttrib4fv, "context = %d, index = %u, v = 0x%016" PRIxPTR "",3630CID(context), index, (uintptr_t)v);36313632if (context)3633{3634std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3635bool isCallValid =3636(context->skipValidation() || ValidateVertexAttrib4fv(context, index, v));3637if (isCallValid)3638{3639context->vertexAttrib4fv(index, v);3640}3641ANGLE_CAPTURE(VertexAttrib4fv, isCallValid, context, index, v);3642}3643else3644{3645GenerateContextLostErrorOnCurrentGlobalContext();3646}3647}36483649void GL_APIENTRY GL_VertexAttribPointer(GLuint index,3650GLint size,3651GLenum type,3652GLboolean normalized,3653GLsizei stride,3654const void *pointer)3655{3656Context *context = GetValidGlobalContext();3657EVENT(context, GLVertexAttribPointer,3658"context = %d, index = %u, size = %d, type = %s, normalized = %s, stride = %d, pointer = "3659"0x%016" PRIxPTR "",3660CID(context), index, size, GLenumToString(GLenumGroup::VertexAttribPointerType, type),3661GLbooleanToString(normalized), stride, (uintptr_t)pointer);36623663if (context)3664{3665VertexAttribType typePacked = PackParam<VertexAttribType>(type);3666std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3667bool isCallValid = (context->skipValidation() ||3668ValidateVertexAttribPointer(context, index, size, typePacked,3669normalized, stride, pointer));3670if (isCallValid)3671{3672context->vertexAttribPointer(index, size, typePacked, normalized, stride, pointer);3673}3674ANGLE_CAPTURE(VertexAttribPointer, isCallValid, context, index, size, typePacked,3675normalized, stride, pointer);3676}3677else3678{3679GenerateContextLostErrorOnCurrentGlobalContext();3680}3681}36823683void GL_APIENTRY GL_Viewport(GLint x, GLint y, GLsizei width, GLsizei height)3684{3685Context *context = GetValidGlobalContext();3686EVENT(context, GLViewport, "context = %d, x = %d, y = %d, width = %d, height = %d",3687CID(context), x, y, width, height);36883689if (context)3690{3691std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);3692bool isCallValid =3693(context->skipValidation() || ValidateViewport(context, x, y, width, height));3694if (isCallValid)3695{3696context->viewport(x, y, width, height);3697}3698ANGLE_CAPTURE(Viewport, isCallValid, context, x, y, width, height);3699}3700else3701{3702GenerateContextLostErrorOnCurrentGlobalContext();3703}3704}37053706} // extern "C"370737083709