Edit

kc3-lang/angle/src/compiler/translator/DirectiveHandler.h

Branch :

  • Show log

    Commit

  • Author : Mike Schuchardt
    Date : 2023-02-28 21:12:17
    Hash : 4cbe8548
    Message : Expose shader extensions based on ESSL version Previously, all suported extensions were always exposed in the preprocessor. This broke some games which relied on ESSL1-only extension macros not being defined in ESSL3 shaders. This change adds min/max version information to list of extensions so the preprocessor can conditionally expose extensions based on the shader language version, both via the extension name macros and the #extension directive. Test: angle_unittests --gtest_filter="VersionTest.*" Test: angle_end2end_tests --gtest_filter="*ESSL*ExtensionMacros*" Test: Run com.gameloft.android.ANMP.GloftGGHM on Pixel 6 Bug: b/268091452 Change-Id: I2332a6cb964f54c47d23e2ef6b24e99a0b5c8202 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4304907 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mike Schuchardt <mikes@lunarg.com>

  • src/compiler/translator/DirectiveHandler.h
  • //
    // Copyright 2012 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.
    //
    
    #ifndef COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_
    #define COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_
    
    #include "GLSLANG/ShaderLang.h"
    #include "common/angleutils.h"
    #include "compiler/preprocessor/DirectiveHandlerBase.h"
    #include "compiler/preprocessor/Macro.h"
    #include "compiler/translator/ExtensionBehavior.h"
    #include "compiler/translator/Pragma.h"
    
    namespace sh
    {
    class TDiagnostics;
    
    class TDirectiveHandler : public angle::pp::DirectiveHandler, angle::NonCopyable
    {
      public:
        TDirectiveHandler(TExtensionBehavior &extBehavior,
                          TDiagnostics &diagnostics,
                          int &shaderVersion,
                          sh::GLenum shaderType);
        ~TDirectiveHandler() override;
    
        const TPragma &pragma() const { return mPragma; }
        const TExtensionBehavior &extensionBehavior() const { return mExtensionBehavior; }
    
        void handleError(const angle::pp::SourceLocation &loc, const std::string &msg) override;
    
        void handlePragma(const angle::pp::SourceLocation &loc,
                          const std::string &name,
                          const std::string &value,
                          bool stdgl) override;
    
        void handleExtension(const angle::pp::SourceLocation &loc,
                             const std::string &name,
                             const std::string &behavior) override;
    
        void handleVersion(const angle::pp::SourceLocation &loc,
                           int version,
                           ShShaderSpec spec,
                           angle::pp::MacroSet *macro_set) override;
    
      private:
        TPragma mPragma;
        TExtensionBehavior &mExtensionBehavior;
        TDiagnostics &mDiagnostics;
        int &mShaderVersion;
        sh::GLenum mShaderType;
    };
    
    }  // namespace sh
    
    #endif  // COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_