blob: 2a81ee570748c988e2fa15e1ee04b7a699bac3ec [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"
alokp@chromium.org8b851c62012-06-15 16:25:11 +000014
15class TDiagnostics;
16
Jamie Madillf0d10f82015-03-31 12:56:52 -040017class TDirectiveHandler : public pp::DirectiveHandler, angle::NonCopyable
alokp@chromium.org8b851c62012-06-15 16:25:11 +000018{
19 public:
20 TDirectiveHandler(TExtensionBehavior& extBehavior,
shannon.woods%transgaming.com@gtempaccount.com5524db02013-04-13 03:38:16 +000021 TDiagnostics& diagnostics,
Olli Etuaho853dc1a2014-11-06 17:25:48 +020022 int& shaderVersion,
23 bool debugShaderPrecisionSupported);
alokp@chromium.org8b851c62012-06-15 16:25:11 +000024 virtual ~TDirectiveHandler();
25
26 const TPragma& pragma() const { return mPragma; }
alokp@chromium.org73bc2982012-06-19 18:48:05 +000027 const TExtensionBehavior& extensionBehavior() const { return mExtensionBehavior; }
alokp@chromium.org8b851c62012-06-15 16:25:11 +000028
29 virtual void handleError(const pp::SourceLocation& loc,
30 const std::string& msg);
31
32 virtual void handlePragma(const pp::SourceLocation& loc,
33 const std::string& name,
Zhenyao Mo94ac7b72014-10-15 18:22:08 -070034 const std::string& value,
35 bool stdgl);
alokp@chromium.org8b851c62012-06-15 16:25:11 +000036
37 virtual void handleExtension(const pp::SourceLocation& loc,
38 const std::string& name,
39 const std::string& behavior);
40
41 virtual void handleVersion(const pp::SourceLocation& loc,
42 int version);
43
44 private:
45 TPragma mPragma;
alokp@chromium.org73bc2982012-06-19 18:48:05 +000046 TExtensionBehavior& mExtensionBehavior;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000047 TDiagnostics& mDiagnostics;
shannon.woods%transgaming.com@gtempaccount.com5524db02013-04-13 03:38:16 +000048 int& mShaderVersion;
Olli Etuaho853dc1a2014-11-06 17:25:48 +020049 bool mDebugShaderPrecisionSupported;
alokp@chromium.org8b851c62012-06-15 16:25:11 +000050};
51
Geoff Lang0a73dd82014-11-19 16:18:08 -050052#endif // COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_