tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ResourcesHLSL.h (7106B)


      1 //
      2 // Copyright 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 // ResourcesHLSL.h:
      7 //   Methods for GLSL to HLSL translation for uniforms and interface blocks.
      8 //
      9 
     10 #ifndef COMPILER_TRANSLATOR_RESOURCESHLSL_H_
     11 #define COMPILER_TRANSLATOR_RESOURCESHLSL_H_
     12 
     13 #include "compiler/translator/OutputHLSL.h"
     14 #include "compiler/translator/UtilsHLSL.h"
     15 
     16 namespace sh
     17 {
     18 class ImmutableString;
     19 class StructureHLSL;
     20 class TSymbolTable;
     21 
     22 class ResourcesHLSL : angle::NonCopyable
     23 {
     24  public:
     25    ResourcesHLSL(StructureHLSL *structureHLSL,
     26                  ShShaderOutput outputType,
     27                  const std::vector<ShaderVariable> &uniforms,
     28                  unsigned int firstUniformRegister);
     29 
     30    void reserveUniformRegisters(unsigned int registerCount);
     31    void reserveUniformBlockRegisters(unsigned int registerCount);
     32    void uniformsHeader(TInfoSinkBase &out,
     33                        ShShaderOutput outputType,
     34                        const ReferencedVariables &referencedUniforms,
     35                        TSymbolTable *symbolTable);
     36 
     37    // Must be called after uniformsHeader
     38    void samplerMetadataUniforms(TInfoSinkBase &out, unsigned int regIndex);
     39    unsigned int getSamplerCount() const { return mSamplerCount; }
     40    void imageMetadataUniforms(TInfoSinkBase &out, unsigned int regIndex);
     41    TString uniformBlocksHeader(
     42        const ReferencedInterfaceBlocks &referencedInterfaceBlocks,
     43        const std::map<int, const TInterfaceBlock *> &uniformBlockOptimizedMap);
     44    void allocateShaderStorageBlockRegisters(
     45        const ReferencedInterfaceBlocks &referencedInterfaceBlocks);
     46    TString shaderStorageBlocksHeader(const ReferencedInterfaceBlocks &referencedInterfaceBlocks);
     47 
     48    // Used for direct index references
     49    static TString InterfaceBlockInstanceString(const ImmutableString &instanceName,
     50                                                unsigned int arrayIndex);
     51 
     52    const std::map<std::string, unsigned int> &getShaderStorageBlockRegisterMap() const
     53    {
     54        return mShaderStorageBlockRegisterMap;
     55    }
     56 
     57    const std::map<std::string, unsigned int> &getUniformBlockRegisterMap() const
     58    {
     59        return mUniformBlockRegisterMap;
     60    }
     61 
     62    const std::map<std::string, bool> &getUniformBlockUseStructuredBufferMap() const
     63    {
     64        return mUniformBlockUseStructuredBufferMap;
     65    }
     66 
     67    const std::map<std::string, unsigned int> &getUniformRegisterMap() const
     68    {
     69        return mUniformRegisterMap;
     70    }
     71 
     72    unsigned int getReadonlyImage2DRegisterIndex() const { return mReadonlyImage2DRegisterIndex; }
     73    unsigned int getImage2DRegisterIndex() const { return mImage2DRegisterIndex; }
     74    bool hasImages() const { return mReadonlyImageCount > 0 || mImageCount > 0; }
     75 
     76  private:
     77    TString uniformBlockString(const TInterfaceBlock &interfaceBlock,
     78                               const TVariable *instanceVariable,
     79                               unsigned int registerIndex,
     80                               unsigned int arrayIndex);
     81    TString uniformBlockWithOneLargeArrayMemberString(const TInterfaceBlock &interfaceBlock,
     82                                                      const TVariable *instanceVariable,
     83                                                      unsigned int registerIndex,
     84                                                      unsigned int arrayIndex);
     85 
     86    TString shaderStorageBlockString(const TInterfaceBlock &interfaceBlock,
     87                                     const TVariable *instanceVariable,
     88                                     unsigned int registerIndex,
     89                                     unsigned int arrayIndex);
     90    TString uniformBlockMembersString(const TInterfaceBlock &interfaceBlock,
     91                                      TLayoutBlockStorage blockStorage);
     92    TString uniformBlockStructString(const TInterfaceBlock &interfaceBlock);
     93    const ShaderVariable *findUniformByName(const ImmutableString &name) const;
     94 
     95    void outputHLSL4_0_FL9_3Sampler(TInfoSinkBase &out,
     96                                    const TType &type,
     97                                    const TVariable &variable,
     98                                    const unsigned int registerIndex);
     99    void outputUniform(TInfoSinkBase &out,
    100                       const TType &type,
    101                       const TVariable &variable,
    102                       const unsigned int registerIndex);
    103    void outputAtomicCounterBuffer(TInfoSinkBase &out,
    104                                   const int binding,
    105                                   const unsigned int registerIndex);
    106 
    107    // Returns the uniform's register index
    108    unsigned int assignUniformRegister(const TType &type,
    109                                       const ImmutableString &name,
    110                                       unsigned int *outRegisterCount);
    111    unsigned int assignSamplerInStructUniformRegister(const TType &type,
    112                                                      const TString &name,
    113                                                      unsigned int *outRegisterCount);
    114 
    115    void outputHLSLSamplerUniformGroup(
    116        TInfoSinkBase &out,
    117        const HLSLTextureGroup textureGroup,
    118        const TVector<const TVariable *> &group,
    119        const TMap<const TVariable *, TString> &samplerInStructSymbolsToAPINames,
    120        unsigned int *groupTextureRegisterIndex);
    121 
    122    void outputHLSLImageUniformIndices(TInfoSinkBase &out,
    123                                       const TVector<const TVariable *> &group,
    124                                       unsigned int imageArrayIndex,
    125                                       unsigned int *groupRegisterCount);
    126    void outputHLSLReadonlyImageUniformGroup(TInfoSinkBase &out,
    127                                             const HLSLTextureGroup textureGroup,
    128                                             const TVector<const TVariable *> &group,
    129                                             unsigned int *groupTextureRegisterIndex);
    130    void outputHLSLImageUniformGroup(TInfoSinkBase &out,
    131                                     const HLSLRWTextureGroup textureGroup,
    132                                     const TVector<const TVariable *> &group,
    133                                     unsigned int *groupTextureRegisterIndex);
    134 
    135    unsigned int mUniformRegister;
    136    unsigned int mUniformBlockRegister;
    137    unsigned int mSRVRegister;
    138    unsigned int mUAVRegister;
    139    unsigned int mSamplerCount;
    140    unsigned int mReadonlyImageCount = 0;
    141    unsigned int mImageCount         = 0;
    142    StructureHLSL *mStructureHLSL;
    143    ShShaderOutput mOutputType;
    144 
    145    const std::vector<ShaderVariable> &mUniforms;
    146    std::map<std::string, unsigned int> mUniformBlockRegisterMap;
    147    std::map<std::string, unsigned int> mShaderStorageBlockRegisterMap;
    148    std::map<std::string, unsigned int> mUniformRegisterMap;
    149    std::map<std::string, bool> mUniformBlockUseStructuredBufferMap;
    150    unsigned int mReadonlyImage2DRegisterIndex;
    151    unsigned int mImage2DRegisterIndex;
    152 };
    153 }  // namespace sh
    154 
    155 #endif  // COMPILER_TRANSLATOR_RESOURCESHLSL_H_