webkit  2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
sh::OutputHLSL Class Reference

#include <OutputHLSL.h>

Inheritance diagram for sh::OutputHLSL:
TIntermTraverser angle::NonCopyable

Classes

struct  ArrayHelperFunction
 
struct  HelperFunction
 
struct  StructEqualityFunction
 

Public Member Functions

 OutputHLSL (sh::GLenum shaderType, int shaderVersion, const TExtensionBehavior &extensionBehavior, const char *sourcePath, ShShaderOutput outputType, int numRenderTargets, const std::vector< Uniform > &uniforms, ShCompileOptions compileOptions)
 
 ~OutputHLSL ()
 
void output (TIntermNode *treeRoot, TInfoSinkBase &objSink)
 
const std::map< std::string, unsigned int > & getInterfaceBlockRegisterMap () const
 
const std::map< std::string, unsigned int > & getUniformRegisterMap () const
 
TInfoSinkBase & getInfoSink ()
 
- Public Member Functions inherited from TIntermTraverser
 POOL_ALLOCATOR_NEW_DELETE ()
 
 TIntermTraverser (bool preVisit, bool inVisit, bool postVisit)
 
virtual ~TIntermTraverser ()
 
virtual void traverseSymbol (TIntermSymbol *node)
 
virtual void traverseRaw (TIntermRaw *node)
 
virtual void traverseConstantUnion (TIntermConstantUnion *node)
 
virtual void traverseSwizzle (TIntermSwizzle *node)
 
virtual void traverseBinary (TIntermBinary *node)
 
virtual void traverseUnary (TIntermUnary *node)
 
virtual void traverseTernary (TIntermTernary *node)
 
virtual void traverseIfElse (TIntermIfElse *node)
 
virtual void traverseSwitch (TIntermSwitch *node)
 
virtual void traverseCase (TIntermCase *node)
 
virtual void traverseFunctionDefinition (TIntermFunctionDefinition *node)
 
virtual void traverseAggregate (TIntermAggregate *node)
 
virtual void traverseBlock (TIntermBlock *node)
 
virtual void traverseLoop (TIntermLoop *node)
 
virtual void traverseBranch (TIntermBranch *node)
 
int getMaxDepth () const
 
void updateTree ()
 
void useTemporaryIndex (unsigned int *temporaryIndex)
 

Static Public Member Functions

static TString initializer (const TType &type)
 
static bool canWriteAsHLSLLiteral (TIntermTyped *expression)
 
- Static Public Member Functions inherited from TIntermTraverser
static TString hash (const TString &name, ShHashFunction64 hashFunction)
 

Protected Member Functions

void header (TInfoSinkBase &out, const BuiltInFunctionEmulator *builtInFunctionEmulator)
 
void visitSymbol (TIntermSymbol *) override
 
void visitRaw (TIntermRaw *) override
 
void visitConstantUnion (TIntermConstantUnion *) override
 
bool visitSwizzle (Visit visit, TIntermSwizzle *node) override
 
bool visitBinary (Visit visit, TIntermBinary *) override
 
bool visitUnary (Visit visit, TIntermUnary *) override
 
bool visitTernary (Visit visit, TIntermTernary *) override
 
bool visitIfElse (Visit visit, TIntermIfElse *) override
 
bool visitSwitch (Visit visit, TIntermSwitch *) override
 
bool visitCase (Visit visit, TIntermCase *) override
 
bool visitFunctionDefinition (Visit visit, TIntermFunctionDefinition *node) override
 
bool visitAggregate (Visit visit, TIntermAggregate *) override
 
bool visitBlock (Visit visit, TIntermBlock *node) override
 
bool visitLoop (Visit visit, TIntermLoop *) override
 
bool visitBranch (Visit visit, TIntermBranch *) override
 
bool isSingleStatement (TIntermNode *node)
 
bool handleExcessiveLoop (TInfoSinkBase &out, TIntermLoop *node)
 
void outputTriplet (TInfoSinkBase &out, Visit visit, const char *preString, const char *inString, const char *postString)
 
void outputLineDirective (TInfoSinkBase &out, int line)
 
TString argumentString (const TIntermSymbol *symbol)
 
int vectorSize (const TType &type) const
 
void outputConstructor (TInfoSinkBase &out, Visit visit, const TType &type, const char *name, const TIntermSequence *parameters)
 
const TConstantUnion * writeConstantUnion (TInfoSinkBase &out, const TType &type, const TConstantUnion *constUnion)
 
void outputEqual (Visit visit, const TType &type, TOperator op, TInfoSinkBase &out)
 
void writeEmulatedFunctionTriplet (TInfoSinkBase &out, Visit visit, const char *preStr)
 
void makeFlaggedStructMaps (const std::vector< TIntermTyped *> &flaggedStructs)
 
bool writeSameSymbolInitializer (TInfoSinkBase &out, TIntermSymbol *symbolNode, TIntermTyped *expression)
 
bool writeConstantInitialization (TInfoSinkBase &out, TIntermSymbol *symbolNode, TIntermTyped *expression)
 
void writeDeferredGlobalInitializers (TInfoSinkBase &out)
 
void writeIfElse (TInfoSinkBase &out, TIntermIfElse *node)
 
TString addStructEqualityFunction (const TStructure &structure)
 
TString addArrayEqualityFunction (const TType &type)
 
TString addArrayAssignmentFunction (const TType &type)
 
TString addArrayConstructIntoFunction (const TType &type)
 
void ensureStructDefined (const TType &type)
 
TString structInitializerString (int indent, const TStructure &structure, const TString &rhsStructName)
 
- Protected Member Functions inherited from TIntermTraverser
void incrementDepth (TIntermNode *current)
 
void decrementDepth ()
 
TIntermNode * getParentNode ()
 
TIntermNode * getAncestorNode (unsigned int n)
 
void pushParentBlock (TIntermBlock *node)
 
void incrementParentBlockPos ()
 
void popParentBlock ()
 
bool parentNodeIsBlock ()
 
void insertStatementsInParentBlock (const TIntermSequence &insertions)
 
void insertStatementsInParentBlock (const TIntermSequence &insertionsBefore, const TIntermSequence &insertionsAfter)
 
void insertStatementInParentBlock (TIntermNode *statement)
 
TIntermSymbol * createTempSymbol (const TType &type, TQualifier qualifier)
 
TIntermSymbol * createTempSymbol (const TType &type)
 
TIntermAggregate * createTempDeclaration (const TType &type)
 
TIntermAggregate * createTempInitDeclaration (TIntermTyped *initializer, TQualifier qualifier)
 
TIntermAggregate * createTempInitDeclaration (TIntermTyped *initializer)
 
TIntermBinary * createTempAssignment (TIntermTyped *rightNode)
 
void nextTemporaryIndex ()
 
void clearReplacementQueue ()
 
void queueReplacement (TIntermNode *original, TIntermNode *replacement, OriginalNode originalStatus)
 
void queueReplacementWithParent (TIntermNode *parent, TIntermNode *original, TIntermNode *replacement, OriginalNode originalStatus)
 

Protected Attributes

sh::GLenum mShaderType
 
int mShaderVersion
 
const TExtensionBehavior & mExtensionBehavior
 
const char * mSourcePath
 
const ShShaderOutput mOutputType
 
ShCompileOptions mCompileOptions
 
bool mInsideFunction
 
TInfoSinkBase mHeader
 
TInfoSinkBase mBody
 
TInfoSinkBase mFooter
 
std::stack< TInfoSinkBase * > mInfoSinkStack
 
ReferencedSymbols mReferencedUniforms
 
ReferencedSymbols mReferencedInterfaceBlocks
 
ReferencedSymbols mReferencedAttributes
 
ReferencedSymbols mReferencedVaryings
 
ReferencedSymbols mReferencedOutputVariables
 
StructureHLSL * mStructureHLSL
 
UniformHLSL * mUniformHLSL
 
TextureFunctionHLSL * mTextureFunctionHLSL
 
bool mUsesFragColor
 
bool mUsesFragData
 
bool mUsesDepthRange
 
bool mUsesFragCoord
 
bool mUsesPointCoord
 
bool mUsesFrontFacing
 
bool mUsesPointSize
 
bool mUsesInstanceID
 
bool mUsesVertexID
 
bool mUsesFragDepth
 
bool mUsesXor
 
bool mUsesDiscardRewriting
 
bool mUsesNestedBreak
 
bool mRequiresIEEEStrictCompiling
 
int mNumRenderTargets
 
int mUniqueIndex
 
CallDAG mCallDag
 
MetadataList mASTMetadataList
 
ASTMetadataHLSL * mCurrentFunctionMetadata
 
bool mOutputLod0Function
 
bool mInsideDiscontinuousLoop
 
int mNestedLoopDepth
 
TIntermSymbol * mExcessiveLoopIndex
 
std::map< TIntermTyped *, TString > mFlaggedStructMappedNames
 
std::map< TIntermTyped *, TString > mFlaggedStructOriginalNames
 
std::vector< HelperFunction * > mEqualityFunctions
 
std::vector< StructEqualityFunction * > mStructEqualityFunctions
 
std::vector< ArrayHelperFunction * > mArrayEqualityFunctions
 
std::vector< ArrayHelperFunction > mArrayAssignmentFunctions
 
std::vector< ArrayHelperFunction > mArrayConstructIntoFunctions
 
- Protected Attributes inherited from TIntermTraverser
const bool preVisit
 
const bool inVisit
 
const bool postVisit
 
int mDepth
 
int mMaxDepth
 
TVector< TIntermNode * > mPath
 
bool mInGlobalScope
 
std::vector< NodeReplaceWithMultipleEntry > mMultiReplacements
 
std::vector< NodeInsertMultipleEntry > mInsertions
 

Additional Inherited Members

- Protected Types inherited from TIntermTraverser
enum  OriginalNode { OriginalNode::BECOMES_CHILD, OriginalNode::IS_DROPPED }
 

Constructor & Destructor Documentation

◆ OutputHLSL()

sh::OutputHLSL::OutputHLSL ( sh::GLenum  shaderType,
int  shaderVersion,
const TExtensionBehavior &  extensionBehavior,
const char *  sourcePath,
ShShaderOutput  outputType,
int  numRenderTargets,
const std::vector< Uniform > &  uniforms,
ShCompileOptions  compileOptions 
)

◆ ~OutputHLSL()

sh::OutputHLSL::~OutputHLSL ( )

Member Function Documentation

◆ addArrayAssignmentFunction()

TString sh::OutputHLSL::addArrayAssignmentFunction ( const TType &  type)
protected

◆ addArrayConstructIntoFunction()

TString sh::OutputHLSL::addArrayConstructIntoFunction ( const TType &  type)
protected

◆ addArrayEqualityFunction()

TString sh::OutputHLSL::addArrayEqualityFunction ( const TType &  type)
protected

◆ addStructEqualityFunction()

TString sh::OutputHLSL::addStructEqualityFunction ( const TStructure &  structure)
protected

◆ argumentString()

TString sh::OutputHLSL::argumentString ( const TIntermSymbol *  symbol)
protected

◆ canWriteAsHLSLLiteral()

bool sh::OutputHLSL::canWriteAsHLSLLiteral ( TIntermTyped *  expression)
static

◆ ensureStructDefined()

void sh::OutputHLSL::ensureStructDefined ( const TType &  type)
protected

◆ getInfoSink()

TInfoSinkBase& sh::OutputHLSL::getInfoSink ( )
inline

◆ getInterfaceBlockRegisterMap()

const std::map< std::string, unsigned int > & sh::OutputHLSL::getInterfaceBlockRegisterMap ( ) const

◆ getUniformRegisterMap()

const std::map< std::string, unsigned int > & sh::OutputHLSL::getUniformRegisterMap ( ) const

◆ handleExcessiveLoop()

bool sh::OutputHLSL::handleExcessiveLoop ( TInfoSinkBase &  out,
TIntermLoop *  node 
)
protected

◆ header()

void sh::OutputHLSL::header ( TInfoSinkBase &  out,
const BuiltInFunctionEmulator *  builtInFunctionEmulator 
)
protected

◆ initializer()

TString sh::OutputHLSL::initializer ( const TType &  type)
static

◆ isSingleStatement()

bool sh::OutputHLSL::isSingleStatement ( TIntermNode *  node)
protected

◆ makeFlaggedStructMaps()

void sh::OutputHLSL::makeFlaggedStructMaps ( const std::vector< TIntermTyped *> &  flaggedStructs)
protected

◆ output()

void sh::OutputHLSL::output ( TIntermNode *  treeRoot,
TInfoSinkBase &  objSink 
)

◆ outputConstructor()

void sh::OutputHLSL::outputConstructor ( TInfoSinkBase &  out,
Visit  visit,
const TType &  type,
const char *  name,
const TIntermSequence *  parameters 
)
protected

◆ outputEqual()

void sh::OutputHLSL::outputEqual ( Visit  visit,
const TType &  type,
TOperator  op,
TInfoSinkBase &  out 
)
protected

◆ outputLineDirective()

void sh::OutputHLSL::outputLineDirective ( TInfoSinkBase &  out,
int  line 
)
protected

◆ outputTriplet()

void sh::OutputHLSL::outputTriplet ( TInfoSinkBase &  out,
Visit  visit,
const char *  preString,
const char *  inString,
const char *  postString 
)
protected

◆ structInitializerString()

TString sh::OutputHLSL::structInitializerString ( int  indent,
const TStructure &  structure,
const TString &  rhsStructName 
)
protected

◆ vectorSize()

int sh::OutputHLSL::vectorSize ( const TType &  type) const
protected

◆ visitAggregate()

bool sh::OutputHLSL::visitAggregate ( Visit  visit,
TIntermAggregate *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitBinary()

bool sh::OutputHLSL::visitBinary ( Visit  visit,
TIntermBinary *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitBlock()

bool sh::OutputHLSL::visitBlock ( Visit  visit,
TIntermBlock *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitBranch()

bool sh::OutputHLSL::visitBranch ( Visit  visit,
TIntermBranch *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitCase()

bool sh::OutputHLSL::visitCase ( Visit  visit,
TIntermCase *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitConstantUnion()

void sh::OutputHLSL::visitConstantUnion ( TIntermConstantUnion *  node)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitFunctionDefinition()

bool sh::OutputHLSL::visitFunctionDefinition ( Visit  visit,
TIntermFunctionDefinition *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitIfElse()

bool sh::OutputHLSL::visitIfElse ( Visit  visit,
TIntermIfElse *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitLoop()

bool sh::OutputHLSL::visitLoop ( Visit  visit,
TIntermLoop *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitRaw()

void sh::OutputHLSL::visitRaw ( TIntermRaw *  node)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitSwitch()

bool sh::OutputHLSL::visitSwitch ( Visit  visit,
TIntermSwitch *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitSwizzle()

bool sh::OutputHLSL::visitSwizzle ( Visit  visit,
TIntermSwizzle *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitSymbol()

void sh::OutputHLSL::visitSymbol ( TIntermSymbol *  node)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitTernary()

bool sh::OutputHLSL::visitTernary ( Visit  visit,
TIntermTernary *   
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ visitUnary()

bool sh::OutputHLSL::visitUnary ( Visit  visit,
TIntermUnary *  node 
)
overrideprotectedvirtual

Reimplemented from TIntermTraverser.

◆ writeConstantInitialization()

bool sh::OutputHLSL::writeConstantInitialization ( TInfoSinkBase &  out,
TIntermSymbol *  symbolNode,
TIntermTyped *  expression 
)
protected

◆ writeConstantUnion()

const TConstantUnion * sh::OutputHLSL::writeConstantUnion ( TInfoSinkBase &  out,
const TType &  type,
const TConstantUnion *  constUnion 
)
protected

◆ writeDeferredGlobalInitializers()

void sh::OutputHLSL::writeDeferredGlobalInitializers ( TInfoSinkBase &  out)
protected

◆ writeEmulatedFunctionTriplet()

void sh::OutputHLSL::writeEmulatedFunctionTriplet ( TInfoSinkBase &  out,
Visit  visit,
const char *  preStr 
)
protected

◆ writeIfElse()

void sh::OutputHLSL::writeIfElse ( TInfoSinkBase &  out,
TIntermIfElse *  node 
)
protected

◆ writeSameSymbolInitializer()

bool sh::OutputHLSL::writeSameSymbolInitializer ( TInfoSinkBase &  out,
TIntermSymbol *  symbolNode,
TIntermTyped *  expression 
)
protected

Member Data Documentation

◆ mArrayAssignmentFunctions

std::vector<ArrayHelperFunction> sh::OutputHLSL::mArrayAssignmentFunctions
protected

◆ mArrayConstructIntoFunctions

std::vector<ArrayHelperFunction> sh::OutputHLSL::mArrayConstructIntoFunctions
protected

◆ mArrayEqualityFunctions

std::vector<ArrayHelperFunction*> sh::OutputHLSL::mArrayEqualityFunctions
protected

◆ mASTMetadataList

MetadataList sh::OutputHLSL::mASTMetadataList
protected

◆ mBody

TInfoSinkBase sh::OutputHLSL::mBody
protected

◆ mCallDag

CallDAG sh::OutputHLSL::mCallDag
protected

◆ mCompileOptions

ShCompileOptions sh::OutputHLSL::mCompileOptions
protected

◆ mCurrentFunctionMetadata

ASTMetadataHLSL* sh::OutputHLSL::mCurrentFunctionMetadata
protected

◆ mEqualityFunctions

std::vector<HelperFunction*> sh::OutputHLSL::mEqualityFunctions
protected

◆ mExcessiveLoopIndex

TIntermSymbol* sh::OutputHLSL::mExcessiveLoopIndex
protected

◆ mExtensionBehavior

const TExtensionBehavior& sh::OutputHLSL::mExtensionBehavior
protected

◆ mFlaggedStructMappedNames

std::map<TIntermTyped*, TString> sh::OutputHLSL::mFlaggedStructMappedNames
protected

◆ mFlaggedStructOriginalNames

std::map<TIntermTyped*, TString> sh::OutputHLSL::mFlaggedStructOriginalNames
protected

◆ mFooter

TInfoSinkBase sh::OutputHLSL::mFooter
protected

◆ mHeader

TInfoSinkBase sh::OutputHLSL::mHeader
protected

◆ mInfoSinkStack

std::stack<TInfoSinkBase *> sh::OutputHLSL::mInfoSinkStack
protected

◆ mInsideDiscontinuousLoop

bool sh::OutputHLSL::mInsideDiscontinuousLoop
protected

◆ mInsideFunction

bool sh::OutputHLSL::mInsideFunction
protected

◆ mNestedLoopDepth

int sh::OutputHLSL::mNestedLoopDepth
protected

◆ mNumRenderTargets

int sh::OutputHLSL::mNumRenderTargets
protected

◆ mOutputLod0Function

bool sh::OutputHLSL::mOutputLod0Function
protected

◆ mOutputType

const ShShaderOutput sh::OutputHLSL::mOutputType
protected

◆ mReferencedAttributes

ReferencedSymbols sh::OutputHLSL::mReferencedAttributes
protected

◆ mReferencedInterfaceBlocks

ReferencedSymbols sh::OutputHLSL::mReferencedInterfaceBlocks
protected

◆ mReferencedOutputVariables

ReferencedSymbols sh::OutputHLSL::mReferencedOutputVariables
protected

◆ mReferencedUniforms

ReferencedSymbols sh::OutputHLSL::mReferencedUniforms
protected

◆ mReferencedVaryings

ReferencedSymbols sh::OutputHLSL::mReferencedVaryings
protected

◆ mRequiresIEEEStrictCompiling

bool sh::OutputHLSL::mRequiresIEEEStrictCompiling
protected

◆ mShaderType

sh::GLenum sh::OutputHLSL::mShaderType
protected

◆ mShaderVersion

int sh::OutputHLSL::mShaderVersion
protected

◆ mSourcePath

const char* sh::OutputHLSL::mSourcePath
protected

◆ mStructEqualityFunctions

std::vector<StructEqualityFunction*> sh::OutputHLSL::mStructEqualityFunctions
protected

◆ mStructureHLSL

StructureHLSL* sh::OutputHLSL::mStructureHLSL
protected

◆ mTextureFunctionHLSL

TextureFunctionHLSL* sh::OutputHLSL::mTextureFunctionHLSL
protected

◆ mUniformHLSL

UniformHLSL* sh::OutputHLSL::mUniformHLSL
protected

◆ mUniqueIndex

int sh::OutputHLSL::mUniqueIndex
protected

◆ mUsesDepthRange

bool sh::OutputHLSL::mUsesDepthRange
protected

◆ mUsesDiscardRewriting

bool sh::OutputHLSL::mUsesDiscardRewriting
protected

◆ mUsesFragColor

bool sh::OutputHLSL::mUsesFragColor
protected

◆ mUsesFragCoord

bool sh::OutputHLSL::mUsesFragCoord
protected

◆ mUsesFragData

bool sh::OutputHLSL::mUsesFragData
protected

◆ mUsesFragDepth

bool sh::OutputHLSL::mUsesFragDepth
protected

◆ mUsesFrontFacing

bool sh::OutputHLSL::mUsesFrontFacing
protected

◆ mUsesInstanceID

bool sh::OutputHLSL::mUsesInstanceID
protected

◆ mUsesNestedBreak

bool sh::OutputHLSL::mUsesNestedBreak
protected

◆ mUsesPointCoord

bool sh::OutputHLSL::mUsesPointCoord
protected

◆ mUsesPointSize

bool sh::OutputHLSL::mUsesPointSize
protected

◆ mUsesVertexID

bool sh::OutputHLSL::mUsesVertexID
protected

◆ mUsesXor

bool sh::OutputHLSL::mUsesXor
protected

The documentation for this class was generated from the following files: