14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 2b1f45b701f20ba4b45484f98fc9e0ca6b6239dd6Nicolas Capens// Copyright (c) 2002-2014 The ANGLE Project Authors. All rights reserved. 34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file. 54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#ifndef COMPILER_OUTPUTHLSL_H_ 84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#define COMPILER_OUTPUTHLSL_H_ 94f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 104e89d233e5f83ad7de85f010d8e6e39706ef1830alokp@chromium.org#include <list> 114e89d233e5f83ad7de85f010d8e6e39706ef1830alokp@chromium.org#include <set> 12652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com#include <map> 13652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com 14f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include <GLES3/gl3.h> 15652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com#include <GLES2/gl2.h> 164e89d233e5f83ad7de85f010d8e6e39706ef1830alokp@chromium.org 1717732823f9c21bdba9cc51ffaceb545ce3857a8cGeoff Lang#include "compiler/translator/intermediate.h" 186b9cb25980022d0c792d858bc6f6500c00a6c29dJamie Madill#include "compiler/translator/ParseContext.h" 19834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill#include "common/shadervars.h" 204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comnamespace sh 224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 23f8f8f362f6c1c9bf9f72c6d094327ed6dc274665daniel@transgaming.comclass UnfoldShortCircuit; 24b587598cb8771d0da8ed94ddbbd9dc038117ce59daniel@transgaming.com 254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass OutputHLSL : public TIntermTraverser 264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com public: 2818b4c4b56a1a31e1b1c9fccf01f1ffd46504ead9shannon.woods%transgaming.com@gtempaccount.com OutputHLSL(TParseContext &context, const ShBuiltInResources& resources, ShShaderOutput outputType); 29b587598cb8771d0da8ed94ddbbd9dc038117ce59daniel@transgaming.com ~OutputHLSL(); 304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 31950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com void output(); 32950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com 33b587598cb8771d0da8ed94ddbbd9dc038117ce59daniel@transgaming.com TInfoSinkBase &getBodyStream(); 34834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill const std::vector<gl::Uniform> &getUniforms(); 35834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill const std::vector<gl::InterfaceBlock> &getInterfaceBlocks() const; 36834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill const std::vector<gl::Attribute> &getOutputVariables() const; 37834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill const std::vector<gl::Attribute> &getAttributes() const; 38834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill const std::vector<gl::Varying> &getVaryings() const; 39b587598cb8771d0da8ed94ddbbd9dc038117ce59daniel@transgaming.com 40a2a95e7c9bf6150361a92ba59c3f7cee29daf967daniel@transgaming.com TString typeString(const TType &type); 41fb256be9650d869c9df366505e11de2af86dbee5shannon.woods@transgaming.com TString textureString(const TType &type); 42cb127d3d185a5073962cc58bb13e1ee8b5458be7Nicolas Capens TString samplerString(const TType &type); 431886fd4f172fb5b2c8e87372ac0de361f14935a5shannon.woods%transgaming.com@gtempaccount.com TString interpolationString(TQualifier qualifier); 4498493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString structureString(const TStructure &structure, bool useHLSLRowMajorPacking, bool useStd140Packing); 4598493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString structureTypeName(const TStructure &structure, bool useHLSLRowMajorPacking, bool useStd140Packing); 46b587598cb8771d0da8ed94ddbbd9dc038117ce59daniel@transgaming.com static TString qualifierString(TQualifier qualifier); 47b587598cb8771d0da8ed94ddbbd9dc038117ce59daniel@transgaming.com static TString arrayString(const TType &type); 48b587598cb8771d0da8ed94ddbbd9dc038117ce59daniel@transgaming.com static TString initializer(const TType &type); 49c72c6416819435fd34ddc265b2df66f0a4289aa1daniel@transgaming.com static TString decorate(const TString &string); // Prepends an underscore to avoid naming clashes 506575602ea68a323f4255c5c968f94c6830ae68a0apatrick@chromium.org static TString decorateUniform(const TString &string, const TType &type); 5198493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill static TString decorateField(const TString &string, const TStructure &structure); 52b587598cb8771d0da8ed94ddbbd9dc038117ce59daniel@transgaming.com 53950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com protected: 544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com void header(); 554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 56950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com // Visit AST nodes and output their code to the body stream 574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com void visitSymbol(TIntermSymbol*); 589093114b5502f732727aac41e456d0cfbc092c5aJamie Madill void visitRaw(TIntermRaw*); 594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com void visitConstantUnion(TIntermConstantUnion*); 604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool visitBinary(Visit visit, TIntermBinary*); 614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool visitUnary(Visit visit, TIntermUnary*); 624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool visitSelection(Visit visit, TIntermSelection*); 634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool visitAggregate(Visit visit, TIntermAggregate*); 644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool visitLoop(Visit visit, TIntermLoop*); 654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool visitBranch(Visit visit, TIntermBranch*); 664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6744fffeef7176523d4f1cbf01e2c059f74f99764ddaniel@transgaming.com void traverseStatements(TIntermNode *node); 68b587598cb8771d0da8ed94ddbbd9dc038117ce59daniel@transgaming.com bool isSingleStatement(TIntermNode *node); 694a35ef2d4d1839d6fa008fd8471ebc25f1d2b665daniel@transgaming.com bool handleExcessiveLoop(TIntermLoop *node); 7067de6d6c6d33179fd0a8da65b5f629c29095cabbdaniel@transgaming.com void outputTriplet(Visit visit, const TString &preString, const TString &inString, const TString &postString); 710f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org void outputLineDirective(int line); 72005c73922fdfeb1593b1e3ffd25f825d883d9c84daniel@transgaming.com TString argumentString(const TIntermSymbol *symbol); 730b6b834a6d018e581737619da65cf0cfe26a699ddaniel@transgaming.com int vectorSize(const TType &type) const; 744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 7567de6d6c6d33179fd0a8da65b5f629c29095cabbdaniel@transgaming.com void addConstructor(const TType &type, const TString &name, const TIntermSequence *parameters); 76a54da4e5a1e9f987e9ce2f09c03fe0a4c7f3b552daniel@transgaming.com const ConstantUnion *writeConstantUnion(const TType &type, const ConstantUnion *constUnion); 776369186708281a8e97b1d0e81198a192bc725dd2daniel@transgaming.com 78bfa91f47c6fc2fb1853f80319118434c1097086dJamie Madill TString structNameString(const TStructure &structure); 79a2a95e7c9bf6150361a92ba59c3f7cee29daf967daniel@transgaming.com 80950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com TParseContext &mContext; 81b73964e328243021db10ecd98e3e124e82522c43shannon.woods@transgaming.com const ShShaderOutput mOutputType; 82f8f8f362f6c1c9bf9f72c6d094327ed6dc274665daniel@transgaming.com UnfoldShortCircuit *mUnfoldShortCircuit; 83f9ef107fefddd1778f72ec3de8514c1c330dce97daniel@transgaming.com bool mInsideFunction; 84950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com 85950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com // Output streams 86950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com TInfoSinkBase mHeader; 87950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com TInfoSinkBase mBody; 88950f993b889937fe22d9481143cdb83cb729b772daniel@transgaming.com TInfoSinkBase mFooter; 89d91cfe7e3c01a557fb1c0dc8bf0655c8a5b1d34bdaniel@transgaming.com 908803b85f6ea4d2dcc8bf04ce3bbc4d52fd469659daniel@transgaming.com typedef std::map<TString, TIntermSymbol*> ReferencedSymbols; 918803b85f6ea4d2dcc8bf04ce3bbc4d52fd469659daniel@transgaming.com ReferencedSymbols mReferencedUniforms; 924a643ae4fa6ec736ebe2693552aed80bcc316904shannonwoods@chromium.org ReferencedSymbols mReferencedInterfaceBlocks; 938803b85f6ea4d2dcc8bf04ce3bbc4d52fd469659daniel@transgaming.com ReferencedSymbols mReferencedAttributes; 948803b85f6ea4d2dcc8bf04ce3bbc4d52fd469659daniel@transgaming.com ReferencedSymbols mReferencedVaryings; 9546131a3832c3478c1e0b48dbf6284799f3f86f04Jamie Madill ReferencedSymbols mReferencedOutputVariables; 9686f7c9df3768b5d2e27be6e0b40c42259038e228daniel@transgaming.com 97e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens struct TextureFunction 98e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens { 9975fb4752d3849b4d5517e4c3e83f8266d327834bNicolas Capens enum Method 100e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens { 10175fb4752d3849b4d5517e4c3e83f8266d327834bNicolas Capens IMPLICIT, // Mipmap LOD determined implicitly (standard lookup) 102e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens BIAS, 103e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens LOD, 10475fb4752d3849b4d5517e4c3e83f8266d327834bNicolas Capens LOD0, 10584cfa1240c5037ff849bcaf7226d0e2a21ce7628Nicolas Capens LOD0BIAS, 106fc01454b2edbed476b82fb319ae06117b70719f8Nicolas Capens SIZE, // textureSize() 107d11d549f84aa5804363c83fe4af8e7ceec140f41Nicolas Capens FETCH, 108d11d549f84aa5804363c83fe4af8e7ceec140f41Nicolas Capens GRAD 109e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens }; 110e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens 111e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens TBasicType sampler; 112e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens int coords; 113e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens bool proj; 114b1f45b701f20ba4b45484f98fc9e0ca6b6239dd6Nicolas Capens bool offset; 11575fb4752d3849b4d5517e4c3e83f8266d327834bNicolas Capens Method method; 116e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens 117e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens TString name() const; 118e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens 119e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens bool operator<(const TextureFunction &rhs) const; 120e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens }; 121e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens 122e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens typedef std::set<TextureFunction> TextureFunctionSet; 123e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens 124d91cfe7e3c01a557fb1c0dc8bf0655c8a5b1d34bdaniel@transgaming.com // Parameters determining what goes in the header output 125e0ba27a28ad621c56f7ce5b514ad0fa2da9ab760Nicolas Capens TextureFunctionSet mUsesTexture; 126aa8b5cfffb9b4f6d188f712f8e17a23f3707b2d2shannon.woods%transgaming.com@gtempaccount.com bool mUsesFragColor; 127aa8b5cfffb9b4f6d188f712f8e17a23f3707b2d2shannon.woods%transgaming.com@gtempaccount.com bool mUsesFragData; 128d7c9810183ab27a3c39f28f38428475f1c0c018ddaniel@transgaming.com bool mUsesDepthRange; 1294af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com bool mUsesFragCoord; 1304af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com bool mUsesPointCoord; 1314af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com bool mUsesFrontFacing; 1324af7acca9d3952b7e6ae3d4d788325bffbd710c0daniel@transgaming.com bool mUsesPointSize; 1332aeb26a4f6e21a923415eb00499795b63a17ef76Jamie Madill bool mUsesFragDepth; 134d7c9810183ab27a3c39f28f38428475f1c0c018ddaniel@transgaming.com bool mUsesXor; 135d7c9810183ab27a3c39f28f38428475f1c0c018ddaniel@transgaming.com bool mUsesMod1; 1364229f59f29b6f9134f07d4880e1573bdd0135773daniel@transgaming.com bool mUsesMod2v; 1374229f59f29b6f9134f07d4880e1573bdd0135773daniel@transgaming.com bool mUsesMod2f; 1384229f59f29b6f9134f07d4880e1573bdd0135773daniel@transgaming.com bool mUsesMod3v; 1394229f59f29b6f9134f07d4880e1573bdd0135773daniel@transgaming.com bool mUsesMod3f; 1404229f59f29b6f9134f07d4880e1573bdd0135773daniel@transgaming.com bool mUsesMod4v; 1414229f59f29b6f9134f07d4880e1573bdd0135773daniel@transgaming.com bool mUsesMod4f; 1420bbb031dc8f797a92efc3dcf758758fde5a9aceedaniel@transgaming.com bool mUsesFaceforward1; 1430bbb031dc8f797a92efc3dcf758758fde5a9aceedaniel@transgaming.com bool mUsesFaceforward2; 1440bbb031dc8f797a92efc3dcf758758fde5a9aceedaniel@transgaming.com bool mUsesFaceforward3; 1450bbb031dc8f797a92efc3dcf758758fde5a9aceedaniel@transgaming.com bool mUsesFaceforward4; 14635342dc427d7230847e8b06dbb063c5752ddd13fdaniel@transgaming.com bool mUsesAtan2_1; 14735342dc427d7230847e8b06dbb063c5752ddd13fdaniel@transgaming.com bool mUsesAtan2_2; 14835342dc427d7230847e8b06dbb063c5752ddd13fdaniel@transgaming.com bool mUsesAtan2_3; 14935342dc427d7230847e8b06dbb063c5752ddd13fdaniel@transgaming.com bool mUsesAtan2_4; 1503c9eeb979f4b2431e2303d4a74cd1498d474f6a3Jamie Madill bool mUsesDiscardRewriting; 151655fe36e254e7f11e79a4fad4febd5d768194c35Nicolas Capens bool mUsesNestedBreak; 152005c73922fdfeb1593b1e3ffd25f825d883d9c84daniel@transgaming.com 153aa8b5cfffb9b4f6d188f712f8e17a23f3707b2d2shannon.woods%transgaming.com@gtempaccount.com int mNumRenderTargets; 154aa8b5cfffb9b4f6d188f712f8e17a23f3707b2d2shannon.woods%transgaming.com@gtempaccount.com 155a2a95e7c9bf6150361a92ba59c3f7cee29daf967daniel@transgaming.com typedef std::set<TString> Constructors; 156a2a95e7c9bf6150361a92ba59c3f7cee29daf967daniel@transgaming.com Constructors mConstructors; 1576369186708281a8e97b1d0e81198a192bc725dd2daniel@transgaming.com 158a2a95e7c9bf6150361a92ba59c3f7cee29daf967daniel@transgaming.com typedef std::set<TString> StructNames; 159a2a95e7c9bf6150361a92ba59c3f7cee29daf967daniel@transgaming.com StructNames mStructNames; 1606369186708281a8e97b1d0e81198a192bc725dd2daniel@transgaming.com 161a2a95e7c9bf6150361a92ba59c3f7cee29daf967daniel@transgaming.com typedef std::list<TString> StructDeclarations; 162a2a95e7c9bf6150361a92ba59c3f7cee29daf967daniel@transgaming.com StructDeclarations mStructDeclarations; 1636369186708281a8e97b1d0e81198a192bc725dd2daniel@transgaming.com 164b6ef8f11de1a1c3359aa7c78b82be0dd550b1c5edaniel@transgaming.com int mUniqueIndex; // For creating unique names 16589431aa5ad22a82566bdd4f60465d43bc4f5cf13daniel@transgaming.com 16689431aa5ad22a82566bdd4f60465d43bc4f5cf13daniel@transgaming.com bool mContainsLoopDiscontinuity; 16789431aa5ad22a82566bdd4f60465d43bc4f5cf13daniel@transgaming.com bool mOutputLod0Function; 168e11100ce03a9555ab59dd8913f0002e41b07965cdaniel@transgaming.com bool mInsideDiscontinuousLoop; 169655fe36e254e7f11e79a4fad4febd5d768194c35Nicolas Capens int mNestedLoopDepth; 170e9b3f60a1fce262cb1f94db7f7fe4475b4bbab47daniel@transgaming.com 171e9b3f60a1fce262cb1f94db7f7fe4475b4bbab47daniel@transgaming.com TIntermSymbol *mExcessiveLoopIndex; 172652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com 173652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com int mUniformRegister; 1744a643ae4fa6ec736ebe2693552aed80bcc316904shannonwoods@chromium.org int mInterfaceBlockRegister; 175652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com int mSamplerRegister; 176574d9dd0ad5e9edabd895f5eecaa7e04c06d0e87Jamie Madill int mPaddingCounter; 177652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com 178652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com TString registerString(TIntermSymbol *operand); 179652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com int samplerRegister(TIntermSymbol *sampler); 180652468c48502fffb8f25a8dbc97f93ed61498de4daniel@transgaming.com int uniformRegister(TIntermSymbol *uniform); 181834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill void declareInterfaceBlockField(const TType &type, const TString &name, std::vector<gl::InterfaceBlockField>& output); 182834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill gl::Uniform declareUniformToList(const TType &type, const TString &name, int registerIndex, std::vector<gl::Uniform>& output); 183f4d9feff26b463102001c10a3dbd84b7b538d049daniel@transgaming.com void declareUniform(const TType &type, const TString &name, int index); 184834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill void declareVaryingToList(const TType &type, TQualifier baseTypeQualifier, const TString &name, std::vector<gl::Varying>& fieldsOut); 1854430b0d31979d8c3993f8da50c2ca84974ebb1fdshannonwoods@chromium.org 186c2141fb314ecb6aa36861de57b7744649e51ea1bJamie Madill // Returns the uniform's register index 187c2141fb314ecb6aa36861de57b7744649e51ea1bJamie Madill int declareUniformAndAssignRegister(const TType &type, const TString &name); 188c2141fb314ecb6aa36861de57b7744649e51ea1bJamie Madill 18998493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString interfaceBlockFieldString(const TInterfaceBlock &interfaceBlock, const TField &field); 190e429ab712f027bb4729a1748c0abe8d971dbca1ashannonwoods@chromium.org TString decoratePrivate(const TString &privateText); 19198493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString interfaceBlockStructNameString(const TInterfaceBlock &interfaceBlockType); 19298493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString interfaceBlockInstanceString(const TInterfaceBlock& interfaceBlock, unsigned int arrayIndex); 19398493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString interfaceBlockFieldTypeString(const TField &field, TLayoutBlockStorage blockStorage); 19498493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString interfaceBlockFieldString(const TInterfaceBlock &interfaceBlock, TLayoutBlockStorage blockStorage); 19598493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString interfaceBlockStructString(const TInterfaceBlock &interfaceBlock); 19698493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString interfaceBlockString(const TInterfaceBlock &interfaceBlock, unsigned int registerIndex, unsigned int arrayIndex); 197574d9dd0ad5e9edabd895f5eecaa7e04c06d0e87Jamie Madill TString std140PrePaddingString(const TType &type, int *elementIndex); 198e4075c9c8be9c7b7616dcb60d6453e40e5f87d4aJamie Madill TString std140PostPaddingString(const TType &type, bool useHLSLRowMajorPacking); 19998493ddc137922a6ce5c8b22ffde0ed2a1fa2b3dJamie Madill TString structInitializerString(int indent, const TStructure &structure, const TString &rhsStructName); 2006f273e3a08ecbb4e59ae6cd7ea857114464b8e6eshannon.woods%transgaming.com@gtempaccount.com 201f4d9feff26b463102001c10a3dbd84b7b538d049daniel@transgaming.com static GLenum glVariableType(const TType &type); 202fe3c0ef057a5ba7c6f942c2d399e90efb6a2d81fshannon.woods@transgaming.com static GLenum glVariablePrecision(const TType &type); 2036f273e3a08ecbb4e59ae6cd7ea857114464b8e6eshannon.woods%transgaming.com@gtempaccount.com static bool isVaryingIn(TQualifier qualifier); 2046f273e3a08ecbb4e59ae6cd7ea857114464b8e6eshannon.woods%transgaming.com@gtempaccount.com static bool isVaryingOut(TQualifier qualifier); 2056f273e3a08ecbb4e59ae6cd7ea857114464b8e6eshannon.woods%transgaming.com@gtempaccount.com static bool isVarying(TQualifier qualifier); 206f4d9feff26b463102001c10a3dbd84b7b538d049daniel@transgaming.com 207834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill std::vector<gl::Uniform> mActiveUniforms; 208834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill std::vector<gl::InterfaceBlock> mActiveInterfaceBlocks; 209834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill std::vector<gl::Attribute> mActiveOutputVariables; 210834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill std::vector<gl::Attribute> mActiveAttributes; 211834e8b7715c25e299c07c9d63f5be0a0ee6c5856Jamie Madill std::vector<gl::Varying> mActiveVaryings; 212e4075c9c8be9c7b7616dcb60d6453e40e5f87d4aJamie Madill std::map<TString, int> mStd140StructElementIndexes; 213570e04d8701e37ce3a4ee485afd0f0c4299ff23dJamie Madill std::map<TIntermTyped*, TString> mFlaggedStructMappedNames; 214570e04d8701e37ce3a4ee485afd0f0c4299ff23dJamie Madill std::map<TIntermTyped*, TString> mFlaggedStructOriginalNames; 215570e04d8701e37ce3a4ee485afd0f0c4299ff23dJamie Madill 216570e04d8701e37ce3a4ee485afd0f0c4299ff23dJamie Madill void makeFlaggedStructMaps(const std::vector<TIntermTyped *> &flaggedStructs); 2174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}; 2184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 2194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#endif // COMPILER_OUTPUTHLSL_H_ 221