forked from mirrors/gecko-dev
Bug 1910306 - [angle] Cherry-pick zero-initialization of unwritten GLSL out params. a=dmeehan
Original Revision: https://phabricator.services.mozilla.com/D218019 Differential Revision: https://phabricator.services.mozilla.com/D218213
This commit is contained in:
parent
ca237fb9aa
commit
0bd00b014d
3 changed files with 51 additions and 3 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
#define ANGLE_COMMIT_HASH "791816843657"
|
#define ANGLE_COMMIT_HASH "419cd2c3213b"
|
||||||
#define ANGLE_COMMIT_HASH_SIZE 12
|
#define ANGLE_COMMIT_HASH_SIZE 12
|
||||||
#define ANGLE_COMMIT_DATE "2024-06-06 10:35:11 -0700"
|
#define ANGLE_COMMIT_DATE "2024-07-29 14:40:59 -0700"
|
||||||
#define ANGLE_COMMIT_POSITION 19738
|
#define ANGLE_COMMIT_POSITION 19739
|
||||||
#define ANGLE_HAS_BINARY_LOADING
|
#define ANGLE_HAS_BINARY_LOADING
|
||||||
|
|
|
||||||
|
|
@ -309,6 +309,37 @@ class InitializeLocalsTraverser : public TIntermTraverser
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override
|
||||||
|
{
|
||||||
|
// Initialize output function arguments as well, the parameter passed in at call time may be
|
||||||
|
// clobbered if the function doesn't fully write to the argument.
|
||||||
|
|
||||||
|
TIntermSequence initCode;
|
||||||
|
|
||||||
|
const TFunction *function = node->getFunction();
|
||||||
|
for (size_t paramIndex = 0; paramIndex < function->getParamCount(); ++paramIndex)
|
||||||
|
{
|
||||||
|
const TVariable *paramVariable = function->getParam(paramIndex);
|
||||||
|
const TType ¶mType = paramVariable->getType();
|
||||||
|
|
||||||
|
if (paramType.getQualifier() != EvqParamOut)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateInitCode(new TIntermSymbol(paramVariable), mCanUseLoopsToInitialize,
|
||||||
|
mHighPrecisionSupported, &initCode, mSymbolTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!initCode.empty())
|
||||||
|
{
|
||||||
|
TIntermSequence *body = node->getBody()->getSequence();
|
||||||
|
body->insert(body->begin(), initCode.begin(), initCode.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int mShaderVersion;
|
int mShaderVersion;
|
||||||
bool mCanUseLoopsToInitialize;
|
bool mCanUseLoopsToInitialize;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,20 @@
|
||||||
|
commit 419cd2c3213b594f8e2488bf48034fed20ace81d
|
||||||
|
Author: Shahbaz Youssefi <syoussefi@chromium.org>
|
||||||
|
Date: Mon Mar 27 13:05:36 2023 -0400
|
||||||
|
|
||||||
|
Translator: Initialize out arguments too for WebGL
|
||||||
|
|
||||||
|
Local variables were initialized for WebGL, but not `out` arguments.
|
||||||
|
However, `out` arguments completely overwrite the passed-in variable at
|
||||||
|
call site, so they should also be zeroed out.
|
||||||
|
|
||||||
|
Bug: chromium:1425685
|
||||||
|
Change-Id: Ib2f61a962eea74c4933aafa4d5ad377189cec578
|
||||||
|
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4375137
|
||||||
|
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
||||||
|
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
||||||
|
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
||||||
|
|
||||||
commit 7918168436578718b234bfd56da152e34a85af1d
|
commit 7918168436578718b234bfd56da152e34a85af1d
|
||||||
Author: Kelsey Gilbert <kelsey.gilbert@mozilla.com>
|
Author: Kelsey Gilbert <kelsey.gilbert@mozilla.com>
|
||||||
Date: Tue Jun 4 15:37:29 2024 -0700
|
Date: Tue Jun 4 15:37:29 2024 -0700
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue