Edit

kc3-lang/angle/src/compiler/translator/ExtensionBehavior.cpp

Branch :

  • Show log

    Commit

  • Author : Brandon Schade
    Date : 2021-07-21 12:42:56
    Hash : 217acac2
    Message : Vulkan: Add support for EXT_primitive_bounding_box 1. Added support for EXT_primitive_bounding_box extension 2. Renamed shader variable gl_BoundingBoxEXT[] to ANGLEBoundingBox[] Bug: angleproject:3576 Test: dEQP-GLES31.functional.primitive_bounding_box.* Change-Id: I15fa9af50c6fd8e86d225670ddd8eb39f6e65d35 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3053618 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>

  • src/compiler/translator/ExtensionBehavior.cpp
  • //
    // Copyright 2017 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.cpp: Extension name enumeration and data structures for storing extension
    // behavior.
    
    #include "compiler/translator/ExtensionBehavior.h"
    
    #include "common/debug.h"
    
    #include <string.h>
    
    #define LIST_EXTENSIONS(OP)                         \
        OP(ANGLE_base_vertex_base_instance)             \
        OP(ANGLE_multi_draw)                            \
        OP(ANGLE_texture_multisample)                   \
        OP(APPLE_clip_distance)                         \
        OP(ARB_texture_rectangle)                       \
        OP(ARM_shader_framebuffer_fetch)                \
        OP(EXT_blend_func_extended)                     \
        OP(EXT_clip_cull_distance)                      \
        OP(EXT_draw_buffers)                            \
        OP(EXT_frag_depth)                              \
        OP(EXT_geometry_shader)                         \
        OP(OES_geometry_shader)                         \
        OP(OES_shader_io_blocks)                        \
        OP(EXT_shader_io_blocks)                        \
        OP(EXT_gpu_shader5)                             \
        OP(EXT_primitive_bounding_box)                  \
        OP(EXT_shader_framebuffer_fetch)                \
        OP(EXT_shader_framebuffer_fetch_non_coherent)   \
        OP(EXT_shader_non_constant_global_initializers) \
        OP(EXT_shader_texture_lod)                      \
        OP(EXT_shadow_samplers)                         \
        OP(EXT_tessellation_shader)                     \
        OP(EXT_texture_buffer)                          \
        OP(EXT_texture_cube_map_array)                  \
        OP(EXT_YUV_target)                              \
        OP(NV_EGL_stream_consumer_external)             \
        OP(NV_shader_framebuffer_fetch)                 \
        OP(NV_shader_noperspective_interpolation)       \
        OP(OES_EGL_image_external)                      \
        OP(OES_EGL_image_external_essl3)                \
        OP(OES_sample_variables)                        \
        OP(OES_shader_multisample_interpolation)        \
        OP(OES_shader_image_atomic)                     \
        OP(OES_standard_derivatives)                    \
        OP(OES_texture_3D)                              \
        OP(OES_texture_buffer)                          \
        OP(OES_texture_cube_map_array)                  \
        OP(OES_texture_storage_multisample_2d_array)    \
        OP(OVR_multiview)                               \
        OP(OVR_multiview2)                              \
        OP(WEBGL_video_texture)
    
    namespace sh
    {
    
    #define RETURN_EXTENSION_NAME_CASE(ext) \
        case TExtension::ext:               \
            return "GL_" #ext;
    
    const char *GetExtensionNameString(TExtension extension)
    {
        switch (extension)
        {
            LIST_EXTENSIONS(RETURN_EXTENSION_NAME_CASE)
            default:
                UNREACHABLE();
                return "";
        }
    }
    
    #define RETURN_EXTENSION_IF_NAME_MATCHES(ext)  \
        if (strcmp(extWithoutGLPrefix, #ext) == 0) \
        {                                          \
            return TExtension::ext;                \
        }
    
    TExtension GetExtensionByName(const char *extension)
    {
        // If first characters of the extension don't equal "GL_", early out.
        if (strncmp(extension, "GL_", 3) != 0)
        {
            return TExtension::UNDEFINED;
        }
        const char *extWithoutGLPrefix = extension + 3;
    
        LIST_EXTENSIONS(RETURN_EXTENSION_IF_NAME_MATCHES)
    
        return TExtension::UNDEFINED;
    }
    
    const char *GetBehaviorString(TBehavior b)
    {
        switch (b)
        {
            case EBhRequire:
                return "require";
            case EBhEnable:
                return "enable";
            case EBhWarn:
                return "warn";
            case EBhDisable:
                return "disable";
            default:
                return nullptr;
        }
    }
    
    bool IsExtensionEnabled(const TExtensionBehavior &extBehavior, TExtension extension)
    {
        ASSERT(extension != TExtension::UNDEFINED);
        auto iter = extBehavior.find(extension);
        return iter != extBehavior.end() &&
               (iter->second == EBhEnable || iter->second == EBhRequire || iter->second == EBhWarn);
    }
    
    }  // namespace sh