|
4a835cf2
|
2024-11-01T13:31:00
|
|
WebGPU: send uniforms to GPU for use in shader
Basic uniforms should now be accessible in the shader during a draw
call, rather than just via glGetUniform*().
This is unoptimized and creates a new GPU-side copy of all the uniforms,
every time any uniform changes.
This sets up the bind group layout for a pipeline and sets the bind
groups in the renderer pass. Right now these bind groups only contain
the default uniform blocks, but in the future will need to contain
textures, samplers, and non-default uniform blocks (UBOs).
Bug: angleproject:376553328
Change-Id: I50891b81ab2ee374d674213257f76319c0222120
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5980972
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
c46e6bac
|
2024-11-12T13:55:01
|
|
Make intermediate output symbol names consistent
Make intermediate output symbol names consistent across uses in
parameter names, struct names, variable names:
- built-in without quotes
- '' empty
- #satb ANGLE internal
- 'a' user-defined
Previously empty parameters would output the symbol id-generated
name ("sabb"), which was surprising when this is used only when
the symbol is in AngleInternal namespace, and not in Empty namespace.
Bug: angleproject:378584780
Change-Id: I87b13cf964a1ae3ee54b8f4ef7a00eddcd474760
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6011018
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
b8b962d2
|
2024-11-08T14:53:00
|
|
Parse function parameters into TPublicType
Parse function parameters into TPublicType instead of TType.
TType holds the type info, TPublicType holds the type specification
info.
This helps in moving the TType::isStructSpecifier into the AST nodes,
away from the type system which it is not part of.
Removes duplicated code where unnamed unsized arrays would cause
different error message than named unsized arrays.
Bug: angleproject:377330017
Change-Id: I102b9e87823a545f7e64f971aafbdcd313a542fb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6000009
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
0d02f857
|
2024-11-07T09:32:28
|
|
Test SeparateDeclarations
This makes it easier to fix issues with SeparateDeclarations
Bug: angleproject:377330017
Change-Id: I53b9ca06971e0272563b6b3c752e0438c5802193
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6000533
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
efcb94ab
|
2024-11-06T15:55:02
|
|
Output the type of constant union
Output the type of the constant union node in OutputTree output.
This makes it easier to understand typing bugs related to the constant
union.
Adds a node nesting level for constant unions.
This makes it easier to understand consecutive constant unions.
Bug: angleproject:377330017
Change-Id: Ia83072b78c4d1713f839fd136692b254f6d2c517
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6000532
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
d30d81d0
|
2024-11-06T16:08:28
|
|
[code health] Remove underscores from test names in ANGLE (1/N)
In the GoogleTest framework, underscores are not
allowed. [1] ANGLE has underscores in many test
names, and those should be changed.
At the same time, add a comment to a test case
according to the requirements of the Presubmit
check.
````
***************
ANGLE requires a comment describing what a test does.
***************
````
[1]
https://github.com/google/googletest/blob/main/docs/faq.md#why-should-test-suite-names-and-test-names-not-contain-underscore
Bug: angleproject:377543127
Change-Id: I90e634bd985ca518eca43e2c919a3a8bca91a55b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5997835
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Auto-Submit: Ho Cheung <hocheung@chromium.org>
|
|
eccfec93
|
2024-11-01T11:49:11
|
|
Metal: gl_ClipDistance fails validation
Failure is "Found child with two parents".
Result from reusing gl_ClipDistance in:
float gl_ClipDistance[8];
ClipDistance_0 = gl_ClipDistance[0];
...
Fix by creating new node for each symbol access.
Bug: angleproject:376718272
Change-Id: I7a866a10e389cc25d0cff4e6f18ae9c70ab376e0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5979781
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
b03f0148
|
2024-11-01T10:26:04
|
|
Metal: interpolateAtOffset fails validation
Fix validation error Found function prototype with an invalid qualifier.
The offset parameter was created with "global" qualifier.
Bug: angleproject:376718268
Change-Id: I6f314a42fe1d35d54bb673cfa7d58eba526c9ea5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5979778
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
2156cd6e
|
2024-10-31T14:22:31
|
|
Metal: Fix rewritten array variables clashes
It was possible to generate MSL name clashes by declaring arrays,
such as in:
mat3 a[1]
mat2 a_0;
Complex GLSL outputs need to be linearized into primitive MSL types.
This would happen for struct outputs, arrays and matrices. For
these new MSL variables, the translator needs to invent new names
that match, generated from both VS and FS.
The clashes were due to the encoding scheme:
For arrays, the MSL vertex output variable was named with _0 suffix for
the array and _0 for the matrix row 0. In the example above, this
would create a clash since also non-array mat would be linearized
row-wise.
For structs, field `a.b` would be encoded as `a_b`. By selecting
different a and b, clashes could be generated trivially.
It is redundant to encode named semantics in the out variable names. The
only needed element is the discriminator which associates VS variables
to FS variables. Currently this is done by using the user-provided
root field name.
Fix by encoding only the root variable name to the MSL variable name.
The rest of the field discriminators are just a running number.
Each GLSL name `a` is unique. MSL names get fixed suffix form `a_X`,
and thus all of them are unique too.
This is a continuation of following fixes that turned out to be
incomplete:
6fe8a399dd Metal: Fix rewritten out variables with underscores
27423bffff Metal: Generate names for rewritten inputs
Bug: angleproject:376417347
Change-Id: I407db373d201b3e321c6d8414bafdbecfd82cf19
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5979774
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
b8d546b2
|
2024-10-30T15:40:58
|
|
Fix immutable string concats with ints
`BuildConcatenatedImmutableString("a", 10, "b")`
would construct "a\nb" because the implementation lacked int overloads
and ints would be promoted to chars implicitly.
Fix by implementing simpler way to calculate digits for numbers
and then add useful overloads. Remove
ImmutableStringBuilder::appendDecimal() since the code is already
expecting << for all other types, and the bug was due to this
expectation.
Bug: angleproject:376417347
Change-Id: Iea5e14a6e2fede068b704754b9203db794dd5bf0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5972641
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
4397ff2f
|
2024-10-25T16:55:30
|
|
Metal: SeparateCompoundStructDeclarations fails validation
Consider GLSL:
struct S { int i; } s;
s=s;
SeparateCompoundStructDeclarations would rewrite this to:
struct S { int i; };
S s';
s=s;
The interm rewrite would rewrite the specification and declaration of s,
but not the use sites. The use sites would use the old type, and thus
something that was not in the tree anymore. This would fail the
validation.
This kind of bug was previously fixed for SeparateDeclarations
in commit 18fa02bebf901dd8501de3176f6052ae4ce984be.
Fix by adding the logic to SeparateDeclarations, as it is already
doing almost the exact task, separating `struct S { ..} a, b`.
The separation is tested in GLSLTests.StructInShader and various
other draw tests. These pass with MSL, but these would also fail
validation if that was enabled.
Bug: angleproject:375523825
Change-Id: I1697103d0ba47616dbd3159f36f9e71cb2831c4b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5964899
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
4a5b0284
|
2024-10-24T11:46:54
|
|
Disallow discarded uniform block references
Uniform block instances cannot be used by themselves, as there
is no way to refer to their type. Disallow the only typeless
access pattern, discarding via expression statement:
uniform MyBlock { int x; } b;
void main() {
b;
0, b;
}
Explained as disallowed in newer GLSL 300:
https://github.com/KhronosGroup/WebGL/issues/3644
The comma expression form would ASSERT in CollectVariables.
Bug: angleproject:42267026
Change-Id: I6c8b835482fd551bd97576c1bd24f005874da6af
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5961498
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
898a1c12
|
2024-10-24T13:09:36
|
|
Metal: Fix ToposortStructs validation == failures
ToposortStructs would convert mat, vec, struct == to ANGLE_equals()
calls. However, the functions called were not in AST. This would cause
"Found node calling previously undeclared function
<validateFunctionCall>" validation error and ASSERT.
Mat, vec equality calls would use prelude ANGLE_equals implementations.
The MSL emit already does the conversion from == to ANGLE_equals for
these builtins.
For user-defined structs the logic would be:
- collect struct decls, structs, create equality functions
- toposort
- for each sorted struct:
- insert struct decl
- insert equality function
Move the equality function creation after the toposort:
- collect struct decls, structs
- toposort
- for each sorted struct:
- insert struct decl
- create equality function
- insert equality function
This way the sort ensures that nested struct equality functions can
refer to previously introduced equality functions.
Bug: angleproject:375352601
Change-Id: I59efed98bca6d99b198abc2b5c7577cf5d1d5d83
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5961281
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
12584049
|
2024-10-21T14:04:55
|
|
Make SimplifyLoopConditions testable
Add ShCompileOptions::simplifyLoopConditions, so that tests can turn
it on. Later edits to simplify loop condition logic are simpler to
review when the testing related edits are landed separately.
Test the feature by having ESSL as the input and ESSL as the natural
output, to reflect how AST changes.
To make the test expectations more deterministic across code changes,
change SymbolTable::kLastBuiltInId to
SymbolTable::kFirstUserDefinedSymbolId. This is simpler as no code
needs to know exact last built in id, so we can just ensure that
the user defined symbol ids do not clash with the builtin ids.
Bug: angleproject:374585769
Change-Id: Iea0efb8ac2878691d0fd5ff5cfe9a49ac754515d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5946724
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
4b1e58d9
|
2024-10-17T09:33:53
|
|
Fix for float constant precision in the GLSL backend.
Increase the precision of floating point values written out
via std::ostringstream. 8 digits is not sufficient to represent
all floating point values.
Note: the reason the locale test was modified is because it was using
a value of 1.9, which has no exact fp32 representation. Increasing
the precision causes it to print as 1.8999998 instead of 1.9, failing
the test. I've adjusted the value to 1.5, since this does have an
exact fp32 representation. (However, note that I couldn't get the test
to fail when I removed the locale setting, with either 1.9 or 1.5.
Perhaps the locale is being handled at a different level.)
Bug: angleproject:374013421
Change-Id: Icb79eb9acd562c83d079f2cc2cdba253220e581e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938473
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
ab1cdd22
|
2024-10-03T00:00:00
|
|
Translator: Support EXT_texture_query_lod
No backend support yet.
Bug: angleproject:368275901
Change-Id: I10bbc03feca485908315633cbc0f955e82994657
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5920240
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
ae5c3b96
|
2024-10-08T17:02:21
|
|
Boilerplate for GL_ARM_shader_framebuffer_fetch_depth_stencil
Bug: angleproject:352364582
Change-Id: I94c670db5546564a6f60bb513a6d7f3f5bd5778c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916771
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
b16d105f
|
2024-10-03T10:25:32
|
|
Remove Desktop GL front-end support
For Desktop GL applications, please use Zink!
Bug: angleproject:370937467
Change-Id: Ie734634bb62a2e98c80e1b32d8b3d34624da3c04
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5905428
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
a6ee4641
|
2024-09-25T11:41:47
|
|
WGSL: Output default uniform block and accesses to it
Default uniforms are put into a WGSL struct, and all accesses
of those uniforms now output struct accesses.
Similarly to I/O vars and builtins, these are outputted in a
pre-pass, but in the future it might make sense to do what
Vulkan does and do an AST transformation to put the default
uniforms into a UBO which should be outputted similarly.
This does not handle bool, matCx2, or array of element size < 16.
Bug: angleproject:42267100
Change-Id: If29e2895a8aba3212b581813316af87273c1515c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5878759
Reviewed-by: Liza Burakova <liza@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
7e462c22
|
2024-09-17T15:32:41
|
|
WGPU: Implement SetUniform() enough so GetUniform() works
Lays out a shadow buffer for basic uniforms per-shadertype
in std140, which is close to matching WGPU's layout. This
does not actually pass the buffer to WGPU as a uniform
buffer. GetUniform() just reads from the shadow buffer.
This is copied from the VK backend and so some code is
deduplicated.
Bug: angleproject:42267100
Change-Id: I727dc9e09a7ccabbb617f148dd68590469883b07
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5867444
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
|
|
b98e6bc0
|
2024-09-12T00:00:00
|
|
Translator: Add EXT_texture_shadow_lod functions
Added translator support for functions defined
in the GL_EXT_texture_shadow_lod extension.
Trivially enabled on GL and Vulkan backends.
Bug: angleproject:365066518
Bug: angleproject:365108862
Change-Id: Ie1fc8f50e321a559d4506c479d9cebbb48802091
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5867416
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c2a9300c
|
2024-09-10T19:33:33
|
|
WGSL: Rewrite input/output variables
GLSL builtin variables and in/out variables correspond to WGSL's main
function params and return value, so rewrite them accordingly.
This is done by generating structs to use as main function params and
return values, generating similar global structs, and copying the
former into the latter so the rest of the program can just use the
variables stored in the global structs.
Bug: angleproject:42267100
Change-Id: Ic3e1196f6fb95b963ce03845096a59ea7599d608
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5835347
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
568caaa0
|
2024-07-23T15:07:59
|
|
Prune switch(constant) with no matching case
Bug: chromium:350528343
Change-Id: Iabb475b230f22086de482bbdcf2fa00b0d986622
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5735815
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
35f01e7f
|
2024-06-26T14:30:27
|
|
ESSL -> WGSL: Support basic control flow
If/else, while, do/while, for.
Return, break, continue, discard
Bug: angleproject:42267100
Change-Id: I0c8ef30b45aec639a07323e333db970d4c42dec0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5661103
Reviewed-by: Liza Burakova <liza@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
89ef2812
|
2024-06-26T11:19:54
|
|
ESSL -> WGSL: unary and binary exprs, operators, array access
Array indexing is always checked to be within bounds. For runtime-sized
arrays, this requires emitting a clamp(). For now this includes a bug
the left-side-expression (the array itself) has any side effects, which
shouldn't actually be possible but may be in future versions of WGSL.
Implementing unary, binary, and remaining aggregate expressions requires
implementing operators, many of which do not have exact corresponding
versions between GLSL and WGSL. This implements many operators but for
simplicity leaves some unimplemented and some half-implemented.
See WGSLOutput_test.cpp for some code examples.
Bug: angleproject:42267100
Change-Id: I3737abb5dffd156deba0429fa86570270d711d3c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5651994
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7ca9f46a
|
2024-06-21T13:09:24
|
|
ESSL -> WGSL: Emit func calls, struct access, constants
Also includes constructor calls, swizzles, and a slightly incorrect
version of the ternary operator.
The ternary operator doesn't exist in WGSL, only a non-short-circuiting
select() builtin. For now the ternary is implemented with select()
but that isn't correct if any of the true/false expressions have side
effects, and may have perf implications by computing both true/false
expressions.
Constants are mostly done after this, however NaN and infinity are not
valid constants in WGSL and it's unclear what we can do about this as
WGPU implementations are allowed to assume NaNs and infinities are
never operated on.
Bug: angleproject:42267100
Change-Id: Ie6190091a7b95d3d372736ab7cea45868846e7be
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5648990
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
016ef60d
|
2024-06-24T17:41:30
|
|
ValidateAST asserts when refers to builtIn struct type name
Refers to build in type name looks allowed by GL
but currently VK and Metal backends do not support,
i.e.: refers to gl_DepthRangeParameters, this change
is to add temporary check to make using reserved
type name an error during parsing.
Bug: angleproject:348313398
Change-Id: I6522566b1f590fe2b24534fb065625c4ac3b06c6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5645265
Auto-Submit: Erica Li <lerica@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
a04239d8
|
2024-06-18T11:38:52
|
|
ESSL -> WGSL: Emit most types and function params
This emits struct declarations, as well as array/matrix/vec types.
As a result this also emits function parameters.
Bug: angleproject:42267100
Change-Id: Ib9c7e543fd38f7c1dfa64d8e63b054fc5111b336
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5598298
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
d193d51b
|
2024-06-17T22:46:08
|
|
Replace issue ids post migration to new issue tracker
This change replaces anglebug.com/NNNN links.
Bug: None
Change-Id: I8ac3aec8d2a8a844b3d7b99fc0a6b2be8da31761
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5637912
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
af72bf7f
|
2024-05-24T15:00:44
|
|
ESSL -> WGSL: emit basic types
This emits dimensionless types (no vectors, matrices, arrays).
Function signatures will emit their return type (assuming it
is dimensionless).
Bug: angleproject:42267100
Change-Id: I0d2479f71408eb20b9c329a99c70a6bf6426a72f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5590384
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d68395fe
|
2024-05-24T15:14:46
|
|
ESSL->WGSL: Emit basic function signatures
...signatures don't yet include types or parameters.
See WGSLOutput_test.cpp for a sample translation.
Bug: angleproject:8662
Change-Id: I93273156f72ba193441e737074bd1a8a054f2ea9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5582949
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
|
|
4ebb28d7
|
2024-05-30T11:36:58
|
|
Fix stack overflow crash by traversing a too-deep AST
This simply moves the check for a too-deep AST before the first attempts
to traverse the AST (i.e., `validateAST()`).
Bug: angleproject:343505104
Change-Id: Iafb658a30f74a666beab8c69745ca53d17d70dd3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5585186
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Auto-Submit: Scott M <mscott@apple.com>
|
|
c33c6cd3
|
2024-05-27T00:06:18
|
|
Vulkan: Use OpSelect with all types with SPIR-V 1.4
SPIR-V 1.4 relaxes the types that can be used as arguments of OpSelect.
Previously, the types were limited to scalars and vectors, but since
SPIR-V 1.4, it's unrestricted.
Writing tests for this change, another bug was discovered where support
for structs and arrays with the ternary operator was disabled due to
ESSL 1.0, even though that support is mandatory in ESSL 3.2.
Bug: angleproject:342316794
Bug: angleproject:343218491
Bug: angleproject:3830
Change-Id: I6cff2f8178634369f773c4fb16a1ddde96928c8d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5570154
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
b793888a
|
2024-05-09T11:40:18
|
|
Deeply nested switch statements -> ambiguous error
Improve the error reported (and potentially avoid a stack overflow
crash) when parsing deeply nested `switch` statements.
Limits the total number of nested switch and/or iterator statements to
`mMaxStatementDepth` (defaults to 256).
Bug: angleproject:8645
Change-Id: Iba4795db15c3859d172df8366bc7de3125c2d472
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5527630
Auto-Submit: Scott M <mscott@apple.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
2ecfc5a1
|
2024-05-03T18:29:12
|
|
Issue 8644: Deeply nested iterator declarations can crash
Avoid stack overflow crash when parsing nested iterators (especially
`while` statements).
Limits the number of nested iterator statements to `mMaxStatementDepth`
(defaults to 256).
Bug: angleproject:8644
Change-Id: I9b0fd2ab456c3cdd731b41ab97f495ae4dc0b0bb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5519169
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Auto-Submit: Scott M <mscott@apple.com>
|
|
e088af30
|
2024-03-28T15:30:59
|
|
Parsing very long array declarations crash
Avoid stack overflow crash when parsing arrays with a huge number of
dimensions.
Limits the number of array dimensions to `mMaxExpressionComplexity`
(typically 256). Use `YYABORT` to abort parsing.
Bug: angleproject:8610
Change-Id: Icf3914871b167c820b84ae8f3acba80dbd698af3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5424330
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3b650ffa
|
2024-03-19T09:53:06
|
|
Metal: Assert while using gl_VertexID as ivec
Metal [vertex_id] is uint while gl_VertexID is int. Replacing
gl_VertexID with gl_VertexIDMetal without rewrites of the expressions
would cause invalid expressions.
Fix by casting uint kgl_VertexIDMetal to int kgl_VertexID instead
of replacing variable during compile.
Bug: angleproject:8597
Change-Id: I76acdb2a0ab5982aa05181175925b3359068e901
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5376498
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
ab6dd5b2
|
2024-03-07T14:19:58
|
|
Avoid asserts when const folding binary ops on void variables
Fix asserts for example with / and % during constant folding when
the operands might be voids.
Bug: angleproject:8592
Change-Id: I22275642dbcdf9066940d3a94114e8daa5cbbe41
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5416376
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
0197826b
|
2024-03-22T14:42:34
|
|
Revert "Add conversion operator from ImmutableString to std::string"
This reverts commit 8c0dae388bccb00f11cd94d641d719cc68325826.
Reason for revert:
Breaks Android rolls:
external/angle/src/compiler/translator/ImmutableString.h:103:15: error: constexpr function's return type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char>>') is not a literal type
103 | constexpr operator std::string() const { return std::string(data(), length()); }
| ^
external/libcxx/include/string:4332:64: note: 'basic_string<char>' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors
4332 | _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_string<char>)
Original change's description:
> Add conversion operator from ImmutableString to std::string
>
> Also use the operator in a couple of places. Sometimes saves a strlen.
>
> Bug: angleproject:8614
> Change-Id: I429f3ac02af04b568ac7d1adf22ab65e5007fbda
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5372728
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
> Commit-Queue: Geoff Lang <geofflang@chromium.org>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: angleproject:8614
Change-Id: I46963686f9506f7029e164250b1bf81f8ab2c519
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5388255
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Roman Lavrov <romanl@google.com>
|
|
8c0dae38
|
2024-03-15T16:09:04
|
|
Add conversion operator from ImmutableString to std::string
Also use the operator in a couple of places. Sometimes saves a strlen.
Bug: angleproject:8614
Change-Id: I429f3ac02af04b568ac7d1adf22ab65e5007fbda
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5372728
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
490ff869
|
2024-03-14T00:00:00
|
|
Always redeclare clip/cull distance built-ins
When clip or cull distance built-in arrays are implicitly
sized, various pruning passes may produce an inconsistent
AST state thus causing translation or linking failures.
Adjusted the dedicated validation pass to inject
an explicit declaration thus bypassing the issue.
Additional updates:
* Ensured that API clip distance state emulation is
applied when a variable is declared but not assigned
* Reverted previous clip/cull distance related changes to
TIntermBinary::hasSideEffects as they are redundant now
* Fixed failing AST validation for MSL varying emulation
* Aligned linking error messages with the specifications
* Updated tests and cleaned-up obsolete code
Fixed: angleproject:8591
Change-Id: Ic8cfaf37778b8532bbab32ab998d5350b85d67ef
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5372714
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
18fa02be
|
2024-03-12T10:23:55
|
|
Rewrite exprs using separated decl variables
Rewrite expressions that use the rewritten struct declaration variables.
Declaration that specfies a struct and defines multiple variables will
get its variable declarations separated. The type of the variable
changes when a struct specifier is removed for the second and rest of
the variable declarations. The type of the variable changes also when a
anonymous struct is named.
The expressions that used the separated variables used the old struct as
their types.
Fix by using TIntermRebuild. Upon creating a new symbol node referencing
the new type, the rebuilder will instantiate also all the needed
intermediate nodes, which then get the correct struct type.
For consistency, fix the case of anonymous struct -> named struct
transform naming the variables similar to named struct separation.
Consider base case:
struct S { .. } a, b; -> struct S { .. } a; S b;
Compare against case:
struct { .. } a, b;
Before, inconsistency:
struct s1 { .. }; s1 a; s1 b;
After, fixed:
struct s1 { .. } a; s1 b;
Bug: angleproject:8590
Change-Id: Iffb0ef4441d6021e076b04485b808b26a7fa4dcb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5365201
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
11a2d27f
|
2024-03-08T14:26:56
|
|
Check array index against unsigned array size
Fix an assert during GLSL parsing when a very
large array (~1U) type is indexed.
Bug: angleproject:8596
Change-Id: I219ac5c8f3fa58aa4c7d679eade6f32b59eb1103
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5352653
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
0f110098
|
2024-03-08T12:40:09
|
|
Avoid assert with multiple memory qualifiers
Add missing qualifier strings.
Bug: angleproject:8593
Change-Id: I484571c33effd85d52712b4876f6a3a5c73d8fde
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5352255
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
39f29f65
|
2024-03-05T21:42:32
|
|
Ensure unary math op parse to an node on error
Return the error node for ops like radians().
The math op parse can fail in multiple ways.
Fixed: angleproject:8583
Change-Id: Ief7e150dffefe711f567d95c62d1023fc7fa1c91
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5344716
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
|
|
27423bff
|
2024-03-05T17:57:24
|
|
Metal: Generate names for rewritten inputs
When expanding multi-component fields to multiple single-component
fields, use AngleInternal namespace for the new names. The names are
generated with form "someField_0" where _0 is the component index.
If these are not created in AngleInternal, caller is able to create
a name clash by introducing single-component field "someField_0".
Fixes an assert where the vec4(a_) + vec4(a) would assert on size
mismatch because the variable lookup for "a_" would find a rewritten
variable for the expanded matrix row of "a".
Bug: angleproject:8558
Change-Id: I64b7a755d7d534543fdb0f4c43008dd5c63f4aad
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5323060
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Kyle Piddington <kpiddington@apple.com>
|
|
3fa8d578
|
2024-03-04T10:06:57
|
|
Make appendDecimal use the last char of the buffer
ImmutableStringBuilder(1) means 1 char usable payload and \0.
This this should fit appendDecimal(1) but did not. Fix the off by one
error calling snprintf.
Also:
* removes const & from uint32_t argument
* removes const & from operator<<, to stay consistent
* Removes a redundant static_cast
* Implements operator<< const char* with potentially better
operator<<(const ImmutableString&) (may get compile time strlen)
Fixed: angleproject:8567
Change-Id: Ibfff59f6846add0498d06e963266e50ec19baf80
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5332381
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
|
|
871a309c
|
2024-03-04T14:43:10
|
|
Fix layout(index=) parse assert on es 100 shaders
Remove invalid assert about layout index qualifier being present only if
EXT_blend_func_extended is present.
The layout qualifier gets parsed to support EXT_shader_framebuffer_fetch
in ES 100 shaders to support
"layout(incoherent) mediump vec4 gl_FragData[gl_MaxDrawBuffers]"
Fixed: angleproject:8570
Change-Id: I0d0d99bcc882a0befd97c2510dec4a8ccf1690bd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5340249
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
2b1ef00a
|
2024-02-20T15:45:34
|
|
Metal: Fix validation for anonymous struct arrays
Fix validation failure for accessing an element of
array of anonymous struct.
SeparateCompoundStructDeclarations would create
new Structures to name unnamed structures.
The Structure instance of the array index accessor
node was incorrect, it was the old Structure.
Use same pattern as in
SeparateStructFromUniformDeclarations.
Bug: angleproject:8551
Change-Id: I04684e5ad99cc2b9038a0cc21c7eefcc6cf247df
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5310074
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
9d453e57
|
2024-02-16T22:28:18
|
|
Fix ASSERT in non-global precise var decls
Precise was treated as invariant. Precise can be
declared for non-global variables.
Bug: angleproject:8550
Change-Id: Ia0d00d67d0d1504b78294ee2256785fe3da3e399
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5300976
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
197beb4d
|
2024-02-13T15:47:32
|
|
Metal: Crash if for loop body is optimized away
Loops might have their bodies optimized away.
For case like `for(;;) if(false);` the constant pruning happens at
parse phase. The else branch (e.e. no else branch, nullptr) would be
selected as the body.
Some code treated the body as optional, some code treated it as
required. Define it as required, and remove all conditional code
related to the loop body.
Bug: angleproject:8532
Change-Id: Ic35f1bf78e63ceb2cee7b96ba99e788efc282e6f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5291554
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
9d344b5c
|
2024-02-13T17:54:12
|
|
Uniform block reference in constuctors crash
Passing uniform block instance name to a built-in constructor would
cause type confusion. Block this by failing to parse.
Bug: angleproject:8533
Change-Id: I5a676b41e2f3d766ece4ed472debc1c874753293
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5290897
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
ab71d751
|
2024-02-07T14:25:32
|
|
Fix an assert on multidim array constructors
Fail early instead of asserting when trying to parse a
multidimensional array constructor call with unsized
argument array argument.
int A[];
int B[int[][](A)];
Bug: angleproject:8519
Change-Id: Iee2c70318eebd2def57ffab8db709d1076692922
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5272434
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
dc4b1acd
|
2023-11-30T15:42:32
|
|
Translator: Limit private variable size to 64KB
This is indirectly fixing an issue where passing large arrays in SPIR-V
such that an internal cast is needed (such as array inside interface
block copied to local varaible) causes an overflow of the instruction
length limit (in the absence of OpCopyLogical).
By limiting the size of private variables to 32KB, this limitation is
indirectly enforced. It was observed that all the test shaders added in
this CL fail on the Nvidia OpenGL drivers, so such a limit seems to be
reasonble.
Bug: chromium:1505009
Change-Id: Ia36134b2bf8501a5b875814db3566be28b183e0f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5077408
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
caa5e4ea
|
2023-11-30T14:12:42
|
|
Translator: Fail compilation if too many struct fields
If there are too many struct fields, SPIR-V cannot be produced (as it
has a hard limit of 16383 fields). The Nvidia GL driver has also been
observed to fail when there are too many fields.
Bug: chromium:1505009
Change-Id: If9b01716c1cab35a6e537da64421e29fe0eda91e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5074629
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Roman Lavrov <romanl@google.com>
|
|
4c500944
|
2023-11-08T16:16:23
|
|
Translator: Mark most builtins as not having side effect
This helps the translator eliminate stray uses of these builtins.
Bug: angleproject:6061
Change-Id: Ic0e72bddad5730fb1f906a4c8e53191ab3318d29
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5012988
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
32f209b8
|
2023-11-03T09:57:00
|
|
Vulkan: Fix __samplerExternal2DY2YEXTtnd combined with swizzle
Pixel camera app is hitting assertion due to swizzle applied to swizzle.
This CL adds ReswizzleYUVOpsTraverser::visitSwizzle() method and detects
there is a swizzle on YUV sampler and apply YUV swizzle first and then
original swizzle and then fold two swizzle into one.
This CL added a test to reproduce the bug.
This CL also makes ShCompileOptions in ShaderExtensionTest class a class
member instead of local variable so that subclass can modify for testing
or debugging purpose.
Bug: b/309480316
Change-Id: I72353fbad8dcacd77ca17a9f44e84485f4656a34
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5001614
Reviewed-by: Chris Forbes <chrisforbes@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3892ac14
|
2023-10-12T13:35:33
|
|
Do not flush normal float constants to zero.
It's ok to flush denormalized constants to zero.
It's not ok to flush perfectly valid normal float constants >= FLT_MIN
to zero.
Two problems:
1) Values when parsed as doubles with a value less than FLT_MIN are
being flushed to zero. This is incorrect when the comparison is done
in double, since some values below FLT_MIN in double are equal to
FLT_MIN when cast to float. The fix is to perform the comparison in
float.
2) Values with a decimal exponent less than FLT_MIN_10_EXP are being
flushed to zero. FLT_MIN_10_EXP is -37 but FLT_MIN is 1.1754943E-38.
10^-37 may be the "minimum negative integer such that 10 raised to
that power is a normalized float", but being constrained to powers of
ten it's above FLT_MIN (which is 2^-126). Since this comparison is
done before #1 above, it's only present (AFAIK) to ensure that the
exponent will not make the pow() function overflow. Comparing against
-38 (FLT_MIN_10_EXP - 1) instead will do the trick.
Bug: angleproject:8373, dawn:2077
Change-Id: I1ddf410c2caa9f0d1ba3529ace693dcd326a2cb3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4936714
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Stephen White <senorblanco@chromium.org>
|
|
9666d4d5
|
2023-09-01T00:00:00
|
|
Disallow dynamic indexing of SecondaryFragData in WebGL 2.0
WebGL 2.0 disallows dynamic indexing
of gl_FragData in ESSL 1.00 shaders.
By extension, this rule should also
apply to gl_SecondaryFragDataEXT.
Bug: angleproject:1085
Change-Id: I5859356f72d25c4ffd1db92466dffc6eeacb6a64
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4843628
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1ab5d01d
|
2023-08-29T13:31:07
|
|
Metal: Fix dropped out arguments from functions with many args.
RewriteOutArgs has an early-exit if it spots a potentially aliased
arg. It's also responsible for marking out args as references,
which caused an issue in Google Earth.
Removing the early-exit fixes both issues.
Bug: chromium:1474736
Change-Id: Ib68dd3f3e2e0a1e773e4e09edcdfa3a4bdfc1ef2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4823006
Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
558df6f1
|
2023-08-21T00:00:00
|
|
Fix fragment output variables validation
* Reject fragment shaders that assign
out-of-range fragment locations
* Reject fragment shaders that assign
output variables of different types
to the same location
* Apply similar validation for fragment
outputs bound via API calls
* Ensure that masks for active output
variables and draw buffer types are
set after processing all fragment
output bindings
Bug: angleproject:1085
Change-Id: If29cbb58be1981279fc97c67739fe4136b0cdc98
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4813656
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
280e79e1
|
2023-08-10T14:08:00
|
|
Rescope globals only used in one function to function-local.
We can demote global variables when they are only used in one function.
This has performance implications on Metal.
Bug: angleproject:8311
Change-Id: Id666e6b167be771c14768cd73efa61fdacd897d4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4771215
Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
9b63700b
|
2023-07-11T10:25:40
|
|
Translator: Reorganize files
This change makes the translator files more organized by:
- Grouping files that are specific to a certain output under their own
directory,
- Moving transformations under tree_ops
- Removing Direct from metal translation now that that SPIR-V Cross path
is removed
Bug: angleproject:6394
Change-Id: Iaf5bb8d5604b84748dece029821b1f77b2813967
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4678780
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
f5ad056b
|
2023-07-10T22:13:34
|
|
GL: Fix ScalarizeVecAndMatConstructorArgs and move to gl/
This transformation was buggy and was disabled. Originally, it was
intended to be used everywhere. It is now needed for a GL driver
workaround.
This change reimplements this transformation and uses it as a GL
workaround.
Bug: chromium:1420130
Change-Id: I42d63fa5844bcf683ac41e61925aa637e033ca2e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4676634
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
b57d5638
|
2023-06-29T00:00:00
|
|
Reland "Cleanup multiview support"
This is a reland of commit 9a7c0b88ba68e328d3f5f7991a6df0ab5de92311
Original change's description:
> Cleanup multiview support
>
> * Removed remaining mentions of ANGLE_multiview
>
> * Removed AST transformations used only in
> the side-by-side multiview implementation
>
> * Changed the type of the internal ViewID_OVR
> variable to use the dedicated qualifier
>
> * Removed side-by-side multiview support
> from the D3D11 renderer
>
> * Removed an unused helper for side-by-side
> multiview support from the OpenGL renderer
>
> * Removed obsoleted test suppressions
Fixed: angleproject:3341
Change-Id: I3ce9304c79c0873462c73e8cf02b85f7a1aaf874
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4669604
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
f0deadab
|
2023-07-06T15:19:03
|
|
Revert "Cleanup multiview support"
This reverts commit 9a7c0b88ba68e328d3f5f7991a6df0ab5de92311.
Reason for revert: Suspected cause of crash on Canary
Original change's description:
> Cleanup multiview support
>
> * Removed remaining mentions of ANGLE_multiview
>
> * Removed AST transformations used only in
> the side-by-side multiview implementation
>
> * Changed the type of the internal ViewID_OVR
> variable to use the dedicated qualifier
>
> * Removed side-by-side multiview support
> from the D3D11 renderer
>
> * Removed an unused helper for side-by-side
> multiview support from the OpenGL renderer
>
> * Removed obsoleted test suppressions
>
> Fixed: angleproject:3341
> Change-Id: I5e0706cbf26ea820b51400124ddbf2624b738f17
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4660046
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Bug: chromium:1462504
Bug: chromium:1462505
Bug: chromium:1462506
Bug: chromium:1462478
Bug: chromium:1462531
Change-Id: Ie0e76b1c6823db19f68bb67fdfc8abc00cc62f88
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4666209
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
|
9a7c0b88
|
2023-06-29T00:00:00
|
|
Cleanup multiview support
* Removed remaining mentions of ANGLE_multiview
* Removed AST transformations used only in
the side-by-side multiview implementation
* Changed the type of the internal ViewID_OVR
variable to use the dedicated qualifier
* Removed side-by-side multiview support
from the D3D11 renderer
* Removed an unused helper for side-by-side
multiview support from the OpenGL renderer
* Removed obsoleted test suppressions
Fixed: angleproject:3341
Change-Id: I5e0706cbf26ea820b51400124ddbf2624b738f17
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4660046
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
e394cb46
|
2023-06-10T23:12:35
|
|
Vulkan: Refactor framebuffer fetch shader emulation
This change fixes simultaneous usage of EXT_shader_framebuffer_fetch and
ARM_shader_framebuffer_fetch, which previously declared two identical
input attachment variables.
The code is additionally greatly simplified.
Bug: angleproject:8196
Bug: angleproject:8197
Bug: angleproject:8198
Change-Id: Iaaa2a5539a95727e67001a4da1d45092c9db4f2c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4615187
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: mohan maiya <m.maiya@samsung.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
16841d62
|
2023-01-31T11:51:41
|
|
Reland "Remove SPIRV_METAL references from .gn and tests"
The backend was removed but the references were not.
Update ShaderBinaryTest to properly skip tests if shader binaries are
unsupported in the current ANGLE backend.
Forcibly re-enable building of the Vulkan backend on macOS to keep
ANGLE's SwiftShader backend working.
Fixed: angleproject:6081
Change-Id: I5e6e47d5fe05b0dd6ec150b6db9fe5d75e580173
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4594582
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c37d74a5
|
2023-06-06T17:07:15
|
|
Revert "Remove SPIRV_METAL references from .gn and tests"
This reverts commit f7badd3faa8b1b04538ac7b6db833e1398b13498.
Reason for revert: disables SwiftShader fallback on Mac
Original change's description:
> Remove SPIRV_METAL references from .gn and tests
>
> The backend was removed but the references were not.
>
> Update ShaderBinaryTest to properly skip tests if shader binaries are
> unsupported in the current ANGLE backend.
>
> Fixed: angleproject:6081
> Change-Id: I54bb4080763fbc0dcc2515e71ccd5df5c536db5b
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4591046
> Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Change-Id: Id41035017830d8b36b29bc4497919c6b01fc3f35
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4595018
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
|
f7badd3f
|
2023-01-31T11:51:41
|
|
Remove SPIRV_METAL references from .gn and tests
The backend was removed but the references were not.
Update ShaderBinaryTest to properly skip tests if shader binaries are
unsupported in the current ANGLE backend.
Fixed: angleproject:6081
Change-Id: I54bb4080763fbc0dcc2515e71ccd5df5c536db5b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4591046
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
02e7f967
|
2023-05-25T14:54:49
|
|
Translator: Remove the "variables" option
Variable collection is invariably enabled by the front-end as well as
other major users of ANGLE such as Firefox. All translator backends
except GLSL force-enable variable collection either way.
This change removes this compile option and enables variable collection
unconditionally.
The flag itself remains in ShCompileOptions until references to it are
removed from Chromium.
Bug: chromium:1447314
Change-Id: I4d3b30c1bfbd345c5ad269abc62c0a6a59de2f56
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4568524
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
80e60bbc
|
2023-05-09T12:46:18
|
|
Validate non-precision qualifiers in GLSL shaders
Add validation to reject non-precision qualifiers on struct members
in GLSL shaders, as per the GLSL ES 3.2 specification,
section 4.1.8: Structures
Tests: KHR-GLES3*.shaders.negative.non_precision_qualifiers_in_struct_members
Bug: angleproject:8045
Change-Id: I863ae631b09ff773a826d542f387072491489699
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4534656
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Brandon Schade <b.schade@samsung.com>
|
|
d37c97d1
|
2023-04-17T00:00:00
|
|
Metal: Implement OES_shader_multisample_interpolation
* Added support for sample qualifier
and shader interpolation functions
* Added MSL-specific AST transformations
* Adjusted minimum fragment interpolation offset state
query test so that accurate limits could be reported
* Drive-by: Y-flip gl_SamplePosition adjustment
* Renamed ANGLESampleMaskEnabled function constant to
ANGLEMultisampledRendering to correctly reflect its
usage
Bug: angleproject:8097
Bug: angleproject:8131
Change-Id: I25c9f36487e29f05bb9fe874e146d06378fef975
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4440827
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
7bc4b7e3
|
2023-03-27T00:00:00
|
|
Metal: Implement OES_sample_variables
New ESSL built-ins are mapped to their Metal
counterparts and tweaked to follow OpenGL ES
semantics when needed.
Fixed A2C interaction with sample coverage
by emulating the former on non-Apple GPUs.
Bug: angleproject:8097
Fixed: angleproject:5087
Change-Id: I5d28a941af5cbc14743a3930731529f11f55febd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4404896
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Kyle Piddington <kpiddington@apple.com>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
4cbe8548
|
2023-02-28T21:12:17
|
|
Expose shader extensions based on ESSL version
Previously, all suported extensions were always exposed in the
preprocessor. This broke some games which relied on ESSL1-only extension
macros not being defined in ESSL3 shaders. This change adds min/max
version information to list of extensions so the preprocessor can
conditionally expose extensions based on the shader language version,
both via the extension name macros and the #extension directive.
Test: angle_unittests --gtest_filter="VersionTest.*"
Test: angle_end2end_tests --gtest_filter="*ESSL*ExtensionMacros*"
Test: Run com.gameloft.android.ANMP.GloftGGHM on Pixel 6
Bug: b/268091452
Change-Id: I2332a6cb964f54c47d23e2ef6b24e99a0b5c8202
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4304907
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Mike Schuchardt <mikes@lunarg.com>
|
|
bec220f6
|
2022-11-01T22:05:30
|
|
Translator: Fix operand component specifications
Before this change, TIntermConstantUnion::foldUnaryComponentWise always
used the first operand component for some operators. Use the operand
component corresponding to the result component.
Bug: angleproject:7801
Change-Id: I99a941a9eee0c10a4bcb3f515aa5cbf5accc0d52
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3996520
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Auto-Submit: 小田喜陽彦 <akihiko.odaki@gmail.com>
Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
|
|
067ace47
|
2022-12-21T00:00:00
|
|
Add ANGLE_clip_cull_distance extension
Added an extension spec.
Trivially exposed it on GL, Vulkan, and D3D11.
Adjusted tests and validation to allow no cull
distance support for this extension string.
Removed extra built-in variable definitions.
Bug: angleproject:7904
Change-Id: Ic60772dfe28132c316eaa29aadc1afd66e3b0fa7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4114290
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
7d8cbb60
|
2022-12-21T00:00:00
|
|
Fix typo in EXTClipCullDistanceForFragmentShaderTest
Bug: angleproject:5747
Change-Id: I26baa29302472821706c0354ea855183608ebc5d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4116721
Auto-Submit: Alexey Knyazev <lexa.knyazev@gmail.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7fefd230
|
2022-10-20T00:00:00
|
|
GL: Adjust APPLE_clip_distance exposure
Partial revert of
I458cad29c10b9d9193c5233e24bac53361ba104e
APPLE_clip_distance cannot be implemented on top of
EXT_clip_cull_distance because the former is defined both
for ES 2.0 and ES 3.0 while the latter is defined only for ES 3.0.
Although some ES 3.0+ drivers allow gl_ClipDistance built-in in
ESSL 1.00 shaders, this behavior is not specified so ANGLE should
not allow it.
Added independent ESSL 3.00 gl_ClipDistance and gl_MaxClipDistances
definitions.
Adjusted translator unit tests.
Bug: angleproject:4452
Change-Id: Ib582ce0ac7ccb65f0200ef1d17eaab0c83b228cf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3963745
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
5317b778
|
2022-08-23T08:58:04
|
|
Enable desktop GLSL for desktop GL frontend
Bug: angleproject:7533
Change-Id: I91bd0c217880b05683b86449a9211b9844575ebc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3850471
Commit-Queue: Eddie Hatfield <eddiehatfield@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
6f80f0f0
|
2022-08-06T02:29:19
|
|
Translator: Clean up the compile flag passing interface
Historically, compile flags were sent to the translator as a bitmask.
Recently, we were getting close to running out of bits. Additionally,
direct-to-metal work had started to introduce constants to be passed to
the translator, which were misplaced in ShBuiltInResources and Caps.
Recent work on Pixel Local Storage adds even more constants, aggravating
the situation.
In this change, the interface to passing compile flags is reworked. A
struct is passed (instead of a bitmask) that has one bit for each flag.
This can be indefinitely extended. Additionally, the constants needed
by metal and PLS are also placed in this struct. In turn, the backends
can set these options directly, and don't have to hack them into Caps to
further get hacked into ShBuiltInResources.
Bug: angleproject:7559
Change-Id: If93f1e1b8818ad3a0ac708ab04ab93b4b397d114
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3812562
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
861149c7
|
2022-08-03T15:43:29
|
|
Make PLS coherent on desktop OpenGL
Implements ANGLE_shader_pixel_local_storage_coherent using fragment
shader synchronization extensions:
NV_fragment_shader_interlock
INTEL_fragment_shader_ordering
ARB_fragment_shader_interlock
With these extensions combined, we get coherency all 3 big desktop
vendors: NVIDIA, Intel, and AMD.
Bug: angleproject:7279
Change-Id: Ie20b251fb772898e89994b799640f1f2806581eb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3773990
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c460c299
|
2022-06-21T11:20:45
|
|
Implement GLSL additions for ANGLE_shader_pixel_local_storage
Specs out, implements, and thoroughly tests the GLSL additions for
ANGLE_shader_pixel_local_storage. Adds a simple transformation that
rewrites PLS directly into shader images. Updates the existing PLS tests
to use the newly built-in PLS features and ensures they continue
passing.
For now, applications call glBindImageTexture to configure their pixel
local storage. The OpenGL ES API side of this extension will follow
shortly.
Bug: angleproject:7279
Change-Id: I141183069b5cbfcca01cbb77b5b36d3e5f834bf5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3761876
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Chris Dalton <chris@rive.app>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
91976352
|
2022-06-21T15:41:02
|
|
Use C++17 attributes instead of custom macros
Bug: angleproject:6747
Change-Id: Iad6c7cd8a18d028e01da49b647c5d01af11e0522
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3718999
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
62fe36d3
|
2022-05-04T22:46:52
|
|
Vulkan: Emulate YUV built-ins
In this change, the rgb_2_yuv and yuv_2_rgb built-ins are emulated with
normal functions that perform matrix multiplication based on the given
conversion function.
Bug: angleproject:6818
Change-Id: I67adb029109aaf6a674b1ee75105c1b352325eb2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3630599
Reviewed-by: Shahbaz Youssefi <syoussefi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
c8c4109c
|
2022-05-02T11:29:24
|
|
HLSL: Disambiguate functions that have int/uint parameters.
If a bit-shift expression is passed as a function parameter in HLSL,
the compiler cannot tell if it is intended as a uint or int when
doing overload resolution. Explicitly disambiguate functions that have
int and uint parameters when generating the HLSL.
Bug: chromium:1319332
Change-Id: I11c9518e060e9940550bbb04dd7cb953d99c2bb8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3621316
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Lingfeng Yang <lfy@google.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
df163d71
|
2022-05-02T11:02:52
|
|
Test both MSL translators in APPLEClipDistanceTest
This test failed with the SPIRV translator disabled (the ifdef
being checked didn't match up with the requested compiler output).
Bug: angleproject:7155
Change-Id: Ic89bf4035b0ada43ec249dbbca4626ae2eab2006
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3621314
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
c5271e8e
|
2022-04-04T23:28:35
|
|
Vulkan: Emulate GL_KHR_blend_equation_advanced
Based on a change by Brandon Schade <b.schade@samsung.com>
In the translator, when advanced blend is enabled, an input attachment
is added. Based on the listed advanced blend equations, emulation code
is added that performs those equations' functions. The blend equation
itself is passed through a driver uniform.
Note that the advanced blend extension only allows a single output to
use advanced blend, and that should be at location 0.
In the Vulkan backend, when advanced blend is used, the driver uniform
to select the equation is updated and normal blending is disabled.
Bug: angleproject:3586
Change-Id: Icc42e8be238d34fca149087eb9cfe616a7643a6b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3575738
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e10803f7
|
2022-01-20T09:03:55
|
|
Compiler: Allow deferred array sizing in geometry shaders
Based on work by Brandon Schade <b.schade@samsung.com>.
When a shader sets an array input size in a GS after declaring input
variables, compilation would fail.
Example shader -
in vec3 normal[];
in vec3 view_dir[];
in float patch_dist[];
in float e_patch_wire_scale[];
...
layout(triangles) in;
layout(triangle_strip, max_vertices=3) out;
void main() {
...
Update translator to handle such cases.
Also add a new check that there are no remaining unsized
arrays when compilation has completed.
Test: GeometryShaderTest.DeferredSetOfArrayInputSize
Bug: angleproject:3571
Bug: angleproject:7125
Change-Id: I4853832c27f9551284bcca92b98cbf5f3a63aaf5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3564259
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
9a0b306d
|
2022-03-28T10:33:06
|
|
Remove set but otherwise unused variables
Recent Clang versions have enhanced -Wunused-but-set-variable which now
warns about these.
Bug: chromium:1309955
Change-Id: If6a475e9f373b077fa3d9ef6f2274c8d115b5d24
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3553570
Reviewed-by: Charlie Lao <cclao@google.com>
Auto-Submit: Arthur Eubanks <aeubanks@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7a85d114
|
2022-03-25T15:01:17
|
|
Use [[nodiscard]] on RAII classes
Scoped* classes provide an RAII way of adding cleanup/restore state/etc
in a robust way. Unfortunatley, it's very easy to mistakenly leave the
variable name, leading to the destructor being called immediately
instead of at the end of the scope:
{
ScopedX(parameters); // instead of ScopedX x(parameters);
// Code here is run after destructor
}
The [[nodiscard]] attribute, if specified on the ScopedX class would
lead to a warning (turned to error with -Werror). This change does
that for classes named *Scoped* in ANGLE.
Bug: chromium:1103817
Change-Id: I65c9922c9b4eba1f9c033e093fe8fe534648ab62
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3552092
Reviewed-by: Lingfeng Yang <lfy@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
1e773db9
|
2022-02-22T10:51:15
|
|
Vulkan: Shader support for KHR_blend_equation_advanced
Translator can accept the layout qualifiers for the advanced blend
equation. No emulation code is currently generated, and ANGLE will
initially rely on the corresponding Vulkan extension.
Based on change by Brandon Schade <b.schade@samsung.com>
Bug: angleproject:3586
Test: angle_unittests --gtest_filter=*KHRBlendEquationAdvanced*
Change-Id: I3b728c5f144386d7030bbbb301ddb07daa1492b9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3481309
Reviewed-by: Brandon Schade <b.schade@samsung.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
38fada35
|
2022-01-27T18:16:18
|
|
Vulkan: Add support for OES_primitive_bounding_box
Add OES version of the primitive bound box extension
Bug: angleproject:3576
Test: dEQP-GLES31.functional.primitive_bounding_box.*
Change-Id: Ie44d952992a68dfffd5c124dda8dd11069f0c1e1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3425086
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Brandon Schade <b.schade@samsung.com>
|
|
91b383e8
|
2022-01-27T10:22:17
|
|
Translator: Emit warning when identifier has double underscores
OpenGL ES Shader Language 3.2 specification states that two
consecutive underscores (__) are reserved. It doesn't result
in an error if used but could result in unintended behavior.
Update the translator accordingly.
Bug: angleproject:6577
Tests: ShaderVariableTest.DoubleUnderscores*
Change-Id: Ice7e0eca4f770400061f4b8f7f65106cb1926f1a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3421411
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Brandon Schade <b.schade@samsung.com>
|
|
85e2991f
|
2022-01-21T18:14:35
|
|
Fix couple LSAN detected leaks in unit and end2end tests
Bug: angleproject:6937
Change-Id: Ibef9a300056509437edd50e9db18908c0b6d449e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3413271
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
f64f9546
|
2021-12-07T20:17:32
|
|
Reland "Decouple gl_BaseVertex/gl_BaseInstance uniforms"
This reverts commit 10e5f34d1439f0bcd5b30bea5bfbf6bdaafd4935.
Reason for revert: exonerated from flaky crash suspect
Original change's description:
> Revert "Decouple gl_BaseVertex/gl_BaseInstance uniforms"
>
> This reverts commit 36bf1ebe5e9500704dd235254bd22a1f2bbd7059.
>
> Reason for revert: suspect causing flaky crashes
>
> Bug: angleproject:6763
>
> Original change's description:
> > Decouple gl_BaseVertex/gl_BaseInstance uniforms
> >
> > These are builtin uniforms removed in
> > https://github.com/KhronosGroup/WebGL/pull/3278
> >
> > Decouple them from the original ANGLE_base_vertex_base_instance
> > extension.
> >
> > Make a new ANGLE_base_vertex_base_instance_shader_builtin
> > extension for these builtin uniforms.
> >
> > Bug: angleproject:3402
> > Change-Id: I77b93917976ce435db9c578c0ade37bff18a42b0
> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3290304
> > Commit-Queue: Shrek Shao <shrekshao@google.com>
> > Reviewed-by: Geoff Lang <geofflang@chromium.org>
> > Reviewed-by: Kenneth Russell <kbr@chromium.org>
>
> Bug: angleproject:3402
> Change-Id: I75830baa14cf4e7c53750fd14ff76501145b4823
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3315610
> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
> Reviewed-by: Kenneth Russell <kbr@chromium.org>
> Commit-Queue: Shrek Shao <shrekshao@google.com>
Bug: angleproject:6763
Bug: angleproject:3402
Change-Id: Ie436dc5d55364e464897d407a53b793941cd5d0b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3321703
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
10e5f34d
|
2021-12-04T00:10:21
|
|
Revert "Decouple gl_BaseVertex/gl_BaseInstance uniforms"
This reverts commit 36bf1ebe5e9500704dd235254bd22a1f2bbd7059.
Reason for revert: suspect causing flaky crashes
Bug: angleproject:6763
Original change's description:
> Decouple gl_BaseVertex/gl_BaseInstance uniforms
>
> These are builtin uniforms removed in
> https://github.com/KhronosGroup/WebGL/pull/3278
>
> Decouple them from the original ANGLE_base_vertex_base_instance
> extension.
>
> Make a new ANGLE_base_vertex_base_instance_shader_builtin
> extension for these builtin uniforms.
>
> Bug: angleproject:3402
> Change-Id: I77b93917976ce435db9c578c0ade37bff18a42b0
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3290304
> Commit-Queue: Shrek Shao <shrekshao@google.com>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Bug: angleproject:3402
Change-Id: I75830baa14cf4e7c53750fd14ff76501145b4823
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3315610
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Shrek Shao <shrekshao@google.com>
|
|
36bf1ebe
|
2021-11-17T13:31:17
|
|
Decouple gl_BaseVertex/gl_BaseInstance uniforms
These are builtin uniforms removed in
https://github.com/KhronosGroup/WebGL/pull/3278
Decouple them from the original ANGLE_base_vertex_base_instance
extension.
Make a new ANGLE_base_vertex_base_instance_shader_builtin
extension for these builtin uniforms.
Bug: angleproject:3402
Change-Id: I77b93917976ce435db9c578c0ade37bff18a42b0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3290304
Commit-Queue: Shrek Shao <shrekshao@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
c31855ea
|
2021-10-28T13:29:17
|
|
translator: Always report gl_FragData array size.
Previously we would report it as size 1 always if the extension
was missing. This was breaking a dEQP. The test may have a bug, but
we need to work around the issue until the upstream test is fixed.
See https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/3259
Bug: angleproject:6566
Change-Id: I5ac654f472f0e227d63804896ecc388081bec5e8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251586
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|