// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.py using data from egl.xml and egl_angle_ext.xml.
//
// Copyright 2023 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// egl_context_lock_autogen.h:
//   Context Lock functions for the EGL entry points.

#ifndef LIBGLESV2_EGL_CONTEXT_LOCK_AUTOGEN_H_
#define LIBGLESV2_EGL_CONTEXT_LOCK_AUTOGEN_H_

#include "libGLESv2/global_state.h"

namespace egl
{

// EGL 1.0
ScopedContextMutexLock GetContextLock_ChooseConfig(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_CopyBuffers(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_CreateContext(Thread *thread,
                                                    egl::Display *dpyPacked,
                                                    gl::ContextID share_contextPacked);
ScopedContextMutexLock GetContextLock_CreatePbufferSurface(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_CreatePixmapSurface(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_CreateWindowSurface(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_DestroyContext(Thread *thread,
                                                     egl::Display *dpyPacked,
                                                     gl::ContextID ctxPacked);
ScopedContextMutexLock GetContextLock_DestroySurface(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_GetConfigAttrib(Thread *thread,
                                                      egl::Display *dpyPacked,
                                                      EGLint attribute);
ScopedContextMutexLock GetContextLock_GetConfigs(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_GetCurrentDisplay(Thread *thread);
ScopedContextMutexLock GetContextLock_GetCurrentSurface(Thread *thread);
ScopedContextMutexLock GetContextLock_GetDisplay(Thread *thread);
ScopedContextMutexLock GetContextLock_GetError(Thread *thread);
ScopedContextMutexLock GetContextLock_GetProcAddress(Thread *thread);
ScopedContextMutexLock GetContextLock_Initialize(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_MakeCurrent(Thread *thread,
                                                  egl::Display *dpyPacked,
                                                  gl::ContextID ctxPacked);
ScopedContextMutexLock GetContextLock_QueryContext(Thread *thread,
                                                   egl::Display *dpyPacked,
                                                   gl::ContextID ctxPacked,
                                                   EGLint attribute);
ScopedContextMutexLock GetContextLock_QueryString(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_QuerySurface(Thread *thread,
                                                   egl::Display *dpyPacked,
                                                   EGLint attribute);
ScopedContextMutexLock GetContextLock_SwapBuffers(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_Terminate(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_WaitGL(Thread *thread);
ScopedContextMutexLock GetContextLock_WaitNative(Thread *thread);

// EGL 1.1
ScopedContextMutexLock GetContextLock_BindTexImage(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_ReleaseTexImage(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_SurfaceAttrib(Thread *thread,
                                                    egl::Display *dpyPacked,
                                                    EGLint attribute);
ScopedContextMutexLock GetContextLock_SwapInterval(Thread *thread, egl::Display *dpyPacked);

// EGL 1.2
ScopedContextMutexLock GetContextLock_BindAPI(Thread *thread);
ScopedContextMutexLock GetContextLock_CreatePbufferFromClientBuffer(Thread *thread,
                                                                    egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_QueryAPI(Thread *thread);
ScopedContextMutexLock GetContextLock_ReleaseThread(Thread *thread);
ScopedContextMutexLock GetContextLock_WaitClient(Thread *thread);

// EGL 1.4
ScopedContextMutexLock GetContextLock_GetCurrentContext(Thread *thread);

// EGL 1.5
ScopedContextMutexLock GetContextLock_ClientWaitSync(Thread *thread,
                                                     egl::Display *dpyPacked,
                                                     EGLint flags);
ScopedContextMutexLock GetContextLock_CreateImage(Thread *thread,
                                                  egl::Display *dpyPacked,
                                                  gl::ContextID ctxPacked);
ScopedContextMutexLock GetContextLock_CreatePlatformPixmapSurface(Thread *thread,
                                                                  egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_CreatePlatformWindowSurface(Thread *thread,
                                                                  egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_CreateSync(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_DestroyImage(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_DestroySync(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_GetPlatformDisplay(Thread *thread);
ScopedContextMutexLock GetContextLock_GetSyncAttrib(Thread *thread,
                                                    egl::Display *dpyPacked,
                                                    EGLint attribute);
ScopedContextMutexLock GetContextLock_WaitSync(Thread *thread,
                                               egl::Display *dpyPacked,
                                               EGLint flags);

// EGL_ANDROID_blob_cache
ScopedContextMutexLock GetContextLock_SetBlobCacheFuncsANDROID(Thread *thread,
                                                               egl::Display *dpyPacked);

// EGL_ANDROID_create_native_client_buffer
ScopedContextMutexLock GetContextLock_CreateNativeClientBufferANDROID(Thread *thread);

// EGL_ANDROID_get_frame_timestamps
ScopedContextMutexLock GetContextLock_GetCompositorTimingSupportedANDROID(Thread *thread,
                                                                          egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_GetCompositorTimingANDROID(Thread *thread,
                                                                 egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_GetNextFrameIdANDROID(Thread *thread,
                                                            egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_GetFrameTimestampSupportedANDROID(Thread *thread,
                                                                        egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_GetFrameTimestampsANDROID(Thread *thread,
                                                                egl::Display *dpyPacked);

// EGL_ANDROID_get_native_client_buffer
ScopedContextMutexLock GetContextLock_GetNativeClientBufferANDROID(Thread *thread);

// EGL_ANDROID_native_fence_sync
ScopedContextMutexLock GetContextLock_DupNativeFenceFDANDROID(Thread *thread,
                                                              egl::Display *dpyPacked);

// EGL_ANDROID_presentation_time
ScopedContextMutexLock GetContextLock_PresentationTimeANDROID(Thread *thread,
                                                              egl::Display *dpyPacked);

// EGL_ANGLE_device_creation
ScopedContextMutexLock GetContextLock_CreateDeviceANGLE(Thread *thread);
ScopedContextMutexLock GetContextLock_ReleaseDeviceANGLE(Thread *thread);

// EGL_ANGLE_device_vulkan
ScopedContextMutexLock GetContextLock_LockVulkanQueueANGLE(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_UnlockVulkanQueueANGLE(Thread *thread,
                                                             egl::Display *dpyPacked);

// EGL_ANGLE_external_context_and_surface
ScopedContextMutexLock GetContextLock_AcquireExternalContextANGLE(Thread *thread,
                                                                  egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_ReleaseExternalContextANGLE(Thread *thread,
                                                                  egl::Display *dpyPacked);

// EGL_ANGLE_feature_control
ScopedContextMutexLock GetContextLock_QueryStringiANGLE(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_QueryDisplayAttribANGLE(Thread *thread,
                                                              egl::Display *dpyPacked,
                                                              EGLint attribute);

// EGL_ANGLE_metal_shared_event_sync
ScopedContextMutexLock GetContextLock_CopyMetalSharedEventANGLE(Thread *thread,
                                                                egl::Display *dpyPacked);

// EGL_ANGLE_no_error
ScopedContextMutexLock GetContextLock_SetValidationEnabledANGLE(Thread *thread);

// EGL_ANGLE_power_preference
ScopedContextMutexLock GetContextLock_ReleaseHighPowerGPUANGLE(Thread *thread,
                                                               egl::Display *dpyPacked,
                                                               gl::ContextID ctxPacked);
ScopedContextMutexLock GetContextLock_ReacquireHighPowerGPUANGLE(Thread *thread,
                                                                 egl::Display *dpyPacked,
                                                                 gl::ContextID ctxPacked);
ScopedContextMutexLock GetContextLock_HandleGPUSwitchANGLE(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_ForceGPUSwitchANGLE(Thread *thread, egl::Display *dpyPacked);

// EGL_ANGLE_prepare_swap_buffers
ScopedContextMutexLock GetContextLock_PrepareSwapBuffersANGLE(Thread *thread,
                                                              egl::Display *dpyPacked);

// EGL_ANGLE_program_cache_control
ScopedContextMutexLock GetContextLock_ProgramCacheGetAttribANGLE(Thread *thread,
                                                                 egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_ProgramCacheQueryANGLE(Thread *thread,
                                                             egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_ProgramCachePopulateANGLE(Thread *thread,
                                                                egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_ProgramCacheResizeANGLE(Thread *thread,
                                                              egl::Display *dpyPacked);

// EGL_ANGLE_query_surface_pointer
ScopedContextMutexLock GetContextLock_QuerySurfacePointerANGLE(Thread *thread,
                                                               egl::Display *dpyPacked,
                                                               EGLint attribute);

// EGL_ANGLE_stream_producer_d3d_texture
ScopedContextMutexLock GetContextLock_CreateStreamProducerD3DTextureANGLE(Thread *thread,
                                                                          egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_StreamPostD3DTextureANGLE(Thread *thread,
                                                                egl::Display *dpyPacked);

// EGL_ANGLE_sync_control_rate
ScopedContextMutexLock GetContextLock_GetMscRateANGLE(Thread *thread, egl::Display *dpyPacked);

// EGL_ANGLE_vulkan_image
ScopedContextMutexLock GetContextLock_ExportVkImageANGLE(Thread *thread, egl::Display *dpyPacked);

// EGL_ANGLE_wait_until_work_scheduled
ScopedContextMutexLock GetContextLock_WaitUntilWorkScheduledANGLE(Thread *thread,
                                                                  egl::Display *dpyPacked);

// EGL_CHROMIUM_sync_control
ScopedContextMutexLock GetContextLock_GetSyncValuesCHROMIUM(Thread *thread,
                                                            egl::Display *dpyPacked);

// EGL_EXT_device_query
ScopedContextMutexLock GetContextLock_QueryDeviceAttribEXT(Thread *thread, EGLint attribute);
ScopedContextMutexLock GetContextLock_QueryDeviceStringEXT(Thread *thread);
ScopedContextMutexLock GetContextLock_QueryDisplayAttribEXT(Thread *thread,
                                                            egl::Display *dpyPacked,
                                                            EGLint attribute);

// EGL_EXT_image_dma_buf_import_modifiers
ScopedContextMutexLock GetContextLock_QueryDmaBufFormatsEXT(Thread *thread,
                                                            egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_QueryDmaBufModifiersEXT(Thread *thread,
                                                              egl::Display *dpyPacked);

// EGL_EXT_platform_base
ScopedContextMutexLock GetContextLock_CreatePlatformPixmapSurfaceEXT(Thread *thread,
                                                                     egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_CreatePlatformWindowSurfaceEXT(Thread *thread,
                                                                     egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_GetPlatformDisplayEXT(Thread *thread);

// EGL_EXT_surface_compression
ScopedContextMutexLock GetContextLock_QuerySupportedCompressionRatesEXT(Thread *thread,
                                                                        egl::Display *dpyPacked);

// EGL_KHR_debug
ScopedContextMutexLock GetContextLock_DebugMessageControlKHR(Thread *thread);
ScopedContextMutexLock GetContextLock_LabelObjectKHR(Thread *thread, egl::Display *displayPacked);
ScopedContextMutexLock GetContextLock_QueryDebugKHR(Thread *thread, EGLint attribute);

// EGL_KHR_fence_sync
ScopedContextMutexLock GetContextLock_ClientWaitSyncKHR(Thread *thread,
                                                        egl::Display *dpyPacked,
                                                        EGLint flags);
ScopedContextMutexLock GetContextLock_CreateSyncKHR(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_DestroySyncKHR(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_GetSyncAttribKHR(Thread *thread,
                                                       egl::Display *dpyPacked,
                                                       EGLint attribute);

// EGL_KHR_image
ScopedContextMutexLock GetContextLock_CreateImageKHR(Thread *thread,
                                                     egl::Display *dpyPacked,
                                                     gl::ContextID ctxPacked);
ScopedContextMutexLock GetContextLock_DestroyImageKHR(Thread *thread, egl::Display *dpyPacked);

// EGL_KHR_lock_surface3
ScopedContextMutexLock GetContextLock_LockSurfaceKHR(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_QuerySurface64KHR(Thread *thread,
                                                        egl::Display *dpyPacked,
                                                        EGLint attribute);
ScopedContextMutexLock GetContextLock_UnlockSurfaceKHR(Thread *thread, egl::Display *dpyPacked);

// EGL_KHR_partial_update
ScopedContextMutexLock GetContextLock_SetDamageRegionKHR(Thread *thread, egl::Display *dpyPacked);

// EGL_KHR_reusable_sync
ScopedContextMutexLock GetContextLock_SignalSyncKHR(Thread *thread, egl::Display *dpyPacked);

// EGL_KHR_stream
ScopedContextMutexLock GetContextLock_CreateStreamKHR(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_DestroyStreamKHR(Thread *thread, egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_QueryStreamKHR(Thread *thread,
                                                     egl::Display *dpyPacked,
                                                     EGLenum attribute);
ScopedContextMutexLock GetContextLock_QueryStreamu64KHR(Thread *thread,
                                                        egl::Display *dpyPacked,
                                                        EGLenum attribute);
ScopedContextMutexLock GetContextLock_StreamAttribKHR(Thread *thread,
                                                      egl::Display *dpyPacked,
                                                      EGLenum attribute);

// EGL_KHR_stream_consumer_gltexture
ScopedContextMutexLock GetContextLock_StreamConsumerAcquireKHR(Thread *thread,
                                                               egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_StreamConsumerGLTextureExternalKHR(Thread *thread,
                                                                         egl::Display *dpyPacked);
ScopedContextMutexLock GetContextLock_StreamConsumerReleaseKHR(Thread *thread,
                                                               egl::Display *dpyPacked);

// EGL_KHR_swap_buffers_with_damage
ScopedContextMutexLock GetContextLock_SwapBuffersWithDamageKHR(Thread *thread,
                                                               egl::Display *dpyPacked);

// EGL_KHR_wait_sync
ScopedContextMutexLock GetContextLock_WaitSyncKHR(Thread *thread,
                                                  egl::Display *dpyPacked,
                                                  EGLint flags);

// EGL_NV_post_sub_buffer
ScopedContextMutexLock GetContextLock_PostSubBufferNV(Thread *thread, egl::Display *dpyPacked);

// EGL_NV_stream_consumer_gltexture_yuv
ScopedContextMutexLock GetContextLock_StreamConsumerGLTextureExternalAttribsNV(
    Thread *thread,
    egl::Display *dpyPacked);
}  // namespace egl

#endif  // LIBGLESV2_EGL_CONTEXT_LOCK_AUTOGEN_H_
