Implement GL_OES_shader_multisample_interpolation, as well as core desktop versions of it.
This commit is contained in:
parent
ba01ebd5ba
commit
0fc4338f3e
17 changed files with 829 additions and 9 deletions
|
|
@ -860,6 +860,35 @@ TIntermTyped* TIntermediate::addSwizzle(TVectorFields& fields, const TSourceLoc&
|
|||
return node;
|
||||
}
|
||||
|
||||
//
|
||||
// Follow the left branches down to the root of an l-value
|
||||
// expression (just "." and []).
|
||||
//
|
||||
// Return the base of the l-value (where following indexing quits working).
|
||||
// Return nullptr if a chain following dereferences cannot be followed.
|
||||
//
|
||||
// 'swizzleOkay' says whether or not it is okay to consider a swizzle
|
||||
// a valid part of the dereference chain.
|
||||
//
|
||||
const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool swizzleOkay)
|
||||
{
|
||||
do {
|
||||
const TIntermBinary* binary = node->getAsBinaryNode();
|
||||
if (binary == nullptr)
|
||||
return node;
|
||||
TOperator op = binary->getOp();
|
||||
if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle)
|
||||
return nullptr;
|
||||
if (! swizzleOkay) {
|
||||
if (op == EOpVectorSwizzle)
|
||||
return nullptr;
|
||||
if ((op == EOpIndexDirect || op == EOpIndexIndirect) && binary->getLeft()->getType().isVector() && ! binary->getLeft()->getType().isArray())
|
||||
return nullptr;
|
||||
}
|
||||
node = node->getAsBinaryNode()->getLeft();
|
||||
} while (true);
|
||||
}
|
||||
|
||||
//
|
||||
// Create loop nodes.
|
||||
//
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue