// GENERATED FILE - DO NOT EDIT.
// Generated by gen_extensions.py using data from registry_xml.py and gl.xml
//
// Copyright 2021 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.
//
// gles_extensions_autogen.h: GLES extension information.

#ifndef LIBANGLE_GLES_EXTENSIONS_AUTOGEN_H_
#define LIBANGLE_GLES_EXTENSIONS_AUTOGEN_H_

namespace gl
{
class TextureCapsMap;

struct Extensions
{
    Extensions();
    Extensions(const Extensions &other);

    Extensions &operator=(const Extensions &other);

    // Generate a vector of supported extension strings
    std::vector<std::string> getStrings() const;

    // Set all texture related extension support based on the supported textures.
    // Determines support for:
    // GL_OES_packed_depth_stencil
    // GL_OES_rgb8_rgba8
    // GL_EXT_texture_format_BGRA8888
    // GL_EXT_color_buffer_half_float,
    // GL_OES_texture_half_float, GL_OES_texture_half_float_linear
    // GL_OES_texture_float, GL_OES_texture_float_linear
    // GL_EXT_texture_rg
    // GL_EXT_texture_type_2_10_10_10_REV
    // GL_EXT_texture_compression_dxt1, GL_ANGLE_texture_compression_dxt3,
    // GL_ANGLE_texture_compression_dxt5
    // GL_KHR_texture_compression_astc_ldr, GL_OES_texture_compression_astc.
    //     NOTE: GL_KHR_texture_compression_astc_hdr must be enabled separately. Support for the
    //           HDR profile cannot be determined from the format enums alone.
    // GL_OES_compressed_ETC1_RGB8_texture
    // GL_EXT_sRGB
    // GL_ANGLE_depth_texture, GL_OES_depth32
    // GL_EXT_color_buffer_float
    // GL_EXT_texture_norm16
    // GL_EXT_texture_compression_bptc
    // GL_EXT_texture_compression_rgtc
    void setTextureExtensionSupport(const TextureCapsMap &textureCaps);

    // Helper functions
    bool copyImageAny() const { return (copyImageEXT || copyImageOES); }
    bool depthTextureAny() const { return (depthTextureANGLE || depthTextureOES); }
    bool drawBuffersIndexedAny() const { return (drawBuffersIndexedEXT || drawBuffersIndexedOES); }
    bool drawElementsBaseVertexAny() const
    {
        return (drawElementsBaseVertexEXT || drawElementsBaseVertexOES);
    }
    bool framebufferBlitAny() const { return (framebufferBlitANGLE || framebufferBlitNV); }
    bool geometryShaderAny() const { return (geometryShaderEXT || geometryShaderOES); }
    bool instancedArraysAny() const { return (instancedArraysANGLE || instancedArraysEXT); }
    bool primitiveBoundingBoxAny() const
    {
        return (primitiveBoundingBoxEXT || primitiveBoundingBoxOES);
    }
    bool shaderIoBlocksAny() const { return (shaderIoBlocksEXT || shaderIoBlocksOES); }
    bool textureBorderClampAny() const { return (textureBorderClampEXT || textureBorderClampOES); }
    bool textureBufferAny() const { return (textureBufferEXT || textureBufferOES); }
    bool textureCubeMapArrayAny() const
    {
        return (textureCubeMapArrayEXT || textureCubeMapArrayOES);
    }

    // GLES 2.0+ extensions
    // --------------------

    // GL_EXT_base_instance
    bool baseInstanceEXT = false;

    // GL_KHR_blend_equation_advanced
    bool blendEquationAdvancedKHR = false;

    // GL_EXT_blend_func_extended
    bool blendFuncExtendedEXT = false;

    // GL_EXT_blend_minmax
    bool blendMinmaxEXT = false;

    // GL_EXT_buffer_storage
    bool bufferStorageEXT = false;

    // GL_EXT_clip_control
    bool clipControlEXT = false;

    // GL_EXT_clip_cull_distance
    bool clipCullDistanceEXT = false;

    // GL_APPLE_clip_distance
    bool clipDistanceAPPLE = false;

    // GL_EXT_color_buffer_float
    bool colorBufferFloatEXT = false;

    // GL_EXT_color_buffer_half_float
    bool colorBufferHalfFloatEXT = false;

    // GL_OES_compressed_EAC_R11_signed_texture
    bool compressedEACR11SignedTextureOES = false;

    // GL_OES_compressed_EAC_R11_unsigned_texture
    bool compressedEACR11UnsignedTextureOES = false;

    // GL_OES_compressed_EAC_RG11_signed_texture
    bool compressedEACRG11SignedTextureOES = false;

    // GL_OES_compressed_EAC_RG11_unsigned_texture
    bool compressedEACRG11UnsignedTextureOES = false;

    // GL_EXT_compressed_ETC1_RGB8_sub_texture
    bool compressedETC1RGB8SubTextureEXT = false;

    // GL_OES_compressed_ETC1_RGB8_texture
    bool compressedETC1RGB8TextureOES = false;

    // GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture
    bool compressedETC2PunchthroughARGBA8TextureOES = false;

    // GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture
    bool compressedETC2PunchthroughASRGB8AlphaTextureOES = false;

    // GL_OES_compressed_ETC2_RGB8_texture
    bool compressedETC2RGB8TextureOES = false;

    // GL_OES_compressed_ETC2_RGBA8_texture
    bool compressedETC2RGBA8TextureOES = false;

    // GL_OES_compressed_ETC2_sRGB8_alpha8_texture
    bool compressedETC2SRGB8Alpha8TextureOES = false;

    // GL_OES_compressed_ETC2_sRGB8_texture
    bool compressedETC2SRGB8TextureOES = false;

    // GL_OES_compressed_paletted_texture
    bool compressedPalettedTextureOES = false;

    // GL_EXT_copy_image
    bool copyImageEXT = false;

    // GL_OES_copy_image
    bool copyImageOES = false;

    // GL_KHR_debug
    bool debugKHR = false;

    // GL_EXT_debug_label
    bool debugLabelEXT = false;

    // GL_EXT_debug_marker
    bool debugMarkerEXT = false;

    // GL_OES_depth24
    bool depth24OES = false;

    // GL_OES_depth32
    bool depth32OES = false;

    // GL_NV_depth_buffer_float2
    bool depthBufferFloat2NV = false;

    // GL_ANGLE_depth_texture
    bool depthTextureANGLE = false;

    // GL_OES_depth_texture
    bool depthTextureOES = false;

    // GL_OES_depth_texture_cube_map
    bool depthTextureCubeMapOES = false;

    // GL_EXT_discard_framebuffer
    bool discardFramebufferEXT = false;

    // GL_EXT_disjoint_timer_query
    bool disjointTimerQueryEXT = false;

    // GL_EXT_draw_buffers
    bool drawBuffersEXT = false;

    // GL_EXT_draw_buffers_indexed
    bool drawBuffersIndexedEXT = false;

    // GL_OES_draw_buffers_indexed
    bool drawBuffersIndexedOES = false;

    // GL_EXT_draw_elements_base_vertex
    bool drawElementsBaseVertexEXT = false;

    // GL_OES_draw_elements_base_vertex
    bool drawElementsBaseVertexOES = false;

    // GL_OES_EGL_image
    bool EGLImageOES = false;

    // GL_EXT_EGL_image_array
    bool EGLImageArrayEXT = false;

    // GL_OES_EGL_image_external
    bool EGLImageExternalOES = false;

    // GL_OES_EGL_image_external_essl3
    bool EGLImageExternalEssl3OES = false;

    // GL_EXT_EGL_image_external_wrap_modes
    bool EGLImageExternalWrapModesEXT = false;

    // GL_EXT_EGL_image_storage
    bool EGLImageStorageEXT = false;

    // GL_NV_EGL_stream_consumer_external
    bool EGLStreamConsumerExternalNV = false;

    // GL_OES_EGL_sync
    bool EGLSyncOES = false;

    // GL_OES_element_index_uint
    bool elementIndexUintOES = false;

    // GL_ANDROID_extension_pack_es31a
    bool extensionPackEs31aANDROID = false;

    // GL_EXT_external_buffer
    bool externalBufferEXT = false;

    // GL_OES_fbo_render_mipmap
    bool fboRenderMipmapOES = false;

    // GL_NV_fence
    bool fenceNV = false;

    // GL_EXT_float_blend
    bool floatBlendEXT = false;

    // GL_EXT_frag_depth
    bool fragDepthEXT = false;

    // GL_ANGLE_framebuffer_blit
    bool framebufferBlitANGLE = false;

    // GL_NV_framebuffer_blit
    bool framebufferBlitNV = false;

    // GL_MESA_framebuffer_flip_y
    bool framebufferFlipYMESA = false;

    // GL_EXT_geometry_shader
    bool geometryShaderEXT = false;

    // GL_OES_geometry_shader
    bool geometryShaderOES = false;

    // GL_OES_get_program_binary
    bool getProgramBinaryOES = false;

    // GL_EXT_gpu_shader5
    bool gpuShader5EXT = false;

    // GL_ANGLE_instanced_arrays
    bool instancedArraysANGLE = false;

    // GL_EXT_instanced_arrays
    bool instancedArraysEXT = false;

    // GL_OES_mapbuffer
    bool mapbufferOES = false;

    // GL_EXT_map_buffer_range
    bool mapBufferRangeEXT = false;

    // GL_EXT_memory_object
    bool memoryObjectEXT = false;

    // GL_EXT_memory_object_fd
    bool memoryObjectFdEXT = false;

    // GL_EXT_multi_draw_indirect
    bool multiDrawIndirectEXT = false;

    // GL_EXT_multisample_compatibility
    bool multisampleCompatibilityEXT = false;

    // GL_EXT_multisampled_render_to_texture
    bool multisampledRenderToTextureEXT = false;

    // GL_EXT_multisampled_render_to_texture2
    bool multisampledRenderToTexture2EXT = false;

    // GL_OVR_multiview
    bool multiviewOVR = false;

    // GL_OVR_multiview2
    bool multiview2OVR = false;

    // GL_KHR_no_error
    bool noErrorKHR = false;

    // GL_EXT_occlusion_query_boolean
    bool occlusionQueryBooleanEXT = false;

    // GL_OES_packed_depth_stencil
    bool packedDepthStencilOES = false;

    // GL_ANGLE_pack_reverse_row_order
    bool packReverseRowOrderANGLE = false;

    // GL_NV_pack_subimage
    bool packSubimageNV = false;

    // GL_KHR_parallel_shader_compile
    bool parallelShaderCompileKHR = false;

    // GL_AMD_performance_monitor
    bool performanceMonitorAMD = false;

    // GL_NV_pixel_buffer_object
    bool pixelBufferObjectNV = false;

    // GL_EXT_primitive_bounding_box
    bool primitiveBoundingBoxEXT = false;

    // GL_OES_primitive_bounding_box
    bool primitiveBoundingBoxOES = false;

    // GL_EXT_protected_textures
    bool protectedTexturesEXT = false;

    // GL_EXT_pvrtc_sRGB
    bool pvrtcSRGBEXT = false;

    // GL_NV_read_depth
    bool readDepthNV = false;

    // GL_NV_read_depth_stencil
    bool readDepthStencilNV = false;

    // GL_EXT_read_format_bgra
    bool readFormatBgraEXT = false;

    // GL_NV_read_stencil
    bool readStencilNV = false;

    // GL_OES_rgb8_rgba8
    bool rgb8Rgba8OES = false;

    // GL_KHR_robust_buffer_access_behavior
    bool robustBufferAccessBehaviorKHR = false;

    // GL_EXT_robustness
    bool robustnessEXT = false;

    // GL_NV_robustness_video_memory_purge
    bool robustnessVideoMemoryPurgeNV = false;

    // GL_OES_sample_shading
    bool sampleShadingOES = false;

    // GL_OES_sample_variables
    bool sampleVariablesOES = false;

    // GL_EXT_semaphore
    bool semaphoreEXT = false;

    // GL_EXT_semaphore_fd
    bool semaphoreFdEXT = false;

    // GL_EXT_separate_shader_objects
    bool separateShaderObjectsEXT = false;

    // GL_EXT_shader_framebuffer_fetch
    bool shaderFramebufferFetchEXT = false;

    // GL_EXT_shader_framebuffer_fetch_non_coherent
    bool shaderFramebufferFetchNonCoherentEXT = false;

    // GL_OES_shader_image_atomic
    bool shaderImageAtomicOES = false;

    // GL_EXT_shader_io_blocks
    bool shaderIoBlocksEXT = false;

    // GL_OES_shader_io_blocks
    bool shaderIoBlocksOES = false;

    // GL_OES_shader_multisample_interpolation
    bool shaderMultisampleInterpolationOES = false;

    // GL_EXT_shader_non_constant_global_initializers
    bool shaderNonConstantGlobalInitializersEXT = false;

    // GL_NV_shader_noperspective_interpolation
    bool shaderNoperspectiveInterpolationNV = false;

    // GL_EXT_shader_texture_lod
    bool shaderTextureLodEXT = false;

    // GL_QCOM_shading_rate
    bool shadingRateQCOM = false;

    // GL_EXT_shadow_samplers
    bool shadowSamplersEXT = false;

    // GL_EXT_sRGB
    bool sRGBEXT = false;

    // GL_EXT_sRGB_write_control
    bool sRGBWriteControlEXT = false;

    // GL_OES_standard_derivatives
    bool standardDerivativesOES = false;

    // GL_OES_surfaceless_context
    bool surfacelessContextOES = false;

    // GL_ARB_sync
    bool syncARB = false;

    // GL_EXT_tessellation_shader
    bool tessellationShaderEXT = false;

    // GL_OES_texture_3D
    bool texture3DOES = false;

    // GL_EXT_texture_border_clamp
    bool textureBorderClampEXT = false;

    // GL_OES_texture_border_clamp
    bool textureBorderClampOES = false;

    // GL_EXT_texture_buffer
    bool textureBufferEXT = false;

    // GL_OES_texture_buffer
    bool textureBufferOES = false;

    // GL_OES_texture_compression_astc
    bool textureCompressionAstcOES = false;

    // GL_KHR_texture_compression_astc_hdr
    bool textureCompressionAstcHdrKHR = false;

    // GL_KHR_texture_compression_astc_ldr
    bool textureCompressionAstcLdrKHR = false;

    // GL_KHR_texture_compression_astc_sliced_3d
    bool textureCompressionAstcSliced3dKHR = false;

    // GL_EXT_texture_compression_bptc
    bool textureCompressionBptcEXT = false;

    // GL_EXT_texture_compression_dxt1
    bool textureCompressionDxt1EXT = false;

    // GL_IMG_texture_compression_pvrtc
    bool textureCompressionPvrtcIMG = false;

    // GL_IMG_texture_compression_pvrtc2
    bool textureCompressionPvrtc2IMG = false;

    // GL_EXT_texture_compression_rgtc
    bool textureCompressionRgtcEXT = false;

    // GL_EXT_texture_compression_s3tc
    bool textureCompressionS3tcEXT = false;

    // GL_EXT_texture_compression_s3tc_srgb
    bool textureCompressionS3tcSrgbEXT = false;

    // GL_EXT_texture_cube_map_array
    bool textureCubeMapArrayEXT = false;

    // GL_OES_texture_cube_map_array
    bool textureCubeMapArrayOES = false;

    // GL_EXT_texture_filter_anisotropic
    bool textureFilterAnisotropicEXT = false;

    // GL_OES_texture_float
    bool textureFloatOES = false;

    // GL_OES_texture_float_linear
    bool textureFloatLinearOES = false;

    // GL_EXT_texture_format_BGRA8888
    bool textureFormatBGRA8888EXT = false;

    // GL_EXT_texture_format_sRGB_override
    bool textureFormatSRGBOverrideEXT = false;

    // GL_OES_texture_half_float
    bool textureHalfFloatOES = false;

    // GL_OES_texture_half_float_linear
    bool textureHalfFloatLinearOES = false;

    // GL_EXT_texture_norm16
    bool textureNorm16EXT = false;

    // GL_OES_texture_npot
    bool textureNpotOES = false;

    // GL_EXT_texture_rg
    bool textureRgEXT = false;

    // GL_EXT_texture_sRGB_decode
    bool textureSRGBDecodeEXT = false;

    // GL_EXT_texture_sRGB_R8
    bool textureSRGBR8EXT = false;

    // GL_EXT_texture_sRGB_RG8
    bool textureSRGBRG8EXT = false;

    // GL_OES_texture_stencil8
    bool textureStencil8OES = false;

    // GL_EXT_texture_storage
    bool textureStorageEXT = false;

    // GL_OES_texture_storage_multisample_2d_array
    bool textureStorageMultisample2dArrayOES = false;

    // GL_EXT_texture_type_2_10_10_10_REV
    bool textureType2101010REVEXT = false;

    // GL_ANGLE_texture_usage
    bool textureUsageANGLE = false;

    // GL_ANGLE_translated_shader_source
    bool translatedShaderSourceANGLE = false;

    // GL_EXT_unpack_subimage
    bool unpackSubimageEXT = false;

    // GL_OES_vertex_array_object
    bool vertexArrayObjectOES = false;

    // GL_OES_vertex_half_float
    bool vertexHalfFloatOES = false;

    // GL_OES_vertex_type_10_10_10_2
    bool vertexType1010102OES = false;

    // GL_WEBGL_video_texture
    bool videoTextureWEBGL = false;

    // GL_EXT_YUV_target
    bool YUVTargetEXT = false;

    // ANGLE unofficial extensions
    // ---------------------------

    // GL_ANGLE_base_vertex_base_instance
    bool baseVertexBaseInstanceANGLE = false;

    // GL_ANGLE_base_vertex_base_instance_shader_builtin
    bool baseVertexBaseInstanceShaderBuiltinANGLE = false;

    // GL_CHROMIUM_bind_generates_resource
    bool bindGeneratesResourceCHROMIUM = false;

    // GL_CHROMIUM_bind_uniform_location
    bool bindUniformLocationCHROMIUM = false;

    // GL_ANGLE_client_arrays
    bool clientArraysANGLE = false;

    // GL_CHROMIUM_color_buffer_float_rgb
    bool colorBufferFloatRgbCHROMIUM = false;

    // GL_CHROMIUM_color_buffer_float_rgba
    bool colorBufferFloatRgbaCHROMIUM = false;

    // GL_ANGLE_compressed_texture_etc
    bool compressedTextureEtcANGLE = false;

    // GL_CHROMIUM_copy_compressed_texture
    bool copyCompressedTextureCHROMIUM = false;

    // GL_CHROMIUM_copy_texture
    bool copyTextureCHROMIUM = false;

    // GL_ANGLE_copy_texture_3d
    bool copyTexture3dANGLE = false;

    // GL_CHROMIUM_framebuffer_mixed_samples
    bool framebufferMixedSamplesCHROMIUM = false;

    // GL_ANGLE_framebuffer_multisample
    bool framebufferMultisampleANGLE = false;

    // GL_ANGLE_get_image
    bool getImageANGLE = false;

    // GL_ANGLE_get_serialized_context_string
    bool getSerializedContextStringANGLE = false;

