1// 2// Copyright (c) 2014 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// UniformHLSL.h: 7// Methods for GLSL to HLSL translation for uniforms and interface blocks. 8// 9 10#ifndef TRANSLATOR_UNIFORMHLSL_H_ 11#define TRANSLATOR_UNIFORMHLSL_H_ 12 13#include "compiler/translator/Types.h" 14 15namespace sh 16{ 17class StructureHLSL; 18 19class UniformHLSL 20{ 21 public: 22 UniformHLSL(StructureHLSL *structureHLSL, TranslatorHLSL *translator); 23 24 void reserveUniformRegisters(unsigned int registerCount); 25 void reserveInterfaceBlockRegisters(unsigned int registerCount); 26 TString uniformsHeader(ShShaderOutput outputType, const ReferencedSymbols &referencedUniforms); 27 TString interfaceBlocksHeader(const ReferencedSymbols &referencedInterfaceBlocks); 28 29 // Used for direct index references 30 static TString interfaceBlockInstanceString(const TInterfaceBlock& interfaceBlock, unsigned int arrayIndex); 31 32 const std::map<std::string, unsigned int> &getInterfaceBlockRegisterMap() const 33 { 34 return mInterfaceBlockRegisterMap; 35 } 36 const std::map<std::string, unsigned int> &getUniformRegisterMap() const 37 { 38 return mUniformRegisterMap; 39 } 40 41 private: 42 TString interfaceBlockString(const TInterfaceBlock &interfaceBlock, unsigned int registerIndex, unsigned int arrayIndex); 43 TString interfaceBlockMembersString(const TInterfaceBlock &interfaceBlock, TLayoutBlockStorage blockStorage); 44 TString interfaceBlockStructString(const TInterfaceBlock &interfaceBlock); 45 const Uniform *findUniformByName(const TString &name) const; 46 47 // Returns the uniform's register index 48 unsigned int declareUniformAndAssignRegister(const TType &type, const TString &name); 49 50 unsigned int mUniformRegister; 51 unsigned int mInterfaceBlockRegister; 52 unsigned int mSamplerRegister; 53 StructureHLSL *mStructureHLSL; 54 ShShaderOutput mOutputType; 55 56 const std::vector<Uniform> &mUniforms; 57 std::map<std::string, unsigned int> mInterfaceBlockRegisterMap; 58 std::map<std::string, unsigned int> mUniformRegisterMap; 59}; 60 61} 62 63#endif // TRANSLATOR_UNIFORMHLSL_H_ 64