blob: a50b08219b138289715bf3946bb74297b78cd446 [file] [log] [blame]
alokp@chromium.org8b851c62012-06-15 16:25:11 +00001//
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
Geoff Lang0a73dd82014-11-19 16:18:08 -05007#ifndef COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_
8#define COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_
alokp@chromium.org8b851c62012-06-15 16:25:11 +00009
Jamie Madill80d934b2015-02-19 10:16:12 -050010#include "common/angleutils.h"
Geoff Lang17732822013-08-29 13:46:49 -040011#include "compiler/translator/ExtensionBehavior.h"
12#include "compiler/translator/Pragma.h"
daniel@transgaming.comb3077d02013-01-11 04:12:09 +000013#include "compiler/preprocessor/DirectiveHandlerBase.h"
Olli Etuaho5f80d012016-01-11 11:16:01 +020014#include "GLSLANG/ShaderLang.h"
alokp@chromium.org8b851c62012-06-15 16:25:11 +000015
Jamie Madill45bcc782016-11-07 13:58:48 -050016namespace sh
17{
alokp@chromium.org8b851c62012-06-15 16:25:11 +000018class TDiagnostics;
19
Jamie Madillf0d10f82015-03-31 12:56:52 -040020class TDirectiveHandler : public pp::DirectiveHandler, angle::NonCopyable
alokp@chromium.org8b851c62012-06-15 16:25:11 +000021{
22 public:
Olli Etuaho5f80d012016-01-11 11:16:01 +020023 TDirectiveHandler(TExtensionBehavior &extBehavior,
24 TDiagnostics &diagnostics,
25 int &shaderVersion,
26 sh::GLenum shaderType,
Olli Etuaho853dc1a2014-11-06 17:25:48 +020027 bool debugShaderPrecisionSupported);
Corentin Walleze5a1f272015-08-21 02:58:25 +020028 ~TDirectiveHandler() override;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000029
30 const TPragma& pragma() const { return mPragma; }
alokp@chromium.org73bc2982012-06-19 18:48:05 +000031 const TExtensionBehavior& extensionBehavior() const { return mExtensionBehavior; }
alokp@chromium.org8b851c62012-06-15 16:25:11 +000032
Corentin Walleze5a1f272015-08-21 02:58:25 +020033 void handleError(const pp::SourceLocation &loc, const std::string &msg) override;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000034
Corentin Walleze5a1f272015-08-21 02:58:25 +020035 void handlePragma(const pp::SourceLocation &loc,
36 const std::string &name,
37 const std::string &value,
38 bool stdgl) override;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000039
Corentin Walleze5a1f272015-08-21 02:58:25 +020040 void handleExtension(const pp::SourceLocation &loc,
41 const std::string &name,
42 const std::string &behavior) override;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000043
Corentin Walleze5a1f272015-08-21 02:58:25 +020044 void handleVersion(const pp::SourceLocation &loc, int version) override;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000045
46 private:
47 TPragma mPragma;
alokp@chromium.org73bc2982012-06-19 18:48:05 +000048 TExtensionBehavior& mExtensionBehavior;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000049 TDiagnostics& mDiagnostics;
shannon.woods%transgaming.com@gtempaccount.com5524db02013-04-13 03:38:16 +000050 int& mShaderVersion;
Olli Etuaho5f80d012016-01-11 11:16:01 +020051 sh::GLenum mShaderType;
Olli Etuaho853dc1a2014-11-06 17:25:48 +020052 bool mDebugShaderPrecisionSupported;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000053};
54
Jamie Madill45bcc782016-11-07 13:58:48 -050055} // namespace sh
56
Geoff Lang0a73dd82014-11-19 16:18:08 -050057#endif // COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_