Edit

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

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2018-11-27 11:34:27
    Hash : b980c563
    Message : Reformat all cpp and h files. This applies git cl format --full to all ANGLE sources. Bug: angleproject:2986 Change-Id: Ib504e618c1589332a37e97696cdc3515d739308f Reviewed-on: https://chromium-review.googlesource.com/c/1351367 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>

  • src/compiler/translator/ExtensionGLSL.cpp
  • //
    // Copyright (c) 2015 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.
    //
    // ExtensionGLSL.cpp: Implements the TExtensionGLSL class that tracks GLSL extension requirements
    // of shaders.
    
    #include "compiler/translator/ExtensionGLSL.h"
    
    #include "compiler/translator/VersionGLSL.h"
    
    namespace sh
    {
    
    TExtensionGLSL::TExtensionGLSL(ShShaderOutput output)
        : TIntermTraverser(true, false, false), mTargetVersion(ShaderOutputTypeToGLSLVersion(output))
    {}
    
    const std::set<std::string> &TExtensionGLSL::getEnabledExtensions() const
    {
        return mEnabledExtensions;
    }
    
    const std::set<std::string> &TExtensionGLSL::getRequiredExtensions() const
    {
        return mRequiredExtensions;
    }
    
    bool TExtensionGLSL::visitUnary(Visit, TIntermUnary *node)
    {
        checkOperator(node);
    
        return true;
    }
    
    bool TExtensionGLSL::visitAggregate(Visit, TIntermAggregate *node)
    {
        checkOperator(node);
    
        return true;
    }
    
    void TExtensionGLSL::checkOperator(TIntermOperator *node)
    {
        if (mTargetVersion < GLSL_VERSION_130)
        {
            return;
        }
    
        switch (node->getOp())
        {
            case EOpAbs:
                break;
    
            case EOpSign:
                break;
    
            case EOpMix:
                break;
    
            case EOpFloatBitsToInt:
            case EOpFloatBitsToUint:
            case EOpIntBitsToFloat:
            case EOpUintBitsToFloat:
                if (mTargetVersion < GLSL_VERSION_330)
                {
                    // Bit conversion functions cannot be emulated.
                    mRequiredExtensions.insert("GL_ARB_shader_bit_encoding");
                }
                break;
    
            case EOpPackSnorm2x16:
            case EOpPackHalf2x16:
            case EOpUnpackSnorm2x16:
            case EOpUnpackHalf2x16:
                if (mTargetVersion < GLSL_VERSION_420)
                {
                    mEnabledExtensions.insert("GL_ARB_shading_language_packing");
    
                    if (mTargetVersion < GLSL_VERSION_330)
                    {
                        // floatBitsToUint and uintBitsToFloat are needed to emulate
                        // packHalf2x16 and unpackHalf2x16 respectively and cannot be
                        // emulated themselves.
                        mRequiredExtensions.insert("GL_ARB_shader_bit_encoding");
                    }
                }
                break;
    
            case EOpPackUnorm2x16:
            case EOpUnpackUnorm2x16:
                if (mTargetVersion < GLSL_VERSION_410)
                {
                    mEnabledExtensions.insert("GL_ARB_shading_language_packing");
                }
                break;
    
            default:
                break;
        }
    }
    
    }  // namespace sh