Generate performance warnings in HLSL translation
Generate performance warnings for some code that undergoes heavy
emulation when translated to HLSL:
1. Dynamic indexing of vectors and matrices.
2. Non-empty fall-through cases in switch/case.
The warnings are generated only when code is translated to HLSL.
Generating them in the parsing stage would add too much maintenance
burden.
Improves switch statement fall-through handling in cases where an
empty fall-through case follows a non-empty one so that extra
performance warnings are not generated.
BUG=angleproject:1116
Change-Id: I7c85d78fe7c4f8e6042bda72ceaaf6e37dadfe6c
Reviewed-on: https://chromium-review.googlesource.com/732986
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/translator/OutputHLSL.cpp b/src/compiler/translator/OutputHLSL.cpp
index 54427a9..13a7016 100644
--- a/src/compiler/translator/OutputHLSL.cpp
+++ b/src/compiler/translator/OutputHLSL.cpp
@@ -121,7 +121,8 @@
int numRenderTargets,
const std::vector<Uniform> &uniforms,
ShCompileOptions compileOptions,
- TSymbolTable *symbolTable)
+ TSymbolTable *symbolTable,
+ PerformanceDiagnostics *perfDiagnostics)
: TIntermTraverser(true, true, true, symbolTable),
mShaderType(shaderType),
mShaderVersion(shaderVersion),
@@ -130,7 +131,8 @@
mOutputType(outputType),
mCompileOptions(compileOptions),
mNumRenderTargets(numRenderTargets),
- mCurrentFunctionMetadata(nullptr)
+ mCurrentFunctionMetadata(nullptr),
+ mPerfDiagnostics(perfDiagnostics)
{
mInsideFunction = false;
@@ -2173,7 +2175,7 @@
ASSERT(node->getStatementList());
if (visit == PreVisit)
{
- node->setStatementList(RemoveSwitchFallThrough(node->getStatementList()));
+ node->setStatementList(RemoveSwitchFallThrough(node->getStatementList(), mPerfDiagnostics));
}
outputTriplet(out, visit, "switch (", ") ", "");
// The curly braces get written when visiting the statementList block.