1//
2// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#ifndef COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_
8#define COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_
9
10#include "GLSLANG/ShaderLang.h"
11#include "common/angleutils.h"
12#include "compiler/preprocessor/DirectiveHandlerBase.h"
13#include "compiler/translator/ExtensionBehavior.h"
14#include "compiler/translator/Pragma.h"
15
16namespace sh
17{
18class TDiagnostics;
19
20class TDirectiveHandler : public angle::pp::DirectiveHandler, angle::NonCopyable
21{
22 public:
23 TDirectiveHandler(TExtensionBehavior &extBehavior,
24 TDiagnostics &diagnostics,
25 int &shaderVersion,
26 sh::GLenum shaderType,
27 bool debugShaderPrecisionSupported);
28 ~TDirectiveHandler() override;
29
30 const TPragma &pragma() const { return mPragma; }
31 const TExtensionBehavior &extensionBehavior() const { return mExtensionBehavior; }
32
33 void handleError(const angle::pp::SourceLocation &loc, const std::string &msg) override;
34
35 void handlePragma(const angle::pp::SourceLocation &loc,
36 const std::string &name,
37 const std::string &value,
38 bool stdgl) override;
39
40 void handleExtension(const angle::pp::SourceLocation &loc,
41 const std::string &name,
42 const std::string &behavior) override;
43
44 void handleVersion(const angle::pp::SourceLocation &loc, int version) override;
45
46 private:
47 TPragma mPragma;
48 TExtensionBehavior &mExtensionBehavior;
49 TDiagnostics &mDiagnostics;
50 int &mShaderVersion;
51 sh::GLenum mShaderType;
52 bool mDebugShaderPrecisionSupported;
53};
54
55} // namespace sh
56
57#endif // COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_
58