ES31: Fix some bugs in ShaderStorageBlockOutputHLSL
When EOpIndexDirect/EOpIndexIndirect/EOpIndexDirectStruct/TIntermSwizzle
appear in [] in ssbo access chain, we should transfer the process of them to
OutputHLSL.
For example:
instance.v[gl_GlobalInvocationID.x] = data;
// becomes
float_Store(dx_instance, 0 + 16 * gl_GlobalInvocationID.x, _data);
instance.v[s.index[0].x] = data;
// becomes
float_Store(dx_instance, 0 + 16 * _s.index[0].x, _data);
Bug: angleproject:1951
Change-Id: I333e238400a10a799a6294f8759cf9c4ef2451c8
Reviewed-on: https://chromium-review.googlesource.com/c/1250661
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
diff --git a/src/compiler/translator/util.cpp b/src/compiler/translator/util.cpp
index 37bf48e..72ac655 100644
--- a/src/compiler/translator/util.cpp
+++ b/src/compiler/translator/util.cpp
@@ -762,6 +762,11 @@
{
return IsInShaderStorageBlock(binaryNode->getLeft());
}
+ TIntermSymbol *symbolNode = swizzleNode->getOperand()->getAsSymbolNode();
+ if (symbolNode)
+ {
+ return symbolNode->getQualifier() == EvqBuffer;
+ }
}
binaryNode = node->getAsBinaryNode();