    // GL_ANGLE_get_tex_level_parameter
    bool getTexLevelParameterANGLE = false;

    // GL_ANGLE_logic_op
    bool logicOpANGLE = false;

    // GL_CHROMIUM_lose_context
    bool loseContextCHROMIUM = false;

    // GL_ANGLE_lossy_etc_decode
    bool lossyEtcDecodeANGLE = false;

    // GL_ANGLE_memory_object_flags
    bool memoryObjectFlagsANGLE = false;

    // GL_ANGLE_memory_object_fuchsia
    bool memoryObjectFuchsiaANGLE = false;

    // GL_ANGLE_memory_size
    bool memorySizeANGLE = false;

    // GL_ANGLE_multi_draw
    bool multiDrawANGLE = false;

    // GL_ANGLE_multiview_multisample
    bool multiviewMultisampleANGLE = false;

    // GL_ANGLE_program_binary
    bool programBinaryANGLE = false;

    // GL_ANGLE_program_cache_control
    bool programCacheControlANGLE = false;

    // GL_ANGLE_provoking_vertex
    bool provokingVertexANGLE = false;

    // GL_ANGLE_read_only_depth_stencil_feedback_loops
    bool readOnlyDepthStencilFeedbackLoopsANGLE = false;

    // GL_ANGLE_relaxed_vertex_attribute_type
    bool relaxedVertexAttributeTypeANGLE = false;

    // GL_ANGLE_request_extension
    bool requestExtensionANGLE = false;

    // GL_ANGLE_rgbx_internal_format
    bool rgbxInternalFormatANGLE = false;

    // GL_ANGLE_robust_client_memory
    bool robustClientMemoryANGLE = false;

    // GL_ANGLE_robust_fragment_shader_output
    bool robustFragmentShaderOutputANGLE = false;

    // GL_ANGLE_robust_resource_initialization
    bool robustResourceInitializationANGLE = false;

    // GL_ANGLE_semaphore_fuchsia
    bool semaphoreFuchsiaANGLE = false;

    // GL_ANGLE_shader_pixel_local_storage
    bool shaderPixelLocalStorageANGLE = false;

    // GL_ANGLE_shader_pixel_local_storage_coherent
    bool shaderPixelLocalStorageCoherentANGLE = false;

    // GL_CHROMIUM_sync_query
    bool syncQueryCHROMIUM = false;

    // GL_ANGLE_texture_compression_dxt3
    bool textureCompressionDxt3ANGLE = false;

    // GL_ANGLE_texture_compression_dxt5
    bool textureCompressionDxt5ANGLE = false;

    // GL_ANGLE_texture_external_update
    bool textureExternalUpdateANGLE = false;

    // GL_CHROMIUM_texture_filtering_hint
    bool textureFilteringHintCHROMIUM = false;

    // GL_ANGLE_texture_multisample
    bool textureMultisampleANGLE = false;

    // GL_ANGLE_texture_rectangle
    bool textureRectangleANGLE = false;

    // GL_ANGLE_vulkan_image
    bool vulkanImageANGLE = false;

    // GL_ANGLE_webgl_compatibility
    bool webglCompatibilityANGLE = false;

    // GL_ANGLE_yuv_internal_format
    bool yuvInternalFormatANGLE = false;

    // GLES 1.0 and 1.1 extensions
    // ---------------------------

    // GL_OES_draw_texture
    bool drawTextureOES = false;

    // GL_OES_framebuffer_object
    bool framebufferObjectOES = false;

    // GL_OES_matrix_palette
    bool matrixPaletteOES = false;

    // GL_OES_point_size_array
    bool pointSizeArrayOES = false;

    // GL_OES_point_sprite
    bool pointSpriteOES = false;

    // GL_OES_query_matrix
    bool queryMatrixOES = false;

    // GL_OES_texture_cube_map
    bool textureCubeMapOES = false;
};
}  // namespace gl

#endif  // LIBANGLE_GLES_EXTENSIONS_AUTOGEN_H_
