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
 
TInfoSinkBasegetInfoSink ()
 
- 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 TConstantUnionwriteConstantUnion (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 ()
 
TIntermNodegetParentNode ()
 
TIntermNodegetAncestorNode (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)
 
TIntermSymbolcreateTempSymbol (const TType &type, TQualifier qualifier)
 
TIntermSymbolcreateTempSymbol (const TType &type)
 
TIntermAggregatecreateTempDeclaration (const TType &type)
 
TIntermAggregatecreateTempInitDeclaration (TIntermTyped *initializer, TQualifier qualifier)
 
TIntermAggregatecreateTempInitDeclaration (TIntermTyped *initializer)
 
TIntermBinarycreateTempAssignment (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 TExtensionBehaviormExtensionBehavior
 
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
 
StructureHLSLmStructureHLSL
 
UniformHLSLmUniformHLSL
 
TextureFunctionHLSLmTextureFunctionHLSL
 
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
 
ASTMetadataHLSLmCurrentFunctionMetadata
 
bool mOutputLod0Function
 
bool mInsideDiscontinuousLoop
 
int mNestedLoopDepth
 
TIntermSymbolmExcessiveLoopIndex
 
std::map< TIntermTyped *, TStringmFlaggedStructMappedNames
 
std::map< TIntermTyped *, TStringmFlaggedStructOriginalNames
 
std::vector< HelperFunction * > mEqualityFunctions
 
std::vector< StructEqualityFunction * > mStructEqualityFunctions
 
std::vector< ArrayHelperFunction * > mArrayEqualityFunctions
 
std::vector< ArrayHelperFunctionmArrayAssignmentFunctions
 
std::vector< ArrayHelperFunctionmArrayConstructIntoFunctions
 
- 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< NodeReplaceWithMultipleEntrymMultiReplacements
 
std::vector< NodeInsertMultipleEntrymInsertions
 

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: