diff options
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/compiler/ShHandle.h')
-rw-r--r-- | Source/ThirdParty/ANGLE/src/compiler/ShHandle.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/src/compiler/ShHandle.h b/Source/ThirdParty/ANGLE/src/compiler/ShHandle.h new file mode 100644 index 0000000..5ef5d30 --- /dev/null +++ b/Source/ThirdParty/ANGLE/src/compiler/ShHandle.h @@ -0,0 +1,76 @@ +// +// Copyright (c) 2002-2010 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 _SHHANDLE_INCLUDED_ +#define _SHHANDLE_INCLUDED_ + +// +// Machine independent part of the compiler private objects +// sent as ShHandle to the driver. +// +// This should not be included by driver code. +// + +#include "GLSLANG/ShaderLang.h" + +#include "compiler/InfoSink.h" +#include "compiler/SymbolTable.h" + +class TCompiler; +class TIntermNode; + +// +// The base class used to back handles returned to the driver. +// +class TShHandleBase { +public: + TShHandleBase() { } + virtual ~TShHandleBase() { } + virtual TCompiler* getAsCompiler() { return 0; } +}; + +// +// The base class for the machine dependent compiler to derive from +// for managing object code from the compile. +// +class TCompiler : public TShHandleBase { +public: + TCompiler(EShLanguage l, EShSpec s) : language(l), spec(s) { } + virtual ~TCompiler() { } + + EShLanguage getLanguage() const { return language; } + EShSpec getSpec() const { return spec; } + TSymbolTable& getSymbolTable() { return symbolTable; } + TInfoSink& getInfoSink() { return infoSink; } + + virtual bool compile(TIntermNode* root) = 0; + + virtual TCompiler* getAsCompiler() { return this; } + +protected: + EShLanguage language; + EShSpec spec; + + // Built-in symbol table for the given language, spec, and resources. + // It is preserved from compile-to-compile. + TSymbolTable symbolTable; + // Output sink. + TInfoSink infoSink; +}; + +// +// This is the interface between the machine independent code +// and the machine dependent code. +// +// The machine dependent code should derive from the classes +// above. Then Construct*() and Delete*() will create and +// destroy the machine dependent objects, which contain the +// above machine independent information. +// +TCompiler* ConstructCompiler(EShLanguage, EShSpec); +void DeleteCompiler(TCompiler*); + +#endif // _SHHANDLE_INCLUDED_ |