//
// 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.
//

#include "compiler/translator/Initialize.h"

namespace sh
{

void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavior &extBehavior)
{
    if (resources.OES_standard_derivatives)
    {
        extBehavior[TExtension::OES_standard_derivatives] = EBhUndefined;
    }
    if (resources.OES_EGL_image_external)
    {
        extBehavior[TExtension::OES_EGL_image_external] = EBhUndefined;
    }
    if (resources.OES_EGL_image_external_essl3)
    {
        extBehavior[TExtension::OES_EGL_image_external_essl3] = EBhUndefined;
    }
    if (resources.NV_EGL_stream_consumer_external)
    {
        extBehavior[TExtension::NV_EGL_stream_consumer_external] = EBhUndefined;
    }
    if (resources.ARB_texture_rectangle)
    {
        // Special: ARB_texture_rectangle extension does not follow the standard for #extension
        // directives - it is enabled by default. An extension directive may still disable it.
        extBehavior[TExtension::ARB_texture_rectangle] = EBhEnable;
    }
    if (resources.EXT_blend_func_extended)
    {
        extBehavior[TExtension::EXT_blend_func_extended] = EBhUndefined;
    }
    if (resources.EXT_conservative_depth)
    {
        extBehavior[TExtension::EXT_conservative_depth] = EBhUndefined;
    }
    if (resources.EXT_draw_buffers)
    {
        extBehavior[TExtension::EXT_draw_buffers] = EBhUndefined;
    }
    if (resources.EXT_frag_depth)
    {
        extBehavior[TExtension::EXT_frag_depth] = EBhUndefined;
    }
    if (resources.EXT_fragment_shading_rate)
    {
        extBehavior[TExtension::EXT_fragment_shading_rate] = EBhUndefined;
    }
    if (resources.EXT_fragment_shading_rate_primitive)
    {
        extBehavior[TExtension::EXT_fragment_shading_rate_primitive] = EBhUndefined;
    }
    if (resources.EXT_primitive_bounding_box)
    {
        extBehavior[TExtension::EXT_primitive_bounding_box] = EBhUndefined;
    }
    if (resources.OES_primitive_bounding_box)
    {
        extBehavior[TExtension::OES_primitive_bounding_box] = EBhUndefined;
    }
    if (resources.EXT_separate_shader_objects)
    {
        extBehavior[TExtension::EXT_separate_shader_objects] = EBhUndefined;
    }
    if (resources.EXT_shader_texture_lod)
    {
        extBehavior[TExtension::EXT_shader_texture_lod] = EBhUndefined;
    }
    if (resources.EXT_shader_framebuffer_fetch)
    {
        extBehavior[TExtension::EXT_shader_framebuffer_fetch] = EBhUndefined;
    }
    if (resources.EXT_shader_framebuffer_fetch_non_coherent)
    {
        extBehavior[TExtension::EXT_shader_framebuffer_fetch_non_coherent] = EBhUndefined;
    }
    if (resources.NV_shader_noperspective_interpolation)
    {
        extBehavior[TExtension::NV_shader_noperspective_interpolation] = EBhUndefined;
    }
    if (resources.ARM_shader_framebuffer_fetch)
    {
        extBehavior[TExtension::ARM_shader_framebuffer_fetch] = EBhUndefined;
    }
    if (resources.ARM_shader_framebuffer_fetch_depth_stencil)
    {
        extBehavior[TExtension::ARM_shader_framebuffer_fetch_depth_stencil] = EBhUndefined;
    }
    if (resources.OVR_multiview)
    {
        extBehavior[TExtension::OVR_multiview] = EBhUndefined;
    }
    if (resources.OVR_multiview2)
    {
        extBehavior[TExtension::OVR_multiview2] = EBhUndefined;
    }
    if (resources.EXT_YUV_target)
    {
        extBehavior[TExtension::EXT_YUV_target] = EBhUndefined;
    }
    if (resources.EXT_geometry_shader)
    {
        extBehavior[TExtension::EXT_geometry_shader] = EBhUndefined;
    }
    if (resources.OES_geometry_shader)
    {
        extBehavior[TExtension::OES_geometry_shader] = EBhUndefined;
    }
    if (resources.OES_shader_io_blocks)
    {
        extBehavior[TExtension::OES_shader_io_blocks] = EBhUndefined;
    }
    if (resources.EXT_shader_io_blocks)
    {
        extBehavior[TExtension::EXT_shader_io_blocks] = EBhUndefined;
    }
    if (resources.EXT_gpu_shader5)
    {
        extBehavior[TExtension::EXT_gpu_shader5] = EBhUndefined;
    }
    if (resources.OES_gpu_shader5)
    {
        extBehavior[TExtension::OES_gpu_shader5] = EBhUndefined;
    }
    if (resources.EXT_shader_non_constant_global_initializers)
    {
        extBehavior[TExtension::EXT_shader_non_constant_global_initializers] = EBhUndefined;
    }
    if (resources.OES_texture_storage_multisample_2d_array)
    {
        extBehavior[TExtension::OES_texture_storage_multisample_2d_array] = EBhUndefined;
    }
    if (resources.OES_texture_3D)
    {
        extBehavior[TExtension::OES_texture_3D] = EBhUndefined;
    }
    if (resources.ANGLE_shader_pixel_local_storage)
    {
        extBehavior[TExtension::ANGLE_shader_pixel_local_storage] = EBhUndefined;
    }
    if (resources.ANGLE_texture_multisample)
    {
        extBehavior[TExtension::ANGLE_texture_multisample] = EBhUndefined;
    }
    if (resources.ANGLE_multi_draw)
    {
        extBehavior[TExtension::ANGLE_multi_draw] = EBhUndefined;
    }
    if (resources.ANGLE_base_vertex_base_instance_shader_builtin)
    {
        extBehavior[TExtension::ANGLE_base_vertex_base_instance_shader_builtin] = EBhUndefined;
    }
    if (resources.WEBGL_video_texture)
    {
        extBehavior[TExtension::WEBGL_video_texture] = EBhUndefined;
    }
    if (resources.APPLE_clip_distance)
    {
        extBehavior[TExtension::APPLE_clip_distance] = EBhUndefined;
    }
    if (resources.OES_texture_cube_map_array)
    {
        extBehavior[TExtension::OES_texture_cube_map_array] = EBhUndefined;
    }
    if (resources.EXT_texture_cube_map_array)
    {
        extBehavior[TExtension::EXT_texture_cube_map_array] = EBhUndefined;
    }
    if (resources.EXT_texture_query_lod)
    {
        extBehavior[TExtension::EXT_texture_query_lod] = EBhUndefined;
    }
    if (resources.EXT_texture_shadow_lod)
    {
        extBehavior[TExtension::EXT_texture_shadow_lod] = EBhUndefined;
    }
    if (resources.EXT_shadow_samplers)
    {
        extBehavior[TExtension::EXT_shadow_samplers] = EBhUndefined;
    }
    if (resources.OES_shader_multisample_interpolation)
    {
        extBehavior[TExtension::OES_shader_multisample_interpolation] = EBhUndefined;
    }
    if (resources.OES_shader_image_atomic)
    {
        extBehavior[TExtension::OES_shader_image_atomic] = EBhUndefined;
    }
    if (resources.EXT_tessellation_shader)
    {
        extBehavior[TExtension::EXT_tessellation_shader] = EBhUndefined;
    }
    if (resources.OES_tessellation_shader)
    {
        extBehavior[TExtension::OES_tessellation_shader] = EBhUndefined;
    }
    if (resources.OES_texture_buffer)
    {
        extBehavior[TExtension::OES_texture_buffer] = EBhUndefined;
    }
    if (resources.EXT_texture_buffer)
    {
        extBehavior[TExtension::EXT_texture_buffer] = EBhUndefined;
    }
    if (resources.OES_sample_variables)
    {
        extBehavior[TExtension::OES_sample_variables] = EBhUndefined;
    }
    if (resources.EXT_clip_cull_distance)
    {
        extBehavior[TExtension::EXT_clip_cull_distance] = EBhUndefined;
    }
    if (resources.ANGLE_clip_cull_distance)
    {
        extBehavior[TExtension::ANGLE_clip_cull_distance] = EBhUndefined;
    }
    if (resources.ANDROID_extension_pack_es31a)
    {
        extBehavior[TExtension::ANDROID_extension_pack_es31a] = EBhUndefined;
    }
    if (resources.KHR_blend_equation_advanced)
    {
        extBehavior[TExtension::KHR_blend_equation_advanced] = EBhUndefined;
    }
}

void ResetExtensionBehavior(const ShBuiltInResources &resources,
                            TExtensionBehavior &extBehavior,
                            const ShCompileOptions &compileOptions)
{
    for (auto &ext : extBehavior)
    {
        ext.second = EBhUndefined;
    }
    if (resources.ARB_texture_rectangle)
    {
        if (compileOptions.disableARBTextureRectangle)
        {
            // Remove ARB_texture_rectangle so it can't be enabled by extension directives.
            extBehavior.erase(TExtension::ARB_texture_rectangle);
        }
        else
        {
            // Restore ARB_texture_rectangle in case it was removed during an earlier reset.  As
            // noted above, it doesn't follow the standard for extension directives and is
            // enabled by default.
            extBehavior[TExtension::ARB_texture_rectangle] = EBhEnable;
        }
    }
    // ANGLE_multi_draw and ANGLE_base_vertex_base_instance are always emulated, so remove them if
    // emulation is not enabled.
    if (resources.ANGLE_multi_draw && !compileOptions.emulateGLDrawID)
    {
        extBehavior.erase(TExtension::ANGLE_multi_draw);
    }
    if (resources.ANGLE_base_vertex_base_instance_shader_builtin &&
        !compileOptions.emulateGLBaseVertexBaseInstance)
    {
        extBehavior.erase(TExtension::ANGLE_base_vertex_base_instance_shader_builtin);
    }
}

}  // namespace sh
