Hash :
d1a4b0ff
Author :
Date :
2019-05-04T17:15:42
Remove Feature Level 9_3 code Feature Level 9_3 was originally added for developers creating apps for devices which did not have the DirectX 9 API and are no longer supported. Hence, we can remove the corresponding code in the 11 backend. Bug: angleproject:355462523 Change-Id: I22db15640b435c61db4d82a815edbc65cecc4e12 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5824661 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
//
// Copyright 2014 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// ResourcesHLSL.h:
// Methods for GLSL to HLSL translation for uniforms and interface blocks.
//
#ifndef COMPILER_TRANSLATOR_HLSL_RESOURCESHLSL_H_
#define COMPILER_TRANSLATOR_HLSL_RESOURCESHLSL_H_
#include "compiler/translator/hlsl/OutputHLSL.h"
#include "compiler/translator/hlsl/UtilsHLSL.h"
namespace sh
{
class ImmutableString;
class StructureHLSL;
class TSymbolTable;
class ResourcesHLSL : angle::NonCopyable
{
public:
ResourcesHLSL(StructureHLSL *structureHLSL,
ShShaderOutput outputType,
const std::vector<ShaderVariable> &uniforms,
unsigned int firstUniformRegister);
void reserveUniformRegisters(unsigned int registerCount);
void reserveUniformBlockRegisters(unsigned int registerCount);
void uniformsHeader(TInfoSinkBase &out,
ShShaderOutput outputType,
const ReferencedVariables &referencedUniforms,
TSymbolTable *symbolTable);
// Must be called after uniformsHeader
void samplerMetadataUniforms(TInfoSinkBase &out, unsigned int regIndex);
unsigned int getSamplerCount() const { return mSamplerCount; }
void imageMetadataUniforms(TInfoSinkBase &out, unsigned int regIndex);
TString uniformBlocksHeader(
const ReferencedInterfaceBlocks &referencedInterfaceBlocks,
const std::map<int, const TInterfaceBlock *> &uniformBlockOptimizedMap);
void allocateShaderStorageBlockRegisters(
const ReferencedInterfaceBlocks &referencedInterfaceBlocks);
TString shaderStorageBlocksHeader(const ReferencedInterfaceBlocks &referencedInterfaceBlocks);
// Used for direct index references
static TString InterfaceBlockInstanceString(const ImmutableString &instanceName,
unsigned int arrayIndex);
const std::map<std::string, unsigned int> &getShaderStorageBlockRegisterMap() const
{
return mShaderStorageBlockRegisterMap;
}
const std::map<std::string, unsigned int> &getUniformBlockRegisterMap() const
{
return mUniformBlockRegisterMap;
}
const std::map<std::string, bool> &getUniformBlockUseStructuredBufferMap() const
{
return mUniformBlockUseStructuredBufferMap;
}
const std::map<std::string, unsigned int> &getUniformRegisterMap() const
{
return mUniformRegisterMap;
}
unsigned int getReadonlyImage2DRegisterIndex() const { return mReadonlyImage2DRegisterIndex; }
unsigned int getImage2DRegisterIndex() const { return mImage2DRegisterIndex; }
bool hasImages() const { return mReadonlyImageCount > 0 || mImageCount > 0; }
private:
TString uniformBlockString(const TInterfaceBlock &interfaceBlock,
const TVariable *instanceVariable,
unsigned int registerIndex,
unsigned int arrayIndex);
TString uniformBlockWithOneLargeArrayMemberString(const TInterfaceBlock &interfaceBlock,
const TVariable *instanceVariable,
unsigned int registerIndex,
unsigned int arrayIndex);
TString shaderStorageBlockString(const TInterfaceBlock &interfaceBlock,
const TVariable *instanceVariable,
unsigned int registerIndex,
unsigned int arrayIndex);
TString uniformBlockMembersString(const TInterfaceBlock &interfaceBlock,
TLayoutBlockStorage blockStorage);
TString uniformBlockStructString(const TInterfaceBlock &interfaceBlock);
const ShaderVariable *findUniformByName(const ImmutableString &name) const;
void outputUniform(TInfoSinkBase &out,
const TType &type,
const TVariable &variable,
const unsigned int registerIndex);
void outputAtomicCounterBuffer(TInfoSinkBase &out,
const int binding,
const unsigned int registerIndex);
// Returns the uniform's register index
unsigned int assignUniformRegister(const TType &type,
const ImmutableString &name,
unsigned int *outRegisterCount);
unsigned int assignSamplerInStructUniformRegister(const TType &type,
const TString &name,
unsigned int *outRegisterCount);
void outputHLSLSamplerUniformGroup(
TInfoSinkBase &out,
const HLSLTextureGroup textureGroup,
const TVector<const TVariable *> &group,
const TMap<const TVariable *, TString> &samplerInStructSymbolsToAPINames,
unsigned int *groupTextureRegisterIndex);
void outputHLSLImageUniformIndices(TInfoSinkBase &out,
const TVector<const TVariable *> &group,
unsigned int imageArrayIndex,
unsigned int *groupRegisterCount);
void outputHLSLReadonlyImageUniformGroup(TInfoSinkBase &out,
const HLSLTextureGroup textureGroup,
const TVector<const TVariable *> &group,
unsigned int *groupTextureRegisterIndex);
void outputHLSLImageUniformGroup(TInfoSinkBase &out,
const HLSLRWTextureGroup textureGroup,
const TVector<const TVariable *> &group,
unsigned int *groupTextureRegisterIndex);
unsigned int mUniformRegister;
unsigned int mUniformBlockRegister;
unsigned int mSRVRegister;
unsigned int mUAVRegister;
unsigned int mSamplerCount;
unsigned int mReadonlyImageCount = 0;
unsigned int mImageCount = 0;
StructureHLSL *mStructureHLSL;
ShShaderOutput mOutputType;
const std::vector<ShaderVariable> &mUniforms;
std::map<std::string, unsigned int> mUniformBlockRegisterMap;
std::map<std::string, unsigned int> mShaderStorageBlockRegisterMap;
std::map<std::string, unsigned int> mUniformRegisterMap;
std::map<std::string, bool> mUniformBlockUseStructuredBufferMap;
unsigned int mReadonlyImage2DRegisterIndex = 0;
unsigned int mImage2DRegisterIndex = 0;
};
} // namespace sh
#endif // COMPILER_TRANSLATOR_HLSL_RESOURCESHLSL_H_