1// 2// Copyright (c) 2002-2011 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#include "compiler/TranslatorESSL.h" 8 9#include "compiler/OutputESSL.h" 10 11TranslatorESSL::TranslatorESSL(ShShaderType type, ShShaderSpec spec) 12 : TCompiler(type, spec) { 13} 14 15void TranslatorESSL::translate(TIntermNode* root) { 16 TInfoSinkBase& sink = getInfoSink().obj; 17 18 // Write built-in extension behaviors. 19 writeExtensionBehavior(); 20 21 // Write emulated built-in functions if needed. 22 getBuiltInFunctionEmulator().OutputEmulatedFunctionDefinition( 23 sink, getShaderType() == SH_FRAGMENT_SHADER); 24 25 // Write array bounds clamping emulation if needed. 26 getArrayBoundsClamper().OutputClampingFunctionDefinition(sink); 27 28 // Write translated shader. 29 TOutputESSL outputESSL(sink, getArrayIndexClampingStrategy(), getHashFunction(), getNameMap(), getSymbolTable()); 30 root->traverse(&outputESSL); 31} 32 33void TranslatorESSL::writeExtensionBehavior() { 34 TInfoSinkBase& sink = getInfoSink().obj; 35 const TExtensionBehavior& extensionBehavior = getExtensionBehavior(); 36 for (TExtensionBehavior::const_iterator iter = extensionBehavior.begin(); 37 iter != extensionBehavior.end(); ++iter) { 38 if (iter->second != EBhUndefined) { 39 sink << "#extension " << iter->first << " : " 40 << getBehaviorString(iter->second) << "\n"; 41 } 42 } 43} 44