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