//
// Copyright 2002 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.
//
// ExtensionBehavior.h: Extension name enumeration and data structures for storing extension
// behavior.

#ifndef COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_
#define COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_

#include <map>

namespace sh
{

enum class TExtension
{
    UNDEFINED,  // Special value used to indicate no extension.

    ARB_texture_rectangle,
    ANGLE_texture_multisample,
    ARM_shader_framebuffer_fetch,
    EXT_blend_func_extended,
    EXT_draw_buffers,
    EXT_frag_depth,
    EXT_geometry_shader,
    EXT_shader_framebuffer_fetch,
    EXT_shader_texture_lod,
    EXT_YUV_target,
    NV_EGL_stream_consumer_external,
    NV_shader_framebuffer_fetch,
    OES_EGL_image_external,
    OES_EGL_image_external_essl3,
    OES_standard_derivatives,
    OES_texture_storage_multisample_2d_array,
    OES_texture_3D,
    OVR_multiview,
    OVR_multiview2,
    ANGLE_multi_draw,
    ANGLE_base_vertex_base_instance
};

enum TBehavior
{
    EBhRequire,
    EBhEnable,
    EBhWarn,
    EBhDisable,
    EBhUndefined
};

const char *GetExtensionNameString(TExtension extension);
TExtension GetExtensionByName(const char *extension);

const char *GetBehaviorString(TBehavior b);

// Mapping between extension id and behavior.
typedef std::map<TExtension, TBehavior> TExtensionBehavior;

bool IsExtensionEnabled(const TExtensionBehavior &extBehavior, TExtension extension);

}  // namespace sh

#endif  // COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_
