Path: blob/main_old/src/libGLESv2/entry_points_gles_3_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_3_0_autogen.cpp:8// Defines the GLES 3.0 entry points.910#include "libGLESv2/entry_points_gles_3_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_3_0_autogen.h"16#include "libANGLE/capture/gl_enum_utils.h"17#include "libANGLE/entry_points_utils.h"18#include "libANGLE/validationES3.h"19#include "libGLESv2/global_state.h"2021using namespace gl;2223extern "C" {24void GL_APIENTRY GL_BeginQuery(GLenum target, GLuint id)25{26Context *context = GetValidGlobalContext();27EVENT(context, GLBeginQuery, "context = %d, target = %s, id = %u", CID(context),28GLenumToString(GLenumGroup::QueryTarget, target), id);2930if (context)31{32QueryType targetPacked = PackParam<QueryType>(target);33QueryID idPacked = PackParam<QueryID>(id);34std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);35bool isCallValid =36(context->skipValidation() || ValidateBeginQuery(context, targetPacked, idPacked));37if (isCallValid)38{39context->beginQuery(targetPacked, idPacked);40}41ANGLE_CAPTURE(BeginQuery, isCallValid, context, targetPacked, idPacked);42}43else44{45GenerateContextLostErrorOnCurrentGlobalContext();46}47}4849void GL_APIENTRY GL_BeginTransformFeedback(GLenum primitiveMode)50{51Context *context = GetValidGlobalContext();52EVENT(context, GLBeginTransformFeedback, "context = %d, primitiveMode = %s", CID(context),53GLenumToString(GLenumGroup::PrimitiveType, primitiveMode));5455if (context)56{57PrimitiveMode primitiveModePacked = PackParam<PrimitiveMode>(primitiveMode);58std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);59bool isCallValid = (context->skipValidation() ||60ValidateBeginTransformFeedback(context, primitiveModePacked));61if (isCallValid)62{63context->beginTransformFeedback(primitiveModePacked);64}65ANGLE_CAPTURE(BeginTransformFeedback, isCallValid, context, primitiveModePacked);66}67else68{69GenerateContextLostErrorOnCurrentGlobalContext();70}71}7273void GL_APIENTRY GL_BindBufferBase(GLenum target, GLuint index, GLuint buffer)74{75Context *context = GetValidGlobalContext();76EVENT(context, GLBindBufferBase, "context = %d, target = %s, index = %u, buffer = %u",77CID(context), GLenumToString(GLenumGroup::BufferTargetARB, target), index, buffer);7879if (context)80{81BufferBinding targetPacked = PackParam<BufferBinding>(target);82BufferID bufferPacked = PackParam<BufferID>(buffer);83std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);84bool isCallValid = (context->skipValidation() ||85ValidateBindBufferBase(context, targetPacked, index, bufferPacked));86if (isCallValid)87{88context->bindBufferBase(targetPacked, index, bufferPacked);89}90ANGLE_CAPTURE(BindBufferBase, isCallValid, context, targetPacked, index, bufferPacked);91}92else93{94GenerateContextLostErrorOnCurrentGlobalContext();95}96}9798void GL_APIENTRY99GL_BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)100{101Context *context = GetValidGlobalContext();102EVENT(context, GLBindBufferRange,103"context = %d, target = %s, index = %u, buffer = %u, offset = %llu, size = %llu",104CID(context), GLenumToString(GLenumGroup::BufferTargetARB, target), index, buffer,105static_cast<unsigned long long>(offset), static_cast<unsigned long long>(size));106107if (context)108{109BufferBinding targetPacked = PackParam<BufferBinding>(target);110BufferID bufferPacked = PackParam<BufferID>(buffer);111std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);112bool isCallValid =113(context->skipValidation() ||114ValidateBindBufferRange(context, targetPacked, index, bufferPacked, offset, size));115if (isCallValid)116{117context->bindBufferRange(targetPacked, index, bufferPacked, offset, size);118}119ANGLE_CAPTURE(BindBufferRange, isCallValid, context, targetPacked, index, bufferPacked,120offset, size);121}122else123{124GenerateContextLostErrorOnCurrentGlobalContext();125}126}127128void GL_APIENTRY GL_BindSampler(GLuint unit, GLuint sampler)129{130Context *context = GetValidGlobalContext();131EVENT(context, GLBindSampler, "context = %d, unit = %u, sampler = %u", CID(context), unit,132sampler);133134if (context)135{136SamplerID samplerPacked = PackParam<SamplerID>(sampler);137std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);138bool isCallValid =139(context->skipValidation() || ValidateBindSampler(context, unit, samplerPacked));140if (isCallValid)141{142context->bindSampler(unit, samplerPacked);143}144ANGLE_CAPTURE(BindSampler, isCallValid, context, unit, samplerPacked);145}146else147{148GenerateContextLostErrorOnCurrentGlobalContext();149}150}151152void GL_APIENTRY GL_BindTransformFeedback(GLenum target, GLuint id)153{154Context *context = GetValidGlobalContext();155EVENT(context, GLBindTransformFeedback, "context = %d, target = %s, id = %u", CID(context),156GLenumToString(GLenumGroup::BindTransformFeedbackTarget, target), id);157158if (context)159{160TransformFeedbackID idPacked = PackParam<TransformFeedbackID>(id);161std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);162bool isCallValid =163(context->skipValidation() || ValidateBindTransformFeedback(context, target, idPacked));164if (isCallValid)165{166context->bindTransformFeedback(target, idPacked);167}168ANGLE_CAPTURE(BindTransformFeedback, isCallValid, context, target, idPacked);169}170else171{172GenerateContextLostErrorOnCurrentGlobalContext();173}174}175176void GL_APIENTRY GL_BindVertexArray(GLuint array)177{178Context *context = GetValidGlobalContext();179EVENT(context, GLBindVertexArray, "context = %d, array = %u", CID(context), array);180181if (context)182{183VertexArrayID arrayPacked = PackParam<VertexArrayID>(array);184std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);185bool isCallValid =186(context->skipValidation() || ValidateBindVertexArray(context, arrayPacked));187if (isCallValid)188{189context->bindVertexArray(arrayPacked);190}191ANGLE_CAPTURE(BindVertexArray, isCallValid, context, arrayPacked);192}193else194{195GenerateContextLostErrorOnCurrentGlobalContext();196}197}198199void GL_APIENTRY GL_BlitFramebuffer(GLint srcX0,200GLint srcY0,201GLint srcX1,202GLint srcY1,203GLint dstX0,204GLint dstY0,205GLint dstX1,206GLint dstY1,207GLbitfield mask,208GLenum filter)209{210Context *context = GetValidGlobalContext();211EVENT(context, GLBlitFramebuffer,212"context = %d, srcX0 = %d, srcY0 = %d, srcX1 = %d, srcY1 = %d, dstX0 = %d, dstY0 = %d, "213"dstX1 = %d, dstY1 = %d, mask = %s, filter = %s",214CID(context), srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,215GLbitfieldToString(GLenumGroup::ClearBufferMask, mask).c_str(),216GLenumToString(GLenumGroup::BlitFramebufferFilter, filter));217218if (context)219{220std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);221bool isCallValid = (context->skipValidation() ||222ValidateBlitFramebuffer(context, srcX0, srcY0, srcX1, srcY1, dstX0,223dstY0, dstX1, dstY1, mask, filter));224if (isCallValid)225{226context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,227filter);228}229ANGLE_CAPTURE(BlitFramebuffer, isCallValid, context, srcX0, srcY0, srcX1, srcY1, dstX0,230dstY0, dstX1, dstY1, mask, filter);231}232else233{234GenerateContextLostErrorOnCurrentGlobalContext();235}236}237238void GL_APIENTRY GL_ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)239{240Context *context = GetValidGlobalContext();241EVENT(context, GLClearBufferfi,242"context = %d, buffer = %s, drawbuffer = %d, depth = %f, stencil = %d", CID(context),243GLenumToString(GLenumGroup::Buffer, buffer), drawbuffer, depth, stencil);244245if (context)246{247std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);248bool isCallValid = (context->skipValidation() ||249ValidateClearBufferfi(context, buffer, drawbuffer, depth, stencil));250if (isCallValid)251{252context->clearBufferfi(buffer, drawbuffer, depth, stencil);253}254ANGLE_CAPTURE(ClearBufferfi, isCallValid, context, buffer, drawbuffer, depth, stencil);255}256else257{258GenerateContextLostErrorOnCurrentGlobalContext();259}260}261262void GL_APIENTRY GL_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)263{264Context *context = GetValidGlobalContext();265EVENT(context, GLClearBufferfv,266"context = %d, buffer = %s, drawbuffer = %d, value = 0x%016" PRIxPTR "", CID(context),267GLenumToString(GLenumGroup::Buffer, buffer), drawbuffer, (uintptr_t)value);268269if (context)270{271std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);272bool isCallValid = (context->skipValidation() ||273ValidateClearBufferfv(context, buffer, drawbuffer, value));274if (isCallValid)275{276context->clearBufferfv(buffer, drawbuffer, value);277}278ANGLE_CAPTURE(ClearBufferfv, isCallValid, context, buffer, drawbuffer, value);279}280else281{282GenerateContextLostErrorOnCurrentGlobalContext();283}284}285286void GL_APIENTRY GL_ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)287{288Context *context = GetValidGlobalContext();289EVENT(context, GLClearBufferiv,290"context = %d, buffer = %s, drawbuffer = %d, value = 0x%016" PRIxPTR "", CID(context),291GLenumToString(GLenumGroup::Buffer, buffer), drawbuffer, (uintptr_t)value);292293if (context)294{295std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);296bool isCallValid = (context->skipValidation() ||297ValidateClearBufferiv(context, buffer, drawbuffer, value));298if (isCallValid)299{300context->clearBufferiv(buffer, drawbuffer, value);301}302ANGLE_CAPTURE(ClearBufferiv, isCallValid, context, buffer, drawbuffer, value);303}304else305{306GenerateContextLostErrorOnCurrentGlobalContext();307}308}309310void GL_APIENTRY GL_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)311{312Context *context = GetValidGlobalContext();313EVENT(context, GLClearBufferuiv,314"context = %d, buffer = %s, drawbuffer = %d, value = 0x%016" PRIxPTR "", CID(context),315GLenumToString(GLenumGroup::Buffer, buffer), drawbuffer, (uintptr_t)value);316317if (context)318{319std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);320bool isCallValid = (context->skipValidation() ||321ValidateClearBufferuiv(context, buffer, drawbuffer, value));322if (isCallValid)323{324context->clearBufferuiv(buffer, drawbuffer, value);325}326ANGLE_CAPTURE(ClearBufferuiv, isCallValid, context, buffer, drawbuffer, value);327}328else329{330GenerateContextLostErrorOnCurrentGlobalContext();331}332}333334GLenum GL_APIENTRY GL_ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)335{336Context *context = GetValidGlobalContext();337EVENT(context, GLClientWaitSync,338"context = %d, sync = 0x%016" PRIxPTR ", flags = %s, timeout = %llu", CID(context),339(uintptr_t)sync, GLbitfieldToString(GLenumGroup::SyncObjectMask, flags).c_str(),340static_cast<unsigned long long>(timeout));341342GLenum returnValue;343if (context)344{345std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);346bool isCallValid =347(context->skipValidation() || ValidateClientWaitSync(context, sync, flags, timeout));348if (isCallValid)349{350returnValue = context->clientWaitSync(sync, flags, timeout);351}352else353{354returnValue = GetDefaultReturnValue<angle::EntryPoint::GLClientWaitSync, GLenum>();355}356ANGLE_CAPTURE(ClientWaitSync, isCallValid, context, sync, flags, timeout, returnValue);357}358else359{360GenerateContextLostErrorOnCurrentGlobalContext();361returnValue = GetDefaultReturnValue<angle::EntryPoint::GLClientWaitSync, GLenum>();362}363return returnValue;364}365366void GL_APIENTRY GL_CompressedTexImage3D(GLenum target,367GLint level,368GLenum internalformat,369GLsizei width,370GLsizei height,371GLsizei depth,372GLint border,373GLsizei imageSize,374const void *data)375{376Context *context = GetValidGlobalContext();377EVENT(context, GLCompressedTexImage3D,378"context = %d, target = %s, level = %d, internalformat = %s, width = %d, height = %d, "379"depth = %d, border = %d, imageSize = %d, data = 0x%016" PRIxPTR "",380CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level,381GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height, depth, border,382imageSize, (uintptr_t)data);383384if (context)385{386TextureTarget targetPacked = PackParam<TextureTarget>(target);387std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);388bool isCallValid =389(context->skipValidation() ||390ValidateCompressedTexImage3D(context, targetPacked, level, internalformat, width,391height, depth, border, imageSize, data));392if (isCallValid)393{394context->compressedTexImage3D(targetPacked, level, internalformat, width, height, depth,395border, imageSize, data);396}397ANGLE_CAPTURE(CompressedTexImage3D, isCallValid, context, targetPacked, level,398internalformat, width, height, depth, border, imageSize, data);399}400else401{402GenerateContextLostErrorOnCurrentGlobalContext();403}404}405406void GL_APIENTRY GL_CompressedTexSubImage3D(GLenum target,407GLint level,408GLint xoffset,409GLint yoffset,410GLint zoffset,411GLsizei width,412GLsizei height,413GLsizei depth,414GLenum format,415GLsizei imageSize,416const void *data)417{418Context *context = GetValidGlobalContext();419EVENT(context, GLCompressedTexSubImage3D,420"context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width "421"= %d, height = %d, depth = %d, format = %s, imageSize = %d, data = 0x%016" PRIxPTR "",422CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, xoffset, yoffset,423zoffset, width, height, depth, GLenumToString(GLenumGroup::PixelFormat, format),424imageSize, (uintptr_t)data);425426if (context)427{428TextureTarget targetPacked = PackParam<TextureTarget>(target);429std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);430bool isCallValid = (context->skipValidation() ||431ValidateCompressedTexSubImage3D(context, targetPacked, level, xoffset,432yoffset, zoffset, width, height, depth,433format, imageSize, data));434if (isCallValid)435{436context->compressedTexSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, width,437height, depth, format, imageSize, data);438}439ANGLE_CAPTURE(CompressedTexSubImage3D, isCallValid, context, targetPacked, level, xoffset,440yoffset, zoffset, width, height, depth, format, imageSize, data);441}442else443{444GenerateContextLostErrorOnCurrentGlobalContext();445}446}447448void GL_APIENTRY GL_CopyBufferSubData(GLenum readTarget,449GLenum writeTarget,450GLintptr readOffset,451GLintptr writeOffset,452GLsizeiptr size)453{454Context *context = GetValidGlobalContext();455EVENT(context, GLCopyBufferSubData,456"context = %d, readTarget = %s, writeTarget = %s, readOffset = %llu, writeOffset = %llu, "457"size = %llu",458CID(context), GLenumToString(GLenumGroup::CopyBufferSubDataTarget, readTarget),459GLenumToString(GLenumGroup::CopyBufferSubDataTarget, writeTarget),460static_cast<unsigned long long>(readOffset), static_cast<unsigned long long>(writeOffset),461static_cast<unsigned long long>(size));462463if (context)464{465BufferBinding readTargetPacked = PackParam<BufferBinding>(readTarget);466BufferBinding writeTargetPacked = PackParam<BufferBinding>(writeTarget);467std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);468bool isCallValid = (context->skipValidation() ||469ValidateCopyBufferSubData(context, readTargetPacked, writeTargetPacked,470readOffset, writeOffset, size));471if (isCallValid)472{473context->copyBufferSubData(readTargetPacked, writeTargetPacked, readOffset, writeOffset,474size);475}476ANGLE_CAPTURE(CopyBufferSubData, isCallValid, context, readTargetPacked, writeTargetPacked,477readOffset, writeOffset, size);478}479else480{481GenerateContextLostErrorOnCurrentGlobalContext();482}483}484485void GL_APIENTRY GL_CopyTexSubImage3D(GLenum target,486GLint level,487GLint xoffset,488GLint yoffset,489GLint zoffset,490GLint x,491GLint y,492GLsizei width,493GLsizei height)494{495Context *context = GetValidGlobalContext();496EVENT(context, GLCopyTexSubImage3D,497"context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, x = "498"%d, y = %d, width = %d, height = %d",499CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, xoffset, yoffset,500zoffset, x, y, width, height);501502if (context)503{504TextureTarget targetPacked = PackParam<TextureTarget>(target);505std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);506bool isCallValid = (context->skipValidation() ||507ValidateCopyTexSubImage3D(context, targetPacked, level, xoffset,508yoffset, zoffset, x, y, width, height));509if (isCallValid)510{511context->copyTexSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, x, y, width,512height);513}514ANGLE_CAPTURE(CopyTexSubImage3D, isCallValid, context, targetPacked, level, xoffset,515yoffset, zoffset, x, y, width, height);516}517else518{519GenerateContextLostErrorOnCurrentGlobalContext();520}521}522523void GL_APIENTRY GL_DeleteQueries(GLsizei n, const GLuint *ids)524{525Context *context = GetValidGlobalContext();526EVENT(context, GLDeleteQueries, "context = %d, n = %d, ids = 0x%016" PRIxPTR "", CID(context),527n, (uintptr_t)ids);528529if (context)530{531const QueryID *idsPacked = PackParam<const QueryID *>(ids);532std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);533bool isCallValid =534(context->skipValidation() || ValidateDeleteQueries(context, n, idsPacked));535if (isCallValid)536{537context->deleteQueries(n, idsPacked);538}539ANGLE_CAPTURE(DeleteQueries, isCallValid, context, n, idsPacked);540}541else542{543GenerateContextLostErrorOnCurrentGlobalContext();544}545}546547void GL_APIENTRY GL_DeleteSamplers(GLsizei count, const GLuint *samplers)548{549Context *context = GetValidGlobalContext();550EVENT(context, GLDeleteSamplers, "context = %d, count = %d, samplers = 0x%016" PRIxPTR "",551CID(context), count, (uintptr_t)samplers);552553if (context)554{555const SamplerID *samplersPacked = PackParam<const SamplerID *>(samplers);556std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);557bool isCallValid =558(context->skipValidation() || ValidateDeleteSamplers(context, count, samplersPacked));559if (isCallValid)560{561context->deleteSamplers(count, samplersPacked);562}563ANGLE_CAPTURE(DeleteSamplers, isCallValid, context, count, samplersPacked);564}565else566{567GenerateContextLostErrorOnCurrentGlobalContext();568}569}570571void GL_APIENTRY GL_DeleteSync(GLsync sync)572{573Context *context = GetValidGlobalContext();574EVENT(context, GLDeleteSync, "context = %d, sync = 0x%016" PRIxPTR "", CID(context),575(uintptr_t)sync);576577if (context)578{579std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);580bool isCallValid = (context->skipValidation() || ValidateDeleteSync(context, sync));581if (isCallValid)582{583context->deleteSync(sync);584}585ANGLE_CAPTURE(DeleteSync, isCallValid, context, sync);586}587else588{589GenerateContextLostErrorOnCurrentGlobalContext();590}591}592593void GL_APIENTRY GL_DeleteTransformFeedbacks(GLsizei n, const GLuint *ids)594{595Context *context = GetValidGlobalContext();596EVENT(context, GLDeleteTransformFeedbacks, "context = %d, n = %d, ids = 0x%016" PRIxPTR "",597CID(context), n, (uintptr_t)ids);598599if (context)600{601const TransformFeedbackID *idsPacked = PackParam<const TransformFeedbackID *>(ids);602std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);603bool isCallValid =604(context->skipValidation() || ValidateDeleteTransformFeedbacks(context, n, idsPacked));605if (isCallValid)606{607context->deleteTransformFeedbacks(n, idsPacked);608}609ANGLE_CAPTURE(DeleteTransformFeedbacks, isCallValid, context, n, idsPacked);610}611else612{613GenerateContextLostErrorOnCurrentGlobalContext();614}615}616617void GL_APIENTRY GL_DeleteVertexArrays(GLsizei n, const GLuint *arrays)618{619Context *context = GetValidGlobalContext();620EVENT(context, GLDeleteVertexArrays, "context = %d, n = %d, arrays = 0x%016" PRIxPTR "",621CID(context), n, (uintptr_t)arrays);622623if (context)624{625const VertexArrayID *arraysPacked = PackParam<const VertexArrayID *>(arrays);626std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);627bool isCallValid =628(context->skipValidation() || ValidateDeleteVertexArrays(context, n, arraysPacked));629if (isCallValid)630{631context->deleteVertexArrays(n, arraysPacked);632}633ANGLE_CAPTURE(DeleteVertexArrays, isCallValid, context, n, arraysPacked);634}635else636{637GenerateContextLostErrorOnCurrentGlobalContext();638}639}640641void GL_APIENTRY GL_DrawArraysInstanced(GLenum mode,642GLint first,643GLsizei count,644GLsizei instancecount)645{646Context *context = GetValidGlobalContext();647EVENT(context, GLDrawArraysInstanced,648"context = %d, mode = %s, first = %d, count = %d, instancecount = %d", CID(context),649GLenumToString(GLenumGroup::PrimitiveType, mode), first, count, instancecount);650651if (context)652{653PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);654std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);655bool isCallValid =656(context->skipValidation() ||657ValidateDrawArraysInstanced(context, modePacked, first, count, instancecount));658if (isCallValid)659{660context->drawArraysInstanced(modePacked, first, count, instancecount);661}662ANGLE_CAPTURE(DrawArraysInstanced, isCallValid, context, modePacked, first, count,663instancecount);664}665else666{667GenerateContextLostErrorOnCurrentGlobalContext();668}669}670671void GL_APIENTRY GL_DrawBuffers(GLsizei n, const GLenum *bufs)672{673Context *context = GetValidGlobalContext();674EVENT(context, GLDrawBuffers, "context = %d, n = %d, bufs = 0x%016" PRIxPTR "", CID(context), n,675(uintptr_t)bufs);676677if (context)678{679std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);680bool isCallValid = (context->skipValidation() || ValidateDrawBuffers(context, n, bufs));681if (isCallValid)682{683context->drawBuffers(n, bufs);684}685ANGLE_CAPTURE(DrawBuffers, isCallValid, context, n, bufs);686}687else688{689GenerateContextLostErrorOnCurrentGlobalContext();690}691}692693void GL_APIENTRY GL_DrawElementsInstanced(GLenum mode,694GLsizei count,695GLenum type,696const void *indices,697GLsizei instancecount)698{699Context *context = GetValidGlobalContext();700EVENT(context, GLDrawElementsInstanced,701"context = %d, mode = %s, count = %d, type = %s, indices = 0x%016" PRIxPTR702", instancecount = %d",703CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), count,704GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices, instancecount);705706if (context)707{708PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);709DrawElementsType typePacked = PackParam<DrawElementsType>(type);710std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);711bool isCallValid = (context->skipValidation() ||712ValidateDrawElementsInstanced(context, modePacked, count, typePacked,713indices, instancecount));714if (isCallValid)715{716context->drawElementsInstanced(modePacked, count, typePacked, indices, instancecount);717}718ANGLE_CAPTURE(DrawElementsInstanced, isCallValid, context, modePacked, count, typePacked,719indices, instancecount);720}721else722{723GenerateContextLostErrorOnCurrentGlobalContext();724}725}726727void GL_APIENTRY GL_DrawRangeElements(GLenum mode,728GLuint start,729GLuint end,730GLsizei count,731GLenum type,732const void *indices)733{734Context *context = GetValidGlobalContext();735EVENT(context, GLDrawRangeElements,736"context = %d, mode = %s, start = %u, end = %u, count = %d, type = %s, indices = "737"0x%016" PRIxPTR "",738CID(context), GLenumToString(GLenumGroup::PrimitiveType, mode), start, end, count,739GLenumToString(GLenumGroup::DrawElementsType, type), (uintptr_t)indices);740741if (context)742{743PrimitiveMode modePacked = PackParam<PrimitiveMode>(mode);744DrawElementsType typePacked = PackParam<DrawElementsType>(type);745std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);746bool isCallValid =747(context->skipValidation() || ValidateDrawRangeElements(context, modePacked, start, end,748count, typePacked, indices));749if (isCallValid)750{751context->drawRangeElements(modePacked, start, end, count, typePacked, indices);752}753ANGLE_CAPTURE(DrawRangeElements, isCallValid, context, modePacked, start, end, count,754typePacked, indices);755}756else757{758GenerateContextLostErrorOnCurrentGlobalContext();759}760}761762void GL_APIENTRY GL_EndQuery(GLenum target)763{764Context *context = GetValidGlobalContext();765EVENT(context, GLEndQuery, "context = %d, target = %s", CID(context),766GLenumToString(GLenumGroup::QueryTarget, target));767768if (context)769{770QueryType targetPacked = PackParam<QueryType>(target);771std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);772bool isCallValid = (context->skipValidation() || ValidateEndQuery(context, targetPacked));773if (isCallValid)774{775context->endQuery(targetPacked);776}777ANGLE_CAPTURE(EndQuery, isCallValid, context, targetPacked);778}779else780{781GenerateContextLostErrorOnCurrentGlobalContext();782}783}784785void GL_APIENTRY GL_EndTransformFeedback()786{787Context *context = GetValidGlobalContext();788EVENT(context, GLEndTransformFeedback, "context = %d", CID(context));789790if (context)791{792std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);793bool isCallValid = (context->skipValidation() || ValidateEndTransformFeedback(context));794if (isCallValid)795{796context->endTransformFeedback();797}798ANGLE_CAPTURE(EndTransformFeedback, isCallValid, context);799}800else801{802GenerateContextLostErrorOnCurrentGlobalContext();803}804}805806GLsync GL_APIENTRY GL_FenceSync(GLenum condition, GLbitfield flags)807{808Context *context = GetValidGlobalContext();809EVENT(context, GLFenceSync, "context = %d, condition = %s, flags = %s", CID(context),810GLenumToString(GLenumGroup::SyncCondition, condition),811GLbitfieldToString(GLenumGroup::DefaultGroup, flags).c_str());812813GLsync returnValue;814if (context)815{816std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);817bool isCallValid =818(context->skipValidation() || ValidateFenceSync(context, condition, flags));819if (isCallValid)820{821returnValue = context->fenceSync(condition, flags);822}823else824{825returnValue = GetDefaultReturnValue<angle::EntryPoint::GLFenceSync, GLsync>();826}827ANGLE_CAPTURE(FenceSync, isCallValid, context, condition, flags, returnValue);828}829else830{831GenerateContextLostErrorOnCurrentGlobalContext();832returnValue = GetDefaultReturnValue<angle::EntryPoint::GLFenceSync, GLsync>();833}834return returnValue;835}836837void GL_APIENTRY GL_FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)838{839Context *context = GetValidGlobalContext();840EVENT(context, GLFlushMappedBufferRange,841"context = %d, target = %s, offset = %llu, length = %llu", CID(context),842GLenumToString(GLenumGroup::BufferTargetARB, target),843static_cast<unsigned long long>(offset), static_cast<unsigned long long>(length));844845if (context)846{847BufferBinding targetPacked = PackParam<BufferBinding>(target);848std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);849bool isCallValid = (context->skipValidation() ||850ValidateFlushMappedBufferRange(context, targetPacked, offset, length));851if (isCallValid)852{853context->flushMappedBufferRange(targetPacked, offset, length);854}855ANGLE_CAPTURE(FlushMappedBufferRange, isCallValid, context, targetPacked, offset, length);856}857else858{859GenerateContextLostErrorOnCurrentGlobalContext();860}861}862863void GL_APIENTRY GL_FramebufferTextureLayer(GLenum target,864GLenum attachment,865GLuint texture,866GLint level,867GLint layer)868{869Context *context = GetValidGlobalContext();870EVENT(context, GLFramebufferTextureLayer,871"context = %d, target = %s, attachment = %s, texture = %u, level = %d, layer = %d",872CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target),873GLenumToString(GLenumGroup::FramebufferAttachment, attachment), texture, level, layer);874875if (context)876{877TextureID texturePacked = PackParam<TextureID>(texture);878std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);879bool isCallValid = (context->skipValidation() ||880ValidateFramebufferTextureLayer(context, target, attachment,881texturePacked, level, layer));882if (isCallValid)883{884context->framebufferTextureLayer(target, attachment, texturePacked, level, layer);885}886ANGLE_CAPTURE(FramebufferTextureLayer, isCallValid, context, target, attachment,887texturePacked, level, layer);888}889else890{891GenerateContextLostErrorOnCurrentGlobalContext();892}893}894895void GL_APIENTRY GL_GenQueries(GLsizei n, GLuint *ids)896{897Context *context = GetValidGlobalContext();898EVENT(context, GLGenQueries, "context = %d, n = %d, ids = 0x%016" PRIxPTR "", CID(context), n,899(uintptr_t)ids);900901if (context)902{903QueryID *idsPacked = PackParam<QueryID *>(ids);904std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);905bool isCallValid = (context->skipValidation() || ValidateGenQueries(context, n, idsPacked));906if (isCallValid)907{908context->genQueries(n, idsPacked);909}910ANGLE_CAPTURE(GenQueries, isCallValid, context, n, idsPacked);911}912else913{914GenerateContextLostErrorOnCurrentGlobalContext();915}916}917918void GL_APIENTRY GL_GenSamplers(GLsizei count, GLuint *samplers)919{920Context *context = GetValidGlobalContext();921EVENT(context, GLGenSamplers, "context = %d, count = %d, samplers = 0x%016" PRIxPTR "",922CID(context), count, (uintptr_t)samplers);923924if (context)925{926SamplerID *samplersPacked = PackParam<SamplerID *>(samplers);927std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);928bool isCallValid =929(context->skipValidation() || ValidateGenSamplers(context, count, samplersPacked));930if (isCallValid)931{932context->genSamplers(count, samplersPacked);933}934ANGLE_CAPTURE(GenSamplers, isCallValid, context, count, samplersPacked);935}936else937{938GenerateContextLostErrorOnCurrentGlobalContext();939}940}941942void GL_APIENTRY GL_GenTransformFeedbacks(GLsizei n, GLuint *ids)943{944Context *context = GetValidGlobalContext();945EVENT(context, GLGenTransformFeedbacks, "context = %d, n = %d, ids = 0x%016" PRIxPTR "",946CID(context), n, (uintptr_t)ids);947948if (context)949{950TransformFeedbackID *idsPacked = PackParam<TransformFeedbackID *>(ids);951std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);952bool isCallValid =953(context->skipValidation() || ValidateGenTransformFeedbacks(context, n, idsPacked));954if (isCallValid)955{956context->genTransformFeedbacks(n, idsPacked);957}958ANGLE_CAPTURE(GenTransformFeedbacks, isCallValid, context, n, idsPacked);959}960else961{962GenerateContextLostErrorOnCurrentGlobalContext();963}964}965966void GL_APIENTRY GL_GenVertexArrays(GLsizei n, GLuint *arrays)967{968Context *context = GetValidGlobalContext();969EVENT(context, GLGenVertexArrays, "context = %d, n = %d, arrays = 0x%016" PRIxPTR "",970CID(context), n, (uintptr_t)arrays);971972if (context)973{974VertexArrayID *arraysPacked = PackParam<VertexArrayID *>(arrays);975std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);976bool isCallValid =977(context->skipValidation() || ValidateGenVertexArrays(context, n, arraysPacked));978if (isCallValid)979{980context->genVertexArrays(n, arraysPacked);981}982ANGLE_CAPTURE(GenVertexArrays, isCallValid, context, n, arraysPacked);983}984else985{986GenerateContextLostErrorOnCurrentGlobalContext();987}988}989990void GL_APIENTRY GL_GetActiveUniformBlockName(GLuint program,991GLuint uniformBlockIndex,992GLsizei bufSize,993GLsizei *length,994GLchar *uniformBlockName)995{996Context *context = GetValidGlobalContext();997EVENT(998context, GLGetActiveUniformBlockName,999"context = %d, program = %u, uniformBlockIndex = %u, bufSize = %d, length = 0x%016" PRIxPTR1000", uniformBlockName = 0x%016" PRIxPTR "",1001CID(context), program, uniformBlockIndex, bufSize, (uintptr_t)length,1002(uintptr_t)uniformBlockName);10031004if (context)1005{1006ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1007UniformBlockIndex uniformBlockIndexPacked = PackParam<UniformBlockIndex>(uniformBlockIndex);1008std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1009bool isCallValid =1010(context->skipValidation() ||1011ValidateGetActiveUniformBlockName(context, programPacked, uniformBlockIndexPacked,1012bufSize, length, uniformBlockName));1013if (isCallValid)1014{1015context->getActiveUniformBlockName(programPacked, uniformBlockIndexPacked, bufSize,1016length, uniformBlockName);1017}1018ANGLE_CAPTURE(GetActiveUniformBlockName, isCallValid, context, programPacked,1019uniformBlockIndexPacked, bufSize, length, uniformBlockName);1020}1021else1022{1023GenerateContextLostErrorOnCurrentGlobalContext();1024}1025}10261027void GL_APIENTRY GL_GetActiveUniformBlockiv(GLuint program,1028GLuint uniformBlockIndex,1029GLenum pname,1030GLint *params)1031{1032Context *context = GetValidGlobalContext();1033EVENT(context, GLGetActiveUniformBlockiv,1034"context = %d, program = %u, uniformBlockIndex = %u, pname = %s, params = 0x%016" PRIxPTR1035"",1036CID(context), program, uniformBlockIndex,1037GLenumToString(GLenumGroup::UniformBlockPName, pname), (uintptr_t)params);10381039if (context)1040{1041ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1042UniformBlockIndex uniformBlockIndexPacked = PackParam<UniformBlockIndex>(uniformBlockIndex);1043std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1044bool isCallValid = (context->skipValidation() ||1045ValidateGetActiveUniformBlockiv(1046context, programPacked, uniformBlockIndexPacked, pname, params));1047if (isCallValid)1048{1049context->getActiveUniformBlockiv(programPacked, uniformBlockIndexPacked, pname, params);1050}1051ANGLE_CAPTURE(GetActiveUniformBlockiv, isCallValid, context, programPacked,1052uniformBlockIndexPacked, pname, params);1053}1054else1055{1056GenerateContextLostErrorOnCurrentGlobalContext();1057}1058}10591060void GL_APIENTRY GL_GetActiveUniformsiv(GLuint program,1061GLsizei uniformCount,1062const GLuint *uniformIndices,1063GLenum pname,1064GLint *params)1065{1066Context *context = GetValidGlobalContext();1067EVENT(context, GLGetActiveUniformsiv,1068"context = %d, program = %u, uniformCount = %d, uniformIndices = 0x%016" PRIxPTR1069", pname = %s, params = 0x%016" PRIxPTR "",1070CID(context), program, uniformCount, (uintptr_t)uniformIndices,1071GLenumToString(GLenumGroup::UniformPName, pname), (uintptr_t)params);10721073if (context)1074{1075ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1076std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1077bool isCallValid = (context->skipValidation() ||1078ValidateGetActiveUniformsiv(context, programPacked, uniformCount,1079uniformIndices, pname, params));1080if (isCallValid)1081{1082context->getActiveUniformsiv(programPacked, uniformCount, uniformIndices, pname,1083params);1084}1085ANGLE_CAPTURE(GetActiveUniformsiv, isCallValid, context, programPacked, uniformCount,1086uniformIndices, pname, params);1087}1088else1089{1090GenerateContextLostErrorOnCurrentGlobalContext();1091}1092}10931094void GL_APIENTRY GL_GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)1095{1096Context *context = GetValidGlobalContext();1097EVENT(context, GLGetBufferParameteri64v,1098"context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1099GLenumToString(GLenumGroup::BufferTargetARB, target),1100GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)params);11011102if (context)1103{1104BufferBinding targetPacked = PackParam<BufferBinding>(target);1105std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1106bool isCallValid = (context->skipValidation() ||1107ValidateGetBufferParameteri64v(context, targetPacked, pname, params));1108if (isCallValid)1109{1110context->getBufferParameteri64v(targetPacked, pname, params);1111}1112ANGLE_CAPTURE(GetBufferParameteri64v, isCallValid, context, targetPacked, pname, params);1113}1114else1115{1116GenerateContextLostErrorOnCurrentGlobalContext();1117}1118}11191120void GL_APIENTRY GL_GetBufferPointerv(GLenum target, GLenum pname, void **params)1121{1122Context *context = GetValidGlobalContext();1123EVENT(context, GLGetBufferPointerv,1124"context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1125GLenumToString(GLenumGroup::BufferTargetARB, target),1126GLenumToString(GLenumGroup::DefaultGroup, pname), (uintptr_t)params);11271128if (context)1129{1130BufferBinding targetPacked = PackParam<BufferBinding>(target);1131std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1132bool isCallValid = (context->skipValidation() ||1133ValidateGetBufferPointerv(context, targetPacked, pname, params));1134if (isCallValid)1135{1136context->getBufferPointerv(targetPacked, pname, params);1137}1138ANGLE_CAPTURE(GetBufferPointerv, isCallValid, context, targetPacked, pname, params);1139}1140else1141{1142GenerateContextLostErrorOnCurrentGlobalContext();1143}1144}11451146GLint GL_APIENTRY GL_GetFragDataLocation(GLuint program, const GLchar *name)1147{1148Context *context = GetValidGlobalContext();1149EVENT(context, GLGetFragDataLocation, "context = %d, program = %u, name = 0x%016" PRIxPTR "",1150CID(context), program, (uintptr_t)name);11511152GLint returnValue;1153if (context)1154{1155ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1156std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1157bool isCallValid = (context->skipValidation() ||1158ValidateGetFragDataLocation(context, programPacked, name));1159if (isCallValid)1160{1161returnValue = context->getFragDataLocation(programPacked, name);1162}1163else1164{1165returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetFragDataLocation, GLint>();1166}1167ANGLE_CAPTURE(GetFragDataLocation, isCallValid, context, programPacked, name, returnValue);1168}1169else1170{1171GenerateContextLostErrorOnCurrentGlobalContext();1172returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetFragDataLocation, GLint>();1173}1174return returnValue;1175}11761177void GL_APIENTRY GL_GetInteger64i_v(GLenum target, GLuint index, GLint64 *data)1178{1179Context *context = GetValidGlobalContext();1180EVENT(context, GLGetInteger64i_v,1181"context = %d, target = %s, index = %u, data = 0x%016" PRIxPTR "", CID(context),1182GLenumToString(GLenumGroup::TypeEnum, target), index, (uintptr_t)data);11831184if (context)1185{1186std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1187bool isCallValid =1188(context->skipValidation() || ValidateGetInteger64i_v(context, target, index, data));1189if (isCallValid)1190{1191context->getInteger64i_v(target, index, data);1192}1193ANGLE_CAPTURE(GetInteger64i_v, isCallValid, context, target, index, data);1194}1195else1196{1197GenerateContextLostErrorOnCurrentGlobalContext();1198}1199}12001201void GL_APIENTRY GL_GetInteger64v(GLenum pname, GLint64 *data)1202{1203Context *context = GetValidGlobalContext();1204EVENT(context, GLGetInteger64v, "context = %d, pname = %s, data = 0x%016" PRIxPTR "",1205CID(context), GLenumToString(GLenumGroup::GetPName, pname), (uintptr_t)data);12061207if (context)1208{1209std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1210bool isCallValid =1211(context->skipValidation() || ValidateGetInteger64v(context, pname, data));1212if (isCallValid)1213{1214context->getInteger64v(pname, data);1215}1216ANGLE_CAPTURE(GetInteger64v, isCallValid, context, pname, data);1217}1218else1219{1220GenerateContextLostErrorOnCurrentGlobalContext();1221}1222}12231224void GL_APIENTRY GL_GetIntegeri_v(GLenum target, GLuint index, GLint *data)1225{1226Context *context = GetValidGlobalContext();1227EVENT(context, GLGetIntegeri_v,1228"context = %d, target = %s, index = %u, data = 0x%016" PRIxPTR "", CID(context),1229GLenumToString(GLenumGroup::TypeEnum, target), index, (uintptr_t)data);12301231if (context)1232{1233std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1234bool isCallValid =1235(context->skipValidation() || ValidateGetIntegeri_v(context, target, index, data));1236if (isCallValid)1237{1238context->getIntegeri_v(target, index, data);1239}1240ANGLE_CAPTURE(GetIntegeri_v, isCallValid, context, target, index, data);1241}1242else1243{1244GenerateContextLostErrorOnCurrentGlobalContext();1245}1246}12471248void GL_APIENTRY GL_GetInternalformativ(GLenum target,1249GLenum internalformat,1250GLenum pname,1251GLsizei bufSize,1252GLint *params)1253{1254Context *context = GetValidGlobalContext();1255EVENT(context, GLGetInternalformativ,1256"context = %d, target = %s, internalformat = %s, pname = %s, bufSize = %d, params = "1257"0x%016" PRIxPTR "",1258CID(context), GLenumToString(GLenumGroup::TextureTarget, target),1259GLenumToString(GLenumGroup::InternalFormat, internalformat),1260GLenumToString(GLenumGroup::InternalFormatPName, pname), bufSize, (uintptr_t)params);12611262if (context)1263{1264std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1265bool isCallValid =1266(context->skipValidation() ||1267ValidateGetInternalformativ(context, target, internalformat, pname, bufSize, params));1268if (isCallValid)1269{1270context->getInternalformativ(target, internalformat, pname, bufSize, params);1271}1272ANGLE_CAPTURE(GetInternalformativ, isCallValid, context, target, internalformat, pname,1273bufSize, params);1274}1275else1276{1277GenerateContextLostErrorOnCurrentGlobalContext();1278}1279}12801281void GL_APIENTRY GL_GetProgramBinary(GLuint program,1282GLsizei bufSize,1283GLsizei *length,1284GLenum *binaryFormat,1285void *binary)1286{1287Context *context = GetValidGlobalContext();1288EVENT(context, GLGetProgramBinary,1289"context = %d, program = %u, bufSize = %d, length = 0x%016" PRIxPTR1290", binaryFormat = 0x%016" PRIxPTR ", binary = 0x%016" PRIxPTR "",1291CID(context), program, bufSize, (uintptr_t)length, (uintptr_t)binaryFormat,1292(uintptr_t)binary);12931294if (context)1295{1296ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1297std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1298bool isCallValid =1299(context->skipValidation() || ValidateGetProgramBinary(context, programPacked, bufSize,1300length, binaryFormat, binary));1301if (isCallValid)1302{1303context->getProgramBinary(programPacked, bufSize, length, binaryFormat, binary);1304}1305ANGLE_CAPTURE(GetProgramBinary, isCallValid, context, programPacked, bufSize, length,1306binaryFormat, binary);1307}1308else1309{1310GenerateContextLostErrorOnCurrentGlobalContext();1311}1312}13131314void GL_APIENTRY GL_GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)1315{1316Context *context = GetValidGlobalContext();1317EVENT(context, GLGetQueryObjectuiv,1318"context = %d, id = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), id,1319GLenumToString(GLenumGroup::QueryObjectParameterName, pname), (uintptr_t)params);13201321if (context)1322{1323QueryID idPacked = PackParam<QueryID>(id);1324std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1325bool isCallValid = (context->skipValidation() ||1326ValidateGetQueryObjectuiv(context, idPacked, pname, params));1327if (isCallValid)1328{1329context->getQueryObjectuiv(idPacked, pname, params);1330}1331ANGLE_CAPTURE(GetQueryObjectuiv, isCallValid, context, idPacked, pname, params);1332}1333else1334{1335GenerateContextLostErrorOnCurrentGlobalContext();1336}1337}13381339void GL_APIENTRY GL_GetQueryiv(GLenum target, GLenum pname, GLint *params)1340{1341Context *context = GetValidGlobalContext();1342EVENT(context, GLGetQueryiv,1343"context = %d, target = %s, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1344GLenumToString(GLenumGroup::QueryTarget, target),1345GLenumToString(GLenumGroup::QueryParameterName, pname), (uintptr_t)params);13461347if (context)1348{1349QueryType targetPacked = PackParam<QueryType>(target);1350std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1351bool isCallValid =1352(context->skipValidation() || ValidateGetQueryiv(context, targetPacked, pname, params));1353if (isCallValid)1354{1355context->getQueryiv(targetPacked, pname, params);1356}1357ANGLE_CAPTURE(GetQueryiv, isCallValid, context, targetPacked, pname, params);1358}1359else1360{1361GenerateContextLostErrorOnCurrentGlobalContext();1362}1363}13641365void GL_APIENTRY GL_GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)1366{1367Context *context = GetValidGlobalContext();1368EVENT(context, GLGetSamplerParameterfv,1369"context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1370sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)params);13711372if (context)1373{1374SamplerID samplerPacked = PackParam<SamplerID>(sampler);1375std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1376bool isCallValid = (context->skipValidation() ||1377ValidateGetSamplerParameterfv(context, samplerPacked, pname, params));1378if (isCallValid)1379{1380context->getSamplerParameterfv(samplerPacked, pname, params);1381}1382ANGLE_CAPTURE(GetSamplerParameterfv, isCallValid, context, samplerPacked, pname, params);1383}1384else1385{1386GenerateContextLostErrorOnCurrentGlobalContext();1387}1388}13891390void GL_APIENTRY GL_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)1391{1392Context *context = GetValidGlobalContext();1393EVENT(context, GLGetSamplerParameteriv,1394"context = %d, sampler = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context),1395sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)params);13961397if (context)1398{1399SamplerID samplerPacked = PackParam<SamplerID>(sampler);1400std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1401bool isCallValid = (context->skipValidation() ||1402ValidateGetSamplerParameteriv(context, samplerPacked, pname, params));1403if (isCallValid)1404{1405context->getSamplerParameteriv(samplerPacked, pname, params);1406}1407ANGLE_CAPTURE(GetSamplerParameteriv, isCallValid, context, samplerPacked, pname, params);1408}1409else1410{1411GenerateContextLostErrorOnCurrentGlobalContext();1412}1413}14141415const GLubyte *GL_APIENTRY GL_GetStringi(GLenum name, GLuint index)1416{1417Context *context = GetValidGlobalContext();1418EVENT(context, GLGetStringi, "context = %d, name = %s, index = %u", CID(context),1419GLenumToString(GLenumGroup::StringName, name), index);14201421const GLubyte *returnValue;1422if (context)1423{1424std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1425bool isCallValid = (context->skipValidation() || ValidateGetStringi(context, name, index));1426if (isCallValid)1427{1428returnValue = context->getStringi(name, index);1429}1430else1431{1432returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetStringi, const GLubyte *>();1433}1434ANGLE_CAPTURE(GetStringi, isCallValid, context, name, index, returnValue);1435}1436else1437{1438GenerateContextLostErrorOnCurrentGlobalContext();1439returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetStringi, const GLubyte *>();1440}1441return returnValue;1442}14431444void GL_APIENTRY1445GL_GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)1446{1447Context *context = GetGlobalContext();1448EVENT(context, GLGetSynciv,1449"context = %d, sync = 0x%016" PRIxPTR1450", pname = %s, bufSize = %d, length = 0x%016" PRIxPTR ", values = 0x%016" PRIxPTR "",1451CID(context), (uintptr_t)sync, GLenumToString(GLenumGroup::SyncParameterName, pname),1452bufSize, (uintptr_t)length, (uintptr_t)values);14531454if (context)1455{1456std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1457bool isCallValid = (context->skipValidation() ||1458ValidateGetSynciv(context, sync, pname, bufSize, length, values));1459if (isCallValid)1460{1461context->getSynciv(sync, pname, bufSize, length, values);1462}1463ANGLE_CAPTURE(GetSynciv, isCallValid, context, sync, pname, bufSize, length, values);1464}1465else1466{}1467}14681469void GL_APIENTRY GL_GetTransformFeedbackVarying(GLuint program,1470GLuint index,1471GLsizei bufSize,1472GLsizei *length,1473GLsizei *size,1474GLenum *type,1475GLchar *name)1476{1477Context *context = GetValidGlobalContext();1478EVENT(context, GLGetTransformFeedbackVarying,1479"context = %d, program = %u, index = %u, bufSize = %d, length = 0x%016" PRIxPTR1480", size = 0x%016" PRIxPTR ", type = 0x%016" PRIxPTR ", name = 0x%016" PRIxPTR "",1481CID(context), program, index, bufSize, (uintptr_t)length, (uintptr_t)size,1482(uintptr_t)type, (uintptr_t)name);14831484if (context)1485{1486ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1487std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1488bool isCallValid = (context->skipValidation() ||1489ValidateGetTransformFeedbackVarying(context, programPacked, index,1490bufSize, length, size, type, name));1491if (isCallValid)1492{1493context->getTransformFeedbackVarying(programPacked, index, bufSize, length, size, type,1494name);1495}1496ANGLE_CAPTURE(GetTransformFeedbackVarying, isCallValid, context, programPacked, index,1497bufSize, length, size, type, name);1498}1499else1500{1501GenerateContextLostErrorOnCurrentGlobalContext();1502}1503}15041505GLuint GL_APIENTRY GL_GetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)1506{1507Context *context = GetValidGlobalContext();1508EVENT(context, GLGetUniformBlockIndex,1509"context = %d, program = %u, uniformBlockName = 0x%016" PRIxPTR "", CID(context), program,1510(uintptr_t)uniformBlockName);15111512GLuint returnValue;1513if (context)1514{1515ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1516std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1517bool isCallValid = (context->skipValidation() ||1518ValidateGetUniformBlockIndex(context, programPacked, uniformBlockName));1519if (isCallValid)1520{1521returnValue = context->getUniformBlockIndex(programPacked, uniformBlockName);1522}1523else1524{1525returnValue =1526GetDefaultReturnValue<angle::EntryPoint::GLGetUniformBlockIndex, GLuint>();1527}1528ANGLE_CAPTURE(GetUniformBlockIndex, isCallValid, context, programPacked, uniformBlockName,1529returnValue);1530}1531else1532{1533GenerateContextLostErrorOnCurrentGlobalContext();1534returnValue = GetDefaultReturnValue<angle::EntryPoint::GLGetUniformBlockIndex, GLuint>();1535}1536return returnValue;1537}15381539void GL_APIENTRY GL_GetUniformIndices(GLuint program,1540GLsizei uniformCount,1541const GLchar *const *uniformNames,1542GLuint *uniformIndices)1543{1544Context *context = GetValidGlobalContext();1545EVENT(context, GLGetUniformIndices,1546"context = %d, program = %u, uniformCount = %d, uniformNames = 0x%016" PRIxPTR1547", uniformIndices = 0x%016" PRIxPTR "",1548CID(context), program, uniformCount, (uintptr_t)uniformNames, (uintptr_t)uniformIndices);15491550if (context)1551{1552ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1553std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1554bool isCallValid = (context->skipValidation() ||1555ValidateGetUniformIndices(context, programPacked, uniformCount,1556uniformNames, uniformIndices));1557if (isCallValid)1558{1559context->getUniformIndices(programPacked, uniformCount, uniformNames, uniformIndices);1560}1561ANGLE_CAPTURE(GetUniformIndices, isCallValid, context, programPacked, uniformCount,1562uniformNames, uniformIndices);1563}1564else1565{1566GenerateContextLostErrorOnCurrentGlobalContext();1567}1568}15691570void GL_APIENTRY GL_GetUniformuiv(GLuint program, GLint location, GLuint *params)1571{1572Context *context = GetValidGlobalContext();1573EVENT(context, GLGetUniformuiv,1574"context = %d, program = %u, location = %d, params = 0x%016" PRIxPTR "", CID(context),1575program, location, (uintptr_t)params);15761577if (context)1578{1579ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1580UniformLocation locationPacked = PackParam<UniformLocation>(location);1581std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1582bool isCallValid = (context->skipValidation() ||1583ValidateGetUniformuiv(context, programPacked, locationPacked, params));1584if (isCallValid)1585{1586context->getUniformuiv(programPacked, locationPacked, params);1587}1588ANGLE_CAPTURE(GetUniformuiv, isCallValid, context, programPacked, locationPacked, params);1589}1590else1591{1592GenerateContextLostErrorOnCurrentGlobalContext();1593}1594}15951596void GL_APIENTRY GL_GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)1597{1598Context *context = GetValidGlobalContext();1599EVENT(context, GLGetVertexAttribIiv,1600"context = %d, index = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), index,1601GLenumToString(GLenumGroup::VertexAttribEnum, pname), (uintptr_t)params);16021603if (context)1604{1605std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1606bool isCallValid = (context->skipValidation() ||1607ValidateGetVertexAttribIiv(context, index, pname, params));1608if (isCallValid)1609{1610context->getVertexAttribIiv(index, pname, params);1611}1612ANGLE_CAPTURE(GetVertexAttribIiv, isCallValid, context, index, pname, params);1613}1614else1615{1616GenerateContextLostErrorOnCurrentGlobalContext();1617}1618}16191620void GL_APIENTRY GL_GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)1621{1622Context *context = GetValidGlobalContext();1623EVENT(context, GLGetVertexAttribIuiv,1624"context = %d, index = %u, pname = %s, params = 0x%016" PRIxPTR "", CID(context), index,1625GLenumToString(GLenumGroup::VertexAttribEnum, pname), (uintptr_t)params);16261627if (context)1628{1629std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1630bool isCallValid = (context->skipValidation() ||1631ValidateGetVertexAttribIuiv(context, index, pname, params));1632if (isCallValid)1633{1634context->getVertexAttribIuiv(index, pname, params);1635}1636ANGLE_CAPTURE(GetVertexAttribIuiv, isCallValid, context, index, pname, params);1637}1638else1639{1640GenerateContextLostErrorOnCurrentGlobalContext();1641}1642}16431644void GL_APIENTRY GL_InvalidateFramebuffer(GLenum target,1645GLsizei numAttachments,1646const GLenum *attachments)1647{1648Context *context = GetValidGlobalContext();1649EVENT(context, GLInvalidateFramebuffer,1650"context = %d, target = %s, numAttachments = %d, attachments = 0x%016" PRIxPTR "",1651CID(context), GLenumToString(GLenumGroup::FramebufferTarget, target), numAttachments,1652(uintptr_t)attachments);16531654if (context)1655{1656std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1657bool isCallValid =1658(context->skipValidation() ||1659ValidateInvalidateFramebuffer(context, target, numAttachments, attachments));1660if (isCallValid)1661{1662context->invalidateFramebuffer(target, numAttachments, attachments);1663}1664ANGLE_CAPTURE(InvalidateFramebuffer, isCallValid, context, target, numAttachments,1665attachments);1666}1667else1668{1669GenerateContextLostErrorOnCurrentGlobalContext();1670}1671}16721673void GL_APIENTRY GL_InvalidateSubFramebuffer(GLenum target,1674GLsizei numAttachments,1675const GLenum *attachments,1676GLint x,1677GLint y,1678GLsizei width,1679GLsizei height)1680{1681Context *context = GetValidGlobalContext();1682EVENT(context, GLInvalidateSubFramebuffer,1683"context = %d, target = %s, numAttachments = %d, attachments = 0x%016" PRIxPTR1684", x = %d, y = %d, width = %d, height = %d",1685CID(context), GLenumToString(GLenumGroup::DefaultGroup, target), numAttachments,1686(uintptr_t)attachments, x, y, width, height);16871688if (context)1689{1690std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1691bool isCallValid = (context->skipValidation() ||1692ValidateInvalidateSubFramebuffer(context, target, numAttachments,1693attachments, x, y, width, height));1694if (isCallValid)1695{1696context->invalidateSubFramebuffer(target, numAttachments, attachments, x, y, width,1697height);1698}1699ANGLE_CAPTURE(InvalidateSubFramebuffer, isCallValid, context, target, numAttachments,1700attachments, x, y, width, height);1701}1702else1703{1704GenerateContextLostErrorOnCurrentGlobalContext();1705}1706}17071708GLboolean GL_APIENTRY GL_IsQuery(GLuint id)1709{1710Context *context = GetValidGlobalContext();1711EVENT(context, GLIsQuery, "context = %d, id = %u", CID(context), id);17121713GLboolean returnValue;1714if (context)1715{1716QueryID idPacked = PackParam<QueryID>(id);1717std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1718bool isCallValid = (context->skipValidation() || ValidateIsQuery(context, idPacked));1719if (isCallValid)1720{1721returnValue = context->isQuery(idPacked);1722}1723else1724{1725returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsQuery, GLboolean>();1726}1727ANGLE_CAPTURE(IsQuery, isCallValid, context, idPacked, returnValue);1728}1729else1730{1731GenerateContextLostErrorOnCurrentGlobalContext();1732returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsQuery, GLboolean>();1733}1734return returnValue;1735}17361737GLboolean GL_APIENTRY GL_IsSampler(GLuint sampler)1738{1739Context *context = GetValidGlobalContext();1740EVENT(context, GLIsSampler, "context = %d, sampler = %u", CID(context), sampler);17411742GLboolean returnValue;1743if (context)1744{1745SamplerID samplerPacked = PackParam<SamplerID>(sampler);1746std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1747bool isCallValid = (context->skipValidation() || ValidateIsSampler(context, samplerPacked));1748if (isCallValid)1749{1750returnValue = context->isSampler(samplerPacked);1751}1752else1753{1754returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsSampler, GLboolean>();1755}1756ANGLE_CAPTURE(IsSampler, isCallValid, context, samplerPacked, returnValue);1757}1758else1759{1760GenerateContextLostErrorOnCurrentGlobalContext();1761returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsSampler, GLboolean>();1762}1763return returnValue;1764}17651766GLboolean GL_APIENTRY GL_IsSync(GLsync sync)1767{1768Context *context = GetValidGlobalContext();1769EVENT(context, GLIsSync, "context = %d, sync = 0x%016" PRIxPTR "", CID(context),1770(uintptr_t)sync);17711772GLboolean returnValue;1773if (context)1774{1775std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1776bool isCallValid = (context->skipValidation() || ValidateIsSync(context, sync));1777if (isCallValid)1778{1779returnValue = context->isSync(sync);1780}1781else1782{1783returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsSync, GLboolean>();1784}1785ANGLE_CAPTURE(IsSync, isCallValid, context, sync, returnValue);1786}1787else1788{1789GenerateContextLostErrorOnCurrentGlobalContext();1790returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsSync, GLboolean>();1791}1792return returnValue;1793}17941795GLboolean GL_APIENTRY GL_IsTransformFeedback(GLuint id)1796{1797Context *context = GetValidGlobalContext();1798EVENT(context, GLIsTransformFeedback, "context = %d, id = %u", CID(context), id);17991800GLboolean returnValue;1801if (context)1802{1803TransformFeedbackID idPacked = PackParam<TransformFeedbackID>(id);1804std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1805bool isCallValid =1806(context->skipValidation() || ValidateIsTransformFeedback(context, idPacked));1807if (isCallValid)1808{1809returnValue = context->isTransformFeedback(idPacked);1810}1811else1812{1813returnValue =1814GetDefaultReturnValue<angle::EntryPoint::GLIsTransformFeedback, GLboolean>();1815}1816ANGLE_CAPTURE(IsTransformFeedback, isCallValid, context, idPacked, returnValue);1817}1818else1819{1820GenerateContextLostErrorOnCurrentGlobalContext();1821returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsTransformFeedback, GLboolean>();1822}1823return returnValue;1824}18251826GLboolean GL_APIENTRY GL_IsVertexArray(GLuint array)1827{1828Context *context = GetValidGlobalContext();1829EVENT(context, GLIsVertexArray, "context = %d, array = %u", CID(context), array);18301831GLboolean returnValue;1832if (context)1833{1834VertexArrayID arrayPacked = PackParam<VertexArrayID>(array);1835std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1836bool isCallValid =1837(context->skipValidation() || ValidateIsVertexArray(context, arrayPacked));1838if (isCallValid)1839{1840returnValue = context->isVertexArray(arrayPacked);1841}1842else1843{1844returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsVertexArray, GLboolean>();1845}1846ANGLE_CAPTURE(IsVertexArray, isCallValid, context, arrayPacked, returnValue);1847}1848else1849{1850GenerateContextLostErrorOnCurrentGlobalContext();1851returnValue = GetDefaultReturnValue<angle::EntryPoint::GLIsVertexArray, GLboolean>();1852}1853return returnValue;1854}18551856void *GL_APIENTRY GL_MapBufferRange(GLenum target,1857GLintptr offset,1858GLsizeiptr length,1859GLbitfield access)1860{1861Context *context = GetValidGlobalContext();1862EVENT(context, GLMapBufferRange,1863"context = %d, target = %s, offset = %llu, length = %llu, access = %s", CID(context),1864GLenumToString(GLenumGroup::BufferTargetARB, target),1865static_cast<unsigned long long>(offset), static_cast<unsigned long long>(length),1866GLbitfieldToString(GLenumGroup::BufferAccessMask, access).c_str());18671868void *returnValue;1869if (context)1870{1871BufferBinding targetPacked = PackParam<BufferBinding>(target);1872std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1873bool isCallValid = (context->skipValidation() ||1874ValidateMapBufferRange(context, targetPacked, offset, length, access));1875if (isCallValid)1876{1877returnValue = context->mapBufferRange(targetPacked, offset, length, access);1878}1879else1880{1881returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferRange, void *>();1882}1883ANGLE_CAPTURE(MapBufferRange, isCallValid, context, targetPacked, offset, length, access,1884returnValue);1885}1886else1887{1888GenerateContextLostErrorOnCurrentGlobalContext();1889returnValue = GetDefaultReturnValue<angle::EntryPoint::GLMapBufferRange, void *>();1890}1891return returnValue;1892}18931894void GL_APIENTRY GL_PauseTransformFeedback()1895{1896Context *context = GetValidGlobalContext();1897EVENT(context, GLPauseTransformFeedback, "context = %d", CID(context));18981899if (context)1900{1901std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1902bool isCallValid = (context->skipValidation() || ValidatePauseTransformFeedback(context));1903if (isCallValid)1904{1905context->pauseTransformFeedback();1906}1907ANGLE_CAPTURE(PauseTransformFeedback, isCallValid, context);1908}1909else1910{1911GenerateContextLostErrorOnCurrentGlobalContext();1912}1913}19141915void GL_APIENTRY GL_ProgramBinary(GLuint program,1916GLenum binaryFormat,1917const void *binary,1918GLsizei length)1919{1920Context *context = GetValidGlobalContext();1921EVENT(context, GLProgramBinary,1922"context = %d, program = %u, binaryFormat = %s, binary = 0x%016" PRIxPTR ", length = %d",1923CID(context), program, GLenumToString(GLenumGroup::DefaultGroup, binaryFormat),1924(uintptr_t)binary, length);19251926if (context)1927{1928ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1929std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1930bool isCallValid =1931(context->skipValidation() ||1932ValidateProgramBinary(context, programPacked, binaryFormat, binary, length));1933if (isCallValid)1934{1935context->programBinary(programPacked, binaryFormat, binary, length);1936}1937ANGLE_CAPTURE(ProgramBinary, isCallValid, context, programPacked, binaryFormat, binary,1938length);1939}1940else1941{1942GenerateContextLostErrorOnCurrentGlobalContext();1943}1944}19451946void GL_APIENTRY GL_ProgramParameteri(GLuint program, GLenum pname, GLint value)1947{1948Context *context = GetValidGlobalContext();1949EVENT(context, GLProgramParameteri, "context = %d, program = %u, pname = %s, value = %d",1950CID(context), program, GLenumToString(GLenumGroup::ProgramParameterPName, pname), value);19511952if (context)1953{1954ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);1955std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1956bool isCallValid = (context->skipValidation() ||1957ValidateProgramParameteri(context, programPacked, pname, value));1958if (isCallValid)1959{1960context->programParameteri(programPacked, pname, value);1961}1962ANGLE_CAPTURE(ProgramParameteri, isCallValid, context, programPacked, pname, value);1963}1964else1965{1966GenerateContextLostErrorOnCurrentGlobalContext();1967}1968}19691970void GL_APIENTRY GL_ReadBuffer(GLenum src)1971{1972Context *context = GetValidGlobalContext();1973EVENT(context, GLReadBuffer, "context = %d, src = %s", CID(context),1974GLenumToString(GLenumGroup::ReadBufferMode, src));19751976if (context)1977{1978std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);1979bool isCallValid = (context->skipValidation() || ValidateReadBuffer(context, src));1980if (isCallValid)1981{1982context->readBuffer(src);1983}1984ANGLE_CAPTURE(ReadBuffer, isCallValid, context, src);1985}1986else1987{1988GenerateContextLostErrorOnCurrentGlobalContext();1989}1990}19911992void GL_APIENTRY GL_RenderbufferStorageMultisample(GLenum target,1993GLsizei samples,1994GLenum internalformat,1995GLsizei width,1996GLsizei height)1997{1998Context *context = GetValidGlobalContext();1999EVENT(context, GLRenderbufferStorageMultisample,2000"context = %d, target = %s, samples = %d, internalformat = %s, width = %d, height = %d",2001CID(context), GLenumToString(GLenumGroup::RenderbufferTarget, target), samples,2002GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height);20032004if (context)2005{2006std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2007bool isCallValid = (context->skipValidation() ||2008ValidateRenderbufferStorageMultisample(context, target, samples,2009internalformat, width, height));2010if (isCallValid)2011{2012context->renderbufferStorageMultisample(target, samples, internalformat, width, height);2013}2014ANGLE_CAPTURE(RenderbufferStorageMultisample, isCallValid, context, target, samples,2015internalformat, width, height);2016}2017else2018{2019GenerateContextLostErrorOnCurrentGlobalContext();2020}2021}20222023void GL_APIENTRY GL_ResumeTransformFeedback()2024{2025Context *context = GetValidGlobalContext();2026EVENT(context, GLResumeTransformFeedback, "context = %d", CID(context));20272028if (context)2029{2030std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2031bool isCallValid = (context->skipValidation() || ValidateResumeTransformFeedback(context));2032if (isCallValid)2033{2034context->resumeTransformFeedback();2035}2036ANGLE_CAPTURE(ResumeTransformFeedback, isCallValid, context);2037}2038else2039{2040GenerateContextLostErrorOnCurrentGlobalContext();2041}2042}20432044void GL_APIENTRY GL_SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)2045{2046Context *context = GetValidGlobalContext();2047EVENT(context, GLSamplerParameterf, "context = %d, sampler = %u, pname = %s, param = %f",2048CID(context), sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), param);20492050if (context)2051{2052SamplerID samplerPacked = PackParam<SamplerID>(sampler);2053std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2054bool isCallValid = (context->skipValidation() ||2055ValidateSamplerParameterf(context, samplerPacked, pname, param));2056if (isCallValid)2057{2058context->samplerParameterf(samplerPacked, pname, param);2059}2060ANGLE_CAPTURE(SamplerParameterf, isCallValid, context, samplerPacked, pname, param);2061}2062else2063{2064GenerateContextLostErrorOnCurrentGlobalContext();2065}2066}20672068void GL_APIENTRY GL_SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)2069{2070Context *context = GetValidGlobalContext();2071EVENT(context, GLSamplerParameterfv,2072"context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),2073sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)param);20742075if (context)2076{2077SamplerID samplerPacked = PackParam<SamplerID>(sampler);2078std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2079bool isCallValid = (context->skipValidation() ||2080ValidateSamplerParameterfv(context, samplerPacked, pname, param));2081if (isCallValid)2082{2083context->samplerParameterfv(samplerPacked, pname, param);2084}2085ANGLE_CAPTURE(SamplerParameterfv, isCallValid, context, samplerPacked, pname, param);2086}2087else2088{2089GenerateContextLostErrorOnCurrentGlobalContext();2090}2091}20922093void GL_APIENTRY GL_SamplerParameteri(GLuint sampler, GLenum pname, GLint param)2094{2095Context *context = GetValidGlobalContext();2096EVENT(context, GLSamplerParameteri, "context = %d, sampler = %u, pname = %s, param = %d",2097CID(context), sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), param);20982099if (context)2100{2101SamplerID samplerPacked = PackParam<SamplerID>(sampler);2102std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2103bool isCallValid = (context->skipValidation() ||2104ValidateSamplerParameteri(context, samplerPacked, pname, param));2105if (isCallValid)2106{2107context->samplerParameteri(samplerPacked, pname, param);2108}2109ANGLE_CAPTURE(SamplerParameteri, isCallValid, context, samplerPacked, pname, param);2110}2111else2112{2113GenerateContextLostErrorOnCurrentGlobalContext();2114}2115}21162117void GL_APIENTRY GL_SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)2118{2119Context *context = GetValidGlobalContext();2120EVENT(context, GLSamplerParameteriv,2121"context = %d, sampler = %u, pname = %s, param = 0x%016" PRIxPTR "", CID(context),2122sampler, GLenumToString(GLenumGroup::SamplerParameterName, pname), (uintptr_t)param);21232124if (context)2125{2126SamplerID samplerPacked = PackParam<SamplerID>(sampler);2127std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2128bool isCallValid = (context->skipValidation() ||2129ValidateSamplerParameteriv(context, samplerPacked, pname, param));2130if (isCallValid)2131{2132context->samplerParameteriv(samplerPacked, pname, param);2133}2134ANGLE_CAPTURE(SamplerParameteriv, isCallValid, context, samplerPacked, pname, param);2135}2136else2137{2138GenerateContextLostErrorOnCurrentGlobalContext();2139}2140}21412142void GL_APIENTRY GL_TexImage3D(GLenum target,2143GLint level,2144GLint internalformat,2145GLsizei width,2146GLsizei height,2147GLsizei depth,2148GLint border,2149GLenum format,2150GLenum type,2151const void *pixels)2152{2153Context *context = GetValidGlobalContext();2154EVENT(context, GLTexImage3D,2155"context = %d, target = %s, level = %d, internalformat = %d, width = %d, height = %d, "2156"depth = %d, border = %d, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",2157CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, internalformat,2158width, height, depth, border, GLenumToString(GLenumGroup::PixelFormat, format),2159GLenumToString(GLenumGroup::PixelType, type), (uintptr_t)pixels);21602161if (context)2162{2163TextureTarget targetPacked = PackParam<TextureTarget>(target);2164std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2165bool isCallValid = (context->skipValidation() ||2166ValidateTexImage3D(context, targetPacked, level, internalformat, width,2167height, depth, border, format, type, pixels));2168if (isCallValid)2169{2170context->texImage3D(targetPacked, level, internalformat, width, height, depth, border,2171format, type, pixels);2172}2173ANGLE_CAPTURE(TexImage3D, isCallValid, context, targetPacked, level, internalformat, width,2174height, depth, border, format, type, pixels);2175}2176else2177{2178GenerateContextLostErrorOnCurrentGlobalContext();2179}2180}21812182void GL_APIENTRY2183GL_TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)2184{2185Context *context = GetValidGlobalContext();2186EVENT(context, GLTexStorage2D,2187"context = %d, target = %s, levels = %d, internalformat = %s, width = %d, height = %d",2188CID(context), GLenumToString(GLenumGroup::TextureTarget, target), levels,2189GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height);21902191if (context)2192{2193TextureType targetPacked = PackParam<TextureType>(target);2194std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2195bool isCallValid =2196(context->skipValidation() ||2197ValidateTexStorage2D(context, targetPacked, levels, internalformat, width, height));2198if (isCallValid)2199{2200context->texStorage2D(targetPacked, levels, internalformat, width, height);2201}2202ANGLE_CAPTURE(TexStorage2D, isCallValid, context, targetPacked, levels, internalformat,2203width, height);2204}2205else2206{2207GenerateContextLostErrorOnCurrentGlobalContext();2208}2209}22102211void GL_APIENTRY GL_TexStorage3D(GLenum target,2212GLsizei levels,2213GLenum internalformat,2214GLsizei width,2215GLsizei height,2216GLsizei depth)2217{2218Context *context = GetValidGlobalContext();2219EVENT(context, GLTexStorage3D,2220"context = %d, target = %s, levels = %d, internalformat = %s, width = %d, height = %d, "2221"depth = %d",2222CID(context), GLenumToString(GLenumGroup::TextureTarget, target), levels,2223GLenumToString(GLenumGroup::InternalFormat, internalformat), width, height, depth);22242225if (context)2226{2227TextureType targetPacked = PackParam<TextureType>(target);2228std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2229bool isCallValid = (context->skipValidation() ||2230ValidateTexStorage3D(context, targetPacked, levels, internalformat,2231width, height, depth));2232if (isCallValid)2233{2234context->texStorage3D(targetPacked, levels, internalformat, width, height, depth);2235}2236ANGLE_CAPTURE(TexStorage3D, isCallValid, context, targetPacked, levels, internalformat,2237width, height, depth);2238}2239else2240{2241GenerateContextLostErrorOnCurrentGlobalContext();2242}2243}22442245void GL_APIENTRY GL_TexSubImage3D(GLenum target,2246GLint level,2247GLint xoffset,2248GLint yoffset,2249GLint zoffset,2250GLsizei width,2251GLsizei height,2252GLsizei depth,2253GLenum format,2254GLenum type,2255const void *pixels)2256{2257Context *context = GetValidGlobalContext();2258EVENT(context, GLTexSubImage3D,2259"context = %d, target = %s, level = %d, xoffset = %d, yoffset = %d, zoffset = %d, width "2260"= %d, height = %d, depth = %d, format = %s, type = %s, pixels = 0x%016" PRIxPTR "",2261CID(context), GLenumToString(GLenumGroup::TextureTarget, target), level, xoffset, yoffset,2262zoffset, width, height, depth, GLenumToString(GLenumGroup::PixelFormat, format),2263GLenumToString(GLenumGroup::PixelType, type), (uintptr_t)pixels);22642265if (context)2266{2267TextureTarget targetPacked = PackParam<TextureTarget>(target);2268std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2269bool isCallValid =2270(context->skipValidation() ||2271ValidateTexSubImage3D(context, targetPacked, level, xoffset, yoffset, zoffset, width,2272height, depth, format, type, pixels));2273if (isCallValid)2274{2275context->texSubImage3D(targetPacked, level, xoffset, yoffset, zoffset, width, height,2276depth, format, type, pixels);2277}2278ANGLE_CAPTURE(TexSubImage3D, isCallValid, context, targetPacked, level, xoffset, yoffset,2279zoffset, width, height, depth, format, type, pixels);2280}2281else2282{2283GenerateContextLostErrorOnCurrentGlobalContext();2284}2285}22862287void GL_APIENTRY GL_TransformFeedbackVaryings(GLuint program,2288GLsizei count,2289const GLchar *const *varyings,2290GLenum bufferMode)2291{2292Context *context = GetValidGlobalContext();2293EVENT(context, GLTransformFeedbackVaryings,2294"context = %d, program = %u, count = %d, varyings = 0x%016" PRIxPTR ", bufferMode = %s",2295CID(context), program, count, (uintptr_t)varyings,2296GLenumToString(GLenumGroup::DefaultGroup, bufferMode));22972298if (context)2299{2300ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);2301std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2302bool isCallValid =2303(context->skipValidation() || ValidateTransformFeedbackVaryings(2304context, programPacked, count, varyings, bufferMode));2305if (isCallValid)2306{2307context->transformFeedbackVaryings(programPacked, count, varyings, bufferMode);2308}2309ANGLE_CAPTURE(TransformFeedbackVaryings, isCallValid, context, programPacked, count,2310varyings, bufferMode);2311}2312else2313{2314GenerateContextLostErrorOnCurrentGlobalContext();2315}2316}23172318void GL_APIENTRY GL_Uniform1ui(GLint location, GLuint v0)2319{2320Context *context = GetValidGlobalContext();2321EVENT(context, GLUniform1ui, "context = %d, location = %d, v0 = %u", CID(context), location,2322v0);23232324if (context)2325{2326UniformLocation locationPacked = PackParam<UniformLocation>(location);2327std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2328bool isCallValid =2329(context->skipValidation() || ValidateUniform1ui(context, locationPacked, v0));2330if (isCallValid)2331{2332context->uniform1ui(locationPacked, v0);2333}2334ANGLE_CAPTURE(Uniform1ui, isCallValid, context, locationPacked, v0);2335}2336else2337{2338GenerateContextLostErrorOnCurrentGlobalContext();2339}2340}23412342void GL_APIENTRY GL_Uniform1uiv(GLint location, GLsizei count, const GLuint *value)2343{2344Context *context = GetValidGlobalContext();2345EVENT(context, GLUniform1uiv,2346"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),2347location, count, (uintptr_t)value);23482349if (context)2350{2351UniformLocation locationPacked = PackParam<UniformLocation>(location);2352std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2353bool isCallValid = (context->skipValidation() ||2354ValidateUniform1uiv(context, locationPacked, count, value));2355if (isCallValid)2356{2357context->uniform1uiv(locationPacked, count, value);2358}2359ANGLE_CAPTURE(Uniform1uiv, isCallValid, context, locationPacked, count, value);2360}2361else2362{2363GenerateContextLostErrorOnCurrentGlobalContext();2364}2365}23662367void GL_APIENTRY GL_Uniform2ui(GLint location, GLuint v0, GLuint v1)2368{2369Context *context = GetValidGlobalContext();2370EVENT(context, GLUniform2ui, "context = %d, location = %d, v0 = %u, v1 = %u", CID(context),2371location, v0, v1);23722373if (context)2374{2375UniformLocation locationPacked = PackParam<UniformLocation>(location);2376std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2377bool isCallValid =2378(context->skipValidation() || ValidateUniform2ui(context, locationPacked, v0, v1));2379if (isCallValid)2380{2381context->uniform2ui(locationPacked, v0, v1);2382}2383ANGLE_CAPTURE(Uniform2ui, isCallValid, context, locationPacked, v0, v1);2384}2385else2386{2387GenerateContextLostErrorOnCurrentGlobalContext();2388}2389}23902391void GL_APIENTRY GL_Uniform2uiv(GLint location, GLsizei count, const GLuint *value)2392{2393Context *context = GetValidGlobalContext();2394EVENT(context, GLUniform2uiv,2395"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),2396location, count, (uintptr_t)value);23972398if (context)2399{2400UniformLocation locationPacked = PackParam<UniformLocation>(location);2401std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2402bool isCallValid = (context->skipValidation() ||2403ValidateUniform2uiv(context, locationPacked, count, value));2404if (isCallValid)2405{2406context->uniform2uiv(locationPacked, count, value);2407}2408ANGLE_CAPTURE(Uniform2uiv, isCallValid, context, locationPacked, count, value);2409}2410else2411{2412GenerateContextLostErrorOnCurrentGlobalContext();2413}2414}24152416void GL_APIENTRY GL_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)2417{2418Context *context = GetValidGlobalContext();2419EVENT(context, GLUniform3ui, "context = %d, location = %d, v0 = %u, v1 = %u, v2 = %u",2420CID(context), location, v0, v1, v2);24212422if (context)2423{2424UniformLocation locationPacked = PackParam<UniformLocation>(location);2425std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2426bool isCallValid =2427(context->skipValidation() || ValidateUniform3ui(context, locationPacked, v0, v1, v2));2428if (isCallValid)2429{2430context->uniform3ui(locationPacked, v0, v1, v2);2431}2432ANGLE_CAPTURE(Uniform3ui, isCallValid, context, locationPacked, v0, v1, v2);2433}2434else2435{2436GenerateContextLostErrorOnCurrentGlobalContext();2437}2438}24392440void GL_APIENTRY GL_Uniform3uiv(GLint location, GLsizei count, const GLuint *value)2441{2442Context *context = GetValidGlobalContext();2443EVENT(context, GLUniform3uiv,2444"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),2445location, count, (uintptr_t)value);24462447if (context)2448{2449UniformLocation locationPacked = PackParam<UniformLocation>(location);2450std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2451bool isCallValid = (context->skipValidation() ||2452ValidateUniform3uiv(context, locationPacked, count, value));2453if (isCallValid)2454{2455context->uniform3uiv(locationPacked, count, value);2456}2457ANGLE_CAPTURE(Uniform3uiv, isCallValid, context, locationPacked, count, value);2458}2459else2460{2461GenerateContextLostErrorOnCurrentGlobalContext();2462}2463}24642465void GL_APIENTRY GL_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)2466{2467Context *context = GetValidGlobalContext();2468EVENT(context, GLUniform4ui, "context = %d, location = %d, v0 = %u, v1 = %u, v2 = %u, v3 = %u",2469CID(context), location, v0, v1, v2, v3);24702471if (context)2472{2473UniformLocation locationPacked = PackParam<UniformLocation>(location);2474std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2475bool isCallValid = (context->skipValidation() ||2476ValidateUniform4ui(context, locationPacked, v0, v1, v2, v3));2477if (isCallValid)2478{2479context->uniform4ui(locationPacked, v0, v1, v2, v3);2480}2481ANGLE_CAPTURE(Uniform4ui, isCallValid, context, locationPacked, v0, v1, v2, v3);2482}2483else2484{2485GenerateContextLostErrorOnCurrentGlobalContext();2486}2487}24882489void GL_APIENTRY GL_Uniform4uiv(GLint location, GLsizei count, const GLuint *value)2490{2491Context *context = GetValidGlobalContext();2492EVENT(context, GLUniform4uiv,2493"context = %d, location = %d, count = %d, value = 0x%016" PRIxPTR "", CID(context),2494location, count, (uintptr_t)value);24952496if (context)2497{2498UniformLocation locationPacked = PackParam<UniformLocation>(location);2499std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2500bool isCallValid = (context->skipValidation() ||2501ValidateUniform4uiv(context, locationPacked, count, value));2502if (isCallValid)2503{2504context->uniform4uiv(locationPacked, count, value);2505}2506ANGLE_CAPTURE(Uniform4uiv, isCallValid, context, locationPacked, count, value);2507}2508else2509{2510GenerateContextLostErrorOnCurrentGlobalContext();2511}2512}25132514void GL_APIENTRY GL_UniformBlockBinding(GLuint program,2515GLuint uniformBlockIndex,2516GLuint uniformBlockBinding)2517{2518Context *context = GetValidGlobalContext();2519EVENT(context, GLUniformBlockBinding,2520"context = %d, program = %u, uniformBlockIndex = %u, uniformBlockBinding = %u",2521CID(context), program, uniformBlockIndex, uniformBlockBinding);25222523if (context)2524{2525ShaderProgramID programPacked = PackParam<ShaderProgramID>(program);2526UniformBlockIndex uniformBlockIndexPacked = PackParam<UniformBlockIndex>(uniformBlockIndex);2527std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2528bool isCallValid =2529(context->skipValidation() ||2530ValidateUniformBlockBinding(context, programPacked, uniformBlockIndexPacked,2531uniformBlockBinding));2532if (isCallValid)2533{2534context->uniformBlockBinding(programPacked, uniformBlockIndexPacked,2535uniformBlockBinding);2536}2537ANGLE_CAPTURE(UniformBlockBinding, isCallValid, context, programPacked,2538uniformBlockIndexPacked, uniformBlockBinding);2539}2540else2541{2542GenerateContextLostErrorOnCurrentGlobalContext();2543}2544}25452546void GL_APIENTRY GL_UniformMatrix2x3fv(GLint location,2547GLsizei count,2548GLboolean transpose,2549const GLfloat *value)2550{2551Context *context = GetValidGlobalContext();2552EVENT(context, GLUniformMatrix2x3fv,2553"context = %d, location = %d, count = %d, transpose = %s, value = 0x%016" PRIxPTR "",2554CID(context), location, count, GLbooleanToString(transpose), (uintptr_t)value);25552556if (context)2557{2558UniformLocation locationPacked = PackParam<UniformLocation>(location);2559std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2560bool isCallValid =2561(context->skipValidation() ||2562ValidateUniformMatrix2x3fv(context, locationPacked, count, transpose, value));2563if (isCallValid)2564{2565context->uniformMatrix2x3fv(locationPacked, count, transpose, value);2566}2567ANGLE_CAPTURE(UniformMatrix2x3fv, isCallValid, context, locationPacked, count, transpose,2568value);2569}2570else2571{2572GenerateContextLostErrorOnCurrentGlobalContext();2573}2574}25752576void GL_APIENTRY GL_UniformMatrix2x4fv(GLint location,2577GLsizei count,2578GLboolean transpose,2579const GLfloat *value)2580{2581Context *context = GetValidGlobalContext();2582EVENT(context, GLUniformMatrix2x4fv,2583"context = %d, location = %d, count = %d, transpose = %s, value = 0x%016" PRIxPTR "",2584CID(context), location, count, GLbooleanToString(transpose), (uintptr_t)value);25852586if (context)2587{2588UniformLocation locationPacked = PackParam<UniformLocation>(location);2589std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2590bool isCallValid =2591(context->skipValidation() ||2592ValidateUniformMatrix2x4fv(context, locationPacked, count, transpose, value));2593if (isCallValid)2594{2595context->uniformMatrix2x4fv(locationPacked, count, transpose, value);2596}2597ANGLE_CAPTURE(UniformMatrix2x4fv, isCallValid, context, locationPacked, count, transpose,2598value);2599}2600else2601{2602GenerateContextLostErrorOnCurrentGlobalContext();2603}2604}26052606void GL_APIENTRY GL_UniformMatrix3x2fv(GLint location,2607GLsizei count,2608GLboolean transpose,2609const GLfloat *value)2610{2611Context *context = GetValidGlobalContext();2612EVENT(context, GLUniformMatrix3x2fv,2613"context = %d, location = %d, count = %d, transpose = %s, value = 0x%016" PRIxPTR "",2614CID(context), location, count, GLbooleanToString(transpose), (uintptr_t)value);26152616if (context)2617{2618UniformLocation locationPacked = PackParam<UniformLocation>(location);2619std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2620bool isCallValid =2621(context->skipValidation() ||2622ValidateUniformMatrix3x2fv(context, locationPacked, count, transpose, value));2623if (isCallValid)2624{2625context->uniformMatrix3x2fv(locationPacked, count, transpose, value);2626}2627ANGLE_CAPTURE(UniformMatrix3x2fv, isCallValid, context, locationPacked, count, transpose,2628value);2629}2630else2631{2632GenerateContextLostErrorOnCurrentGlobalContext();2633}2634}26352636void GL_APIENTRY GL_UniformMatrix3x4fv(GLint location,2637GLsizei count,2638GLboolean transpose,2639const GLfloat *value)2640{2641Context *context = GetValidGlobalContext();2642EVENT(context, GLUniformMatrix3x4fv,2643"context = %d, location = %d, count = %d, transpose = %s, value = 0x%016" PRIxPTR "",2644CID(context), location, count, GLbooleanToString(transpose), (uintptr_t)value);26452646if (context)2647{2648UniformLocation locationPacked = PackParam<UniformLocation>(location);2649std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2650bool isCallValid =2651(context->skipValidation() ||2652ValidateUniformMatrix3x4fv(context, locationPacked, count, transpose, value));2653if (isCallValid)2654{2655context->uniformMatrix3x4fv(locationPacked, count, transpose, value);2656}2657ANGLE_CAPTURE(UniformMatrix3x4fv, isCallValid, context, locationPacked, count, transpose,2658value);2659}2660else2661{2662GenerateContextLostErrorOnCurrentGlobalContext();2663}2664}26652666void GL_APIENTRY GL_UniformMatrix4x2fv(GLint location,2667GLsizei count,2668GLboolean transpose,2669const GLfloat *value)2670{2671Context *context = GetValidGlobalContext();2672EVENT(context, GLUniformMatrix4x2fv,2673"context = %d, location = %d, count = %d, transpose = %s, value = 0x%016" PRIxPTR "",2674CID(context), location, count, GLbooleanToString(transpose), (uintptr_t)value);26752676if (context)2677{2678UniformLocation locationPacked = PackParam<UniformLocation>(location);2679std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2680bool isCallValid =2681(context->skipValidation() ||2682ValidateUniformMatrix4x2fv(context, locationPacked, count, transpose, value));2683if (isCallValid)2684{2685context->uniformMatrix4x2fv(locationPacked, count, transpose, value);2686}2687ANGLE_CAPTURE(UniformMatrix4x2fv, isCallValid, context, locationPacked, count, transpose,2688value);2689}2690else2691{2692GenerateContextLostErrorOnCurrentGlobalContext();2693}2694}26952696void GL_APIENTRY GL_UniformMatrix4x3fv(GLint location,2697GLsizei count,2698GLboolean transpose,2699const GLfloat *value)2700{2701Context *context = GetValidGlobalContext();2702EVENT(context, GLUniformMatrix4x3fv,2703"context = %d, location = %d, count = %d, transpose = %s, value = 0x%016" PRIxPTR "",2704CID(context), location, count, GLbooleanToString(transpose), (uintptr_t)value);27052706if (context)2707{2708UniformLocation locationPacked = PackParam<UniformLocation>(location);2709std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2710bool isCallValid =2711(context->skipValidation() ||2712ValidateUniformMatrix4x3fv(context, locationPacked, count, transpose, value));2713if (isCallValid)2714{2715context->uniformMatrix4x3fv(locationPacked, count, transpose, value);2716}2717ANGLE_CAPTURE(UniformMatrix4x3fv, isCallValid, context, locationPacked, count, transpose,2718value);2719}2720else2721{2722GenerateContextLostErrorOnCurrentGlobalContext();2723}2724}27252726GLboolean GL_APIENTRY GL_UnmapBuffer(GLenum target)2727{2728Context *context = GetValidGlobalContext();2729EVENT(context, GLUnmapBuffer, "context = %d, target = %s", CID(context),2730GLenumToString(GLenumGroup::BufferTargetARB, target));27312732GLboolean returnValue;2733if (context)2734{2735BufferBinding targetPacked = PackParam<BufferBinding>(target);2736std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2737bool isCallValid =2738(context->skipValidation() || ValidateUnmapBuffer(context, targetPacked));2739if (isCallValid)2740{2741returnValue = context->unmapBuffer(targetPacked);2742}2743else2744{2745returnValue = GetDefaultReturnValue<angle::EntryPoint::GLUnmapBuffer, GLboolean>();2746}2747ANGLE_CAPTURE(UnmapBuffer, isCallValid, context, targetPacked, returnValue);2748}2749else2750{2751GenerateContextLostErrorOnCurrentGlobalContext();2752returnValue = GetDefaultReturnValue<angle::EntryPoint::GLUnmapBuffer, GLboolean>();2753}2754return returnValue;2755}27562757void GL_APIENTRY GL_VertexAttribDivisor(GLuint index, GLuint divisor)2758{2759Context *context = GetValidGlobalContext();2760EVENT(context, GLVertexAttribDivisor, "context = %d, index = %u, divisor = %u", CID(context),2761index, divisor);27622763if (context)2764{2765std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2766bool isCallValid =2767(context->skipValidation() || ValidateVertexAttribDivisor(context, index, divisor));2768if (isCallValid)2769{2770context->vertexAttribDivisor(index, divisor);2771}2772ANGLE_CAPTURE(VertexAttribDivisor, isCallValid, context, index, divisor);2773}2774else2775{2776GenerateContextLostErrorOnCurrentGlobalContext();2777}2778}27792780void GL_APIENTRY GL_VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)2781{2782Context *context = GetValidGlobalContext();2783EVENT(context, GLVertexAttribI4i, "context = %d, index = %u, x = %d, y = %d, z = %d, w = %d",2784CID(context), index, x, y, z, w);27852786if (context)2787{2788std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2789bool isCallValid =2790(context->skipValidation() || ValidateVertexAttribI4i(context, index, x, y, z, w));2791if (isCallValid)2792{2793context->vertexAttribI4i(index, x, y, z, w);2794}2795ANGLE_CAPTURE(VertexAttribI4i, isCallValid, context, index, x, y, z, w);2796}2797else2798{2799GenerateContextLostErrorOnCurrentGlobalContext();2800}2801}28022803void GL_APIENTRY GL_VertexAttribI4iv(GLuint index, const GLint *v)2804{2805Context *context = GetValidGlobalContext();2806EVENT(context, GLVertexAttribI4iv, "context = %d, index = %u, v = 0x%016" PRIxPTR "",2807CID(context), index, (uintptr_t)v);28082809if (context)2810{2811std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2812bool isCallValid =2813(context->skipValidation() || ValidateVertexAttribI4iv(context, index, v));2814if (isCallValid)2815{2816context->vertexAttribI4iv(index, v);2817}2818ANGLE_CAPTURE(VertexAttribI4iv, isCallValid, context, index, v);2819}2820else2821{2822GenerateContextLostErrorOnCurrentGlobalContext();2823}2824}28252826void GL_APIENTRY GL_VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)2827{2828Context *context = GetValidGlobalContext();2829EVENT(context, GLVertexAttribI4ui, "context = %d, index = %u, x = %u, y = %u, z = %u, w = %u",2830CID(context), index, x, y, z, w);28312832if (context)2833{2834std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2835bool isCallValid =2836(context->skipValidation() || ValidateVertexAttribI4ui(context, index, x, y, z, w));2837if (isCallValid)2838{2839context->vertexAttribI4ui(index, x, y, z, w);2840}2841ANGLE_CAPTURE(VertexAttribI4ui, isCallValid, context, index, x, y, z, w);2842}2843else2844{2845GenerateContextLostErrorOnCurrentGlobalContext();2846}2847}28482849void GL_APIENTRY GL_VertexAttribI4uiv(GLuint index, const GLuint *v)2850{2851Context *context = GetValidGlobalContext();2852EVENT(context, GLVertexAttribI4uiv, "context = %d, index = %u, v = 0x%016" PRIxPTR "",2853CID(context), index, (uintptr_t)v);28542855if (context)2856{2857std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2858bool isCallValid =2859(context->skipValidation() || ValidateVertexAttribI4uiv(context, index, v));2860if (isCallValid)2861{2862context->vertexAttribI4uiv(index, v);2863}2864ANGLE_CAPTURE(VertexAttribI4uiv, isCallValid, context, index, v);2865}2866else2867{2868GenerateContextLostErrorOnCurrentGlobalContext();2869}2870}28712872void GL_APIENTRY2873GL_VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)2874{2875Context *context = GetValidGlobalContext();2876EVENT(context, GLVertexAttribIPointer,2877"context = %d, index = %u, size = %d, type = %s, stride = %d, pointer = 0x%016" PRIxPTR2878"",2879CID(context), index, size, GLenumToString(GLenumGroup::VertexAttribPointerType, type),2880stride, (uintptr_t)pointer);28812882if (context)2883{2884VertexAttribType typePacked = PackParam<VertexAttribType>(type);2885std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2886bool isCallValid =2887(context->skipValidation() ||2888ValidateVertexAttribIPointer(context, index, size, typePacked, stride, pointer));2889if (isCallValid)2890{2891context->vertexAttribIPointer(index, size, typePacked, stride, pointer);2892}2893ANGLE_CAPTURE(VertexAttribIPointer, isCallValid, context, index, size, typePacked, stride,2894pointer);2895}2896else2897{2898GenerateContextLostErrorOnCurrentGlobalContext();2899}2900}29012902void GL_APIENTRY GL_WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)2903{2904Context *context = GetValidGlobalContext();2905EVENT(context, GLWaitSync, "context = %d, sync = 0x%016" PRIxPTR ", flags = %s, timeout = %llu",2906CID(context), (uintptr_t)sync,2907GLbitfieldToString(GLenumGroup::DefaultGroup, flags).c_str(),2908static_cast<unsigned long long>(timeout));29092910if (context)2911{2912std::unique_lock<angle::GlobalMutex> shareContextLock = GetContextLock(context);2913bool isCallValid =2914(context->skipValidation() || ValidateWaitSync(context, sync, flags, timeout));2915if (isCallValid)2916{2917context->waitSync(sync, flags, timeout);2918}2919ANGLE_CAPTURE(WaitSync, isCallValid, context, sync, flags, timeout);2920}2921else2922{2923GenerateContextLostErrorOnCurrentGlobalContext();2924}2925}29262927} // extern "C"292829292930