Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: adfd582f7f8453e44d10940ac7020a1dd5bdf83c
https://github.com/WebKit/WebKit/commit/adfd582f7f8453e44d10940ac7020a1dd5bdf83c
Author: Kimmo Kinnunen <[email protected]>
Date: 2025-06-27 (Fri, 27 Jun 2025)
Changed paths:
M Source/ThirdParty/ANGLE/src/compiler/translator/msl/ProgramPrelude.cpp
M
Source/ThirdParty/ANGLE/src/compiler/translator/tree_ops/msl/RewriteUnaddressableReferences.cpp
M Source/ThirdParty/ANGLE/src/tests/compiler_tests/MSLOutput_test.cpp
M Source/ThirdParty/ANGLE/src/tests/gl_tests/GLSLTest.cpp
Log Message:
-----------
ANGLE: Failure to compile TensorFlow.js WebGL shaders
https://bugs.webkit.org/show_bug.cgi?id=294738
rdar://153836970
Reviewed by Mike Wyrzykowski.
Increment, decrement operators with swizzles would fail to compile for
integer vectors:
ivec4 vec;
vec.xyz++;
This would produce:
metal::int4 _uii;
ANGLE_postIncrementInt(ANGLE_swizzle_ref(_uii, 0u, 1u, 2u));
ANGLE_postIncrementInt(T &a) would not match because the argument was
rvalue ANGLE_SwizzleRef, and rvalues cannot bind to non-const lvalue
references. Even if this was worked around somehow, the template would
not work because T == ANGLE_SwizzleRef, when the original intention
was that the T would be metal int, int2, int3, int4.
Write the ANGLE_postIncrementInt and other functions without templates.
This way the overload resolution applies the
ANGLE_SwizzleRef::operator intX&() conversion operator. Since the
conversion operator is applied, the returned value is a lvalue reference
and can be bound to the arg.
Due to the use of temporaries changes ANGLE_preIncrementInt,
ANGLE_preDecrementInt functions to return the result by value instead
by reference. In GLSL, these operators are not specified to produce a
lvalue. As per the current code, the translator treats the result as
rvalue.
* Source/ThirdParty/ANGLE/src/compiler/translator/msl/ProgramPrelude.cpp:
*
Source/ThirdParty/ANGLE/src/compiler/translator/tree_ops/msl/RewriteUnaddressableReferences.cpp:
(sh::ReturnsReference):
(sh::IsUnaryLValueOp):
* Source/ThirdParty/ANGLE/src/tests/compiler_tests/MSLOutput_test.cpp:
((MSLOutputTest, UintAssignmentOperators)):
((MSLOutputTest, UintSwizzleAssignmentOperators)):
* Source/ThirdParty/ANGLE/src/tests/gl_tests/GLSLTest.cpp:
Canonical link: https://commits.webkit.org/296744@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes