HLSL: Fix #1249: Always execute both sides of ternary "?:".
This is semantically required by HLSL, and frequently results in using OpSelect instead of control flow.
This commit is contained in:
parent
a5cae08259
commit
4bee531fc1
17 changed files with 776 additions and 850 deletions
|
|
@ -1672,7 +1672,11 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true
|
|||
// If it's void, go to the if-then-else selection()
|
||||
if (trueBlock->getBasicType() == EbtVoid && falseBlock->getBasicType() == EbtVoid) {
|
||||
TIntermNodePair pair = { trueBlock, falseBlock };
|
||||
return addSelection(cond, pair, loc);
|
||||
TIntermSelection* selection = addSelection(cond, pair, loc);
|
||||
if (getSource() == EShSourceHlsl)
|
||||
selection->setNoShortCircuit();
|
||||
|
||||
return selection;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -1743,6 +1747,9 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true
|
|||
else
|
||||
node->getQualifier().makeTemporary();
|
||||
|
||||
if (getSource() == EShSourceHlsl)
|
||||
node->setNoShortCircuit();
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -819,6 +819,8 @@ bool TOutputTraverser::visitSelection(TVisit /* visit */, TIntermSelection* node
|
|||
out.debug << "Test condition and select";
|
||||
out.debug << " (" << node->getCompleteString() << ")";
|
||||
|
||||
if (node->getShortCircuit() == false)
|
||||
out.debug << ": no shortcircuit";
|
||||
if (node->getFlatten())
|
||||
out.debug << ": Flatten";
|
||||
if (node->getDontFlatten())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue